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

Last change on this file since 2712 was 2706, checked in by suehring, 6 years ago

Bugfixes in radiation and restarts in LSM

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