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

Last change on this file since 1849 was 1849, checked in by hoffmann, 5 years ago

lpm_droplet_condensation improved, microphysics partially modularized

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