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

Last change on this file since 1115 was 1115, checked in by hoffmann, 11 years ago

optimization of two-moments cloud physics

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