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

Last change on this file since 1319 was 1319, checked in by raasch, 8 years ago

last commit documented

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