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

Last change on this file since 1318 was 1318, checked in by raasch, 10 years ago

former files/routines cpu_log and cpu_statistics combined to one module,
which also includes the former data module cpulog from the modules-file,
module interfaces removed

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