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

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

further bugfix for r2636 (wrong datatype used for allocation)

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