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

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

ONLY-attribute added to USE-statements,
kind-parameters added to all INTEGER and REAL declaration statements,
kinds are defined in new module kinds,
old module precision_kind is removed,
revision history before 2012 removed,
comment fields (!:) to be used for variable explanations added to all variable declaration statements

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