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

Last change on this file since 1001 was 1001, checked in by raasch, 9 years ago

leapfrog timestep scheme and upstream-spline advection scheme completely removed from the code,
reading of dt_fixed from restart file removed

  • Property svn:keywords set to Id
File size: 40.7 KB
Line 
1 SUBROUTINE read_3d_binary
2
3!------------------------------------------------------------------------------!
4! Current revisions:
5! -----------------
6! all actions concerning leapfrog scheme removed
7!
8! Former revisions:
9! -----------------
10! $Id: read_3d_binary.f90 1001 2012-09-13 14:08:46Z raasch $
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 ( 'iran' ) ! matching random numbers is still unresolved
379                                ! issue
380                   IF ( k == 1 )  READ ( 13 )  iran, iran_part
381
382                CASE ( 'kh' )
383                   IF ( k == 1 )  READ ( 13 )  tmp_3d
384                   kh(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
385                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
386
387                CASE ( 'km' )
388                   IF ( k == 1 )  READ ( 13 )  tmp_3d
389                   km(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
390                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
391
392                CASE ( 'lpt_av' )
393                   IF ( .NOT. ALLOCATED( lpt_av ) )  THEN
394                      ALLOCATE( lpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
395                   ENDIF
396                   IF ( k == 1 )  READ ( 13 )  tmp_3d
397                   lpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
398                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
399
400                CASE ( 'lwp_av' )
401                   IF ( .NOT. ALLOCATED( lwp_av ) )  THEN
402                      ALLOCATE( lwp_av(nysg:nyng,nxlg:nxrg) )
403                   ENDIF
404                   IF ( k == 1 )  READ ( 13 )  tmp_2d
405                   lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
406                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
407
408                CASE ( 'p' )
409                   IF ( k == 1 )  READ ( 13 )  tmp_3d
410                   p(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
411                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
412
413                CASE ( 'p_av' )
414                   IF ( .NOT. ALLOCATED( p_av ) )  THEN
415                      ALLOCATE( p_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
416                   ENDIF
417                   IF ( k == 1 )  READ ( 13 )  tmp_3d
418                   p_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
419                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
420
421                CASE ( 'pc_av' )
422                   IF ( .NOT. ALLOCATED( pc_av ) )  THEN
423                      ALLOCATE( pc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
424                   ENDIF
425                   IF ( k == 1 )  READ ( 13 )  tmp_3d
426                   pc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
427                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
428
429                CASE ( 'pr_av' )
430                   IF ( .NOT. ALLOCATED( pr_av ) )  THEN
431                      ALLOCATE( pr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
432                   ENDIF
433                   IF ( k == 1 )  READ ( 13 )  tmp_3d
434                   pr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
435                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
436
437                CASE ( 'precipitation_amount' )
438                   IF ( k == 1 )  READ ( 13 )  tmp_2d
439                   precipitation_amount(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
440                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
441
442                CASE ( 'precipitation_rate_a' )
443                   IF ( .NOT. ALLOCATED( precipitation_rate_av ) )  THEN
444                      ALLOCATE( precipitation_rate_av(nysg:nyng,nxlg:nxrg) )
445                   ENDIF
446                   IF ( k == 1 )  READ ( 13 )  tmp_2d
447                   precipitation_rate_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
448                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
449
450                CASE ( 'pt' )
451                   IF ( k == 1 )  READ ( 13 )  tmp_3d
452                   pt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
453                                   tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
454
455                CASE ( 'pt_av' )
456                   IF ( .NOT. ALLOCATED( pt_av ) )  THEN
457                      ALLOCATE( pt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
458                   ENDIF
459                   IF ( k == 1 )  READ ( 13 )  tmp_3d
460                   pt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
461                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
462
463                CASE ( 'q' )
464                   IF ( k == 1 )  READ ( 13 )  tmp_3d
465                   q(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
466                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
467
468                CASE ( 'q_av' )
469                   IF ( .NOT. ALLOCATED( q_av ) )  THEN
470                      ALLOCATE( q_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg ))
471                   ENDIF
472                   IF ( k == 1 )  READ ( 13 )  tmp_3d
473                   q_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
474                                     tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
475
476                CASE ( 'ql' )
477                   IF ( k == 1 )  READ ( 13 )  tmp_3d
478                   ql(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
479                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
480
481                CASE ( 'ql_av' )
482                   IF ( .NOT. ALLOCATED( ql_av ) )  THEN
483                      ALLOCATE( ql_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
484                   ENDIF
485                   IF ( k == 1 )  READ ( 13 )  tmp_3d
486                   ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
487                                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
488
489                CASE ( 'ql_c_av' )
490                   IF ( .NOT. ALLOCATED( ql_c_av ) )  THEN
491                      ALLOCATE( ql_c_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
492                   ENDIF
493                   IF ( k == 1 )  READ ( 13 )  tmp_3d
494                   ql_c_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
495                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
496
497                CASE ( 'ql_v_av' )
498                   IF ( .NOT. ALLOCATED( ql_v_av ) )  THEN
499                      ALLOCATE( ql_v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
500                   ENDIF
501                   IF ( k == 1 )  READ ( 13 )  tmp_3d
502                   ql_v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
503                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
504
505                CASE ( 'ql_vp_av' )
506                   IF ( .NOT. ALLOCATED( ql_vp_av ) )  THEN
507                      ALLOCATE( ql_vp_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
508                   ENDIF
509                   IF ( k == 1 )  READ ( 13 )  tmp_3d
510                   ql_vp_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
511                                        tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
512
513                CASE ( 'qs' )
514                   IF ( k == 1 )  READ ( 13 )  tmp_2d
515                   qs(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
516                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
517
518                CASE ( 'qsws' )
519                   IF ( k == 1 )  READ ( 13 )  tmp_2d
520                   qsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
521                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
522
523                CASE ( 'qsws_av' )
524                   IF ( .NOT. ALLOCATED( qsws_av ) )  THEN
525                      ALLOCATE( qsws_av(nysg:nyng,nxlg:nxrg) )
526                   ENDIF 
527                   IF ( k == 1 )  READ ( 13 )  tmp_2d
528                   qsws_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
529                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
530
531                CASE ( 'qswst' )
532                   IF ( k == 1 )  READ ( 13 )  tmp_2d
533                   qswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
534                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
535
536                CASE ( 'qv_av' )
537                   IF ( .NOT. ALLOCATED( qv_av ) )  THEN
538                      ALLOCATE( qv_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
539                   ENDIF
540                   IF ( k == 1 )  READ ( 13 )  tmp_3d
541                   qv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
542                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
543
544                CASE ( 'random_iv' )  ! still unresolved issue
545                   IF ( k == 1 )  READ ( 13 )  random_iv
546                   IF ( k == 1 )  READ ( 13 )  random_iy
547
548                CASE ( 'rho_av' )
549                   IF ( .NOT. ALLOCATED( rho_av ) )  THEN
550                      ALLOCATE( rho_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
551                   ENDIF
552                   IF ( k == 1 )  READ ( 13 )  tmp_3d
553                   rho_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
554                                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
555
556                CASE ( 'rif' )
557                   IF ( k == 1 )  READ ( 13 )  tmp_2d
558                   rif(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
559                                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
560
561                CASE ( 'rif_wall' )
562                   IF ( k == 1 )  THEN
563                      ALLOCATE( tmp_4d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp, &
564                                       nxl_on_file-nbgp:nxr_on_file+nbgp,1:4) )
565                      READ ( 13 )  tmp_4d
566                   ENDIF
567                   rif_wall(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp,:) = &
568                            tmp_4d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp,:)
569
570                CASE ( 's_av' )
571                   IF ( .NOT. ALLOCATED( s_av ) )  THEN
572                      ALLOCATE( s_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg))
573                   ENDIF
574                   IF ( k == 1 )  READ ( 13 )  tmp_3d
575                   s_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
576                                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
577
578                CASE ( 'sa' )
579                   IF ( k == 1 )  READ ( 13 )  tmp_3d
580                   sa(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
581                                  tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
582
583                CASE ( 'sa_av' )
584                   IF ( .NOT. ALLOCATED( sa_av ) )  THEN
585                      ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
586                   ENDIF
587                   IF ( k == 1 )  READ ( 13 )  tmp_3d
588                   sa_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
589                                    tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
590
591                CASE ( 'saswsb' )
592                   IF ( k == 1 )  READ ( 13 )  tmp_2d
593                   saswsb(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
594                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
595
596                CASE ( 'saswst' )
597                   IF ( k == 1 )  READ ( 13 )  tmp_2d
598                   saswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
599                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
600
601                CASE ( 'shf' )
602                   IF ( k == 1 )  READ ( 13 )  tmp_2d
603                   shf(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
604                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
605
606                CASE ( 'shf_av' )
607                   IF ( .NOT. ALLOCATED( shf_av ) )  THEN
608                      ALLOCATE( shf_av(nysg:nyng,nxlg:nxrg) )
609                   ENDIF
610                   IF ( k == 1 )  READ ( 13 )  tmp_2d
611                   shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
612                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
613
614                CASE ( 'spectrum_x' )
615                   IF ( k == 1 )  THEN
616                      IF ( nx_on_file /= nx )  THEN
617                         message_string = 'read_3d_binary: spectrum_x ' // &
618                                     'on restart file ignored because' // &
619                                     '&total numbers of grid points (nx) ' // &
620                                     'do not match'
621                         CALL message( 'read_3d_binary', 'PA0293',&
622                                                                 0, 1, 0, 6, 0 )
623                         READ ( 13 )  rdummy
624                      ELSE
625                         READ ( 13 )  spectrum_x
626                      ENDIF
627                   ENDIF
628
629                CASE ( 'spectrum_y' )
630                   IF ( k == 1 )  THEN
631                      IF ( ny_on_file /= ny )  THEN
632                         message_string = 'read_3d_binary: spectrum_y ' //   &
633                                     'on restart file ignored because' //    &
634                                     '&total numbers of grid points (ny) '// &
635                                     'do not match'
636                         CALL message( 'read_3d_binary', 'PA0294', &
637                                                                 0, 1, 0, 6, 0 )
638                      READ ( 13 )  rdummy
639                      ELSE
640                         READ ( 13 )  spectrum_y
641                      ENDIF
642                   ENDIF
643
644                CASE ( 'ts' )
645                   IF ( k == 1 )  READ ( 13 )  tmp_2d
646                   ts(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
647                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
648
649                CASE ( 'ts_av' )
650                   IF ( .NOT. ALLOCATED( ts_av ) )  THEN
651                      ALLOCATE( ts_av(nysg:nyng,nxlg:nxrg) )
652                   ENDIF
653                   IF ( k == 1 )  READ ( 13 )  tmp_2d
654                   ts_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
655                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
656
657                CASE ( 'tswst' )
658                   IF ( k == 1 )  READ ( 13 )  tmp_2d
659                   tswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
660                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
661
662                CASE ( 'u' )
663                   IF ( k == 1 )  READ ( 13 )  tmp_3d
664                   u(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
665                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
666
667                CASE ( 'u_av' )
668                   IF ( .NOT. ALLOCATED( u_av ) )  THEN
669                      ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
670                   ENDIF
671                   IF ( k == 1 )  READ ( 13 )  tmp_3d
672                   u_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
673                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
674
675                CASE ( 'u_m_l' )
676                   IF ( k == 1 )  THEN
677                      ALLOCATE( tmp_3dwul(nzb:nzt+1, &
678                                          nys_on_file-nbgp:nyn_on_file+nbgp,1:2) )
679                      READ ( 13 )  tmp_3dwul
680                   ENDIF
681                   IF ( outflow_l )  THEN
682                      u_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwul(:,nysf-nbgp:nynf+nbgp,:)
683                   ENDIF
684
685                CASE ( 'u_m_n' )
686                   IF ( k == 1 )  THEN
687                      ALLOCATE( tmp_3dwun(nzb:nzt+1,ny-1:ny, &
688                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
689                      READ ( 13 )  tmp_3dwun
690                   ENDIF
691                   IF ( outflow_n )  THEN
692                      u_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwun(:,:,nxlf-nbgp:nxrf+nbgp)
693                   ENDIF
694
695                CASE ( 'u_m_r' )
696                   IF ( k == 1 )  THEN
697                      ALLOCATE( tmp_3dwur(nzb:nzt+1,&
698                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
699                      READ ( 13 )  tmp_3dwur
700                   ENDIF
701                   IF ( outflow_r )  THEN
702                      u_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwur(:,nysf-nbgp:nynf+nbgp,:)
703                   ENDIF
704
705                CASE ( 'u_m_s' )
706                   IF ( k == 1 )  THEN
707                      ALLOCATE( tmp_3dwus(nzb:nzt+1,0:1, &
708                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
709                      READ ( 13 )  tmp_3dwus
710                   ENDIF
711                   IF ( outflow_s )  THEN
712                      u_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwus(:,:,nxlf-nbgp:nxrf+nbgp)
713                   ENDIF
714
715                CASE ( 'us' )
716                   IF ( k == 1 )  READ ( 13 )  tmp_2d
717                   us(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
718                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
719
720                CASE ( 'usws' )
721                   IF ( k == 1 )  READ ( 13 )  tmp_2d
722                   usws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
723                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
724
725                CASE ( 'uswst' )
726                   IF ( k == 1 )  READ ( 13 )  tmp_2d
727                   uswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
728                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
729
730                CASE ( 'us_av' )
731                   IF ( .NOT. ALLOCATED( us_av ) )  THEN
732                      ALLOCATE( us_av(nysg:nyng,nxlg:nxrg) )
733                   ENDIF
734                   IF ( k == 1 )  READ ( 13 )  tmp_2d
735                   us_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
736                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
737
738                CASE ( 'v' )
739                   IF ( k == 1 )  READ ( 13 )  tmp_3d
740                   v(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
741                              tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
742
743                CASE ( 'v_av' )
744                   IF ( .NOT. ALLOCATED( v_av ) )  THEN
745                      ALLOCATE( v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
746                   ENDIF
747                   IF ( k == 1 )  READ ( 13 )  tmp_3d
748                   v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
749                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
750
751                CASE ( 'v_m_l' )
752                   IF ( k == 1 )  THEN
753                      ALLOCATE( tmp_3dwvl(nzb:nzt+1,&
754                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
755                      READ ( 13 )  tmp_3dwvl
756                   ENDIF
757                   IF ( outflow_l )  THEN
758                      v_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvl(:,nysf-nbgp:nynf+nbgp,:)
759                   ENDIF
760
761                CASE ( 'v_m_n' )
762                   IF ( k == 1 )  THEN
763                      ALLOCATE( tmp_3dwvn(nzb:nzt+1,ny-1:ny, &
764                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
765                      READ ( 13 )  tmp_3dwvn
766                   ENDIF
767                   IF ( outflow_n )  THEN
768                      v_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvn(:,:,nxlf-nbgp:nxrf+nbgp)
769                   ENDIF
770
771                CASE ( 'v_m_r' )
772                   IF ( k == 1 )  THEN
773                      ALLOCATE( tmp_3dwvr(nzb:nzt+1,&
774                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
775                      READ ( 13 )  tmp_3dwvr
776                   ENDIF
777                   IF ( outflow_r )  THEN
778                      v_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwvr(:,nysf-nbgp:nynf+nbgp,:)
779                   ENDIF
780
781                CASE ( 'v_m_s' )
782                   IF ( k == 1 )  THEN
783                      ALLOCATE( tmp_3dwvs(nzb:nzt+1,1:2, &
784                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
785                      READ ( 13 )  tmp_3dwvs
786                   ENDIF
787                   IF ( outflow_s )  THEN
788                      v_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwvs(:,:,nxlf-nbgp:nxrf+nbgp)
789                   ENDIF
790
791                CASE ( 'vpt' )
792                   IF ( k == 1 )  READ ( 13 )  tmp_3d
793                   vpt(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
794                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
795
796                CASE ( 'vpt_av' )
797                   IF ( .NOT. ALLOCATED( vpt_av ) )  THEN
798                      ALLOCATE( vpt_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
799                   ENDIF
800                   IF ( k == 1 )  READ ( 13 )  tmp_3d
801                   vpt_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
802                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
803
804                CASE ( 'vsws' )
805                   IF ( k == 1 )  READ ( 13 )  tmp_2d
806                   vsws(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
807                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
808
809                CASE ( 'vswst' )
810                   IF ( k == 1 )  READ ( 13 )  tmp_2d
811                   vswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
812                        tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
813
814                CASE ( 'w' )
815                   IF ( k == 1 )  READ ( 13 )  tmp_3d
816                   w(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
817                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
818
819                CASE ( 'w_av' )
820                   IF ( .NOT. ALLOCATED( w_av ) )  THEN
821                      ALLOCATE( w_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
822                   ENDIF
823                   IF ( k == 1 )  READ ( 13 )  tmp_3d
824                   w_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
825                               tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
826
827                CASE ( 'w_m_l' )
828                   IF ( k == 1 )  THEN
829                      ALLOCATE( tmp_3dwwl(nzb:nzt+1,&
830                                          nys_on_file-nbgp:nyn_on_file+nbgp,0:1) )
831                      READ ( 13 )  tmp_3dwwl
832                   ENDIF
833                   IF ( outflow_l )  THEN
834                      w_m_l(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwl(:,nysf-nbgp:nynf+nbgp,:)
835                   ENDIF
836
837                CASE ( 'w_m_n' )
838                   IF ( k == 1 )  THEN
839                      ALLOCATE( tmp_3dwwn(nzb:nzt+1,ny-1:ny, &
840                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
841                      READ ( 13 )  tmp_3dwwn
842                   ENDIF
843                   IF ( outflow_n )  THEN
844                      w_m_n(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwwn(:,:,nxlf-nbgp:nxrf+nbgp)
845                   ENDIF
846
847                CASE ( 'w_m_r' )
848                   IF ( k == 1 )  THEN
849                      ALLOCATE( tmp_3dwwr(nzb:nzt+1,&
850                                          nys_on_file-nbgp:nyn_on_file+nbgp,nx-1:nx) )
851                      READ ( 13 )  tmp_3dwwr
852                   ENDIF
853                   IF ( outflow_r )  THEN
854                      w_m_r(:,nysc-nbgp:nync+nbgp,:) = tmp_3dwwr(:,nysf-nbgp:nynf+nbgp,:)
855                   ENDIF
856
857                CASE ( 'w_m_s' )
858                   IF ( k == 1 )  THEN
859                      ALLOCATE( tmp_3dwws(nzb:nzt+1,0:1, &
860                                          nxl_on_file-nbgp:nxr_on_file+nbgp) )
861                      READ ( 13 )  tmp_3dwws
862                   ENDIF
863                   IF ( outflow_s )  THEN
864                      w_m_s(:,:,nxlc-nbgp:nxrc+nbgp) = tmp_3dwws(:,:,nxlf-nbgp:nxrf+nbgp)
865                   ENDIF
866                   DEALLOCATE( tmp_3dwws )
867
868                CASE ( 'z0' )
869                   IF ( k == 1 )  READ ( 13 )  tmp_2d
870                   z0(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
871                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
872
873                CASE ( 'z0_av' )
874                   IF ( .NOT. ALLOCATED( z0_av ) )  THEN
875                      ALLOCATE( z0_av(nysg:nyng,nxlg:nxrg) )
876                   ENDIF
877                   IF ( k == 1 )  READ ( 13 )  tmp_2d
878                   z0_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
879                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
880
881                CASE ( 'z0h' )
882                   IF ( k == 1 )  READ ( 13 )  tmp_2d
883                   z0h(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
884                     tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
885
886                CASE ( 'z0h_av' )
887                   IF ( .NOT. ALLOCATED( z0h_av ) )  THEN
888                      ALLOCATE( z0h_av(nysg:nyng,nxlg:nxrg) )
889                   ENDIF
890                   IF ( k == 1 )  READ ( 13 )  tmp_2d
891                   z0h_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
892                       tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
893
894                CASE DEFAULT
895                   WRITE( message_string, * ) 'unknown field named "', &
896                                              TRIM( field_chr ), '" found in', &
897                                              '&data from prior run on PE ',myid
898                    CALL message( 'read_3d_binary', 'PA0295', 1, 2, 0, 6, 0 ) 
899                   
900             END SELECT
901
902          ENDDO  ! overlap loop
903
904!
905!--       Deallocate arrays needed for specific variables only
906          IF ( ALLOCATED( tmp_3dwul ) )  DEALLOCATE( tmp_3dwul )
907          IF ( ALLOCATED( tmp_3dwun ) )  DEALLOCATE( tmp_3dwun )
908          IF ( ALLOCATED( tmp_3dwur ) )  DEALLOCATE( tmp_3dwur )
909          IF ( ALLOCATED( tmp_3dwus ) )  DEALLOCATE( tmp_3dwus )
910          IF ( ALLOCATED( tmp_3dwvl ) )  DEALLOCATE( tmp_3dwvl )
911          IF ( ALLOCATED( tmp_3dwvn ) )  DEALLOCATE( tmp_3dwvn )
912          IF ( ALLOCATED( tmp_3dwvr ) )  DEALLOCATE( tmp_3dwvr )
913          IF ( ALLOCATED( tmp_3dwvs ) )  DEALLOCATE( tmp_3dwvs )
914          IF ( ALLOCATED( tmp_3dwwl ) )  DEALLOCATE( tmp_3dwwl )
915          IF ( ALLOCATED( tmp_3dwwn ) )  DEALLOCATE( tmp_3dwwn )
916          IF ( ALLOCATED( tmp_3dwwr ) )  DEALLOCATE( tmp_3dwwr )
917          IF ( ALLOCATED( tmp_3dwws ) )  DEALLOCATE( tmp_3dwws )
918          IF ( ALLOCATED( tmp_4d ) )  DEALLOCATE( tmp_4d )
919
920!
921!--       Read next character string
922          READ ( 13 )  field_chr
923
924       ENDDO  ! loop over variables
925
926!
927!--    Read user-defined restart data
928       CALL user_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file, &
929                                    nynfa, nyn_on_file, nysfa, nys_on_file,    &
930                                    offset_xa, offset_ya, overlap_count(i),    &
931                                    tmp_2d, tmp_3d )
932
933!
934!--    Close the restart file
935       CALL close_file( 13 )
936
937       DEALLOCATE( tmp_2d, tmp_3d )
938
939    ENDDO  ! loop over restart files
940
941
942!
943!-- Restore the original filename for the restart file to be written
944    myid_char = myid_char_save
945
946
947!
948!-- End of time measuring for reading binary data
949    CALL cpu_log( log_point_s(14), 'read_3d_binary', 'stop' )
950
951 END SUBROUTINE read_3d_binary
Note: See TracBrowser for help on using the repository browser.