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

Last change on this file since 2232 was 2232, checked in by suehring, 7 years ago

Adjustments according new topography and surface-modelling concept implemented

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