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

Last change on this file since 1585 was 1585, checked in by maronga, 6 years ago

Added support for RRTMG radiation code

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