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

Last change on this file since 1682 was 1682, checked in by knoop, 9 years ago

Code annotations made doxygen readable

  • Property svn:keywords set to Id
File size: 60.1 KB
RevLine 
[1682]1!> @file read_3d_binary.f90
[1036]2!--------------------------------------------------------------------------------!
3! This file is part of PALM.
4!
5! PALM is free software: you can redistribute it and/or modify it under the terms
6! of the GNU General Public License as published by the Free Software Foundation,
7! either version 3 of the License, or (at your option) any later version.
8!
9! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
10! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12!
13! You should have received a copy of the GNU General Public License along with
14! PALM. If not, see <http://www.gnu.org/licenses/>.
15!
[1310]16! Copyright 1997-2014 Leibniz Universitaet Hannover
[1036]17!--------------------------------------------------------------------------------!
18!
[257]19! Current revisions:
[1]20! -----------------
[1682]21! Code annotations made doxygen readable
[1401]22!
[1321]23! Former revisions:
24! -----------------
25! $Id: read_3d_binary.f90 1682 2015-10-07 23:56:08Z knoop $
26!
[1586]27! 1585 2015-04-30 07:05:52Z maronga
28! Adapted for RRTMG
29!
[1552]30! 1551 2015-03-03 14:18:16Z maronga
31! Added support for binary input of land surface and radiation model data. In the
32! course of this work, new temporary arrays tmp_3d_soil1, tmp_3d_soil2 were
33! required.
34!
[1469]35! 1468 2014-09-24 14:06:57Z maronga
36! Adapted for use on up to 6-digit processor cores
37!
[1401]38! 1400 2014-05-09 14:03:54Z knoop
39! reading of arrays for random_generator_parallel added
40!
[1321]41! 1320 2014-03-20 08:40:49Z raasch
[1320]42! ONLY-attribute added to USE-statements,
43! kind-parameters added to all INTEGER and REAL declaration statements,
44! kinds are defined in new module kinds,
45! old module precision_kind is removed,
46! revision history before 2012 removed,
47! comment fields (!:) to be used for variable explanations added to
48! all variable declaration statements
[226]49!
[1319]50! 1318 2014-03-17 13:35:16Z raasch
51! module interfaces removed
52!
[1116]53! 1115 2013-03-26 18:16:16Z hoffmann
54! unused variables removed
55!
[1054]56! 1053 2012-11-13 17:11:03Z hoffmann
57! necessary expansions according to the two new prognostic equations (nr, qr)
58! of the two-moment cloud physics scheme:
59! +prr, prr_av, *, *_av, *s, *sws, *swst
60!
[1037]61! 1036 2012-10-22 13:43:42Z raasch
62! code put under GPL (PALM 3.9)
63!
[1002]64! 1001 2012-09-13 14:08:46Z raasch
65! all actions concerning leapfrog scheme removed
66!
[979]67! 978 2012-08-09 08:28:32Z fricke
68! +z0h, z0h_av
69!
[1]70! Revision 1.1  2004/04/30 12:47:27  raasch
71! Initial revision
72!
73!
74! Description:
75! ------------
[1682]76!> Binary input of variables and arrays from restart file
[1]77!------------------------------------------------------------------------------!
[1682]78 SUBROUTINE read_3d_binary
79 
[1]80
[1320]81    USE arrays_3d,                                                             &
82        ONLY:  e, kh, km, p, pt, q, ql, qc, nr, nrs, nrsws, nrswst, qr, qrs,   &
83               qrsws, qrswst, qs, qsws, qswst, sa, saswsb, saswst, rif,        &
84               rif_wall, shf, ts, tswst, u, u_m_l, u_m_n, u_m_r, u_m_s, us,    &
85               usws, uswst, v, v_m_l, v_m_n, v_m_r, v_m_s, vpt, vsws, vswst,   &
86               w, w_m_l, w_m_n, w_m_r, w_m_s, z0, z0h
87
[1]88    USE averaging
[1320]89
90    USE cloud_parameters,                                                      &
91        ONLY:  prr, precipitation_amount
92
93    USE control_parameters,                                                    &
[1359]94        ONLY:  iran, message_string, outflow_l, outflow_n, outflow_r, outflow_s
[1320]95
96    USE cpulog,                                                                &
97        ONLY:  cpu_log, log_point_s
98
99    USE indices,                                                               &
100        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, nx_on_file, ny, nys, nysg, nyn, &
101               nyng, ny_on_file, nzb, nzt
102
103    USE kinds
104
[1551]105    USE land_surface_model_mod,                                                &
106        ONLY:  c_liq_av, c_soil_av, c_veg, c_veg_av, ghf_eb_av, lai_av,        &
107               qsws_eb_av, qsws_liq_eb_av, qsws_soil_eb_av, qsws_veg_eb_av,    & 
108               land_surface, m_liq_eb, m_liq_eb_av, m_soil, m_soil_av,         &
109               nzb_soil, nzt_soil, shf_eb_av, t_soil, t_soil_av
110
[1320]111    USE particle_attributes,                                                   &
112        ONLY:  iran_part
113
[1]114    USE pegrid
115
[1551]116    USE radiation_model_mod,                                                   &
[1585]117        ONLY: rad_net, rad_net_av, rad_lw_in, rad_lw_in_av, rad_lw_out,        &
118              rad_lw_out_av, rad_sw_in, rad_sw_in_av, rad_sw_out, rad_sw_out_av
[1551]119
[1320]120    USE random_function_mod,                                                   &
121        ONLY:  random_iv, random_iy
122
[1400]123    USE random_generator_parallel,                                             &
124        ONLY:  id_random_array, seq_random_array
125
[1320]126    USE statistics,                                                            &
127        ONLY:  spectrum_x, spectrum_y
128
129
[1]130    IMPLICIT NONE
131
[1468]132    CHARACTER (LEN=7)  ::  myid_char_save
[1320]133    CHARACTER (LEN=10) ::  binary_version
134    CHARACTER (LEN=10) ::  version_on_file
[1]135    CHARACTER (LEN=20) ::  field_chr
136
[1682]137    INTEGER(iwp) ::  files_to_be_opened  !<
138    INTEGER(iwp) ::  i                   !<
139    INTEGER(iwp) ::  j                   !<
140    INTEGER(iwp) ::  k                   !<
141    INTEGER(iwp) ::  myid_on_file        !<
142    INTEGER(iwp) ::  numprocs_on_file    !<
143    INTEGER(iwp) ::  nxlc                !<
144    INTEGER(iwp) ::  nxlf                !<
145    INTEGER(iwp) ::  nxlpr               !<
146    INTEGER(iwp) ::  nxl_on_file         !<
147    INTEGER(iwp) ::  nxrc                !<
148    INTEGER(iwp) ::  nxrf                !<
149    INTEGER(iwp) ::  nxrpr               !<
150    INTEGER(iwp) ::  nxr_on_file         !<
151    INTEGER(iwp) ::  nync                !<
152    INTEGER(iwp) ::  nynf                !<
153    INTEGER(iwp) ::  nynpr               !<
154    INTEGER(iwp) ::  nyn_on_file         !<
155    INTEGER(iwp) ::  nysc                !<
156    INTEGER(iwp) ::  nysf                !<
157    INTEGER(iwp) ::  nyspr               !<
158    INTEGER(iwp) ::  nys_on_file         !<
159    INTEGER(iwp) ::  nzb_on_file         !<
160    INTEGER(iwp) ::  nzt_on_file         !<
161    INTEGER(iwp) ::  offset_x            !<
162    INTEGER(iwp) ::  offset_y            !<
163    INTEGER(iwp) ::  shift_x             !<
164    INTEGER(iwp) ::  shift_y             !<
[1]165
[1682]166    INTEGER(iwp), DIMENSION(numprocs_previous_run) ::  file_list       !<
167    INTEGER(iwp), DIMENSION(numprocs_previous_run) ::  overlap_count   !<
[146]168
[1682]169    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxlfa      !<
170    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxrfa      !<
171    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nynfa      !<
172    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nysfa      !<
173    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_xa  !<
174    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_ya  !<
[216]175
[1320]176    REAL(wp) ::  rdummy
[146]177
[1682]178    REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  tmp_2d      !< temporary array for storing 2D data
179    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d      !< temporary array for storing 3D data
180    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d_soil1!< temporary array for storing 3D soil model data
181    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d_soil2!< temporary array for storing 3D soil model data
182    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwul   !<
183    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwun   !<
184    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwur   !<
185    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwus   !<
186    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvl   !<
187    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvn   !<
188    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvr   !<
189    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvs   !<
190    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwl   !<
191    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwn   !<
192    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwr   !<
193    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwws   !<
[146]194
[1682]195    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  tmp_4d     !<
[1320]196
197
[1]198!
[146]199!-- Read data from previous model run.
[1]200    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'start' )
201
202!
[146]203!-- Check which of the restart files contain data needed for the subdomain
204!-- of this PE
205    files_to_be_opened = 0
[143]206
[146]207    DO  i = 1, numprocs_previous_run
[216]208!
209!--    Store array bounds of the previous run ("pr") in temporary scalars
[147]210       nxlpr = hor_index_bounds_previous_run(1,i-1)
211       nxrpr = hor_index_bounds_previous_run(2,i-1)
212       nyspr = hor_index_bounds_previous_run(3,i-1)
213       nynpr = hor_index_bounds_previous_run(4,i-1)
214
[143]215!
[147]216!--    Determine the offsets. They may be non-zero in case that the total domain
217!--    on file is smaller than the current total domain.
218       offset_x = ( nxl / ( nx_on_file + 1 ) ) * ( nx_on_file + 1 )
219       offset_y = ( nys / ( ny_on_file + 1 ) ) * ( ny_on_file + 1 )
220
221!
[216]222!--    Start with this offset and then check, if the subdomain on file
223!--    matches another time(s) in the current subdomain by shifting it
224!--    for nx_on_file+1, ny_on_file+1 respectively
[667]225   
[216]226       shift_y = 0
[667]227       j       = 0
228       DO WHILE (  nyspr+shift_y <= nyn-offset_y )
229         
230          IF ( nynpr+shift_y >= nys-offset_y ) THEN
[146]231
[667]232             shift_x = 0
233             DO WHILE ( nxlpr+shift_x <= nxr-offset_x )
234               
235                IF ( nxrpr+shift_x >= nxl-offset_x ) THEN
236                   j = j +1
237                   IF ( j > 1000 )  THEN
[147]238!
[667]239!--                   Array bound exceeded
240                      message_string = 'data from subdomain of previous' // &
241                                       ' run mapped more than 1000 times'
242                      CALL message( 'read_3d_binary', 'PA0284', 2, 2, -1,   &
243                                       6, 1 )
244                   ENDIF
[147]245
[667]246                   IF ( j == 1 )  THEN
247                      files_to_be_opened = files_to_be_opened + 1
248                      file_list(files_to_be_opened) = i-1
249                   ENDIF
250                     
251                   offset_xa(files_to_be_opened,j) = offset_x + shift_x
252                   offset_ya(files_to_be_opened,j) = offset_y + shift_y
[147]253!
[667]254!--                Index bounds of overlapping data
255                   nxlfa(files_to_be_opened,j) = MAX( nxl-offset_x-shift_x, nxlpr )
256                   nxrfa(files_to_be_opened,j) = MIN( nxr-offset_x-shift_x, nxrpr )
257                   nysfa(files_to_be_opened,j) = MAX( nys-offset_y-shift_y, nyspr )
258                   nynfa(files_to_be_opened,j) = MIN( nyn-offset_y-shift_y, nynpr )
[147]259
[667]260                ENDIF
[147]261
[667]262                shift_x = shift_x + ( nx_on_file + 1 )
263             ENDDO
264       
265          ENDIF
266             
267          shift_y = shift_y + ( ny_on_file + 1 )             
[216]268       ENDDO
[667]269         
[216]270       IF ( j > 0 )  overlap_count(files_to_be_opened) = j
[147]271
272!
[216]273!--    Test output, to be removed later
274       IF ( j > 0 )  THEN
275          WRITE (9,*) '*** reading from file: ', i, j, ' times'
[667]276          WRITE (9,*) '    nxl = ', nxl, ' nxr = ', nxr, ' nys = ', & 
277                                    nys, ' nyn = ', nyn
[216]278          WRITE (9,*) ' '
279          DO  k = 1, j
280             WRITE (9,*) 'k = ', k
[667]281             WRITE (9,'(6(A,I4))') 'nxlfa = ', nxlfa(files_to_be_opened,k),&
282                     ' nxrfa = ', nxrfa(files_to_be_opened,k), &
283                     ' offset_xa = ', offset_xa(files_to_be_opened,k), &
284                     ' nysfa = ', nysfa(files_to_be_opened,k), &
285                     ' nynfa = ', nynfa(files_to_be_opened,k), &
286                     ' offset_ya = ', offset_ya(files_to_be_opened,k)
[216]287          ENDDO
[147]288          CALL local_flush( 9 )
289       ENDIF
290
[667]291         
[146]292    ENDDO
[667]293   
[147]294!
295!-- Save the id-string of the current process, since myid_char may now be used
296!-- to open files created by PEs with other id.
[667]297          myid_char_save = myid_char
[146]298
[147]299!
300!-- Test output (remove later)
[667]301         
[146]302    DO i = 1, numprocs_previous_run
303       WRITE (9,*) 'i=',i-1, ' ibs= ',hor_index_bounds_previous_run(1:4,i-1)
304    ENDDO
305    CALL local_flush( 9 )
306
307    IF ( files_to_be_opened /= 1  .OR.  numprocs /= numprocs_previous_run ) &
308    THEN
[274]309       WRITE( message_string, * ) 'number of PEs or virtual PE-grid changed ', &
310                        'in restart run&  PE', myid, ' will read from files ', &
311                         file_list(1:files_to_be_opened)
[257]312       CALL message( 'read_3d_binary', 'PA0285', 0, 0, 0, 6, 0 )
[1]313    ENDIF
314
315!
[146]316!-- Read data from all restart files determined above
317    DO  i = 1, files_to_be_opened
[1]318
[146]319       j = file_list(i)
320!
321!--    Set the filename (underscore followed by four digit processor id)
[1468]322       WRITE (myid_char,'(''_'',I6.6)')  j
[146]323       WRITE (9,*) 'myid=',myid,' opening file "',myid_char,'"'
324       CALL local_flush( 9 )
[1]325
[146]326!
[1468]327!--    Open the restart file. If this file has been created by PE0 (_000000),
[146]328!--    the global variables at the beginning of the file have to be skipped
329!--    first.
330       CALL check_open( 13 )
[147]331       WRITE (9,*) 'before skipping'
332       CALL local_flush( 9 )
[146]333       IF ( j == 0 )  CALL skip_var_list
[147]334       WRITE (9,*) 'skipping done'
335       CALL local_flush( 9 )
[1]336
[146]337!
338!--    First compare the version numbers
339       READ ( 13 )  version_on_file
[1585]340       binary_version = '4.1'
[146]341       IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
[274]342          WRITE( message_string, * ) 'version mismatch concerning data ',      &
343                      'from prior run',                                        &
344                      '&version on file    = "', TRIM( version_on_file ), '"', &
345                      '&version in program = "', TRIM( binary_version ), '"'
[257]346          CALL message( 'read_3d_binary', 'PA0286', 1, 2, 0, 6, 0 )
[146]347       ENDIF
348
349!
350!--    Read number of processors, processor-id, and array ranges.
351!--    Compare the array ranges with those stored in the index bound array.
352       READ ( 13 )  numprocs_on_file, myid_on_file, nxl_on_file, nxr_on_file, &
353                    nys_on_file, nyn_on_file, nzb_on_file, nzt_on_file
354
355       IF ( nxl_on_file /= hor_index_bounds_previous_run(1,j) )  THEN
[274]356          WRITE( message_string, * ) 'problem with index bound nxl on ',  &
357                            'restart file "', myid_char, '"',             &
358                            '&nxl = ', nxl_on_file, ' but it should be',  &
359                            '&= ', hor_index_bounds_previous_run(1,j),    &
360                            '&from the index bound information array'
[277]361          CALL message( 'read_3d_binary', 'PA0287', 2, 2, -1, 6, 1 )
[146]362       ENDIF
[1]363
[146]364       IF ( nxr_on_file /= hor_index_bounds_previous_run(2,j) )  THEN
[274]365           WRITE( message_string, * ) 'problem with index bound nxr on ',   &
366                               'restart file "', myid_char, '"'  ,          &
367                               '&nxr = ', nxr_on_file, ' but it should be', &
368                               '&= ', hor_index_bounds_previous_run(2,j),   &
369                               '&from the index bound information array' 
[277]370          CALL message( 'read_3d_binary', 'PA0288', 2, 2, -1, 6, 1 )
[257]371
[146]372       ENDIF
[1]373
[146]374       IF ( nys_on_file /= hor_index_bounds_previous_run(3,j) )  THEN
[274]375          WRITE( message_string, * ) 'problem with index bound nys on ',      &
376                                 'restart file "', myid_char, '"',            &
377                                 '&nys = ', nys_on_file, ' but it should be', &
378                                 '&= ', hor_index_bounds_previous_run(3,j),   &
[257]379                                     '&from the index bound information array'
[277]380          CALL message( 'read_3d_binary', 'PA0289', 2, 2, -1, 6, 1 ) 
[146]381       ENDIF
[1]382
[146]383       IF ( nyn_on_file /= hor_index_bounds_previous_run(4,j) )  THEN
[274]384          WRITE( message_string, * ) 'problem with index bound nyn on ',    &
385                               'restart file "', myid_char, '"',            &
386                               '&nyn = ', nyn_on_file, ' but it should be', &
387                               '&= ', hor_index_bounds_previous_run(4,j),   &
388                               '&from the index bound information array'
[277]389          CALL message( 'read_3d_binary', 'PA0290', 2, 2, -1, 6, 1 ) 
[146]390       ENDIF
[1]391
[146]392       IF ( nzb_on_file /= nzb )  THEN
[257]393          WRITE( message_string, * ) 'mismatch between actual data and data ', &
394                                     '&from prior run on PE ', myid,           &
395                                     '&nzb on file = ', nzb_on_file,           &
396                                     '&nzb         = ', nzb
397          CALL message( 'read_3d_binary', 'PA0291', 1, 2, 0, 6, 0 ) 
[146]398       ENDIF
[1]399
[146]400       IF ( nzt_on_file /= nzt )  THEN
[257]401          WRITE( message_string, * ) 'mismatch between actual data and data ', &
402                                     '&from prior run on PE ', myid,           &
403                                     '&nzt on file = ', nzt_on_file,           &
404                                     '&nzt         = ', nzt
405          CALL message( 'read_3d_binary', 'PA0292', 1, 2, 0, 6, 0 ) 
[146]406       ENDIF
[1]407
408!
[146]409!--    Allocate temporary arrays sized as the arrays on the restart file
[1551]410       ALLOCATE( tmp_2d(nys_on_file-nbgp:nyn_on_file+nbgp,                     &
411                        nxl_on_file-nbgp:nxr_on_file+nbgp),                    &
412                 tmp_3d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,           &
[667]413                        nxl_on_file-nbgp:nxr_on_file+nbgp) )
[1]414
415!
[1551]416!--    If the land surface model is used, allocate array for storing soil model
417!--    data
418       IF ( land_surface )  THEN
419          ALLOCATE( tmp_3d_soil1(nzb_soil:nzt_soil+1,                          &
420                                nys_on_file-nbgp:nyn_on_file+nbgp,             &
421                                nxl_on_file-nbgp:nxr_on_file+nbgp) )
422          ALLOCATE( tmp_3d_soil2(nzb_soil:nzt_soil,                            &
423                                nys_on_file-nbgp:nyn_on_file+nbgp,             &
424                                nxl_on_file-nbgp:nxr_on_file+nbgp) )
425       ENDIF
426!
[146]427!--    Read arrays
428!--    ATTENTION: If the following read commands have been altered, the
429!--    ---------- version number of the variable binary_version must be altered,
430!--               too. Furthermore, the output list of arrays in write_3d_binary
431!--               must also be altered accordingly.
432       READ ( 13 )  field_chr
433       DO  WHILE ( TRIM( field_chr ) /= '*** end ***' )
[1]434
[216]435!
436!--       Map data on file as often as needed (data are read only for k=1)
437          DO  k = 1, overlap_count(i)
[1]438
[216]439!
440!--          Get the index range of the subdomain on file which overlap with the
441!--          current subdomain
442             nxlf = nxlfa(i,k)
443             nxlc = nxlfa(i,k) + offset_xa(i,k)
444             nxrf = nxrfa(i,k)
445             nxrc = nxrfa(i,k) + offset_xa(i,k)
446             nysf = nysfa(i,k)
447             nysc = nysfa(i,k) + offset_ya(i,k)
448             nynf = nynfa(i,k)
449             nync = nynfa(i,k) + offset_ya(i,k)
450
451
452             WRITE (9,*) 'var = ', field_chr
453             CALL local_flush( 9 )
454
455             SELECT CASE ( TRIM( field_chr ) )
456
[1551]457                CASE ( 'c_liq_av' )
458                   IF ( .NOT. ALLOCATED( c_liq_av ) )  THEN
459                      ALLOCATE( c_liq_av(nysg:nyng,nxlg:nxrg) )
460                   ENDIF
461                   IF ( k == 1 )  READ ( 13 )  tmp_2d
462                   c_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
463                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
464
465                CASE ( 'c_soil_av' )
466                   IF ( .NOT. ALLOCATED( c_soil_av ) )  THEN
467                      ALLOCATE( c_soil_av(nysg:nyng,nxlg:nxrg) )
468                   ENDIF
469                   IF ( k == 1 )  READ ( 13 )  tmp_2d
470                   c_soil_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
471                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
472
473                CASE ( 'c_veg_av' )
474                   IF ( .NOT. ALLOCATED( c_veg_av ) )  THEN
475                      ALLOCATE( c_veg_av(nysg:nyng,nxlg:nxrg) )
476                   ENDIF
477                   IF ( k == 1 )  READ ( 13 )  tmp_2d
478                   c_veg_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
479                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
480
[216]481                CASE ( 'e' )
482                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]483                   e(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
484                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1]485
[216]486                CASE ( 'e_av' )
487                   IF ( .NOT. ALLOCATED( e_av ) )  THEN
[667]488                      ALLOCATE( e_av(nzb:nzt+1,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) )
[216]489                   ENDIF
490                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]491                   e_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
492                            tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]493
[1551]494                CASE ( 'ghf_eb_av' )
495                   IF ( .NOT. ALLOCATED( ghf_eb_av ) )  THEN
496                      ALLOCATE( ghf_eb_av(nysg:nyng,nxlg:nxrg) )
497                   ENDIF
498                   IF ( k == 1 )  READ ( 13 )  tmp_2d
499                   ghf_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
500                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
501
[216]502                CASE ( 'iran' ) ! matching random numbers is still unresolved
503                                ! issue
504                   IF ( k == 1 )  READ ( 13 )  iran, iran_part
[146]505
[1551]506                CASE ( 'lai_av' )
507                   IF ( .NOT. ALLOCATED( lai_av ) )  THEN
508                      ALLOCATE( lai_av(nysg:nyng,nxlg:nxrg) )
509                   ENDIF
510                   IF ( k == 1 )  READ ( 13 )  tmp_2d
511                   lai_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
512                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
513
[216]514                CASE ( 'kh' )
515                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]516                   kh(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
517                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]518
[216]519                CASE ( 'km' )
520                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]521                   km(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
522                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]523
[771]524                CASE ( 'lpt_av' )
525                   IF ( .NOT. ALLOCATED( lpt_av ) )  THEN
526                      ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
527                   ENDIF
528                   IF ( k == 1 )  READ ( 13 )  tmp_3d
529                   lpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
530                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
531
[216]532                CASE ( 'lwp_av' )
533                   IF ( .NOT. ALLOCATED( lwp_av ) )  THEN
[667]534                      ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
[216]535                   ENDIF
536                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]537                   lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
538                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]539
[1551]540                CASE ( 'm_liq_eb' )
541                   IF ( k == 1 )  READ ( 13 )  tmp_2d
542                   m_liq_eb(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =        &
543                                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
544                CASE ( 'm_liq_eb_av' )
545                   IF ( .NOT. ALLOCATED( m_liq_eb_av ) )  THEN
546                      ALLOCATE( m_liq_eb_av(nysg:nyng,nxlg:nxrg) )
547                   ENDIF
548                   IF ( k == 1 )  READ ( 13 )  tmp_2d
549                   m_liq_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
550                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
551
552                CASE ( 'm_soil' )
553                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
554                   m_soil(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
555                          tmp_3d_soil2(nzb_soil:nzt_soil,nysf-nbgp:nynf        &
556                          +nbgp,nxlf-nbgp:nxrf+nbgp)
557
558                CASE ( 'm_soil_av' )
559                   IF ( .NOT. ALLOCATED( m_soil_av ) )  THEN
560                      ALLOCATE( m_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
561                   ENDIF
562                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
563                   m_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
564                                    tmp_3d_soil2(nzb_soil:nzt_soil,nysf        &
565                                    -nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
566
[1115]567                CASE ( 'nr' )
568                   IF ( k == 1 )  READ ( 13 )  tmp_3d
569                   nr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
570                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
571
572                CASE ( 'nr_av' )
573                   IF ( .NOT. ALLOCATED( nr_av ) )  THEN
574                      ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
575                   ENDIF
576                   IF ( k == 1 )  READ ( 13 )  tmp_3d
577                   nr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
578                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
579
580                CASE ( 'nrs' )
581                   IF ( k == 1 )  READ ( 13 )  tmp_2d
582                   nrs(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
583                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
584
585                CASE ( 'nrsws' )
586                   IF ( k == 1 )  READ ( 13 )  tmp_2d
587                   nrsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
588                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
589
590                CASE ( 'nrswst' )
591                   IF ( k == 1 )  READ ( 13 )  tmp_2d
592                   nrswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
593                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
594
[216]595                CASE ( 'p' )
596                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]597                   p(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
598                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]599
[216]600                CASE ( 'p_av' )
601                   IF ( .NOT. ALLOCATED( p_av ) )  THEN
[667]602                      ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]603                   ENDIF
604                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]605                   p_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
606                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]607
[216]608                CASE ( 'pc_av' )
609                   IF ( .NOT. ALLOCATED( pc_av ) )  THEN
[667]610                      ALLOCATE( pc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]611                   ENDIF
612                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]613                   pc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
614                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]615
[216]616                CASE ( 'pr_av' )
617                   IF ( .NOT. ALLOCATED( pr_av ) )  THEN
[667]618                      ALLOCATE( pr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]619                   ENDIF
620                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]621                   pr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
622                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]623
[1053]624                CASE ( 'prr' )
625                   IF ( .NOT. ALLOCATED( prr ) )  THEN
626                      ALLOCATE( prr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
627                   ENDIF
628                   IF ( k == 1 )  READ ( 13 )  tmp_3d
629                   prr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
630                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
631
632                CASE ( 'prr_av' )
633                   IF ( .NOT. ALLOCATED( prr_av ) )  THEN
634                      ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
635                   ENDIF
636                   IF ( k == 1 )  READ ( 13 )  tmp_3d
637                   prr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
638                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
639
[216]640                CASE ( 'precipitation_amount' )
641                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]642                   precipitation_amount(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
643                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]644
[216]645                CASE ( 'precipitation_rate_a' )
646                   IF ( .NOT. ALLOCATED( precipitation_rate_av ) )  THEN
[667]647                      ALLOCATE( precipitation_rate_av(nysg:nyng,nxlg:nxrg) )
[216]648                   ENDIF
649                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]650                   precipitation_rate_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
651                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]652
[216]653                CASE ( 'pt' )
654                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]655                   pt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
656                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]657
[216]658                CASE ( 'pt_av' )
659                   IF ( .NOT. ALLOCATED( pt_av ) )  THEN
[667]660                      ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]661                   ENDIF
662                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]663                   pt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
664                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]665
[216]666                CASE ( 'q' )
667                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]668                   q(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
669                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]670
[216]671                CASE ( 'q_av' )
672                   IF ( .NOT. ALLOCATED( q_av ) )  THEN
[667]673                      ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
[216]674                   ENDIF
675                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]676                   q_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
677                                     tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]678
[1115]679                CASE ( 'qc' )
680                   IF ( k == 1 )  READ ( 13 )  tmp_3d
681                   qc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
682                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
683
684                CASE ( 'qc_av' )
685                   IF ( .NOT. ALLOCATED( qc_av ) )  THEN
686                      ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
687                   ENDIF
688                   IF ( k == 1 )  READ ( 13 )  tmp_3d
689                   qc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
690                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
691
[216]692                CASE ( 'ql' )
693                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]694                   ql(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
695                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]696
[216]697                CASE ( 'ql_av' )
698                   IF ( .NOT. ALLOCATED( ql_av ) )  THEN
[667]699                      ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]700                   ENDIF
701                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]702                   ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
703                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]704
[1053]705                CASE ( 'qr' )
706                   IF ( k == 1 )  READ ( 13 )  tmp_3d
707                   qr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
708                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
709
710                CASE ( 'qr_av' )
711                   IF ( .NOT. ALLOCATED( qr_av ) )  THEN
712                      ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
713                   ENDIF
714                   IF ( k == 1 )  READ ( 13 )  tmp_3d
715                   qr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
716                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
717
718                CASE ( 'qrs' )
719                   IF ( k == 1 )  READ ( 13 )  tmp_2d
720                   qrs(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
721                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
722
723                CASE ( 'qrsws' )
724                   IF ( k == 1 )  READ ( 13 )  tmp_2d
725                   qrsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
726                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
727
728                CASE ( 'qrswst' )
729                   IF ( k == 1 )  READ ( 13 )  tmp_2d
730                   qrswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
731                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
732
[216]733                CASE ( 'ql_c_av' )
734                   IF ( .NOT. ALLOCATED( ql_c_av ) )  THEN
[667]735                      ALLOCATE( ql_c_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]736                   ENDIF
737                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]738                   ql_c_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
739                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]740
[216]741                CASE ( 'ql_v_av' )
742                   IF ( .NOT. ALLOCATED( ql_v_av ) )  THEN
[667]743                      ALLOCATE( ql_v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]744                   ENDIF
745                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]746                   ql_v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
747                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]748
[216]749                CASE ( 'ql_vp_av' )
750                   IF ( .NOT. ALLOCATED( ql_vp_av ) )  THEN
[667]751                      ALLOCATE( ql_vp_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]752                   ENDIF
753                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]754                   ql_vp_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
755                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]756
[216]757                CASE ( 'qs' )
758                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]759                   qs(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
760                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]761
[216]762                CASE ( 'qsws' )
763                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]764                   qsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
765                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]766
[354]767                CASE ( 'qsws_av' )
768                   IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
[667]769                      ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
[354]770                   ENDIF 
771                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]772                   qsws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
773                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[354]774
[216]775                CASE ( 'qswst' )
776                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]777                   qswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
778                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]779
[1551]780                CASE ( 'qsws_eb_av' )
781                   IF ( .NOT. ALLOCATED( qsws_eb_av ) )  THEN
782                      ALLOCATE( qsws_eb_av(nysg:nyng,nxlg:nxrg) )
783                   ENDIF 
784                   IF ( k == 1 )  READ ( 13 )  tmp_2d
785                   qsws_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
786                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
787
788                CASE ( 'qsws_liq_eb_av' )
789                   IF ( .NOT. ALLOCATED( qsws_liq_eb_av ) )  THEN
790                      ALLOCATE( qsws_liq_eb_av(nysg:nyng,nxlg:nxrg) )
791                   ENDIF 
792                   IF ( k == 1 )  READ ( 13 )  tmp_2d
793                   qsws_liq_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
794                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
795                CASE ( 'qsws_soil_eb_av' )
796                   IF ( .NOT. ALLOCATED( qsws_soil_eb_av ) )  THEN
797                      ALLOCATE( qsws_soil_eb_av(nysg:nyng,nxlg:nxrg) )
798                   ENDIF 
799                   IF ( k == 1 )  READ ( 13 )  tmp_2d
800                   qsws_soil_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
801                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
802
803                CASE ( 'qsws_veg_eb_av' )
804                   IF ( .NOT. ALLOCATED( qsws_veg_eb_av ) )  THEN
805                      ALLOCATE( qsws_veg_eb_av(nysg:nyng,nxlg:nxrg) )
806                   ENDIF 
807                   IF ( k == 1 )  READ ( 13 )  tmp_2d
808                   qsws_veg_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
809                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
810
[216]811                CASE ( 'qv_av' )
812                   IF ( .NOT. ALLOCATED( qv_av ) )  THEN
[667]813                      ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]814                   ENDIF
815                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]816                   qv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
817                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]818
[1585]819                CASE ( 'rad_net' )
820                   IF ( .NOT. ALLOCATED( rad_net ) )  THEN
821                      ALLOCATE( rad_net(nysg:nyng,nxlg:nxrg) )
822                   ENDIF 
823                   IF ( k == 1 )  READ ( 13 )  tmp_2d
824                   rad_net(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
825                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
826
[1551]827                CASE ( 'rad_net_av' )
828                   IF ( .NOT. ALLOCATED( rad_net_av ) )  THEN
829                      ALLOCATE( rad_net_av(nysg:nyng,nxlg:nxrg) )
830                   ENDIF 
831                   IF ( k == 1 )  READ ( 13 )  tmp_2d
832                   rad_net_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
833                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1585]834                CASE ( 'rad_lw_in' )
835                   IF ( .NOT. ALLOCATED( rad_lw_in ) )  THEN
836                      ALLOCATE( rad_lw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
837                   ENDIF 
838                   IF ( k == 1 )  READ ( 13 )  tmp_3d
839                   rad_lw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
840                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1551]841
[1585]842                CASE ( 'rad_lw_in_av' )
843                   IF ( .NOT. ALLOCATED( rad_lw_in_av ) )  THEN
844                      ALLOCATE( rad_lw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
845                   ENDIF 
846                   IF ( k == 1 )  READ ( 13 )  tmp_3d
847                   rad_lw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
848                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
849
850                CASE ( 'rad_lw_out' )
851                   IF ( .NOT. ALLOCATED( rad_lw_out ) )  THEN
852                      ALLOCATE( rad_lw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
853                   ENDIF 
854                   IF ( k == 1 )  READ ( 13 )  tmp_3d
855                   rad_lw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
856                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
857
858                CASE ( 'rad_lw_out_av' )
859                   IF ( .NOT. ALLOCATED( rad_lw_out_av ) )  THEN
860                      ALLOCATE( rad_lw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
861                   ENDIF 
862                   IF ( k == 1 )  READ ( 13 )  tmp_3d
863                   rad_lw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
864                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
865
866                CASE ( 'rad_sw_in' )
867                   IF ( .NOT. ALLOCATED( rad_sw_in ) )  THEN
868                      ALLOCATE( rad_sw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
869                   ENDIF 
870                   IF ( k == 1 )  READ ( 13 )  tmp_3d
871                   rad_sw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
872                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
873
[1551]874                CASE ( 'rad_sw_in_av' )
875                   IF ( .NOT. ALLOCATED( rad_sw_in_av ) )  THEN
[1585]876                      ALLOCATE( rad_sw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[1551]877                   ENDIF 
[1585]878                   IF ( k == 1 )  READ ( 13 )  tmp_3d
879                   rad_sw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
880                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1551]881
[1585]882                CASE ( 'rad_sw_out' )
883                   IF ( .NOT. ALLOCATED( rad_sw_out ) )  THEN
884                      ALLOCATE( rad_sw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
885                   ENDIF 
886                   IF ( k == 1 )  READ ( 13 )  tmp_3d
887                   rad_sw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
888                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
889
890                CASE ( 'rad_sw_out_av' )
891                   IF ( .NOT. ALLOCATED( rad_sw_out_av ) )  THEN
892                      ALLOCATE( rad_sw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
893                   ENDIF 
894                   IF ( k == 1 )  READ ( 13 )  tmp_3d
895                   rad_sw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
896                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
897
[216]898                CASE ( 'random_iv' )  ! still unresolved issue
899                   IF ( k == 1 )  READ ( 13 )  random_iv
900                   IF ( k == 1 )  READ ( 13 )  random_iy
[1400]901                   
902                CASE ( 'seq_random_array' )  ! still unresolved issue
903                   IF ( k == 1 )  READ ( 13 )  id_random_array
904                   IF ( k == 1 )  READ ( 13 )  seq_random_array
[146]905
[216]906                CASE ( 'rho_av' )
907                   IF ( .NOT. ALLOCATED( rho_av ) )  THEN
[667]908                      ALLOCATE( rho_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]909                   ENDIF
910                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]911                   rho_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
912                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]913
[216]914                CASE ( 'rif' )
915                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]916                   rif(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
917                                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]918
[216]919                CASE ( 'rif_wall' )
920                   IF ( k == 1 )  THEN
[667]921                      ALLOCATE( tmp_4d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp, &
922                                       nxl_on_file-nbgp:nxr_on_file+nbgp,1:4) )
[216]923                      READ ( 13 )  tmp_4d
924                   ENDIF
[667]925                   rif_wall(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp,:) = &
926                            tmp_4d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp,:)
[146]927
[216]928                CASE ( 's_av' )
929                   IF ( .NOT. ALLOCATED( s_av ) )  THEN
[667]930                      ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
[216]931                   ENDIF
932                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]933                   s_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
934                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]935
[216]936                CASE ( 'sa' )
937                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]938                   sa(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
939                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]940
[216]941                CASE ( 'sa_av' )
942                   IF ( .NOT. ALLOCATED( sa_av ) )  THEN
[667]943                      ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]944                   ENDIF
945                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]946                   sa_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
947                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]948
[216]949                CASE ( 'saswsb' )
950                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]951                   saswsb(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
952                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]953
[216]954                CASE ( 'saswst' )
955                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]956                   saswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
957                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]958
[216]959                CASE ( 'shf' )
960                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]961                   shf(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
962                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]963
[354]964                CASE ( 'shf_av' )
965                   IF ( .NOT. ALLOCATED( shf_av ) )  THEN
[667]966                      ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
[354]967                   ENDIF
968                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]969                   shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
970                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[1001]971
[1551]972                CASE ( 'shf_eb_av' )
973                   IF ( .NOT. ALLOCATED( shf_eb_av ) )  THEN
974                      ALLOCATE( shf_eb_av(nysg:nyng,nxlg:nxrg) )
975                   ENDIF
976                   IF ( k == 1 )  READ ( 13 )  tmp_2d
977                   shf_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
978                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
979
[216]980                CASE ( 'spectrum_x' )
981                   IF ( k == 1 )  THEN
982                      IF ( nx_on_file /= nx )  THEN
[274]983                         message_string = 'read_3d_binary: spectrum_x ' // &
984                                     'on restart file ignored because' // &
985                                     '&total numbers of grid points (nx) ' // &
986                                     'do not match'
987                         CALL message( 'read_3d_binary', 'PA0293',&
988                                                                 0, 1, 0, 6, 0 )
[216]989                         READ ( 13 )  rdummy
990                      ELSE
991                         READ ( 13 )  spectrum_x
992                      ENDIF
993                   ENDIF
[146]994
[216]995                CASE ( 'spectrum_y' )
996                   IF ( k == 1 )  THEN
997                      IF ( ny_on_file /= ny )  THEN
[274]998                         message_string = 'read_3d_binary: spectrum_y ' //   &
999                                     'on restart file ignored because' //    &
1000                                     '&total numbers of grid points (ny) '// &
1001                                     'do not match'
1002                         CALL message( 'read_3d_binary', 'PA0294', &
1003                                                                 0, 1, 0, 6, 0 )
1004                      READ ( 13 )  rdummy
[216]1005                      ELSE
1006                         READ ( 13 )  spectrum_y
1007                      ENDIF
1008                   ENDIF
[146]1009
[216]1010                CASE ( 'ts' )
1011                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1012                   ts(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1013                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1014
[216]1015                CASE ( 'ts_av' )
1016                   IF ( .NOT. ALLOCATED( ts_av ) )  THEN
[667]1017                      ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
[216]1018                   ENDIF
1019                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1020                   ts_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1021                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1022
[216]1023                CASE ( 'tswst' )
1024                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1025                   tswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1026                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1027
[1551]1028                CASE ( 't_soil' )
1029                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil1
1030                   t_soil(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
1031                                   tmp_3d_soil1(:,nysf-nbgp:nynf+nbgp,         &
1032                                                nxlf-nbgp:nxrf+nbgp)
1033
1034                CASE ( 't_soil_av' )
1035                   IF ( .NOT. ALLOCATED( t_soil_av ) )  THEN
1036                      ALLOCATE( t_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
1037                   ENDIF
1038                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
1039                   t_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
1040                                    tmp_3d_soil2(:,nysf-nbgp:nynf+nbgp,        &
1041                                    nxlf-nbgp:nxrf+nbgp)
1042
[216]1043                CASE ( 'u' )
1044                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1045                   u(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1046                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1047
[216]1048                CASE ( 'u_av' )
1049                   IF ( .NOT. ALLOCATED( u_av ) )  THEN
[667]1050                      ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]1051                   ENDIF
1052                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1053                   u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1054                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1055
[216]1056                CASE ( 'u_m_l' )
1057                   IF ( k == 1 )  THEN
1058                      ALLOCATE( tmp_3dwul(nzb:nzt+1, &
[667]1059                                          nys_on_file-nbgp:nyn_on_file+nbgp,1:2) )
[216]1060                      READ ( 13 )  tmp_3dwul
1061                   ENDIF
1062                   IF ( outflow_l )  THEN
[667]1063                      u_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwul(:,nysf-nbgp:nynf+nbgp,:)
[216]1064                   ENDIF
[146]1065
[216]1066                CASE ( 'u_m_n' )
1067                   IF ( k == 1 )  THEN
1068                      ALLOCATE( tmp_3dwun(nzb:nzt+1,ny-1:ny, &
[667]1069                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1070                      READ ( 13 )  tmp_3dwun
1071                   ENDIF
1072                   IF ( outflow_n )  THEN
[667]1073                      u_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwun(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1074                   ENDIF
[146]1075
[216]1076                CASE ( 'u_m_r' )
1077                   IF ( k == 1 )  THEN
1078                      ALLOCATE( tmp_3dwur(nzb:nzt+1,&
[667]1079                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]1080                      READ ( 13 )  tmp_3dwur
1081                   ENDIF
1082                   IF ( outflow_r )  THEN
[667]1083                      u_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwur(:,nysf-nbgp:nynf+nbgp,:)
[216]1084                   ENDIF
[146]1085
[216]1086                CASE ( 'u_m_s' )
1087                   IF ( k == 1 )  THEN
1088                      ALLOCATE( tmp_3dwus(nzb:nzt+1,0:1, &
[667]1089                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1090                      READ ( 13 )  tmp_3dwus
1091                   ENDIF
1092                   IF ( outflow_s )  THEN
[667]1093                      u_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwus(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1094                   ENDIF
[146]1095
[216]1096                CASE ( 'us' )
1097                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1098                   us(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1099                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1100
[216]1101                CASE ( 'usws' )
1102                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1103                   usws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1104                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1105
[216]1106                CASE ( 'uswst' )
1107                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1108                   uswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1109                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1110
[216]1111                CASE ( 'us_av' )
1112                   IF ( .NOT. ALLOCATED( us_av ) )  THEN
[667]1113                      ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
[216]1114                   ENDIF
1115                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1116                   us_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1117                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1118
[216]1119                CASE ( 'v' )
1120                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1121                   v(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1122                              tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1123
[216]1124                CASE ( 'v_av' )
1125                   IF ( .NOT. ALLOCATED( v_av ) )  THEN
[667]1126                      ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]1127                   ENDIF
1128                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1129                   v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1130                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1131
[216]1132                CASE ( 'v_m_l' )
1133                   IF ( k == 1 )  THEN
1134                      ALLOCATE( tmp_3dwvl(nzb:nzt+1,&
[667]1135                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
[216]1136                      READ ( 13 )  tmp_3dwvl
1137                   ENDIF
1138                   IF ( outflow_l )  THEN
[667]1139                      v_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvl(:,nysf-nbgp:nynf+nbgp,:)
[216]1140                   ENDIF
[146]1141
[216]1142                CASE ( 'v_m_n' )
1143                   IF ( k == 1 )  THEN
1144                      ALLOCATE( tmp_3dwvn(nzb:nzt+1,ny-1:ny, &
[667]1145                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1146                      READ ( 13 )  tmp_3dwvn
1147                   ENDIF
1148                   IF ( outflow_n )  THEN
[667]1149                      v_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvn(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1150                   ENDIF
[146]1151
[216]1152                CASE ( 'v_m_r' )
1153                   IF ( k == 1 )  THEN
1154                      ALLOCATE( tmp_3dwvr(nzb:nzt+1,&
[667]1155                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]1156                      READ ( 13 )  tmp_3dwvr
1157                   ENDIF
1158                   IF ( outflow_r )  THEN
[667]1159                      v_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvr(:,nysf-nbgp:nynf+nbgp,:)
[216]1160                   ENDIF
[146]1161
[216]1162                CASE ( 'v_m_s' )
1163                   IF ( k == 1 )  THEN
1164                      ALLOCATE( tmp_3dwvs(nzb:nzt+1,1:2, &
[667]1165                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1166                      READ ( 13 )  tmp_3dwvs
1167                   ENDIF
1168                   IF ( outflow_s )  THEN
[667]1169                      v_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvs(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1170                   ENDIF
[146]1171
[216]1172                CASE ( 'vpt' )
1173                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1174                   vpt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1175                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1176
[216]1177                CASE ( 'vpt_av' )
1178                   IF ( .NOT. ALLOCATED( vpt_av ) )  THEN
[667]1179                      ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]1180                   ENDIF
1181                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1182                   vpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1183                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1184
[216]1185                CASE ( 'vsws' )
1186                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1187                   vsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1188                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1189
[216]1190                CASE ( 'vswst' )
1191                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1192                   vswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1193                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1194
[216]1195                CASE ( 'w' )
1196                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1197                   w(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1198                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1199
[216]1200                CASE ( 'w_av' )
1201                   IF ( .NOT. ALLOCATED( w_av ) )  THEN
[667]1202                      ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
[216]1203                   ENDIF
1204                   IF ( k == 1 )  READ ( 13 )  tmp_3d
[667]1205                   w_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
1206                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1207
[216]1208                CASE ( 'w_m_l' )
1209                   IF ( k == 1 )  THEN
1210                      ALLOCATE( tmp_3dwwl(nzb:nzt+1,&
[667]1211                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
[216]1212                      READ ( 13 )  tmp_3dwwl
1213                   ENDIF
1214                   IF ( outflow_l )  THEN
[667]1215                      w_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwl(:,nysf-nbgp:nynf+nbgp,:)
[216]1216                   ENDIF
[146]1217
[216]1218                CASE ( 'w_m_n' )
1219                   IF ( k == 1 )  THEN
1220                      ALLOCATE( tmp_3dwwn(nzb:nzt+1,ny-1:ny, &
[667]1221                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1222                      READ ( 13 )  tmp_3dwwn
1223                   ENDIF
1224                   IF ( outflow_n )  THEN
[667]1225                      w_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwwn(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1226                   ENDIF
[146]1227
[216]1228                CASE ( 'w_m_r' )
1229                   IF ( k == 1 )  THEN
1230                      ALLOCATE( tmp_3dwwr(nzb:nzt+1,&
[667]1231                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
[216]1232                      READ ( 13 )  tmp_3dwwr
1233                   ENDIF
1234                   IF ( outflow_r )  THEN
[667]1235                      w_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwr(:,nysf-nbgp:nynf+nbgp,:)
[216]1236                   ENDIF
[146]1237
[216]1238                CASE ( 'w_m_s' )
1239                   IF ( k == 1 )  THEN
1240                      ALLOCATE( tmp_3dwws(nzb:nzt+1,0:1, &
[667]1241                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
[216]1242                      READ ( 13 )  tmp_3dwws
1243                   ENDIF
1244                   IF ( outflow_s )  THEN
[667]1245                      w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwws(:,:,nxlf-nbgp:nxrf+nbgp)
[216]1246                   ENDIF
1247                   DEALLOCATE( tmp_3dwws )
[146]1248
[216]1249                CASE ( 'z0' )
1250                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1251                   z0(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1252                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1253
[216]1254                CASE ( 'z0_av' )
1255                   IF ( .NOT. ALLOCATED( z0_av ) )  THEN
[667]1256                      ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
[216]1257                   ENDIF
1258                   IF ( k == 1 )  READ ( 13 )  tmp_2d
[667]1259                   z0_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1260                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
[146]1261
[978]1262                CASE ( 'z0h' )
1263                   IF ( k == 1 )  READ ( 13 )  tmp_2d
1264                   z0h(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1265                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
1266
1267                CASE ( 'z0h_av' )
1268                   IF ( .NOT. ALLOCATED( z0h_av ) )  THEN
1269                      ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
1270                   ENDIF
1271                   IF ( k == 1 )  READ ( 13 )  tmp_2d
1272                   z0h_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
1273                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
1274
[216]1275                CASE DEFAULT
[257]1276                   WRITE( message_string, * ) 'unknown field named "', &
1277                                              TRIM( field_chr ), '" found in', &
1278                                              '&data from prior run on PE ',myid
1279                    CALL message( 'read_3d_binary', 'PA0295', 1, 2, 0, 6, 0 ) 
1280                   
[216]1281             END SELECT
1282
1283          ENDDO  ! overlap loop
1284
[1]1285!
[216]1286!--       Deallocate arrays needed for specific variables only
1287          IF ( ALLOCATED( tmp_3dwul ) )  DEALLOCATE( tmp_3dwul )
1288          IF ( ALLOCATED( tmp_3dwun ) )  DEALLOCATE( tmp_3dwun )
1289          IF ( ALLOCATED( tmp_3dwur ) )  DEALLOCATE( tmp_3dwur )
1290          IF ( ALLOCATED( tmp_3dwus ) )  DEALLOCATE( tmp_3dwus )
1291          IF ( ALLOCATED( tmp_3dwvl ) )  DEALLOCATE( tmp_3dwvl )
1292          IF ( ALLOCATED( tmp_3dwvn ) )  DEALLOCATE( tmp_3dwvn )
1293          IF ( ALLOCATED( tmp_3dwvr ) )  DEALLOCATE( tmp_3dwvr )
1294          IF ( ALLOCATED( tmp_3dwvs ) )  DEALLOCATE( tmp_3dwvs )
1295          IF ( ALLOCATED( tmp_3dwwl ) )  DEALLOCATE( tmp_3dwwl )
1296          IF ( ALLOCATED( tmp_3dwwn ) )  DEALLOCATE( tmp_3dwwn )
1297          IF ( ALLOCATED( tmp_3dwwr ) )  DEALLOCATE( tmp_3dwwr )
1298          IF ( ALLOCATED( tmp_3dwws ) )  DEALLOCATE( tmp_3dwws )
1299          IF ( ALLOCATED( tmp_4d ) )  DEALLOCATE( tmp_4d )
1300
1301!
[146]1302!--       Read next character string
1303          READ ( 13 )  field_chr
[1]1304
[146]1305       ENDDO  ! loop over variables
[1]1306
1307!
[146]1308!--    Read user-defined restart data
[220]1309       CALL user_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file, &
1310                                    nynfa, nyn_on_file, nysfa, nys_on_file,    &
1311                                    offset_xa, offset_ya, overlap_count(i),    &
[216]1312                                    tmp_2d, tmp_3d )
[145]1313
1314!
[146]1315!--    Close the restart file
1316       CALL close_file( 13 )
1317
1318       DEALLOCATE( tmp_2d, tmp_3d )
[1551]1319       IF ( ALLOCATED( tmp_3d_soil1 ) )  DEALLOCATE( tmp_3d_soil1 )
1320       IF ( ALLOCATED( tmp_3d_soil2 ) )  DEALLOCATE( tmp_3d_soil2 )
[146]1321
1322    ENDDO  ! loop over restart files
1323
1324
1325!
1326!-- Restore the original filename for the restart file to be written
1327    myid_char = myid_char_save
1328
1329
1330!
[1]1331!-- End of time measuring for reading binary data
1332    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'stop' )
1333
1334 END SUBROUTINE read_3d_binary
Note: See TracBrowser for help on using the repository browser.