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

Last change on this file since 354 was 354, checked in by maronga, 12 years ago

xy cross section output of sensible and latent heatflux is now available

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