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

Last change on this file since 1551 was 1551, checked in by maronga, 10 years ago

land surface model released

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