source: palm/trunk/SOURCE/read_var_list.f90 @ 2042

Last change on this file since 2042 was 2042, checked in by suehring, 8 years ago

Bugfix, read and write restart data for wall fluxes; additional checks for wall fluxes

  • Property svn:keywords set to Id
File size: 38.5 KB
Line 
1!> @file read_var_list.f90
2!------------------------------------------------------------------------------!
3! This file is part of PALM.
4!
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.
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!
17! Copyright 1997-2016 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! ------------------
22! Bugfix, read restart data for wall_heatflux, wall_qflux and wall_sflux
23!
24! Former revisions:
25! -----------------
26! $Id: read_var_list.f90 2042 2016-11-02 13:47:31Z suehring $
27!
28! 2000 2016-08-20 18:09:15Z knoop
29! Forced header and separation lines into 80 columns
30!
31! 1992 2016-08-12 15:14:59Z suehring
32! top_scalarflux added
33!
34! 1960 2016-07-12 16:34:24Z suehring
35! Separate humidity and passive scalar
36! Remove unused variables from ONLY list
37!
38! 1957 2016-07-07 10:43:48Z suehring
39! flight module added
40!
41! 1849 2016-04-08 11:33:18Z hoffmann
42! Adapted for modularization of microphysics
43!
44! 1833 2016-04-07 14:23:03Z raasch
45! spectra_mod added
46!
47! 1831 2016-04-07 13:15:51Z hoffmann
48! turbulence renamed collision_turbulence, drizzle renamed
49! cloud_water_sedimentation
50!
51! 1808 2016-04-05 19:44:00Z raasch
52! test output removed
53!
54! 1783 2016-03-06 18:36:17Z raasch
55! netcdf module name changed + related changes
56!
57! 1699 2015-10-29 08:02:35Z maronga
58! Bugfix: update of binary version from 3.9b to 4.0 was missing
59!
60! 1691 2015-10-26 16:17:44Z maronga
61! Added output of most_method, constant_flux_layer, zeta_min, zeta_max. Removed
62! output of prandtl_layer and rif_min, rif_max.
63!
64! 1682 2015-10-07 23:56:08Z knoop
65! Code annotations made doxygen readable
66!
67! 1615 2015-07-08 18:49:19Z suehring
68! Enable turbulent inflow for passive_scalar and humidity
69!
70! 1585 2015-04-30 07:05:52Z maronga
71! Adapted for RRTMG
72!
73! 1560 2015-03-06 10:48:54Z keck
74! +recycling_yshift
75!
76! 1522 2015-01-14 10:53:12Z keck
77! added query for checking if the advection scheme in the restart run is the
78! same as the advection scheme in the corresponding initial run
79!
80! 1502 2014-12-03 18:22:31Z kanani
81! Canopy module and parameters removed (parameters are always read from
82! canopy_par NAMELIST for initial and restart runs)
83!
84! 1496 2014-12-02 17:25:50Z maronga
85! Renamed "radiation" -> "cloud_top_radiation"
86!
87! 1484 2014-10-21 10:53:05Z kanani
88! Changes in the course of the canopy-model modularization:
89!   parameters alpha_lad, beta_lad, lai_beta added,
90!   module plant_canopy_model_mod added,
91!   drag_coefficient, leaf_surface_concentration and scalar_exchange_coefficient
92!   renamed to canopy_drag_coeff, leaf_surface_conc and leaf_scalar_exch_coeff
93!
94! 1322 2014-03-20 16:38:49Z raasch
95! REAL functions provided with KIND-attribute
96!
97! 1320 2014-03-20 08:40:49Z raasch
98! ONLY-attribute added to USE-statements,
99! kind-parameters added to all INTEGER and REAL declaration statements,
100! kinds are defined in new module kinds,
101! old module precision_kind is removed,
102! revision history before 2012 removed,
103! comment fields (!:) to be used for variable explanations added to
104! all variable declaration statements
105!
106! 1308 2014-03-13 14:58:42Z fricke
107! +do2d_xy_time_count, do2d_xz_time_count, do2d_yz_time_count,
108! +do3d_time_count
109!
110! 1253 2013-11-07 10:48:12Z fricke
111! Bugfix: add ref_state to read_parts_of_var_list, otherwise ref_state
112! is zero for initializing_actions = 'cyclic_fill'
113!
114! 1241 2013-10-30 11:36:58Z heinze
115! +nudging
116! +large_scale_forcing
117!
118! 1195 2013-07-01 12:27:57Z heinze
119! Bugfix: allocate ref_state
120!
121! 1179 2013-06-14 05:57:58Z raasch
122! +ref_state
123!
124! 1115 2013-03-26 18:16:16Z hoffmann
125! unused variables removed
126!
127! 1092 2013-02-02 11:24:22Z raasch
128! unused variables removed
129!
130! 1065 2012-11-22 17:42:36Z hoffmann
131! +nc, c_sedimentation, limiter_sedimentation, turbulence
132! -mu_constant, mu_constant_value
133!
134! 1053 2012-11-13 17:11:03Z hoffmann
135! necessary expansions according to the two new prognostic equations (nr, qr)
136! of the two-moment cloud physics scheme:
137! +bc_*_b, +bc_*_t, +bc_*_t_val, *_init, *_surface, *_surface_initial_change,
138! +*_vertical_gradient, +*_vertical_gradient_level, *_vertical_gradient_level_ind,
139! +surface_waterflux_*
140!
141! in addition, steering parameters parameters of the two-moment cloud physics
142! scheme:   
143! +cloud_scheme, +drizzle, +mu_constant, +mu_constant_value, +ventilation_effect
144!
145! 1036 2012-10-22 13:43:42Z raasch
146! code put under GPL (PALM 3.9)
147!
148! 1015 2012-09-27 09:23:24Z raasch
149! -adjust_mixing_length
150!
151! 1003 2012-09-14 14:35:53Z raasch
152! -grid_matching
153!
154! 1001 2012-09-13 14:08:46Z raasch
155! -cut_spline_overshoot, dt_fixed, last_dt_change, long_filter_factor,
156! overshoot_limit_*, ups_limit_*
157!
158! 978 2012-08-09 08:28:32Z fricke
159! -km_damp_max, outflow_damping_width
160! +pt_damping_factor, pt_damping_width
161! +z0h_factor
162!
163! 940 2012-07-09 14:31:00Z raasch
164! +neutral
165!
166! 927 2012-06-06 19:15:04Z raasch
167! +masking_method
168!
169! 849 2012-03-15 10:35:09Z raasch
170! first_call_advec_particles renamed first_call_lpm
171!
172! 824 2012-02-17 09:09:57Z raasch
173! +curvature_solution_effects
174!
175! Revision 1.1  1998/03/18 20:18:48  raasch
176! Initial revision
177!
178!
179! Description:
180! ------------
181!> Reading values of global control variables from restart-file (binary format)
182!------------------------------------------------------------------------------!
183 SUBROUTINE read_var_list
184 
185
186    USE arrays_3d,                                                             &
187        ONLY:  inflow_damping_factor, mean_inflow_profiles, pt_init,           &
188               q_init, ref_state, s_init, sa_init, u_init, ug, v_init, vg
189
190    USE control_parameters
191
192    USE flight_mod,                                                            &
193        ONLY:  flight_read_restart_data
194   
195    USE grid_variables,                                                        &
196        ONLY:  dx, dy
197
198    USE indices,                                                               &
199        ONLY:  nz, nx, nx_on_file, ny, ny_on_file
200
201    USE microphysics_mod,                                                      &
202        ONLY:  c_sedimentation, collision_turbulence,                          &
203               cloud_water_sedimentation, limiter_sedimentation,               &
204               nc_const, ventilation_effect
205
206    USE model_1d,                                                              &
207        ONLY:  damp_level_1d, dt_pr_1d, dt_run_control_1d, end_time_1d
208
209    USE netcdf_interface,                                                      &
210        ONLY:  netcdf_precision, output_for_t0
211
212    USE particle_attributes,                                                   &
213        ONLY:  curvature_solution_effects, time_sort_particles
214
215    USE pegrid
216
217    USE radiation_model_mod,                                                   &
218        ONLY:  time_radiation
219
220    USE spectra_mod,                                                           &
221        ONLY:  average_count_sp
222
223    USE statistics,                                                            &
224        ONLY:  statistic_regions, hom, hom_sum, pr_palm, u_max, u_max_ijk,     &
225               v_max, v_max_ijk, w_max, w_max_ijk
226
227
228    IMPLICIT NONE
229
230    CHARACTER (LEN=10) ::  binary_version, version_on_file
231    CHARACTER (LEN=30) ::  variable_chr
232
233
234    CALL check_open( 13 )
235
236!
237!-- Make version number check first
238    READ ( 13 )  version_on_file
239    binary_version = '4.1'
240    IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
241       WRITE( message_string, * ) 'version mismatch concerning control ', &
242                                  'variables',                            &
243                                  '&version on file    = "',              &
244                                  TRIM( version_on_file ), '"',           &
245                                  '&version on program = "',              &
246                                  TRIM( binary_version ), '"'
247       CALL message( 'read_var_list', 'PA0296', 1, 2, 0, 6, 0 )
248    ENDIF
249
250!
251!-- Read number of PEs and horizontal index bounds of all PEs used in previous
252!-- run
253    READ ( 13 )  variable_chr
254    IF ( TRIM( variable_chr ) /= 'numprocs' )  THEN
255       WRITE( message_string, * ) 'numprocs not found in data from prior ', &
256                                  'run on PE ', myid
257       CALL message( 'read_var_list', 'PA0297', 1, 2, 0, 6, 0 )
258    ENDIF
259    READ ( 13 )  numprocs_previous_run
260
261    IF ( .NOT. ALLOCATED( hor_index_bounds_previous_run ) )  THEN
262       ALLOCATE( hor_index_bounds_previous_run(4,0:numprocs_previous_run-1) )
263    ENDIF
264
265    READ ( 13 )  variable_chr
266    IF ( TRIM( variable_chr ) /= 'hor_index_bounds' )  THEN
267       WRITE( message_string, * ) 'hor_index_bounds not found in data from ', &
268                                  'prior run on PE ', myid
269       CALL message( 'read_var_list', 'PA0298', 1, 2, 0, 6, 0 )
270    ENDIF
271    READ ( 13 )  hor_index_bounds_previous_run
272
273!
274!-- Read vertical number of gridpoints and number of different areas used
275!-- for computing statistics. Allocate arrays depending on these values,
276!-- which are needed for the following read instructions.
277    READ ( 13 )  variable_chr
278    IF ( TRIM( variable_chr ) /= 'nz' )  THEN
279       WRITE( message_string, * ) 'nz not found in data from prior run on PE ',&
280                                  myid
281       CALL message( 'read_var_list', 'PA0299', 1, 2, 0, 6, 0 )
282    ENDIF
283    READ ( 13 )  nz
284
285    READ ( 13 )  variable_chr
286    IF ( TRIM( variable_chr ) /= 'max_pr_user' )  THEN
287       WRITE( message_string, * ) 'max_pr_user not found in data from ', &
288                    'prior run on PE ', myid
289       CALL message( 'read_var_list', 'PA0300', 1, 2, 0, 6, 0 )
290    ENDIF
291    READ ( 13 )  max_pr_user    ! This value is checked against the number of
292                                ! user profiles given for the current run
293                                ! in routine user_parin (it has to match)
294
295    READ ( 13 )  variable_chr
296    IF ( TRIM( variable_chr ) /= 'statistic_regions' )  THEN
297       WRITE( message_string, * ) 'statistic_regions not found in data from ', &
298                    'prior run on PE ', myid
299       CALL message( 'read_var_list', 'PA0301', 1, 2, 0, 6, 0 )
300    ENDIF
301    READ ( 13 )  statistic_regions
302    IF ( .NOT. ALLOCATED( ug ) )  THEN
303       ALLOCATE( ug(0:nz+1), u_init(0:nz+1), vg(0:nz+1),                       &
304                 v_init(0:nz+1), pt_init(0:nz+1), q_init(0:nz+1),              &
305                 ref_state(0:nz+1), s_init(0:nz+1), sa_init(0:nz+1),           &
306                 hom(0:nz+1,2,pr_palm+max_pr_user,0:statistic_regions),        &
307                 hom_sum(0:nz+1,pr_palm+max_pr_user,0:statistic_regions) )
308    ENDIF
309
310!
311!-- Now read all control parameters:
312!-- Caution: When the following read instructions have been changed, the
313!-- -------  version number stored in the variable binary_version has to be
314!--          increased. The same changes must also be done in write_var_list.
315    READ ( 13 )  variable_chr
316    DO  WHILE ( TRIM( variable_chr ) /= '*** end ***' )
317
318       SELECT CASE ( TRIM( variable_chr ) )
319
320          CASE ( 'advected_distance_x' )
321             READ ( 13 )  advected_distance_x
322          CASE ( 'advected_distance_y' )
323             READ ( 13 )  advected_distance_y
324          CASE ( 'alpha_surface' )
325             READ ( 13 )  alpha_surface
326          CASE ( 'average_count_pr' )
327             READ ( 13 )  average_count_pr
328          CASE ( 'average_count_sp' )
329             READ ( 13 )  average_count_sp
330          CASE ( 'average_count_3d' )
331             READ ( 13 )  average_count_3d
332          CASE ( 'bc_e_b' )
333             READ ( 13 )  bc_e_b
334          CASE ( 'bc_lr' )
335             READ ( 13 )  bc_lr
336          CASE ( 'bc_ns' )
337             READ ( 13 )  bc_ns
338          CASE ( 'bc_p_b' )
339             READ ( 13 )  bc_p_b
340          CASE ( 'bc_p_t' )
341             READ ( 13 )  bc_p_t
342          CASE ( 'bc_pt_b' )
343             READ ( 13 )  bc_pt_b
344          CASE ( 'bc_pt_t' )
345             READ ( 13 )  bc_pt_t
346          CASE ( 'bc_pt_t_val' )
347             READ ( 13 )  bc_pt_t_val
348          CASE ( 'bc_q_b' )
349             READ ( 13 )  bc_q_b
350          CASE ( 'bc_q_t' )
351             READ ( 13 )  bc_q_t
352          CASE ( 'bc_q_t_val' )
353             READ ( 13 )  bc_q_t_val
354          CASE ( 'bc_s_b' )
355             READ ( 13 )  bc_s_b
356          CASE ( 'bc_s_t' )
357             READ ( 13 )  bc_s_t
358          CASE ( 'bc_sa_t' )
359             READ ( 13 )  bc_sa_t
360          CASE ( 'bc_uv_b' )
361             READ ( 13 )  bc_uv_b
362          CASE ( 'bc_uv_t' )
363             READ ( 13 )  bc_uv_t
364          CASE ( 'bottom_salinityflux' )
365             READ ( 13 )  bottom_salinityflux
366          CASE ( 'building_height' )
367             READ ( 13 )  building_height
368          CASE ( 'building_length_x' )
369             READ ( 13 )  building_length_x
370          CASE ( 'building_length_y' )
371             READ ( 13 )  building_length_y
372          CASE ( 'building_wall_left' )
373             READ ( 13 )  building_wall_left
374          CASE ( 'building_wall_south' )
375             READ ( 13 )  building_wall_south
376          CASE ( 'call_psolver_at_all_substeps' )
377             READ ( 13 )  call_psolver_at_all_substeps
378          CASE ( 'canyon_height' )
379             READ ( 13 )  canyon_height
380          CASE ( 'canyon_width_x' )
381             READ ( 13 )  canyon_width_x
382          CASE ( 'canyon_width_y' )
383             READ ( 13 )  canyon_width_y
384          CASE ( 'canyon_wall_left' )
385             READ ( 13 )  canyon_wall_left
386          CASE ( 'canyon_wall_south' )
387             READ ( 13 )  canyon_wall_south
388          CASE ( 'c_sedimentation' )
389             READ ( 13 )  c_sedimentation
390          CASE ( 'cfl_factor' )
391             READ ( 13 )  cfl_factor
392          CASE ( 'cloud_droplets' )
393             READ ( 13 )  cloud_droplets
394          CASE ( 'cloud_physics' )
395             READ ( 13 )  cloud_physics
396          CASE ( 'cloud_scheme' )
397             READ ( 13 )  cloud_scheme
398          CASE ( 'collective_wait' )
399             READ ( 13 )  collective_wait
400          CASE ( 'conserve_volume_flow' )
401             READ ( 13 )  conserve_volume_flow
402          CASE ( 'conserve_volume_flow_mode' )
403             READ ( 13 )  conserve_volume_flow_mode
404          CASE ( 'constant_flux_layer' )
405             READ ( 13 )  constant_flux_layer
406          CASE ( 'coupling_start_time' )
407             READ ( 13 )  coupling_start_time
408          CASE ( 'current_timestep_number' )
409             READ ( 13 )  current_timestep_number
410          CASE ( 'curvature_solution_effects' )
411             READ ( 13 )  curvature_solution_effects
412          CASE ( 'cycle_mg' )
413             READ ( 13 )  cycle_mg
414          CASE ( 'damp_level_1d' )
415             READ ( 13 )  damp_level_1d
416          CASE ( 'dissipation_1d' )
417             READ ( 13 )  dissipation_1d
418          CASE ( 'do2d_xy_time_count' )
419             READ ( 13 )  do2d_xy_time_count
420          CASE ( 'do2d_xz_time_count' )
421             READ ( 13 )  do2d_xz_time_count
422          CASE ( 'do2d_yz_time_count' )
423             READ ( 13 )  do2d_yz_time_count
424          CASE ( 'do3d_time_count' )
425             READ ( 13 )  do3d_time_count
426          CASE ( 'dp_external' )
427             READ ( 13 )  dp_external
428          CASE ( 'dp_level_b' )
429             READ ( 13 )  dp_level_b
430          CASE ( 'dp_smooth' )
431             READ ( 13 )  dp_smooth
432          CASE ( 'dpdxy' )
433             READ ( 13 )  dpdxy
434          CASE ( 'cloud_water_sedimentation' )
435             READ ( 13 )  cloud_water_sedimentation
436          CASE ( 'dt_pr_1d' )
437             READ ( 13 )  dt_pr_1d
438          CASE ( 'dt_run_control_1d' )
439             READ ( 13 )  dt_run_control_1d
440          CASE ( 'dt_3d' )
441             READ ( 13 )  dt_3d
442          CASE ( 'dvrp_filecount' )
443             READ ( 13 )  dvrp_filecount
444          CASE ( 'dx' )
445             READ ( 13 )  dx
446          CASE ( 'dy' )
447             READ ( 13 )  dy
448          CASE ( 'dz' )
449             READ ( 13 )  dz
450          CASE ( 'dz_max' )
451             READ ( 13 )  dz_max
452          CASE ( 'dz_stretch_factor' )
453             READ ( 13 )  dz_stretch_factor
454          CASE ( 'dz_stretch_level' )
455             READ ( 13 )  dz_stretch_level
456          CASE ( 'e_min' )
457             READ ( 13 )  e_min
458          CASE ( 'end_time_1d' )
459             READ ( 13 )  end_time_1d
460          CASE ( 'fft_method' )
461             READ ( 13 )  fft_method
462          CASE ( 'first_call_lpm' )
463             READ ( 13 )  first_call_lpm
464          CASE ( 'galilei_transformation' )
465             READ ( 13 )  galilei_transformation
466          CASE ( 'hom' )
467             READ ( 13 )  hom
468          CASE ( 'hom_sum' )
469             READ ( 13 )  hom_sum
470          CASE ( 'humidity' )
471             READ ( 13 )  humidity
472          CASE ( 'inflow_damping_factor' )
473             IF ( .NOT. ALLOCATED( inflow_damping_factor ) )  THEN
474                ALLOCATE( inflow_damping_factor(0:nz+1) )
475             ENDIF
476             READ ( 13 )  inflow_damping_factor
477          CASE ( 'inflow_damping_height' )
478             READ ( 13 )  inflow_damping_height
479          CASE ( 'inflow_damping_width' )
480             READ ( 13 )  inflow_damping_width
481          CASE ( 'inflow_disturbance_begin' )
482             READ ( 13 )  inflow_disturbance_begin
483          CASE ( 'inflow_disturbance_end' )
484             READ ( 13 )  inflow_disturbance_end
485          CASE ( 'km_constant' )
486             READ ( 13 )  km_constant
487          CASE ( 'large_scale_forcing' )
488             READ ( 13 )  large_scale_forcing
489           CASE ( 'large_scale_subsidence' )
490             READ ( 13 )  large_scale_subsidence
491          CASE ( 'limiter_sedimentation' )
492             READ ( 13 )  limiter_sedimentation
493          CASE ( 'loop_optimization' )
494             READ ( 13 )  loop_optimization
495          CASE ( 'masking_method' )
496             READ ( 13 )  masking_method
497          CASE ( 'mean_inflow_profiles' )
498             IF ( .NOT. ALLOCATED( mean_inflow_profiles ) )  THEN
499                ALLOCATE( mean_inflow_profiles(0:nz+1,7) )
500             ENDIF
501             READ ( 13 )  mean_inflow_profiles
502          CASE ( 'mg_cycles' )
503             READ ( 13 )  mg_cycles
504          CASE ( 'mg_switch_to_pe0_level' )
505             READ ( 13 )  mg_switch_to_pe0_level
506          CASE ( 'mixing_length_1d' )
507             READ ( 13 )  mixing_length_1d
508          CASE ( 'momentum_advec' )
509             READ ( 13 )  momentum_advec
510          CASE ( 'most_method' )
511             READ ( 13 )  most_method
512          CASE ( 'nc_const' )
513             READ ( 13 )  nc_const
514          CASE ( 'netcdf_precision' )
515             READ ( 13 )  netcdf_precision
516          CASE ( 'neutral' )
517             READ ( 13 )  neutral
518          CASE ( 'ngsrb' )
519             READ ( 13 )  ngsrb
520          CASE ( 'nsor' )
521             READ ( 13 )  nsor
522          CASE ( 'nsor_ini' )
523             READ ( 13 )  nsor_ini
524          CASE ( 'nudging' )
525             READ ( 13 )  nudging
526          CASE ( 'num_leg' )
527             READ ( 13 )  num_leg
528          CASE ( 'nx' )
529             READ ( 13 )  nx
530             nx_on_file = nx
531          CASE ( 'ny' )
532             READ ( 13 )  ny
533             ny_on_file = ny
534          CASE ( 'ocean' )
535             READ ( 13 )  ocean
536          CASE ( 'old_dt' )
537             READ ( 13 )  old_dt
538          CASE ( 'omega' )
539             READ ( 13 )  omega
540          CASE ( 'omega_sor' )
541             READ ( 13 )  omega_sor
542          CASE ( 'output_for_t0' )
543             READ (13)    output_for_t0
544          CASE ( 'passive_scalar' )
545             READ ( 13 )  passive_scalar
546          CASE ( 'phi' )
547             READ ( 13 )  phi
548          CASE ( 'prandtl_number' )
549             READ ( 13 )  prandtl_number
550          CASE ( 'precipitation' )
551             READ ( 13 ) precipitation
552          CASE ( 'psolver' )
553             READ ( 13 )  psolver
554          CASE ( 'pt_damping_factor' )
555             READ ( 13 )  pt_damping_factor
556          CASE ( 'pt_damping_width' )
557             READ ( 13 )  pt_damping_width
558          CASE ( 'pt_init' )
559             READ ( 13 )  pt_init
560          CASE ( 'pt_reference' )
561             READ ( 13 )  pt_reference
562          CASE ( 'pt_surface' )
563             READ ( 13 )  pt_surface
564          CASE ( 'pt_surface_initial_change' )
565             READ ( 13 )  pt_surface_initial_change
566          CASE ( 'pt_vertical_gradient' )
567             READ ( 13 )  pt_vertical_gradient
568          CASE ( 'pt_vertical_gradient_level' )
569             READ ( 13 )  pt_vertical_gradient_level
570          CASE ( 'pt_vertical_gradient_level_ind' )
571             READ ( 13 )  pt_vertical_gradient_level_ind
572          CASE ( 'q_init' )
573             READ ( 13 )  q_init
574          CASE ( 'q_surface' )
575             READ ( 13 )  q_surface
576          CASE ( 'q_surface_initial_change' )
577             READ ( 13 )  q_surface_initial_change
578          CASE ( 'q_vertical_gradient' )
579             READ ( 13 )  q_vertical_gradient
580          CASE ( 'q_vertical_gradient_level' )
581             READ ( 13 )  q_vertical_gradient_level
582          CASE ( 'q_vertical_gradient_level_ind' )
583             READ ( 13 )  q_vertical_gradient_level_ind
584          CASE ( 'cloud_top_radiation' )
585             READ ( 13 )  cloud_top_radiation
586          CASE ( 'random_generator' )
587             READ ( 13 )  random_generator
588          CASE ( 'random_heatflux' )
589             READ ( 13 )  random_heatflux
590          CASE ( 'rayleigh_damping_factor' )
591             READ ( 13 )  rayleigh_damping_factor
592          CASE ( 'rayleigh_damping_height' )
593             READ ( 13 )  rayleigh_damping_height
594          CASE ( 'recycling_width' )
595             READ ( 13 )  recycling_width
596          CASE ( 'recycling_yshift' )
597             READ ( 13 ) recycling_yshift
598          CASE ( 'reference_state' )
599             READ ( 13 )  reference_state
600          CASE ( 'ref_state' )
601             READ ( 13 )  ref_state
602          CASE ( 'residual_limit' )
603             READ ( 13 )  residual_limit
604          CASE ( 'roughness_length' )
605             READ ( 13 )  roughness_length
606          CASE ( 'runnr' )
607             READ ( 13 )  runnr
608          CASE ( 'run_coupled' )
609             READ ( 13 )  run_coupled
610          CASE ( 's_init' )
611             READ ( 13 )  s_init
612          CASE ( 's_surface' )
613             READ ( 13 )  s_surface
614          CASE ( 's_surface_initial_change' )
615             READ ( 13 )  s_surface_initial_change
616          CASE ( 's_vertical_gradient' )
617             READ ( 13 )  s_vertical_gradient
618          CASE ( 's_vertical_gradient_level' )
619             READ ( 13 )  s_vertical_gradient_level
620          CASE ( 's_vertical_gradient_level_ind' )
621             READ ( 13 )  s_vertical_gradient_level_ind 
622          CASE ( 'sa_init' )
623             READ ( 13 )  sa_init
624          CASE ( 'sa_surface' )
625             READ ( 13 )  sa_surface
626          CASE ( 'sa_vertical_gradient' )
627             READ ( 13 )  sa_vertical_gradient
628          CASE ( 'sa_vertical_gradient_level' )
629             READ ( 13 )  sa_vertical_gradient_level
630          CASE ( 'scalar_advec' )
631             READ ( 13 )  scalar_advec
632          CASE ( 'simulated_time' )
633             READ ( 13 )  simulated_time
634          CASE ( 'surface_heatflux' )
635             READ ( 13 )  surface_heatflux
636          CASE ( 'surface_pressure' )
637             READ ( 13 )  surface_pressure
638          CASE ( 'surface_scalarflux' )
639             READ ( 13 )  surface_scalarflux             
640          CASE ( 'surface_waterflux' )
641             READ ( 13 )  surface_waterflux     
642          CASE ( 'time_coupling' )
643             READ ( 13 )  time_coupling
644          CASE ( 'time_disturb' )
645             READ ( 13 )  time_disturb
646          CASE ( 'time_dopr' )
647             READ ( 13 )  time_dopr
648          CASE ( 'time_domask' )
649             READ ( 13 )  time_domask
650          CASE ( 'time_dopr_av' )
651             READ ( 13 )  time_dopr_av
652          CASE ( 'time_dopr_listing' )
653             READ ( 13 )  time_dopr_listing
654          CASE ( 'time_dopts' )
655             READ ( 13 )  time_dopts
656          CASE ( 'time_dosp' )
657             READ ( 13 )  time_dosp
658          CASE ( 'time_dots' )
659             READ ( 13 )  time_dots
660          CASE ( 'time_do2d_xy' )
661             READ ( 13 )  time_do2d_xy
662          CASE ( 'time_do2d_xz' )
663             READ ( 13 )  time_do2d_xz
664          CASE ( 'time_do2d_yz' )
665             READ ( 13 )  time_do2d_yz
666          CASE ( 'time_do3d' )
667             READ ( 13 )  time_do3d
668          CASE ( 'time_do_av' )
669             READ ( 13 )  time_do_av
670          CASE ( 'time_do_sla' )
671             READ ( 13 )  time_do_sla
672          CASE ( 'time_dvrp' )
673             READ ( 13 )  time_dvrp
674          CASE ( 'time_radiation' )
675             READ ( 13 )  time_radiation
676          CASE ( 'time_restart' )
677             READ ( 13 )  time_restart
678          CASE ( 'time_run_control' )
679             READ ( 13 )  time_run_control
680          CASE ( 'time_since_reference_point' )
681             READ ( 13 )  time_since_reference_point
682          CASE ( 'time_sort_particles' )
683             READ ( 13 )  time_sort_particles
684          CASE ( 'timestep_scheme' )
685             READ ( 13 )  timestep_scheme
686          CASE ( 'topography' )
687             READ ( 13 )  topography
688          CASE ( 'topography_grid_convention' )
689             READ ( 13 )  topography_grid_convention
690          CASE ( 'top_heatflux' )
691             READ ( 13 )  top_heatflux
692          CASE ( 'top_momentumflux_u' )
693             READ ( 13 )  top_momentumflux_u
694          CASE ( 'top_momentumflux_v' )
695             READ ( 13 )  top_momentumflux_v
696          CASE ( 'top_salinityflux' )
697             READ ( 13 )  top_salinityflux
698          CASE ( 'top_scalarflux' )
699             READ ( 13 )  top_scalarflux
700          CASE ( 'tsc' )
701             READ ( 13 )  tsc
702          CASE ( 'collision_turbulence' )
703             READ ( 13 )  collision_turbulence
704          CASE ( 'turbulent_inflow' )
705             READ ( 13 )  turbulent_inflow
706          CASE ( 'u_bulk' )
707             READ ( 13 )  u_bulk
708          CASE ( 'u_init' )
709             READ ( 13 )  u_init
710          CASE ( 'u_max' )
711             READ ( 13 )  u_max
712          CASE ( 'u_max_ijk' )
713             READ ( 13 )  u_max_ijk
714          CASE ( 'ug' )
715             READ ( 13 )  ug
716          CASE ( 'ug_surface' )
717             READ ( 13 )  ug_surface
718          CASE ( 'ug_vertical_gradient' )
719             READ ( 13 )  ug_vertical_gradient
720          CASE ( 'ug_vertical_gradient_level' )
721             READ ( 13 )  ug_vertical_gradient_level
722          CASE ( 'ug_vertical_gradient_level_ind' )
723             READ ( 13 )  ug_vertical_gradient_level_ind
724          CASE ( 'use_surface_fluxes' )
725             READ ( 13 )  use_surface_fluxes
726          CASE ( 'use_top_fluxes' )
727             READ ( 13 )  use_top_fluxes
728          CASE ( 'use_ug_for_galilei_tr' )
729             READ ( 13 )  use_ug_for_galilei_tr
730          CASE ( 'use_upstream_for_tke' )
731             READ ( 13 )  use_upstream_for_tke
732          CASE ( 'v_bulk' )
733             READ ( 13 )  v_bulk
734          CASE ( 'v_init' )
735             READ ( 13 )  v_init
736          CASE ( 'v_max' )
737             READ ( 13 )  v_max
738          CASE ( 'v_max_ijk' )
739             READ ( 13 )  v_max_ijk
740          CASE ( 'ventilation_effect' )
741             READ ( 13 )  ventilation_effect
742          CASE ( 'vg' )
743             READ ( 13 )  vg
744          CASE ( 'vg_surface' )
745             READ ( 13 )  vg_surface
746          CASE ( 'vg_vertical_gradient' )
747             READ ( 13 )  vg_vertical_gradient
748          CASE ( 'vg_vertical_gradient_level' )
749             READ ( 13 )  vg_vertical_gradient_level
750          CASE ( 'vg_vertical_gradient_level_ind' )
751             READ ( 13 )  vg_vertical_gradient_level_ind
752          CASE ( 'virtual_flight' )
753             READ ( 13 ) virtual_flight 
754          CASE ( 'volume_flow_area' )
755             READ ( 13 )  volume_flow_area
756          CASE ( 'volume_flow_initial' )
757             READ ( 13 )  volume_flow_initial
758          CASE ( 'wall_adjustment' )
759             READ ( 13 )  wall_adjustment
760          CASE ( 'subs_vertical_gradient' )
761             READ ( 13 )  subs_vertical_gradient
762          CASE ( 'subs_vertical_gradient_level' )
763             READ ( 13 )  subs_vertical_gradient_level
764          CASE ( 'subs_vertical_gradient_level_i' )
765             READ ( 13 )  subs_vertical_gradient_level_i
766          CASE ( 'wall_heatflux' )
767             READ ( 13 )  wall_heatflux
768          CASE ( 'wall_qflux' )
769             READ ( 13 )  wall_qflux
770          CASE ( 'wall_sflux' )
771             READ ( 13 )  wall_sflux
772          CASE ( 'w_max' )
773             READ ( 13 )  w_max
774          CASE ( 'w_max_ijk' )
775             READ ( 13 )  w_max_ijk
776          CASE ( 'zeta_max' )
777             READ ( 13 )  zeta_max
778          CASE ( 'zeta_min' )
779             READ ( 13 )  zeta_min
780          CASE ( 'z0h_factor' )
781             READ ( 13 )  z0h_factor
782
783          CASE DEFAULT
784             WRITE( message_string, * ) 'unknown variable named "',         &
785                                        TRIM( variable_chr ), '" found in', &
786                                        ' data from prior run on PE ', myid 
787             CALL message( 'read_var_list', 'PA0302', 1, 2, 0, 6, 0 )
788        END SELECT
789!
790!--    Read next string
791       READ ( 13 )  variable_chr
792
793    ENDDO
794   
795    IF ( virtual_flight )  CALL flight_read_restart_data
796
797
798 END SUBROUTINE read_var_list
799
800
801
802!------------------------------------------------------------------------------!
803! Description:
804! ------------
805!> Skipping the global control variables from restart-file (binary format)
806!> except some information needed when reading restart data from a previous
807!> run which used a smaller total domain or/and a different domain decomposition.
808!------------------------------------------------------------------------------!
809 
810 SUBROUTINE read_parts_of_var_list
811
812
813    USE arrays_3d,                                                             &
814        ONLY:  inflow_damping_factor, mean_inflow_profiles, ref_state, ug, vg
815
816    USE control_parameters
817
818    USE indices,                                                               &
819        ONLY:  nz, nx, nx_on_file, ny, ny_on_file
820
821    USE kinds
822
823    USE pegrid
824
825    USE statistics,                                                            &
826        ONLY:  statistic_regions, hom, hom_sum, pr_palm, u_max, u_max_ijk,     &
827               v_max, v_max_ijk, w_max, w_max_ijk
828
829    IMPLICIT NONE
830
831    CHARACTER (LEN=10) ::  version_on_file
832    CHARACTER (LEN=20) ::  momentum_advec_check
833    CHARACTER (LEN=20) ::  scalar_advec_check
834    CHARACTER (LEN=30) ::  variable_chr
835    CHARACTER (LEN=1)  ::  cdum
836
837    INTEGER(iwp) ::  max_pr_user_on_file
838    INTEGER(iwp) ::  nz_on_file
839    INTEGER(iwp) ::  statistic_regions_on_file
840    INTEGER(iwp) ::  tmp_mpru
841    INTEGER(iwp) ::  tmp_sr
842
843    REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE ::  hom_sum_on_file
844    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  hom_on_file
845
846
847    CALL check_open( 13 )
848
849    READ ( 13 )  version_on_file
850
851!
852!-- Read number of PEs and horizontal index bounds of all PEs used in previous
853!-- run
854    READ ( 13 )  variable_chr
855    IF ( TRIM( variable_chr ) /= 'numprocs' )  THEN
856       WRITE( message_string, * ) 'numprocs not found in data from prior ', &
857                                  'run on PE ', myid
858       CALL message( 'read_parts_of_var_list', 'PA0297', 1, 2, 0, 6, 0 )
859    ENDIF
860    READ ( 13 )  numprocs_previous_run
861
862    IF ( .NOT. ALLOCATED( hor_index_bounds_previous_run ) )  THEN
863       ALLOCATE( hor_index_bounds_previous_run(4,0:numprocs_previous_run-1) )
864    ENDIF
865
866    READ ( 13 )  variable_chr
867    IF ( TRIM( variable_chr ) /= 'hor_index_bounds' )  THEN
868       WRITE( message_string, * ) 'hor_index_bounds not found in data from ', &
869                                  'prior run on PE ', myid
870       CALL message( 'read_parts_of_var_list', 'PA0298', 1, 2, 0, 6, 0 )
871    ENDIF
872    READ ( 13 )  hor_index_bounds_previous_run
873
874!
875!-- Read vertical number of gridpoints and number of different areas used
876!-- for computing statistics. Allocate arrays depending on these values,
877!-- which are needed for the following read instructions.
878    READ ( 13 )  variable_chr
879    IF ( TRIM( variable_chr ) /= 'nz' )  THEN
880       message_string = 'nz not found in restart data file'
881       CALL message( 'read_parts_of_var_list', 'PA0303', 1, 2, 0, 6, 0 )
882    ENDIF
883    READ ( 13 )  nz_on_file
884    IF ( nz_on_file /= nz )  THEN
885       WRITE( message_string, * ) 'mismatch concerning number of ',      &
886                                  'gridpoints along z',                  &
887                                  '&nz on file    = "', nz_on_file, '"', &
888                                  '&nz from run   = "', nz, '"'
889       CALL message( 'read_parts_of_var_list', 'PA0304', 1, 2, 0, 6, 0 )
890    ENDIF
891
892    READ ( 13 )  variable_chr
893    IF ( TRIM( variable_chr ) /= 'max_pr_user' )  THEN
894       message_string = 'max_pr_user not found in restart data file'
895       CALL message( 'read_parts_of_var_list', 'PA0305', 1, 2, 0, 6, 0 )
896    ENDIF
897    READ ( 13 )  max_pr_user_on_file
898    IF ( max_pr_user_on_file /= max_pr_user )  THEN
899       WRITE( message_string, * ) 'number of user profiles on res',           &
900                                  'tart data file differs from the current ', &
901                                  'run&max_pr_user on file    = "',           &
902                                  max_pr_user_on_file, '"',                   &
903                                  '&max_pr_user from run   = "',              &
904                                  max_pr_user, '"'
905       CALL message( 'read_parts_of_var_list', 'PA0306', 0, 0, 0, 6, 0 )
906       tmp_mpru = MIN( max_pr_user_on_file, max_pr_user )
907    ELSE
908       tmp_mpru = max_pr_user
909    ENDIF
910
911    READ ( 13 )  variable_chr
912    IF ( TRIM( variable_chr ) /= 'statistic_regions' )  THEN
913       message_string = 'statistic_regions not found in restart data file'
914       CALL message( 'read_parts_of_var_list', 'PA0307', 1, 2, 0, 6, 0 )
915    ENDIF
916    READ ( 13 )  statistic_regions_on_file
917    IF ( statistic_regions_on_file /= statistic_regions )  THEN
918       WRITE( message_string, * ) 'statistic regions on restart data file ',& 
919                                  'differ from the current run',            &
920                                  '&statistic regions on file    = "',      &
921                                  statistic_regions_on_file, '"',           &
922                                  '&statistic regions from run   = "',      &
923                                   statistic_regions, '"',                  &
924                                  '&statistic data may be lost!'
925       CALL message( 'read_parts_of_var_list', 'PA0308', 0, 1, 0, 6, 0 )
926       tmp_sr = MIN( statistic_regions_on_file, statistic_regions )
927    ELSE
928       tmp_sr = statistic_regions
929    ENDIF
930
931
932!
933!-- Now read and check some control parameters and skip the rest
934    READ ( 13 )  variable_chr
935
936    DO  WHILE ( TRIM( variable_chr ) /= '*** end ***' )
937
938       SELECT CASE ( TRIM( variable_chr ) )
939
940          CASE ( 'average_count_pr' )
941             READ ( 13 )  average_count_pr
942             IF ( average_count_pr /= 0 )  THEN
943                WRITE( message_string, * ) 'inflow profiles not temporally ',  &
944                               'averaged. &Averaging will be done now using ', &
945                               average_count_pr, ' samples.'
946                CALL message( 'read_parts_of_var_list', 'PA0309', &
947                                                                 0, 1, 0, 6, 0 )
948             ENDIF
949
950          CASE ( 'hom' )
951             ALLOCATE( hom_on_file(0:nz+1,2,pr_palm+max_pr_user_on_file, &
952                       0:statistic_regions_on_file) )
953             READ ( 13 )  hom_on_file
954             hom(:,:,1:pr_palm+tmp_mpru,0:tmp_sr) = &
955                          hom_on_file(:,:,1:pr_palm+tmp_mpru,0:tmp_sr)
956             DEALLOCATE( hom_on_file )
957
958          CASE ( 'hom_sum' )
959             ALLOCATE( hom_sum_on_file(0:nz+1,pr_palm+max_pr_user_on_file, &
960                       0:statistic_regions_on_file) )
961             READ ( 13 )  hom_sum_on_file
962             hom_sum(:,1:pr_palm+tmp_mpru,0:tmp_sr) = &
963                          hom_sum_on_file(:,1:pr_palm+tmp_mpru,0:tmp_sr)
964             DEALLOCATE( hom_sum_on_file )
965
966          CASE ( 'momentum_advec' )
967             momentum_advec_check = momentum_advec
968             READ ( 13 )  momentum_advec
969             IF ( TRIM( momentum_advec_check ) /= TRIM( momentum_advec ) )  THEN
970                WRITE( message_string, * ) 'momentum_advec of the restart run ',&
971                               'differs from momentum_advec of the initial run.'
972                CALL message( 'read_parts_of_var_list', 'PA0100', &
973                                                                 1, 2, 0, 6, 0 )
974             END IF                           
975             
976          CASE ( 'nx' )
977             READ ( 13 )  nx_on_file
978
979          CASE ( 'ny' )
980             READ ( 13 )  ny_on_file
981
982          CASE ( 'ref_state' )
983             READ ( 13 )  ref_state
984
985          CASE ( 'scalar_advec' )
986             scalar_advec_check = scalar_advec
987             READ ( 13 )  scalar_advec
988             IF ( TRIM( scalar_advec_check ) /= TRIM( scalar_advec ) )  THEN
989                WRITE( message_string, * ) 'scalar_advec of the restart run ', &
990                               'differs from scalar_advec of the initial run.'
991                CALL message( 'read_parts_of_var_list', 'PA0101', &
992                                                                 1, 2, 0, 6, 0 )
993             END IF             
994             
995          CASE DEFAULT
996
997             READ ( 13 )  cdum
998
999       END SELECT
1000
1001       READ ( 13 )  variable_chr
1002
1003    ENDDO
1004
1005!
1006!-- Calculate the temporal average of vertical profiles, if neccessary
1007    IF ( average_count_pr /= 0 )  THEN
1008       hom_sum = hom_sum / REAL( average_count_pr, KIND=wp )
1009    ENDIF
1010
1011
1012 END SUBROUTINE read_parts_of_var_list
1013
1014
1015
1016!------------------------------------------------------------------------------!
1017! Description:
1018! ------------
1019!> Skipping the global control variables from restart-file (binary format)
1020!------------------------------------------------------------------------------!
1021 
1022 SUBROUTINE skip_var_list
1023
1024    USE control_parameters,                                                    &
1025        ONLY:  virtual_flight
1026 
1027    USE flight_mod,                                                            &
1028        ONLY:  flight_skip_var_list
1029 
1030    IMPLICIT NONE
1031
1032    CHARACTER (LEN=10) ::  version_on_file
1033    CHARACTER (LEN=30) ::  variable_chr
1034
1035    CHARACTER (LEN=1) ::  cdum
1036
1037
1038    READ ( 13 )  version_on_file
1039
1040    READ ( 13 )  variable_chr
1041
1042    DO  WHILE ( TRIM( variable_chr ) /= '*** end ***' )
1043
1044       READ ( 13 )  cdum
1045       READ ( 13 )  variable_chr
1046
1047    ENDDO
1048!
1049!-- In case of virtual flights, skip also variables related to
1050!-- this module.
1051    IF ( virtual_flight )  CALL flight_skip_var_list
1052   
1053
1054 END SUBROUTINE skip_var_list
Note: See TracBrowser for help on using the repository browser.