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

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

two-moment cloud physics implemented

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