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

Last change on this file since 1318 was 1318, checked in by raasch, 11 years ago

former files/routines cpu_log and cpu_statistics combined to one module,
which also includes the former data module cpulog from the modules-file,
module interfaces removed

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