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

Last change on this file since 771 was 771, checked in by heinze, 12 years ago

Output of liquid water potential temperature in case of cloud_physics=.T. enabled

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