source: palm/trunk/SOURCE/read_3d_binary.f90 @ 2797

Last change on this file since 2797 was 2797, checked in by suehring, 6 years ago

Output of ground-heat flux at natural- and urban-type surfaces in one output variable; enable restart data of _av variables that belong to both land- and urban-surface model

  • Property svn:keywords set to Id
File size: 51.0 KB
RevLine 
[1682]1!> @file read_3d_binary.f90
[2000]2!------------------------------------------------------------------------------!
[2696]3! This file is part of the PALM model system.
[1036]4!
[2000]5! PALM is free software: you can redistribute it and/or modify it under the
6! terms of the GNU General Public License as published by the Free Software
7! Foundation, either version 3 of the License, or (at your option) any later
8! version.
[1036]9!
10! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
11! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13!
14! You should have received a copy of the GNU General Public License along with
15! PALM. If not, see <http://www.gnu.org/licenses/>.
16!
[2718]17! Copyright 1997-2018 Leibniz Universitaet Hannover
[2000]18!------------------------------------------------------------------------------!
[1036]19!
[257]20! Current revisions:
[1]21! -----------------
[1834]22!
[2696]23!
[1321]24! Former revisions:
25! -----------------
26! $Id: read_3d_binary.f90 2797 2018-02-08 13:24:35Z suehring $
[2797]27! Enable restarts for land- and urban-surface variables ghf_av, r_a_av and
28! tsurf_av.
29!
30! 2766 2018-01-22 17:17:47Z kanani
[2766]31! Removed preprocessor directive __chem
32!
33! 2718 2018-01-02 08:49:38Z maronga
[2716]34! Corrected "Former revisions" section
35!
36! 2706 2017-12-18 18:33:49Z suehring
37!
38! 2696 2017-12-14 17:12:51Z kanani
39! - Change in file header (GPL part)
[2696]40! - kh_av, km_av (TG)
41! - Implementation of chemistry module (FK)
42! - Changes from trunk concerning random generator added (MS)
43!
44! 2644 2017-11-27 09:27:09Z raasch
[2644]45! further bugfix for r2636 (wrong datatype used for allocation)
46!
47! 2636 2017-11-22 15:22:20Z raasch
[2636]48! bugfix for reading required for parrallel random number generator
49!
50! 2292 2017-06-20 09:51:42Z schwenkel
[2292]51! Implementation of new microphysic scheme: cloud_scheme = 'morrison'
52! includes two more prognostic equations for cloud drop concentration (nc) 
53! and cloud water content (qc).
54!
55! 2269 2017-06-09 11:57:32Z suehring
[2269]56! Enable restart runs for urban_surface_mod
57!
58! 2233 2017-05-30 18:08:54Z suehring
[1321]59!
[2233]60! 2232 2017-05-30 17:47:52Z suehring
61! Adjustments to new surface concept - move output of surface varariables
62! to surface_mod
63!
[2032]64! 2031 2016-10-21 15:11:58Z knoop
65! renamed variable rho_av to rho_ocean_av
66!
[2001]67! 2000 2016-08-20 18:09:15Z knoop
68! Forced header and separation lines into 80 columns
69!
[1977]70! 1976 2016-07-27 13:28:04Z maronga
71! Bugfix: read of land surface data only when module is switched on.
72! Radiation parts are now done in the respective module.
73! Binary version increased to 4.5.
74!
[1973]75! 1972 2016-07-26 07:52:02Z maronga
76! Land surface parts are now done in the respective module
77!
[1852]78! 1849 2016-04-08 11:33:18Z hoffmann
[1851]79! prr, precipitation_amount moved to arrays_3d
[1852]80!
[1834]81! 1833 2016-04-07 14:23:03Z raasch
82! statistics module replaced by spectra module
83!
[1809]84! 1808 2016-04-05 19:44:00Z raasch
85! test output removed
86!
[1789]87! 1788 2016-03-10 11:01:04Z maronga
88! Added z0q and z0q_av
89!
[1758]90! 1757 2016-02-22 15:49:32Z maronga
91! Bugfix in allocation of radiative heating rates
92!
[1710]93! 1709 2015-11-04 14:47:01Z maronga
94! Added rad_lw_out_change_0, increased binary_version
95!
[1692]96! 1691 2015-10-26 16:17:44Z maronga
97! Added output of radiative heating rates and Obukhov length. Removed output of
98! rif.
99!
[1683]100! 1682 2015-10-07 23:56:08Z knoop
101! Code annotations made doxygen readable
102!
[1586]103! 1585 2015-04-30 07:05:52Z maronga
104! Adapted for RRTMG
105!
[1552]106! 1551 2015-03-03 14:18:16Z maronga
107! Added support for binary input of land surface and radiation model data. In the
108! course of this work, new temporary arrays tmp_3d_soil1, tmp_3d_soil2 were
109! required.
110!
[1469]111! 1468 2014-09-24 14:06:57Z maronga
112! Adapted for use on up to 6-digit processor cores
113!
[1401]114! 1400 2014-05-09 14:03:54Z knoop
115! reading of arrays for random_generator_parallel added
116!
[1321]117! 1320 2014-03-20 08:40:49Z raasch
[1320]118! ONLY-attribute added to USE-statements,
119! kind-parameters added to all INTEGER and REAL declaration statements,
120! kinds are defined in new module kinds,
121! old module precision_kind is removed,
122! revision history before 2012 removed,
123! comment fields (!:) to be used for variable explanations added to
124! all variable declaration statements
[226]125!
[1319]126! 1318 2014-03-17 13:35:16Z raasch
127! module interfaces removed
128!
[1116]129! 1115 2013-03-26 18:16:16Z hoffmann
130! unused variables removed
131!
[1054]132! 1053 2012-11-13 17:11:03Z hoffmann
133! necessary expansions according to the two new prognostic equations (nr, qr)
134! of the two-moment cloud physics scheme:
135! +prr, prr_av, *, *_av, *s, *sws, *swst
136!
[1037]137! 1036 2012-10-22 13:43:42Z raasch
138! code put under GPL (PALM 3.9)
139!
[1002]140! 1001 2012-09-13 14:08:46Z raasch
141! all actions concerning leapfrog scheme removed
142!
[979]143! 978 2012-08-09 08:28:32Z fricke
144! +z0h, z0h_av
145!
[1]146! Revision 1.1  2004/04/30 12:47:27  raasch
147! Initial revision
148!
149!
150! Description:
151! ------------
[1682]152!> Binary input of variables and arrays from restart file
[1]153!------------------------------------------------------------------------------!
[1682]154 SUBROUTINE read_3d_binary
155 
[1]156
[1320]157    USE arrays_3d,                                                             &
[2292]158        ONLY:  e, kh, km, p, pt, q, ql, qc, nc, nr, prr, precipitation_amount, &
159               qr, s, sa, u, u_m_l, u_m_n, u_m_r, u_m_s, v, v_m_l, v_m_n,      &
160               v_m_r, v_m_s, vpt, w, w_m_l, w_m_n, w_m_r, w_m_s
[1320]161
[1]162    USE averaging
[1320]163
[2696]164    USE chemistry_model_mod,                                                   &
165        ONLY:  chem_read_restart_data, chem_species, nspec                               
166
[1320]167    USE control_parameters,                                                    &
[2696]168        ONLY:  air_chemistry, iran, land_surface, message_string, outflow_l,   &
169               outflow_n, outflow_r, outflow_s, urban_surface
[1320]170
171    USE cpulog,                                                                &
172        ONLY:  cpu_log, log_point_s
173
174    USE indices,                                                               &
175        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, nx_on_file, ny, nys, nysg, nyn, &
176               nyng, ny_on_file, nzb, nzt
177
178    USE kinds
179
[1551]180    USE land_surface_model_mod,                                                &
[2232]181        ONLY:  lsm_read_restart_data
[1551]182
[1320]183    USE particle_attributes,                                                   &
184        ONLY:  iran_part
185
[1]186    USE pegrid
187
[1551]188    USE radiation_model_mod,                                                   &
[1976]189        ONLY: radiation, radiation_read_restart_data
[1551]190
[1320]191    USE random_function_mod,                                                   &
192        ONLY:  random_iv, random_iy
193
[1400]194    USE random_generator_parallel,                                             &
195        ONLY:  id_random_array, seq_random_array
196
[1833]197    USE spectra_mod,                                                           &
[1320]198        ONLY:  spectrum_x, spectrum_y
199
[2232]200    USE surface_mod,                                                           &
201        ONLY :  surface_read_restart_data
[2269]202       
203    USE urban_surface_mod,                                                     &
204        ONLY:  usm_read_restart_data 
[1320]205
[1]206    IMPLICIT NONE
207
[1468]208    CHARACTER (LEN=7)  ::  myid_char_save
[1320]209    CHARACTER (LEN=10) ::  binary_version
210    CHARACTER (LEN=10) ::  version_on_file
[1]211    CHARACTER (LEN=20) ::  field_chr
212
[1682]213    INTEGER(iwp) ::  files_to_be_opened  !<
214    INTEGER(iwp) ::  i                   !<
215    INTEGER(iwp) ::  j                   !<
216    INTEGER(iwp) ::  k                   !<
217    INTEGER(iwp) ::  myid_on_file        !<
218    INTEGER(iwp) ::  numprocs_on_file    !<
219    INTEGER(iwp) ::  nxlc                !<
220    INTEGER(iwp) ::  nxlf                !<
221    INTEGER(iwp) ::  nxlpr               !<
222    INTEGER(iwp) ::  nxl_on_file         !<
223    INTEGER(iwp) ::  nxrc                !<
224    INTEGER(iwp) ::  nxrf                !<
225    INTEGER(iwp) ::  nxrpr               !<
226    INTEGER(iwp) ::  nxr_on_file         !<
227    INTEGER(iwp) ::  nync                !<
228    INTEGER(iwp) ::  nynf                !<
229    INTEGER(iwp) ::  nynpr               !<
230    INTEGER(iwp) ::  nyn_on_file         !<
231    INTEGER(iwp) ::  nysc                !<
232    INTEGER(iwp) ::  nysf                !<
233    INTEGER(iwp) ::  nyspr               !<
234    INTEGER(iwp) ::  nys_on_file         !<
235    INTEGER(iwp) ::  nzb_on_file         !<
236    INTEGER(iwp) ::  nzt_on_file         !<
237    INTEGER(iwp) ::  offset_x            !<
238    INTEGER(iwp) ::  offset_y            !<
239    INTEGER(iwp) ::  shift_x             !<
240    INTEGER(iwp) ::  shift_y             !<
[1]241
[1682]242    INTEGER(iwp), DIMENSION(numprocs_previous_run) ::  file_list       !<
243    INTEGER(iwp), DIMENSION(numprocs_previous_run) ::  overlap_count   !<
[146]244
[1682]245    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxlfa      !<
246    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxrfa      !<
247    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nynfa      !<
248    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nysfa      !<
249    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_xa  !<
250    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_ya  !<
[216]251
[2644]252    INTEGER(isp), DIMENSION(:,:),   ALLOCATABLE ::  tmp_2d_id_random   !< temporary array for storing random generator data
253    INTEGER(isp), DIMENSION(:,:,:), ALLOCATABLE ::  tmp_2d_seq_random  !< temporary array for storing random generator data
254
[1320]255    REAL(wp) ::  rdummy
[146]256
[2696]257    REAL(wp), DIMENSION(:,:),   ALLOCATABLE   ::  tmp_2d      !< temporary array for storing 2D data
[1682]258    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d      !< temporary array for storing 3D data
259    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwul   !<
260    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwun   !<
261    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwur   !<
262    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwus   !<
263    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvl   !<
264    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvn   !<
265    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvr   !<
266    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvs   !<
267    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwl   !<
268    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwn   !<
269    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwr   !<
270    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwws   !<
[146]271
[1682]272    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  tmp_4d     !<
[1320]273
274
[1]275!
[146]276!-- Read data from previous model run.
[1]277    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'start' )
278
279!
[146]280!-- Check which of the restart files contain data needed for the subdomain
281!-- of this PE
282    files_to_be_opened = 0
[143]283
[146]284    DO  i = 1, numprocs_previous_run
[216]285!
286!--    Store array bounds of the previous run ("pr") in temporary scalars
[147]287       nxlpr = hor_index_bounds_previous_run(1,i-1)
288       nxrpr = hor_index_bounds_previous_run(2,i-1)
289       nyspr = hor_index_bounds_previous_run(3,i-1)
290       nynpr = hor_index_bounds_previous_run(4,i-1)
291
[143]292!
[147]293!--    Determine the offsets. They may be non-zero in case that the total domain
294!--    on file is smaller than the current total domain.
295       offset_x = ( nxl / ( nx_on_file + 1 ) ) * ( nx_on_file + 1 )
296       offset_y = ( nys / ( ny_on_file + 1 ) ) * ( ny_on_file + 1 )
297
298!
[216]299!--    Start with this offset and then check, if the subdomain on file
300!--    matches another time(s) in the current subdomain by shifting it
301!--    for nx_on_file+1, ny_on_file+1 respectively
[667]302   
[216]303       shift_y = 0
[667]304       j       = 0
305       DO WHILE (  nyspr+shift_y <= nyn-offset_y )
306         
307          IF ( nynpr+shift_y >= nys-offset_y ) THEN
[146]308
[667]309             shift_x = 0
310             DO WHILE ( nxlpr+shift_x <= nxr-offset_x )
311               
312                IF ( nxrpr+shift_x >= nxl-offset_x ) THEN
313                   j = j +1
314                   IF ( j > 1000 )  THEN
[147]315!
[667]316!--                   Array bound exceeded
317                      message_string = 'data from subdomain of previous' // &
318                                       ' run mapped more than 1000 times'
319                      CALL message( 'read_3d_binary', 'PA0284', 2, 2, -1,   &
320                                       6, 1 )
321                   ENDIF
[147]322
[667]323                   IF ( j == 1 )  THEN
324                      files_to_be_opened = files_to_be_opened + 1
325                      file_list(files_to_be_opened) = i-1
326                   ENDIF
327                     
328                   offset_xa(files_to_be_opened,j) = offset_x + shift_x
329                   offset_ya(files_to_be_opened,j) = offset_y + shift_y
[147]330!
[667]331!--                Index bounds of overlapping data
332                   nxlfa(files_to_be_opened,j) = MAX( nxl-offset_x-shift_x, nxlpr )
333                   nxrfa(files_to_be_opened,j) = MIN( nxr-offset_x-shift_x, nxrpr )
334                   nysfa(files_to_be_opened,j) = MAX( nys-offset_y-shift_y, nyspr )
335                   nynfa(files_to_be_opened,j) = MIN( nyn-offset_y-shift_y, nynpr )
[147]336
[667]337                ENDIF
[147]338
[667]339                shift_x = shift_x + ( nx_on_file + 1 )
340             ENDDO
341       
342          ENDIF
343             
344          shift_y = shift_y + ( ny_on_file + 1 )             
[216]345       ENDDO
[667]346         
[216]347       IF ( j > 0 )  overlap_count(files_to_be_opened) = j
[667]348         
[146]349    ENDDO
[667]350   
[147]351!
352!-- Save the id-string of the current process, since myid_char may now be used
353!-- to open files created by PEs with other id.
[1808]354    myid_char_save = myid_char
[146]355
356    IF ( files_to_be_opened /= 1  .OR.  numprocs /= numprocs_previous_run ) &
357    THEN
[274]358       WRITE( message_string, * ) 'number of PEs or virtual PE-grid changed ', &
359                        'in restart run&  PE', myid, ' will read from files ', &
360                         file_list(1:files_to_be_opened)
[257]361       CALL message( 'read_3d_binary', 'PA0285', 0, 0, 0, 6, 0 )
[1]362    ENDIF
363
364!
[146]365!-- Read data from all restart files determined above
366    DO  i = 1, files_to_be_opened
[1]367
[146]368       j = file_list(i)
369!
370!--    Set the filename (underscore followed by four digit processor id)
[1468]371       WRITE (myid_char,'(''_'',I6.6)')  j
[1]372
[146]373!
[1468]374!--    Open the restart file. If this file has been created by PE0 (_000000),
[146]375!--    the global variables at the beginning of the file have to be skipped
376!--    first.
377       CALL check_open( 13 )
378       IF ( j == 0 )  CALL skip_var_list
[1]379
[146]380!
381!--    First compare the version numbers
382       READ ( 13 )  version_on_file
[2696]383       binary_version = '4.6'
[146]384       IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
[274]385          WRITE( message_string, * ) 'version mismatch concerning data ',      &
386                      'from prior run',                                        &
387                      '&version on file    = "', TRIM( version_on_file ), '"', &
388                      '&version in program = "', TRIM( binary_version ), '"'
[257]389          CALL message( 'read_3d_binary', 'PA0286', 1, 2, 0, 6, 0 )
[146]390       ENDIF
391
392!
393!--    Read number of processors, processor-id, and array ranges.
394!--    Compare the array ranges with those stored in the index bound array.
395       READ ( 13 )  numprocs_on_file, myid_on_file, nxl_on_file, nxr_on_file, &
396                    nys_on_file, nyn_on_file, nzb_on_file, nzt_on_file
397
398       IF ( nxl_on_file /= hor_index_bounds_previous_run(1,j) )  THEN
[274]399          WRITE( message_string, * ) 'problem with index bound nxl on ',  &
400                            'restart file "', myid_char, '"',             &
401                            '&nxl = ', nxl_on_file, ' but it should be',  &
402                            '&= ', hor_index_bounds_previous_run(1,j),    &
403                            '&from the index bound information array'
[277]404          CALL message( 'read_3d_binary', 'PA0287', 2, 2, -1, 6, 1 )
[146]405       ENDIF
[1]406
[146]407       IF ( nxr_on_file /= hor_index_bounds_previous_run(2,j) )  THEN
[274]408           WRITE( message_string, * ) 'problem with index bound nxr on ',   &
409                               'restart file "', myid_char, '"'  ,          &
410                               '&nxr = ', nxr_on_file, ' but it should be', &
411                               '&= ', hor_index_bounds_previous_run(2,j),   &
412                               '&from the index bound information array' 
[277]413          CALL message( 'read_3d_binary', 'PA0288', 2, 2, -1, 6, 1 )
[257]414
[146]415       ENDIF
[1]416
[146]417       IF ( nys_on_file /= hor_index_bounds_previous_run(3,j) )  THEN
[274]418          WRITE( message_string, * ) 'problem with index bound nys on ',      &
419                                 'restart file "', myid_char, '"',            &
420                                 '&nys = ', nys_on_file, ' but it should be', &
421                                 '&= ', hor_index_bounds_previous_run(3,j),   &
[257]422                                     '&from the index bound information array'
[277]423          CALL message( 'read_3d_binary', 'PA0289', 2, 2, -1, 6, 1 ) 
[146]424       ENDIF
[1]425
[146]426       IF ( nyn_on_file /= hor_index_bounds_previous_run(4,j) )  THEN
[274]427          WRITE( message_string, * ) 'problem with index bound nyn on ',    &
428                               'restart file "', myid_char, '"',            &
429                               '&nyn = ', nyn_on_file, ' but it should be', &
430                               '&= ', hor_index_bounds_previous_run(4,j),   &
431                               '&from the index bound information array'
[277]432          CALL message( 'read_3d_binary', 'PA0290', 2, 2, -1, 6, 1 ) 
[146]433       ENDIF
[1]434
[146]435       IF ( nzb_on_file /= nzb )  THEN
[257]436          WRITE( message_string, * ) 'mismatch between actual data and data ', &
437                                     '&from prior run on PE ', myid,           &
438                                     '&nzb on file = ', nzb_on_file,           &
439                                     '&nzb         = ', nzb
440          CALL message( 'read_3d_binary', 'PA0291', 1, 2, 0, 6, 0 ) 
[146]441       ENDIF
[1]442
[146]443       IF ( nzt_on_file /= nzt )  THEN
[257]444          WRITE( message_string, * ) 'mismatch between actual data and data ', &
445                                     '&from prior run on PE ', myid,           &
446                                     '&nzt on file = ', nzt_on_file,           &
447                                     '&nzt         = ', nzt
448          CALL message( 'read_3d_binary', 'PA0292', 1, 2, 0, 6, 0 ) 
[146]449       ENDIF
[1]450
451!
[146]452!--    Allocate temporary arrays sized as the arrays on the restart file
[1551]453       ALLOCATE( tmp_2d(nys_on_file-nbgp:nyn_on_file+nbgp,                     &
454                        nxl_on_file-nbgp:nxr_on_file+nbgp),                    &
455                 tmp_3d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,           &
[667]456                        nxl_on_file-nbgp:nxr_on_file+nbgp) )
[1]457
458!
[146]459!--    Read arrays
460!--    ATTENTION: If the following read commands have been altered, the
461!--    ---------- version number of the variable binary_version must be altered,
462!--               too. Furthermore, the output list of arrays in write_3d_binary
463!--               must also be altered accordingly.
464       READ ( 13 )  field_chr
465       DO  WHILE ( TRIM( field_chr ) /= '*** end ***' )
[1]466
[216]467!
468!--       Map data on file as often as needed (data are read only for k=1)
469          DO  k = 1, overlap_count(i)
[1]470
[216]471!
472!--          Get the index range of the subdomain on file which overlap with the
473!--          current subdomain
474             nxlf = nxlfa(i,k)
475             nxlc = nxlfa(i,k) + offset_xa(i,k)
476             nxrf = nxrfa(i,k)
477             nxrc = nxrfa(i,k) + offset_xa(i,k)
478             nysf = nysfa(i,k)
479             nysc = nysfa(i,k) + offset_ya(i,k)
480             nynf = nynfa(i,k)
481             nync = nynfa(i,k) + offset_ya(i,k)
482
483
[2232]484
[216]485             SELECT CASE ( TRIM( field_chr ) )
486
[2797]487                CASE ( 'ghf_av' )
488                   IF ( .NOT. ALLOCATED( ghf_av ) )  THEN
489                      ALLOCATE( ghf_av(nysg:nyng,nxlg:nxrg) )
490                   ENDIF
491                   IF ( k == 1 )  READ ( 13 )  tmp_2d
492                   ghf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =           &
493                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
494
[216]495                CASE ( 'e' )
496                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]497                   e(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
498                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1]499
[216]500                CASE ( 'e_av' )
501                   IF ( .NOT. ALLOCATED( e_av ) )  THEN
[667]502                      ALLOCATE( e_av(nzb:nzt+1,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) )
[216]503                   ENDIF
504                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]505                   e_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
506                            tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]507
[216]508                CASE ( 'iran' ) ! matching random numbers is still unresolved
509                                ! issue
510                   IF ( k == 1 )  READ ( 13 )  iran, iran_part
[146]511
[216]512                CASE ( 'kh' )
513                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]514                   kh(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
515                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]516
[2696]517                CASE ( 'kh_av' )
518                   IF ( .NOT. ALLOCATED( kh_av ) )  THEN
519                      ALLOCATE( kh_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
520                   ENDIF
521                   IF ( k == 1 )  READ ( 13 )  tmp_3d
522                   kh_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
523                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
524
[216]525                CASE ( 'km' )
526                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]527                   km(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
528                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]529
[2696]530                CASE ( 'km_av' )
531                   IF ( .NOT. ALLOCATED( km_av ) )  THEN
532                      ALLOCATE( km_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
533                   ENDIF
534                   IF ( k == 1 )  READ ( 13 )  tmp_3d
535                   km_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
536                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
537
[771]538                CASE ( 'lpt_av' )
539                   IF ( .NOT. ALLOCATED( lpt_av ) )  THEN
540                      ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
541                   ENDIF
542                   IF ( k == 1 )  READ ( 13 )  tmp_3d
543                   lpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
544                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
545
[216]546                CASE ( 'lwp_av' )
547                   IF ( .NOT. ALLOCATED( lwp_av ) )  THEN
[667]548                      ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
[216]549                   ENDIF
550                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]551                   lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
552                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]553
[2292]554                CASE ( 'nc' )
555                   IF ( k == 1 )  READ ( 13 )  tmp_3d
556                   nc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
557                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
558
559                CASE ( 'nc_av' )
560                   IF ( .NOT. ALLOCATED( nc_av ) )  THEN
561                      ALLOCATE( nc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
562                   ENDIF
563                   IF ( k == 1 )  READ ( 13 )  tmp_3d
564                   nc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
565                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
566
567
[1115]568                CASE ( 'nr' )
569                   IF ( k == 1 )  READ ( 13 )  tmp_3d
570                   nr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
571                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
572
573                CASE ( 'nr_av' )
574                   IF ( .NOT. ALLOCATED( nr_av ) )  THEN
575                      ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
576                   ENDIF
577                   IF ( k == 1 )  READ ( 13 )  tmp_3d
578                   nr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
579                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
580
[216]581                CASE ( 'p' )
582                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]583                   p(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
584                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]585
[216]586                CASE ( 'p_av' )
587                   IF ( .NOT. ALLOCATED( p_av ) )  THEN
[667]588                      ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]589                   ENDIF
590                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]591                   p_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
592                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]593
[216]594                CASE ( 'pc_av' )
595                   IF ( .NOT. ALLOCATED( pc_av ) )  THEN
[667]596                      ALLOCATE( pc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]597                   ENDIF
598                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]599                   pc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
600                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]601
[216]602                CASE ( 'pr_av' )
603                   IF ( .NOT. ALLOCATED( pr_av ) )  THEN
[667]604                      ALLOCATE( pr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]605                   ENDIF
606                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]607                   pr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
608                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]609
[1053]610                CASE ( 'prr' )
611                   IF ( .NOT. ALLOCATED( prr ) )  THEN
612                      ALLOCATE( prr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
613                   ENDIF
614                   IF ( k == 1 )  READ ( 13 )  tmp_3d
615                   prr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
616                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
617
618                CASE ( 'prr_av' )
619                   IF ( .NOT. ALLOCATED( prr_av ) )  THEN
620                      ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
621                   ENDIF
622                   IF ( k == 1 )  READ ( 13 )  tmp_3d
623                   prr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
624                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
625
[216]626                CASE ( 'precipitation_amount' )
627                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]628                   precipitation_amount(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
629                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]630
[216]631                CASE ( 'precipitation_rate_a' )
632                   IF ( .NOT. ALLOCATED( precipitation_rate_av ) )  THEN
[667]633                      ALLOCATE( precipitation_rate_av(nysg:nyng,nxlg:nxrg) )
[216]634                   ENDIF
635                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]636                   precipitation_rate_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
637                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]638
[216]639                CASE ( 'pt' )
640                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]641                   pt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
642                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]643
[216]644                CASE ( 'pt_av' )
645                   IF ( .NOT. ALLOCATED( pt_av ) )  THEN
[667]646                      ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]647                   ENDIF
648                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]649                   pt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
650                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]651
[216]652                CASE ( 'q' )
653                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]654                   q(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
655                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]656
[216]657                CASE ( 'q_av' )
658                   IF ( .NOT. ALLOCATED( q_av ) )  THEN
[667]659                      ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
[216]660                   ENDIF
661                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]662                   q_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
663                                     tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]664
[1115]665                CASE ( 'qc' )
666                   IF ( k == 1 )  READ ( 13 )  tmp_3d
667                   qc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
668                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
669
670                CASE ( 'qc_av' )
671                   IF ( .NOT. ALLOCATED( qc_av ) )  THEN
672                      ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
673                   ENDIF
674                   IF ( k == 1 )  READ ( 13 )  tmp_3d
675                   qc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
676                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
677
[216]678                CASE ( 'ql' )
679                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]680                   ql(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
681                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]682
[216]683                CASE ( 'ql_av' )
684                   IF ( .NOT. ALLOCATED( ql_av ) )  THEN
[667]685                      ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]686                   ENDIF
687                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]688                   ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
689                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]690
[1053]691                CASE ( 'qr' )
692                   IF ( k == 1 )  READ ( 13 )  tmp_3d
693                   qr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
694                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
695
696                CASE ( 'qr_av' )
697                   IF ( .NOT. ALLOCATED( qr_av ) )  THEN
698                      ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
699                   ENDIF
700                   IF ( k == 1 )  READ ( 13 )  tmp_3d
701                   qr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
702                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
703
[216]704                CASE ( 'ql_c_av' )
705                   IF ( .NOT. ALLOCATED( ql_c_av ) )  THEN
[667]706                      ALLOCATE( ql_c_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]707                   ENDIF
708                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]709                   ql_c_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
710                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]711
[216]712                CASE ( 'ql_v_av' )
713                   IF ( .NOT. ALLOCATED( ql_v_av ) )  THEN
[667]714                      ALLOCATE( ql_v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]715                   ENDIF
716                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]717                   ql_v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
718                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]719
[216]720                CASE ( 'ql_vp_av' )
721                   IF ( .NOT. ALLOCATED( ql_vp_av ) )  THEN
[667]722                      ALLOCATE( ql_vp_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]723                   ENDIF
724                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]725                   ql_vp_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
726                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]727
[354]728                CASE ( 'qsws_av' )
729                   IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
[667]730                      ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
[354]731                   ENDIF 
732                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]733                   qsws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
734                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[354]735
[216]736                CASE ( 'qv_av' )
737                   IF ( .NOT. ALLOCATED( qv_av ) )  THEN
[667]738                      ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]739                   ENDIF
740                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]741                   qv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
742                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]743
[2797]744                CASE ( 'r_a_av' )
745                   IF ( .NOT. ALLOCATED( r_a_av ) )  THEN
746                      ALLOCATE( r_a_av(nysg:nyng,nxlg:nxrg) )
747                   ENDIF
748                   IF ( k == 1 )  READ ( 13 )  tmp_2d
749                   r_a_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =           &
750                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
751
[216]752                CASE ( 'random_iv' )  ! still unresolved issue
753                   IF ( k == 1 )  READ ( 13 )  random_iv
754                   IF ( k == 1 )  READ ( 13 )  random_iy
[2696]755
[2636]756                CASE ( 'seq_random_array' )
757                   ALLOCATE( tmp_2d_id_random(nys_on_file:nyn_on_file,         &
758                                              nxl_on_file:nxr_on_file) )
759                   ALLOCATE( tmp_2d_seq_random(5,nys_on_file:nyn_on_file,      &
760                                                 nxl_on_file:nxr_on_file) )
761                   IF ( .NOT. ALLOCATED( id_random_array ) )  THEN
762                      ALLOCATE( id_random_array(nys:nyn,nxl:nxr) )
763                   ENDIF
764                   IF ( .NOT. ALLOCATED( seq_random_array ) )  THEN
765                      ALLOCATE( seq_random_array(5,nys:nyn,nxl:nxr) )
766                   ENDIF
767                   IF ( k == 1 )  READ ( 13 )  tmp_2d_id_random
768                   IF ( k == 1 )  READ ( 13 )  tmp_2d_seq_random
769                   id_random_array(nysc:nync,nxlc:nxrc) =                      &
770                                          tmp_2d_id_random(nysf:nynf,nxlf:nxrf)
771                   seq_random_array(:,nysc:nync,nxlc:nxrc) =                   &
772                                       tmp_2d_seq_random(:,nysf:nynf,nxlf:nxrf)
773                   DEALLOCATE( tmp_2d_id_random, tmp_2d_seq_random )
[2696]774
[2031]775                CASE ( 'rho_ocean_av' )
776                   IF ( .NOT. ALLOCATED( rho_ocean_av ) )  THEN
777                      ALLOCATE( rho_ocean_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]778                   ENDIF
779                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[2031]780                   rho_ocean_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
[667]781                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[2232]782                           
[1960]783                CASE ( 's' )
784                   IF ( k == 1 )  READ ( 13 )  tmp_3d
785                   s(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
786                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]787
[216]788                CASE ( 's_av' )
789                   IF ( .NOT. ALLOCATED( s_av ) )  THEN
[667]790                      ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
[216]791                   ENDIF
792                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]793                   s_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
794                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]795
[216]796                CASE ( 'sa' )
797                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]798                   sa(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
799                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]800
[216]801                CASE ( 'sa_av' )
802                   IF ( .NOT. ALLOCATED( sa_av ) )  THEN
[667]803                      ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]804                   ENDIF
805                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]806                   sa_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
807                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]808
[354]809                CASE ( 'shf_av' )
810                   IF ( .NOT. ALLOCATED( shf_av ) )  THEN
[667]811                      ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
[354]812                   ENDIF
813                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]814                   shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
815                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1001]816
[216]817                CASE ( 'spectrum_x' )
818                   IF ( k == 1 )  THEN
819                      IF ( nx_on_file /= nx )  THEN
[274]820                         message_string = 'read_3d_binary: spectrum_x ' // &
821                                     'on restart file ignored because' // &
822                                     '&total numbers of grid points (nx) ' // &
823                                     'do not match'
824                         CALL message( 'read_3d_binary', 'PA0293',&
825                                                                 0, 1, 0, 6, 0 )
[216]826                         READ ( 13 )  rdummy
827                      ELSE
828                         READ ( 13 )  spectrum_x
829                      ENDIF
830                   ENDIF
[146]831
[216]832                CASE ( 'spectrum_y' )
833                   IF ( k == 1 )  THEN
834                      IF ( ny_on_file /= ny )  THEN
[274]835                         message_string = 'read_3d_binary: spectrum_y ' //   &
836                                     'on restart file ignored because' //    &
837                                     '&total numbers of grid points (ny) '// &
838                                     'do not match'
839                         CALL message( 'read_3d_binary', 'PA0294', &
840                                                                 0, 1, 0, 6, 0 )
841                      READ ( 13 )  rdummy
[216]842                      ELSE
843                         READ ( 13 )  spectrum_y
844                      ENDIF
845                   ENDIF
[1960]846                   
847                CASE ( 'ssws_av' )
848                   IF ( .NOT. ALLOCATED( ssws_av ) )  THEN
849                      ALLOCATE( ssws_av(nysg:nyng,nxlg:nxrg) )
850                   ENDIF 
851                   IF ( k == 1 )  READ ( 13 )  tmp_2d
852                   ssws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
853                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
854                 
[216]855                CASE ( 'ts_av' )
856                   IF ( .NOT. ALLOCATED( ts_av ) )  THEN
[667]857                      ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
[216]858                   ENDIF
859                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]860                   ts_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
861                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]862
[2797]863                CASE ( 'tsurf_av' )
864                   IF ( .NOT. ALLOCATED( tsurf_av ) )  THEN
865                      ALLOCATE( tsurf_av(nysg:nyng,nxlg:nxrg) )
866                   ENDIF
867                   IF ( k == 1 )  READ ( 13 )  tmp_2d
868                   tsurf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
869                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
870
[216]871                CASE ( 'u' )
872                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]873                   u(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
874                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]875
[216]876                CASE ( 'u_av' )
877                   IF ( .NOT. ALLOCATED( u_av ) )  THEN
[667]878                      ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]879                   ENDIF
880                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]881                   u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
882                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]883
[216]884                CASE ( 'u_m_l' )
885                   IF ( k == 1 )  THEN
886                      ALLOCATE( tmp_3dwul(nzb:nzt+1, &
[667]887                                          nys_on_file-nbgp:nyn_on_file+nbgp,1:2) )
[216]888                      READ ( 13 )  tmp_3dwul
889                   ENDIF
890                   IF ( outflow_l )  THEN
[667]891                      u_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwul(:,nysf-nbgp:nynf+nbgp,:)
[216]892                   ENDIF
[146]893
[216]894                CASE ( 'u_m_n' )
895                   IF ( k == 1 )  THEN
896                      ALLOCATE( tmp_3dwun(nzb:nzt+1,ny-1:ny, &
[667]897                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]898                      READ ( 13 )  tmp_3dwun
899                   ENDIF
900                   IF ( outflow_n )  THEN
[667]901                      u_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwun(:,:,nxlf-nbgp:nxrf+nbgp)
[216]902                   ENDIF
[146]903
[216]904                CASE ( 'u_m_r' )
905                   IF ( k == 1 )  THEN
906                      ALLOCATE( tmp_3dwur(nzb:nzt+1,&
[667]907                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]908                      READ ( 13 )  tmp_3dwur
909                   ENDIF
910                   IF ( outflow_r )  THEN
[667]911                      u_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwur(:,nysf-nbgp:nynf+nbgp,:)
[216]912                   ENDIF
[146]913
[216]914                CASE ( 'u_m_s' )
915                   IF ( k == 1 )  THEN
916                      ALLOCATE( tmp_3dwus(nzb:nzt+1,0:1, &
[667]917                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]918                      READ ( 13 )  tmp_3dwus
919                   ENDIF
920                   IF ( outflow_s )  THEN
[667]921                      u_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwus(:,:,nxlf-nbgp:nxrf+nbgp)
[216]922                   ENDIF
[146]923
[216]924                CASE ( 'us_av' )
925                   IF ( .NOT. ALLOCATED( us_av ) )  THEN
[667]926                      ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
[216]927                   ENDIF
928                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]929                   us_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
930                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]931
[216]932                CASE ( 'v' )
933                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]934                   v(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
935                              tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]936
[216]937                CASE ( 'v_av' )
938                   IF ( .NOT. ALLOCATED( v_av ) )  THEN
[667]939                      ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]940                   ENDIF
941                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]942                   v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
943                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]944
[216]945                CASE ( 'v_m_l' )
946                   IF ( k == 1 )  THEN
947                      ALLOCATE( tmp_3dwvl(nzb:nzt+1,&
[667]948                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
[216]949                      READ ( 13 )  tmp_3dwvl
950                   ENDIF
951                   IF ( outflow_l )  THEN
[667]952                      v_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvl(:,nysf-nbgp:nynf+nbgp,:)
[216]953                   ENDIF
[146]954
[216]955                CASE ( 'v_m_n' )
956                   IF ( k == 1 )  THEN
957                      ALLOCATE( tmp_3dwvn(nzb:nzt+1,ny-1:ny, &
[667]958                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]959                      READ ( 13 )  tmp_3dwvn
960                   ENDIF
961                   IF ( outflow_n )  THEN
[667]962                      v_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvn(:,:,nxlf-nbgp:nxrf+nbgp)
[216]963                   ENDIF
[146]964
[216]965                CASE ( 'v_m_r' )
966                   IF ( k == 1 )  THEN
967                      ALLOCATE( tmp_3dwvr(nzb:nzt+1,&
[667]968                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]969                      READ ( 13 )  tmp_3dwvr
970                   ENDIF
971                   IF ( outflow_r )  THEN
[667]972                      v_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvr(:,nysf-nbgp:nynf+nbgp,:)
[216]973                   ENDIF
[146]974
[216]975                CASE ( 'v_m_s' )
976                   IF ( k == 1 )  THEN
977                      ALLOCATE( tmp_3dwvs(nzb:nzt+1,1:2, &
[667]978                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]979                      READ ( 13 )  tmp_3dwvs
980                   ENDIF
981                   IF ( outflow_s )  THEN
[667]982                      v_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvs(:,:,nxlf-nbgp:nxrf+nbgp)
[216]983                   ENDIF
[146]984
[216]985                CASE ( 'vpt' )
986                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]987                   vpt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
988                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]989
[216]990                CASE ( 'vpt_av' )
991                   IF ( .NOT. ALLOCATED( vpt_av ) )  THEN
[667]992                      ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]993                   ENDIF
994                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]995                   vpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
996                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]997
[216]998                CASE ( 'w' )
999                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1000                   w(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1001                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1002
[216]1003                CASE ( 'w_av' )
1004                   IF ( .NOT. ALLOCATED( w_av ) )  THEN
[667]1005                      ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]1006                   ENDIF
1007                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1008                   w_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1009                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1010
[216]1011                CASE ( 'w_m_l' )
1012                   IF ( k == 1 )  THEN
1013                      ALLOCATE( tmp_3dwwl(nzb:nzt+1,&
[667]1014                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
[216]1015                      READ ( 13 )  tmp_3dwwl
1016                   ENDIF
1017                   IF ( outflow_l )  THEN
[667]1018                      w_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwl(:,nysf-nbgp:nynf+nbgp,:)
[216]1019                   ENDIF
[146]1020
[216]1021                CASE ( 'w_m_n' )
1022                   IF ( k == 1 )  THEN
1023                      ALLOCATE( tmp_3dwwn(nzb:nzt+1,ny-1:ny, &
[667]1024                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1025                      READ ( 13 )  tmp_3dwwn
1026                   ENDIF
1027                   IF ( outflow_n )  THEN
[667]1028                      w_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwwn(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1029                   ENDIF
[146]1030
[216]1031                CASE ( 'w_m_r' )
1032                   IF ( k == 1 )  THEN
1033                      ALLOCATE( tmp_3dwwr(nzb:nzt+1,&
[667]1034                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]1035                      READ ( 13 )  tmp_3dwwr
1036                   ENDIF
1037                   IF ( outflow_r )  THEN
[667]1038                      w_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwr(:,nysf-nbgp:nynf+nbgp,:)
[216]1039                   ENDIF
[146]1040
[216]1041                CASE ( 'w_m_s' )
1042                   IF ( k == 1 )  THEN
1043                      ALLOCATE( tmp_3dwws(nzb:nzt+1,0:1, &
[667]1044                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1045                      READ ( 13 )  tmp_3dwws
1046                   ENDIF
1047                   IF ( outflow_s )  THEN
[667]1048                      w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwws(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1049                   ENDIF
1050                   DEALLOCATE( tmp_3dwws )
[146]1051
[216]1052                CASE ( 'z0_av' )
1053                   IF ( .NOT. ALLOCATED( z0_av ) )  THEN
[667]1054                      ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
[216]1055                   ENDIF
1056                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1057                   z0_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1058                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1059
[978]1060                CASE ( 'z0h_av' )
1061                   IF ( .NOT. ALLOCATED( z0h_av ) )  THEN
1062                      ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
1063                   ENDIF
1064                   IF ( k == 1 )  READ ( 13 )  tmp_2d
1065                   z0h_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1066                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
1067
[1788]1068                CASE ( 'z0q_av' )
1069                   IF ( .NOT. ALLOCATED( z0q_av ) )  THEN
1070                      ALLOCATE( z0q_av(nysg:nyng,nxlg:nxrg) )
1071                   ENDIF
1072                   IF ( k == 1 )  READ ( 13 )  tmp_2d
1073                   z0q_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1074                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
1075
[216]1076                CASE DEFAULT
[257]1077                   WRITE( message_string, * ) 'unknown field named "', &
1078                                              TRIM( field_chr ), '" found in', &
1079                                              '&data from prior run on PE ',myid
1080                    CALL message( 'read_3d_binary', 'PA0295', 1, 2, 0, 6, 0 ) 
1081                   
[216]1082             END SELECT
1083
1084          ENDDO  ! overlap loop
1085
[1]1086!
[216]1087!--       Deallocate arrays needed for specific variables only
1088          IF ( ALLOCATED( tmp_3dwul ) )  DEALLOCATE( tmp_3dwul )
1089          IF ( ALLOCATED( tmp_3dwun ) )  DEALLOCATE( tmp_3dwun )
1090          IF ( ALLOCATED( tmp_3dwur ) )  DEALLOCATE( tmp_3dwur )
1091          IF ( ALLOCATED( tmp_3dwus ) )  DEALLOCATE( tmp_3dwus )
1092          IF ( ALLOCATED( tmp_3dwvl ) )  DEALLOCATE( tmp_3dwvl )
1093          IF ( ALLOCATED( tmp_3dwvn ) )  DEALLOCATE( tmp_3dwvn )
1094          IF ( ALLOCATED( tmp_3dwvr ) )  DEALLOCATE( tmp_3dwvr )
1095          IF ( ALLOCATED( tmp_3dwvs ) )  DEALLOCATE( tmp_3dwvs )
1096          IF ( ALLOCATED( tmp_3dwwl ) )  DEALLOCATE( tmp_3dwwl )
1097          IF ( ALLOCATED( tmp_3dwwn ) )  DEALLOCATE( tmp_3dwwn )
1098          IF ( ALLOCATED( tmp_3dwwr ) )  DEALLOCATE( tmp_3dwwr )
1099          IF ( ALLOCATED( tmp_3dwws ) )  DEALLOCATE( tmp_3dwws )
1100          IF ( ALLOCATED( tmp_4d ) )  DEALLOCATE( tmp_4d )
1101
1102!
[146]1103!--       Read next character string
1104          READ ( 13 )  field_chr
[1]1105
[146]1106       ENDDO  ! loop over variables
[2232]1107!
1108!--    Read surface related variables
1109       CALL surface_read_restart_data( i, nxlfa, nxl_on_file, nxrfa,           &
1110                                       nxr_on_file, nynfa, nyn_on_file, nysfa, &
1111                                       nys_on_file, offset_xa, offset_ya,      &
1112                                       overlap_count(i) )
[1]1113
1114!
[2696]1115!--    Read urban surface restart data
1116       IF ( urban_surface )  THEN
1117          CALL usm_read_restart_data( i, nxlfa, nxl_on_file, nxrfa,            &
1118                                      nxr_on_file, nynfa, nyn_on_file, nysfa,  &
1119                                      nys_on_file, offset_xa, offset_ya,       &
1120                                      overlap_count(i) )
1121       ENDIF
1122
1123!
[1972]1124!--    Read land surface restart data
[1976]1125       IF ( land_surface )  THEN
1126          CALL lsm_read_restart_data( i, nxlfa, nxl_on_file, nxrfa,            &
1127                                      nxr_on_file, nynfa, nyn_on_file, nysfa,  &
1128                                      nys_on_file, offset_xa, offset_ya,       &
1129                                      overlap_count(i), tmp_2d )
[2269]1130
[1976]1131       ENDIF
[1972]1132
1133!
[1976]1134!--    Read radiation restart data
1135       IF ( radiation )  THEN
1136          CALL radiation_read_restart_data( i, nxlfa, nxl_on_file, nxrfa,      &
1137                                            nxr_on_file, nynfa, nyn_on_file,   &
1138                                            nysfa, nys_on_file, offset_xa,     &
1139                                            offset_ya, overlap_count(i),       &
1140                                            tmp_2d, tmp_3d )
1141       ENDIF
1142
1143!
[2696]1144!--    Read chemistry restart data
1145       IF ( air_chemistry )  THEN
1146          CALL chem_read_restart_data( i, nxlfa, nxl_on_file, nxrfa,           &
1147                                       nxr_on_file, nynfa, nyn_on_file,        &
1148                                       nysfa, nys_on_file, offset_xa,          &
1149                                       offset_ya, overlap_count(i),            &
1150                                       tmp_2d, tmp_3d )
1151       ENDIF
1152
1153!
[146]1154!--    Read user-defined restart data
[220]1155       CALL user_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file, &
1156                                    nynfa, nyn_on_file, nysfa, nys_on_file,    &
1157                                    offset_xa, offset_ya, overlap_count(i),    &
[216]1158                                    tmp_2d, tmp_3d )
[145]1159
1160!
[146]1161!--    Close the restart file
1162       CALL close_file( 13 )
1163
1164       DEALLOCATE( tmp_2d, tmp_3d )
1165
1166    ENDDO  ! loop over restart files
1167
1168
1169!
1170!-- Restore the original filename for the restart file to be written
1171    myid_char = myid_char_save
1172
1173!
[1]1174!-- End of time measuring for reading binary data
1175    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'stop' )
1176
1177 END SUBROUTINE read_3d_binary
Note: See TracBrowser for help on using the repository browser.