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

Last change on this file since 776 was 776, checked in by heinze, 10 years ago

Bugfixes: increase of binary_version due to output of lpt_av, palmplot: adjustment for DKRZ (ibmh)

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