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

Last change on this file since 2000 was 2000, checked in by knoop, 8 years ago

Forced header and separation lines into 80 columns

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