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

Last change on this file since 1400 was 1400, checked in by knoop, 10 years ago

Parallel random number generator added (preliminary version).

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