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

Last change on this file since 1585 was 1585, checked in by maronga, 9 years ago

Added support for RRTMG radiation code

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