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

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

last commit documented

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