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

Last change on this file since 1319 was 1319, checked in by raasch, 10 years ago

last commit documented

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