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

Last change on this file since 2644 was 2644, checked in by raasch, 6 years ago

further bugfix for r2636 (wrong datatype used for allocation)

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