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

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

further modularization of land surface model (2D/3D output and restart data)

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