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

Last change on this file since 1001 was 1001, checked in by raasch, 12 years ago

leapfrog timestep scheme and upstream-spline advection scheme completely removed from the code,
reading of dt_fixed from restart file removed

  • Property svn:keywords set to Id
File size: 40.7 KB
RevLine 
[1]1 SUBROUTINE read_3d_binary
2
3!------------------------------------------------------------------------------!
[257]4! Current revisions:
[1]5! -----------------
[1001]6! all actions concerning leapfrog scheme removed
[226]7!
8! Former revisions:
9! -----------------
10! $Id: read_3d_binary.f90 1001 2012-09-13 14:08:46Z raasch $
11!
[979]12! 978 2012-08-09 08:28:32Z fricke
13! +z0h, z0h_av
14!
[777]15! 776 2011-10-31 08:02:51Z heinze
16! bugfix: increase binary_version due to last commit
17!
[772]18! 771 2011-10-27 10:56:21Z heinze
19! +lpt_av
20!
[668]21! 667 2010-12-23 12:06:00Z suehring/gryschka
22! +/- 1 replaced with +/- nbgp when swapping and allocating variables.
23! Bugfix: When using initializing_actions = 'cyclic_fill' in some cases
24! not the whole model domain was filled with data of the prerun.
25!
[449]26! 410 2009-12-04 17:05:40Z letzel
27! format changed in test output from I2 to I4
28!
[392]29! 367 2009-08-25 08:35:52Z maronga
30! Output of messages replaced by message handling routine.
31! +shf_av, qsws_av
32!
[226]33! 220 2008-12-18 07:00:36Z raasch
[216]34! reading mechanism completely revised (subdomain/total domain size can vary
35! arbitrarily between current and previous run)
36! Bugfix: reading of spectrum_x|y from restart files ignored if total numbers
37! of grid points do not match
[198]38!
39! 150 2008-02-29 08:19:58Z raasch
[146]40! Files from which restart data are to be read are determined and subsequently
[147]41! opened. The total domain on the restart file is allowed to be smaller than
42! the current total domain. In this case it will be periodically mapped on the
43! current domain (needed for recycling method).
[146]44! +call of user_read_restart_data, -dopr_time_count,
[145]45! hom_sum, volume_flow_area, volume_flow_initial moved to read_var_list,
[143]46! reading of old profil parameters (cross_..., dopr_crossindex, profile_***)
[146]47! removed, initialization of spectrum_x|y removed
[1]48!
[110]49! 102 2007-07-27 09:09:17Z raasch
50! +uswst, uswst_m, vswst, vswst_m
51!
[98]52! 96 2007-06-04 08:07:41Z raasch
53! +rho_av, sa, sa_av, saswsb, saswst
54!
[77]55! 73 2007-03-20 08:33:14Z raasch
56! +precipitation_amount, precipitation_rate_av, rif_wall, u_m_l, u_m_r, etc.,
57! z0_av
58!
[39]59! 19 2007-02-23 04:53:48Z raasch
[77]60! +qswst, qswst_m, tswst, tswst_m
[39]61!
[3]62! RCS Log replace by Id keyword, revision history cleaned up
63!
[1]64! Revision 1.4  2006/08/04 15:02:32  raasch
65! +iran, iran_part
66!
67! Revision 1.1  2004/04/30 12:47:27  raasch
68! Initial revision
69!
70!
71! Description:
72! ------------
73! Binary input of variables and arrays from restart file
74!------------------------------------------------------------------------------!
75
76    USE arrays_3d
77    USE averaging
[72]78    USE cloud_parameters
[1]79    USE control_parameters
80    USE cpulog
81    USE indices
82    USE interfaces
83    USE particle_attributes
84    USE pegrid
85    USE profil_parameter
86    USE random_function_mod
87    USE statistics
88
89    IMPLICIT NONE
90
[146]91    CHARACTER (LEN=5)  ::  myid_char_save
[1]92    CHARACTER (LEN=10) ::  binary_version, version_on_file
93    CHARACTER (LEN=20) ::  field_chr
94
[216]95    INTEGER ::  files_to_be_opened, i, j, k, myid_on_file,                    &
[147]96                numprocs_on_file, nxlc, nxlf, nxlpr, nxl_on_file, nxrc, nxrf, &
97                nxrpr, nxr_on_file, nync, nynf, nynpr, nyn_on_file, nysc,     &
98                nysf, nyspr, nys_on_file, nzb_on_file, nzt_on_file, offset_x, &
[216]99                offset_y, shift_x, shift_y
[1]100
[216]101    INTEGER, DIMENSION(numprocs_previous_run) ::  file_list, overlap_count
[146]102
[216]103    INTEGER, DIMENSION(numprocs_previous_run,1000) ::  nxlfa, nxrfa, nynfa, &
104                                                       nysfa, offset_xa, &
105                                                       offset_ya
106    REAL ::  rdummy
107
[146]108    REAL, DIMENSION(:,:), ALLOCATABLE     ::  tmp_2d
[216]109    REAL, DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d, tmp_3dwul, tmp_3dwun,    &
110                                              tmp_3dwur, tmp_3dwus, tmp_3dwvl, &
111                                              tmp_3dwvn, tmp_3dwvr, tmp_3dwvs, &
112                                              tmp_3dwwl, tmp_3dwwn, tmp_3dwwr, &
113                                              tmp_3dwws
[146]114    REAL, DIMENSION(:,:,:,:), ALLOCATABLE ::  tmp_4d
115
116
[1]117!
[146]118!-- Read data from previous model run.
[1]119    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'start' )
120
121!
[146]122!-- Check which of the restart files contain data needed for the subdomain
123!-- of this PE
124    files_to_be_opened = 0
[143]125
[146]126    DO  i = 1, numprocs_previous_run
[216]127!
128!--    Store array bounds of the previous run ("pr") in temporary scalars
[147]129       nxlpr = hor_index_bounds_previous_run(1,i-1)
130       nxrpr = hor_index_bounds_previous_run(2,i-1)
131       nyspr = hor_index_bounds_previous_run(3,i-1)
132       nynpr = hor_index_bounds_previous_run(4,i-1)
133
[143]134!
[147]135!--    Determine the offsets. They may be non-zero in case that the total domain
136!--    on file is smaller than the current total domain.
137       offset_x = ( nxl / ( nx_on_file + 1 ) ) * ( nx_on_file + 1 )
138       offset_y = ( nys / ( ny_on_file + 1 ) ) * ( ny_on_file + 1 )
139
140!
[216]141!--    Start with this offset and then check, if the subdomain on file
142!--    matches another time(s) in the current subdomain by shifting it
143!--    for nx_on_file+1, ny_on_file+1 respectively
[667]144   
[216]145       shift_y = 0
[667]146       j       = 0
147       DO WHILE (  nyspr+shift_y <= nyn-offset_y )
148         
149          IF ( nynpr+shift_y >= nys-offset_y ) THEN
[146]150
[667]151             shift_x = 0
152             DO WHILE ( nxlpr+shift_x <= nxr-offset_x )
153               
154                IF ( nxrpr+shift_x >= nxl-offset_x ) THEN
155                   j = j +1
156                   IF ( j > 1000 )  THEN
[147]157!
[667]158!--                   Array bound exceeded
159                      message_string = 'data from subdomain of previous' // &
160                                       ' run mapped more than 1000 times'
161                      CALL message( 'read_3d_binary', 'PA0284', 2, 2, -1,   &
162                                       6, 1 )
163                   ENDIF
[147]164
[667]165                   IF ( j == 1 )  THEN
166                      files_to_be_opened = files_to_be_opened + 1
167                      file_list(files_to_be_opened) = i-1
168                   ENDIF
169                     
170                   offset_xa(files_to_be_opened,j) = offset_x + shift_x
171                   offset_ya(files_to_be_opened,j) = offset_y + shift_y
[147]172!
[667]173!--                Index bounds of overlapping data
174                   nxlfa(files_to_be_opened,j) = MAX( nxl-offset_x-shift_x, nxlpr )
175                   nxrfa(files_to_be_opened,j) = MIN( nxr-offset_x-shift_x, nxrpr )
176                   nysfa(files_to_be_opened,j) = MAX( nys-offset_y-shift_y, nyspr )
177                   nynfa(files_to_be_opened,j) = MIN( nyn-offset_y-shift_y, nynpr )
[147]178
[667]179                ENDIF
[147]180
[667]181                shift_x = shift_x + ( nx_on_file + 1 )
182             ENDDO
183       
184          ENDIF
185             
186          shift_y = shift_y + ( ny_on_file + 1 )             
[216]187       ENDDO
[667]188         
[216]189       IF ( j > 0 )  overlap_count(files_to_be_opened) = j
[147]190
191!
[216]192!--    Test output, to be removed later
193       IF ( j > 0 )  THEN
194          WRITE (9,*) '*** reading from file: ', i, j, ' times'
[667]195          WRITE (9,*) '    nxl = ', nxl, ' nxr = ', nxr, ' nys = ', & 
196                                    nys, ' nyn = ', nyn
[216]197          WRITE (9,*) ' '
198          DO  k = 1, j
199             WRITE (9,*) 'k = ', k
[667]200             WRITE (9,'(6(A,I4))') 'nxlfa = ', nxlfa(files_to_be_opened,k),&
201                     ' nxrfa = ', nxrfa(files_to_be_opened,k), &
202                     ' offset_xa = ', offset_xa(files_to_be_opened,k), &
203                     ' nysfa = ', nysfa(files_to_be_opened,k), &
204                     ' nynfa = ', nynfa(files_to_be_opened,k), &
205                     ' offset_ya = ', offset_ya(files_to_be_opened,k)
[216]206          ENDDO
[147]207          CALL local_flush( 9 )
208       ENDIF
209
[667]210         
[146]211    ENDDO
[667]212   
[147]213!
214!-- Save the id-string of the current process, since myid_char may now be used
215!-- to open files created by PEs with other id.
[667]216          myid_char_save = myid_char
[146]217
[147]218!
219!-- Test output (remove later)
[667]220         
[146]221    DO i = 1, numprocs_previous_run
222       WRITE (9,*) 'i=',i-1, ' ibs= ',hor_index_bounds_previous_run(1:4,i-1)
223    ENDDO
224    CALL local_flush( 9 )
225
226    IF ( files_to_be_opened /= 1  .OR.  numprocs /= numprocs_previous_run ) &
227    THEN
[274]228       WRITE( message_string, * ) 'number of PEs or virtual PE-grid changed ', &
229                        'in restart run&  PE', myid, ' will read from files ', &
230                         file_list(1:files_to_be_opened)
[257]231       CALL message( 'read_3d_binary', 'PA0285', 0, 0, 0, 6, 0 )
[1]232    ENDIF
233
234!
[146]235!-- Read data from all restart files determined above
236    DO  i = 1, files_to_be_opened
[1]237
[146]238       j = file_list(i)
239!
240!--    Set the filename (underscore followed by four digit processor id)
241       WRITE (myid_char,'(''_'',I4.4)')  j
242       WRITE (9,*) 'myid=',myid,' opening file "',myid_char,'"'
243       CALL local_flush( 9 )
[1]244
[146]245!
246!--    Open the restart file. If this file has been created by PE0 (_0000),
247!--    the global variables at the beginning of the file have to be skipped
248!--    first.
249       CALL check_open( 13 )
[147]250       WRITE (9,*) 'before skipping'
251       CALL local_flush( 9 )
[146]252       IF ( j == 0 )  CALL skip_var_list
[147]253       WRITE (9,*) 'skipping done'
254       CALL local_flush( 9 )
[1]255
[146]256!
257!--    First compare the version numbers
258       READ ( 13 )  version_on_file
[776]259       binary_version = '3.2'
[146]260       IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
[274]261          WRITE( message_string, * ) 'version mismatch concerning data ',      &
262                      'from prior run',                                        &
263                      '&version on file    = "', TRIM( version_on_file ), '"', &
264                      '&version in program = "', TRIM( binary_version ), '"'
[257]265          CALL message( 'read_3d_binary', 'PA0286', 1, 2, 0, 6, 0 )
[146]266       ENDIF
267
268!
269!--    Read number of processors, processor-id, and array ranges.
270!--    Compare the array ranges with those stored in the index bound array.
271       READ ( 13 )  numprocs_on_file, myid_on_file, nxl_on_file, nxr_on_file, &
272                    nys_on_file, nyn_on_file, nzb_on_file, nzt_on_file
273
274       IF ( nxl_on_file /= hor_index_bounds_previous_run(1,j) )  THEN
[274]275          WRITE( message_string, * ) 'problem with index bound nxl on ',  &
276                            'restart file "', myid_char, '"',             &
277                            '&nxl = ', nxl_on_file, ' but it should be',  &
278                            '&= ', hor_index_bounds_previous_run(1,j),    &
279                            '&from the index bound information array'
[277]280          CALL message( 'read_3d_binary', 'PA0287', 2, 2, -1, 6, 1 )
[146]281       ENDIF
[1]282
[146]283       IF ( nxr_on_file /= hor_index_bounds_previous_run(2,j) )  THEN
[274]284           WRITE( message_string, * ) 'problem with index bound nxr on ',   &
285                               'restart file "', myid_char, '"'  ,          &
286                               '&nxr = ', nxr_on_file, ' but it should be', &
287                               '&= ', hor_index_bounds_previous_run(2,j),   &
288                               '&from the index bound information array' 
[277]289          CALL message( 'read_3d_binary', 'PA0288', 2, 2, -1, 6, 1 )
[257]290
[146]291       ENDIF
[1]292
[146]293       IF ( nys_on_file /= hor_index_bounds_previous_run(3,j) )  THEN
[274]294          WRITE( message_string, * ) 'problem with index bound nys on ',      &
295                                 'restart file "', myid_char, '"',            &
296                                 '&nys = ', nys_on_file, ' but it should be', &
297                                 '&= ', hor_index_bounds_previous_run(3,j),   &
[257]298                                     '&from the index bound information array'
[277]299          CALL message( 'read_3d_binary', 'PA0289', 2, 2, -1, 6, 1 ) 
[146]300       ENDIF
[1]301
[146]302       IF ( nyn_on_file /= hor_index_bounds_previous_run(4,j) )  THEN
[274]303          WRITE( message_string, * ) 'problem with index bound nyn on ',    &
304                               'restart file "', myid_char, '"',            &
305                               '&nyn = ', nyn_on_file, ' but it should be', &
306                               '&= ', hor_index_bounds_previous_run(4,j),   &
307                               '&from the index bound information array'
[277]308          CALL message( 'read_3d_binary', 'PA0290', 2, 2, -1, 6, 1 ) 
[146]309       ENDIF
[1]310
[146]311       IF ( nzb_on_file /= nzb )  THEN
[257]312          WRITE( message_string, * ) 'mismatch between actual data and data ', &
313                                     '&from prior run on PE ', myid,           &
314                                     '&nzb on file = ', nzb_on_file,           &
315                                     '&nzb         = ', nzb
316          CALL message( 'read_3d_binary', 'PA0291', 1, 2, 0, 6, 0 ) 
[146]317       ENDIF
[1]318
[146]319       IF ( nzt_on_file /= nzt )  THEN
[257]320          WRITE( message_string, * ) 'mismatch between actual data and data ', &
321                                     '&from prior run on PE ', myid,           &
322                                     '&nzt on file = ', nzt_on_file,           &
323                                     '&nzt         = ', nzt
324          CALL message( 'read_3d_binary', 'PA0292', 1, 2, 0, 6, 0 ) 
[146]325       ENDIF
[1]326
327!
[146]328!--    Allocate temporary arrays sized as the arrays on the restart file
[667]329       ALLOCATE( tmp_2d(nys_on_file-nbgp:nyn_on_file+nbgp,           &
330                        nxl_on_file-nbgp:nxr_on_file+nbgp),          &
331                 tmp_3d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp, &
332                        nxl_on_file-nbgp:nxr_on_file+nbgp) )
[1]333
334!
[146]335!--    Read arrays
336!--    ATTENTION: If the following read commands have been altered, the
337!--    ---------- version number of the variable binary_version must be altered,
338!--               too. Furthermore, the output list of arrays in write_3d_binary
339!--               must also be altered accordingly.
340       READ ( 13 )  field_chr
341       DO  WHILE ( TRIM( field_chr ) /= '*** end ***' )
[1]342
[216]343!
344!--       Map data on file as often as needed (data are read only for k=1)
345          DO  k = 1, overlap_count(i)
[1]346
[216]347!
348!--          Get the index range of the subdomain on file which overlap with the
349!--          current subdomain
350             nxlf = nxlfa(i,k)
351             nxlc = nxlfa(i,k) + offset_xa(i,k)
352             nxrf = nxrfa(i,k)
353             nxrc = nxrfa(i,k) + offset_xa(i,k)
354             nysf = nysfa(i,k)
355             nysc = nysfa(i,k) + offset_ya(i,k)
356             nynf = nynfa(i,k)
357             nync = nynfa(i,k) + offset_ya(i,k)
358
359
360             WRITE (9,*) 'var = ', field_chr
361             CALL local_flush( 9 )
362
363             SELECT CASE ( TRIM( field_chr ) )
364
365                CASE ( 'e' )
366                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]367                   e(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
368                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1]369
[216]370                CASE ( 'e_av' )
371                   IF ( .NOT. ALLOCATED( e_av ) )  THEN
[667]372                      ALLOCATE( e_av(nzb:nzt+1,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) )
[216]373                   ENDIF
374                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]375                   e_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
376                            tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]377
[216]378                CASE ( 'iran' ) ! matching random numbers is still unresolved
379                                ! issue
380                   IF ( k == 1 )  READ ( 13 )  iran, iran_part
[146]381
[216]382                CASE ( 'kh' )
383                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]384                   kh(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
385                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]386
[216]387                CASE ( 'km' )
388                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]389                   km(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
390                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]391
[771]392                CASE ( 'lpt_av' )
393                   IF ( .NOT. ALLOCATED( lpt_av ) )  THEN
394                      ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
395                   ENDIF
396                   IF ( k == 1 )  READ ( 13 )  tmp_3d
397                   lpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
398                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
399
[216]400                CASE ( 'lwp_av' )
401                   IF ( .NOT. ALLOCATED( lwp_av ) )  THEN
[667]402                      ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
[216]403                   ENDIF
404                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]405                   lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
406                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]407
[216]408                CASE ( 'p' )
409                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]410                   p(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
411                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]412
[216]413                CASE ( 'p_av' )
414                   IF ( .NOT. ALLOCATED( p_av ) )  THEN
[667]415                      ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]416                   ENDIF
417                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]418                   p_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
419                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]420
[216]421                CASE ( 'pc_av' )
422                   IF ( .NOT. ALLOCATED( pc_av ) )  THEN
[667]423                      ALLOCATE( pc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]424                   ENDIF
425                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]426                   pc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
427                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]428
[216]429                CASE ( 'pr_av' )
430                   IF ( .NOT. ALLOCATED( pr_av ) )  THEN
[667]431                      ALLOCATE( pr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]432                   ENDIF
433                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]434                   pr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
435                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]436
[216]437                CASE ( 'precipitation_amount' )
438                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]439                   precipitation_amount(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
440                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]441
[216]442                CASE ( 'precipitation_rate_a' )
443                   IF ( .NOT. ALLOCATED( precipitation_rate_av ) )  THEN
[667]444                      ALLOCATE( precipitation_rate_av(nysg:nyng,nxlg:nxrg) )
[216]445                   ENDIF
446                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]447                   precipitation_rate_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
448                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]449
[216]450                CASE ( 'pt' )
451                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]452                   pt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
453                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]454
[216]455                CASE ( 'pt_av' )
456                   IF ( .NOT. ALLOCATED( pt_av ) )  THEN
[667]457                      ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]458                   ENDIF
459                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]460                   pt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
461                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]462
[216]463                CASE ( 'q' )
464                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]465                   q(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
466                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]467
[216]468                CASE ( 'q_av' )
469                   IF ( .NOT. ALLOCATED( q_av ) )  THEN
[667]470                      ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
[216]471                   ENDIF
472                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]473                   q_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
474                                     tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]475
[216]476                CASE ( 'ql' )
477                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]478                   ql(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
479                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]480
[216]481                CASE ( 'ql_av' )
482                   IF ( .NOT. ALLOCATED( ql_av ) )  THEN
[667]483                      ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]484                   ENDIF
485                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]486                   ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
487                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]488
[216]489                CASE ( 'ql_c_av' )
490                   IF ( .NOT. ALLOCATED( ql_c_av ) )  THEN
[667]491                      ALLOCATE( ql_c_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]492                   ENDIF
493                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]494                   ql_c_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
495                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]496
[216]497                CASE ( 'ql_v_av' )
498                   IF ( .NOT. ALLOCATED( ql_v_av ) )  THEN
[667]499                      ALLOCATE( ql_v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]500                   ENDIF
501                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]502                   ql_v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
503                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]504
[216]505                CASE ( 'ql_vp_av' )
506                   IF ( .NOT. ALLOCATED( ql_vp_av ) )  THEN
[667]507                      ALLOCATE( ql_vp_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]508                   ENDIF
509                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]510                   ql_vp_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
511                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]512
[216]513                CASE ( 'qs' )
514                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]515                   qs(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
516                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]517
[216]518                CASE ( 'qsws' )
519                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]520                   qsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
521                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]522
[354]523                CASE ( 'qsws_av' )
524                   IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
[667]525                      ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
[354]526                   ENDIF 
527                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]528                   qsws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
529                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[354]530
[216]531                CASE ( 'qswst' )
532                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]533                   qswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
534                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]535
[216]536                CASE ( 'qv_av' )
537                   IF ( .NOT. ALLOCATED( qv_av ) )  THEN
[667]538                      ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]539                   ENDIF
540                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]541                   qv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
542                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]543
[216]544                CASE ( 'random_iv' )  ! still unresolved issue
545                   IF ( k == 1 )  READ ( 13 )  random_iv
546                   IF ( k == 1 )  READ ( 13 )  random_iy
[146]547
[216]548                CASE ( 'rho_av' )
549                   IF ( .NOT. ALLOCATED( rho_av ) )  THEN
[667]550                      ALLOCATE( rho_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]551                   ENDIF
552                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]553                   rho_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
554                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]555
[216]556                CASE ( 'rif' )
557                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]558                   rif(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
559                                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]560
[216]561                CASE ( 'rif_wall' )
562                   IF ( k == 1 )  THEN
[667]563                      ALLOCATE( tmp_4d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp, &
564                                       nxl_on_file-nbgp:nxr_on_file+nbgp,1:4) )
[216]565                      READ ( 13 )  tmp_4d
566                   ENDIF
[667]567                   rif_wall(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp,:) = &
568                            tmp_4d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp,:)
[146]569
[216]570                CASE ( 's_av' )
571                   IF ( .NOT. ALLOCATED( s_av ) )  THEN
[667]572                      ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
[216]573                   ENDIF
574                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]575                   s_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
576                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]577
[216]578                CASE ( 'sa' )
579                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]580                   sa(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
581                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]582
[216]583                CASE ( 'sa_av' )
584                   IF ( .NOT. ALLOCATED( sa_av ) )  THEN
[667]585                      ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]586                   ENDIF
587                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]588                   sa_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
589                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]590
[216]591                CASE ( 'saswsb' )
592                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]593                   saswsb(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
594                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]595
[216]596                CASE ( 'saswst' )
597                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]598                   saswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
599                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]600
[216]601                CASE ( 'shf' )
602                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]603                   shf(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
604                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]605
[354]606                CASE ( 'shf_av' )
607                   IF ( .NOT. ALLOCATED( shf_av ) )  THEN
[667]608                      ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
[354]609                   ENDIF
610                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]611                   shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
612                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1001]613
[216]614                CASE ( 'spectrum_x' )
615                   IF ( k == 1 )  THEN
616                      IF ( nx_on_file /= nx )  THEN
[274]617                         message_string = 'read_3d_binary: spectrum_x ' // &
618                                     'on restart file ignored because' // &
619                                     '&total numbers of grid points (nx) ' // &
620                                     'do not match'
621                         CALL message( 'read_3d_binary', 'PA0293',&
622                                                                 0, 1, 0, 6, 0 )
[216]623                         READ ( 13 )  rdummy
624                      ELSE
625                         READ ( 13 )  spectrum_x
626                      ENDIF
627                   ENDIF
[146]628
[216]629                CASE ( 'spectrum_y' )
630                   IF ( k == 1 )  THEN
631                      IF ( ny_on_file /= ny )  THEN
[274]632                         message_string = 'read_3d_binary: spectrum_y ' //   &
633                                     'on restart file ignored because' //    &
634                                     '&total numbers of grid points (ny) '// &
635                                     'do not match'
636                         CALL message( 'read_3d_binary', 'PA0294', &
637                                                                 0, 1, 0, 6, 0 )
638                      READ ( 13 )  rdummy
[216]639                      ELSE
640                         READ ( 13 )  spectrum_y
641                      ENDIF
642                   ENDIF
[146]643
[216]644                CASE ( 'ts' )
645                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]646                   ts(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
647                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]648
[216]649                CASE ( 'ts_av' )
650                   IF ( .NOT. ALLOCATED( ts_av ) )  THEN
[667]651                      ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
[216]652                   ENDIF
653                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]654                   ts_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
655                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]656
[216]657                CASE ( 'tswst' )
658                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]659                   tswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
660                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]661
[216]662                CASE ( 'u' )
663                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]664                   u(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
665                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]666
[216]667                CASE ( 'u_av' )
668                   IF ( .NOT. ALLOCATED( u_av ) )  THEN
[667]669                      ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]670                   ENDIF
671                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]672                   u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
673                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]674
[216]675                CASE ( 'u_m_l' )
676                   IF ( k == 1 )  THEN
677                      ALLOCATE( tmp_3dwul(nzb:nzt+1, &
[667]678                                          nys_on_file-nbgp:nyn_on_file+nbgp,1:2) )
[216]679                      READ ( 13 )  tmp_3dwul
680                   ENDIF
681                   IF ( outflow_l )  THEN
[667]682                      u_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwul(:,nysf-nbgp:nynf+nbgp,:)
[216]683                   ENDIF
[146]684
[216]685                CASE ( 'u_m_n' )
686                   IF ( k == 1 )  THEN
687                      ALLOCATE( tmp_3dwun(nzb:nzt+1,ny-1:ny, &
[667]688                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]689                      READ ( 13 )  tmp_3dwun
690                   ENDIF
691                   IF ( outflow_n )  THEN
[667]692                      u_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwun(:,:,nxlf-nbgp:nxrf+nbgp)
[216]693                   ENDIF
[146]694
[216]695                CASE ( 'u_m_r' )
696                   IF ( k == 1 )  THEN
697                      ALLOCATE( tmp_3dwur(nzb:nzt+1,&
[667]698                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]699                      READ ( 13 )  tmp_3dwur
700                   ENDIF
701                   IF ( outflow_r )  THEN
[667]702                      u_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwur(:,nysf-nbgp:nynf+nbgp,:)
[216]703                   ENDIF
[146]704
[216]705                CASE ( 'u_m_s' )
706                   IF ( k == 1 )  THEN
707                      ALLOCATE( tmp_3dwus(nzb:nzt+1,0:1, &
[667]708                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]709                      READ ( 13 )  tmp_3dwus
710                   ENDIF
711                   IF ( outflow_s )  THEN
[667]712                      u_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwus(:,:,nxlf-nbgp:nxrf+nbgp)
[216]713                   ENDIF
[146]714
[216]715                CASE ( 'us' )
716                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]717                   us(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
718                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]719
[216]720                CASE ( 'usws' )
721                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]722                   usws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
723                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]724
[216]725                CASE ( 'uswst' )
726                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]727                   uswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
728                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]729
[216]730                CASE ( 'us_av' )
731                   IF ( .NOT. ALLOCATED( us_av ) )  THEN
[667]732                      ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
[216]733                   ENDIF
734                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]735                   us_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
736                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]737
[216]738                CASE ( 'v' )
739                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]740                   v(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
741                              tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]742
[216]743                CASE ( 'v_av' )
744                   IF ( .NOT. ALLOCATED( v_av ) )  THEN
[667]745                      ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]746                   ENDIF
747                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]748                   v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
749                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]750
[216]751                CASE ( 'v_m_l' )
752                   IF ( k == 1 )  THEN
753                      ALLOCATE( tmp_3dwvl(nzb:nzt+1,&
[667]754                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
[216]755                      READ ( 13 )  tmp_3dwvl
756                   ENDIF
757                   IF ( outflow_l )  THEN
[667]758                      v_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvl(:,nysf-nbgp:nynf+nbgp,:)
[216]759                   ENDIF
[146]760
[216]761                CASE ( 'v_m_n' )
762                   IF ( k == 1 )  THEN
763                      ALLOCATE( tmp_3dwvn(nzb:nzt+1,ny-1:ny, &
[667]764                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]765                      READ ( 13 )  tmp_3dwvn
766                   ENDIF
767                   IF ( outflow_n )  THEN
[667]768                      v_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvn(:,:,nxlf-nbgp:nxrf+nbgp)
[216]769                   ENDIF
[146]770
[216]771                CASE ( 'v_m_r' )
772                   IF ( k == 1 )  THEN
773                      ALLOCATE( tmp_3dwvr(nzb:nzt+1,&
[667]774                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]775                      READ ( 13 )  tmp_3dwvr
776                   ENDIF
777                   IF ( outflow_r )  THEN
[667]778                      v_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvr(:,nysf-nbgp:nynf+nbgp,:)
[216]779                   ENDIF
[146]780
[216]781                CASE ( 'v_m_s' )
782                   IF ( k == 1 )  THEN
783                      ALLOCATE( tmp_3dwvs(nzb:nzt+1,1:2, &
[667]784                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]785                      READ ( 13 )  tmp_3dwvs
786                   ENDIF
787                   IF ( outflow_s )  THEN
[667]788                      v_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvs(:,:,nxlf-nbgp:nxrf+nbgp)
[216]789                   ENDIF
[146]790
[216]791                CASE ( 'vpt' )
792                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]793                   vpt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
794                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]795
[216]796                CASE ( 'vpt_av' )
797                   IF ( .NOT. ALLOCATED( vpt_av ) )  THEN
[667]798                      ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]799                   ENDIF
800                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]801                   vpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
802                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]803
[216]804                CASE ( 'vsws' )
805                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]806                   vsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
807                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]808
[216]809                CASE ( 'vswst' )
810                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]811                   vswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
812                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]813
[216]814                CASE ( 'w' )
815                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]816                   w(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
817                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]818
[216]819                CASE ( 'w_av' )
820                   IF ( .NOT. ALLOCATED( w_av ) )  THEN
[667]821                      ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]822                   ENDIF
823                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]824                   w_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
825                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]826
[216]827                CASE ( 'w_m_l' )
828                   IF ( k == 1 )  THEN
829                      ALLOCATE( tmp_3dwwl(nzb:nzt+1,&
[667]830                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
[216]831                      READ ( 13 )  tmp_3dwwl
832                   ENDIF
833                   IF ( outflow_l )  THEN
[667]834                      w_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwl(:,nysf-nbgp:nynf+nbgp,:)
[216]835                   ENDIF
[146]836
[216]837                CASE ( 'w_m_n' )
838                   IF ( k == 1 )  THEN
839                      ALLOCATE( tmp_3dwwn(nzb:nzt+1,ny-1:ny, &
[667]840                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]841                      READ ( 13 )  tmp_3dwwn
842                   ENDIF
843                   IF ( outflow_n )  THEN
[667]844                      w_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwwn(:,:,nxlf-nbgp:nxrf+nbgp)
[216]845                   ENDIF
[146]846
[216]847                CASE ( 'w_m_r' )
848                   IF ( k == 1 )  THEN
849                      ALLOCATE( tmp_3dwwr(nzb:nzt+1,&
[667]850                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]851                      READ ( 13 )  tmp_3dwwr
852                   ENDIF
853                   IF ( outflow_r )  THEN
[667]854                      w_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwr(:,nysf-nbgp:nynf+nbgp,:)
[216]855                   ENDIF
[146]856
[216]857                CASE ( 'w_m_s' )
858                   IF ( k == 1 )  THEN
859                      ALLOCATE( tmp_3dwws(nzb:nzt+1,0:1, &
[667]860                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]861                      READ ( 13 )  tmp_3dwws
862                   ENDIF
863                   IF ( outflow_s )  THEN
[667]864                      w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwws(:,:,nxlf-nbgp:nxrf+nbgp)
[216]865                   ENDIF
866                   DEALLOCATE( tmp_3dwws )
[146]867
[216]868                CASE ( 'z0' )
869                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]870                   z0(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
871                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]872
[216]873                CASE ( 'z0_av' )
874                   IF ( .NOT. ALLOCATED( z0_av ) )  THEN
[667]875                      ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
[216]876                   ENDIF
877                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]878                   z0_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
879                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]880
[978]881                CASE ( 'z0h' )
882                   IF ( k == 1 )  READ ( 13 )  tmp_2d
883                   z0h(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
884                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
885
886                CASE ( 'z0h_av' )
887                   IF ( .NOT. ALLOCATED( z0h_av ) )  THEN
888                      ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
889                   ENDIF
890                   IF ( k == 1 )  READ ( 13 )  tmp_2d
891                   z0h_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
892                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
893
[216]894                CASE DEFAULT
[257]895                   WRITE( message_string, * ) 'unknown field named "', &
896                                              TRIM( field_chr ), '" found in', &
897                                              '&data from prior run on PE ',myid
898                    CALL message( 'read_3d_binary', 'PA0295', 1, 2, 0, 6, 0 ) 
899                   
[216]900             END SELECT
901
902          ENDDO  ! overlap loop
903
[1]904!
[216]905!--       Deallocate arrays needed for specific variables only
906          IF ( ALLOCATED( tmp_3dwul ) )  DEALLOCATE( tmp_3dwul )
907          IF ( ALLOCATED( tmp_3dwun ) )  DEALLOCATE( tmp_3dwun )
908          IF ( ALLOCATED( tmp_3dwur ) )  DEALLOCATE( tmp_3dwur )
909          IF ( ALLOCATED( tmp_3dwus ) )  DEALLOCATE( tmp_3dwus )
910          IF ( ALLOCATED( tmp_3dwvl ) )  DEALLOCATE( tmp_3dwvl )
911          IF ( ALLOCATED( tmp_3dwvn ) )  DEALLOCATE( tmp_3dwvn )
912          IF ( ALLOCATED( tmp_3dwvr ) )  DEALLOCATE( tmp_3dwvr )
913          IF ( ALLOCATED( tmp_3dwvs ) )  DEALLOCATE( tmp_3dwvs )
914          IF ( ALLOCATED( tmp_3dwwl ) )  DEALLOCATE( tmp_3dwwl )
915          IF ( ALLOCATED( tmp_3dwwn ) )  DEALLOCATE( tmp_3dwwn )
916          IF ( ALLOCATED( tmp_3dwwr ) )  DEALLOCATE( tmp_3dwwr )
917          IF ( ALLOCATED( tmp_3dwws ) )  DEALLOCATE( tmp_3dwws )
918          IF ( ALLOCATED( tmp_4d ) )  DEALLOCATE( tmp_4d )
919
920!
[146]921!--       Read next character string
922          READ ( 13 )  field_chr
[1]923
[146]924       ENDDO  ! loop over variables
[1]925
926!
[146]927!--    Read user-defined restart data
[220]928       CALL user_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file, &
929                                    nynfa, nyn_on_file, nysfa, nys_on_file,    &
930                                    offset_xa, offset_ya, overlap_count(i),    &
[216]931                                    tmp_2d, tmp_3d )
[145]932
933!
[146]934!--    Close the restart file
935       CALL close_file( 13 )
936
937       DEALLOCATE( tmp_2d, tmp_3d )
938
939    ENDDO  ! loop over restart files
940
941
942!
943!-- Restore the original filename for the restart file to be written
944    myid_char = myid_char_save
945
946
947!
[1]948!-- End of time measuring for reading binary data
949    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'stop' )
950
951 END SUBROUTINE read_3d_binary
Note: See TracBrowser for help on using the repository browser.