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

Last change on this file since 2000 was 2000, checked in by knoop, 5 years ago

Forced header and separation lines into 80 columns

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