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

Last change on this file since 2232 was 2232, checked in by suehring, 4 years ago

Adjustments according new topography and surface-modelling concept implemented

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