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

Last change on this file since 1691 was 1691, checked in by maronga, 8 years ago

various bugfixes and modifications of the atmosphere-land-surface-radiation interaction. Completely re-written routine to calculate surface fluxes (surface_layer_fluxes.f90) that replaces prandtl_fluxes. Minor formatting corrections and renamings

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