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

Last change on this file since 1053 was 1053, checked in by hoffmann, 11 years ago

two-moment cloud physics implemented

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