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

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

code has been put under the GNU General Public License (v3)

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