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

Last change on this file since 771 was 771, checked in by heinze, 13 years ago

Output of liquid water potential temperature in case of cloud_physics=.T. enabled

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