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

Last change on this file since 1579 was 1552, checked in by maronga, 10 years ago

last commit documented

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