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

Last change on this file since 1808 was 1808, checked in by raasch, 5 years ago

preprocessor directives using machine dependent flags (lc, ibm, etc.) mostly removed from the code

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