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

Last change on this file since 2638 was 2636, checked in by raasch, 7 years ago

bugfix for reading required for parrallel random number generator

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