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

Last change on this file since 2636 was 2636, checked in by raasch, 7 years ago

bugfix for reading required for parrallel random number generator

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