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

Last change on this file since 1115 was 1115, checked in by hoffmann, 8 years ago

optimization of two-moments cloud physics

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