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

Last change on this file since 978 was 978, checked in by fricke, 9 years ago

merge fricke branch back into trunk

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