source: palm/trunk/SOURCE/parin.f90 @ 3183

Last change on this file since 3183 was 3183, checked in by suehring, 3 years ago

last commit documented

  • Property svn:keywords set to Id
File size: 45.5 KB
Line 
1!> @file parin.f90
2!------------------------------------------------------------------------------!
3! This file is part of the PALM model system.
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-2018 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! -----------------
22!
23!
24! Former revisions:
25! -----------------
26! $Id: parin.f90 3183 2018-07-27 14:25:55Z suehring $
27! Rename variables and boundary conditions in mesoscale-offline nesting mode
28!
29! 3182 2018-07-27 13:36:03Z suehring
30! Added multi agent system
31!
32! 3157 2018-07-19 21:08:49Z maronga
33! added use_free_convection_scaling
34!
35! 3083 2018-06-19 14:03:12Z gronemeier
36! Added rans_const_c and rans_const_sigma as input parameters (TG)
37!
38! 3065 2018-06-12 07:03:02Z Giersch
39! New initialization parameters added
40!
41! 3049 2018-05-29 13:52:36Z Giersch
42! Error messages revised
43!
44! 3045 2018-05-28 07:55:41Z Giersch
45! z_max_do2d removed, error messages revised
46!
47! 2995 2018-04-19 12:13:16Z Giersch
48! time_since_reference_point must be calculated/initialized before the first 
49! call of functions related to the radiation model which occur in
50! time_integration_spinup or time_integration
51!
52! 2980 2018-04-17 15:19:27Z suehring
53! Revise message call
54!
55! 2975 2018-04-16 15:22:20Z suehring
56! - Informative message when initializing_actions has been changed
57!   to set_constant_profile in child domain
58! - Change location in message call
59!
60! 2967 2018-04-13 11:22:08Z raasch
61! bugfix: missing parallel cpp-directives added
62!
63! 2941 2018-04-03 11:54:58Z kanani
64! Fix for spinup in case of restart run
65!
66! 2938 2018-03-27 15:52:42Z suehring
67! Change initialization in case child domain should be initialized with Inifor.
68!
69! 2936 2018-03-27 14:49:27Z suehring
70! inipar renamed to initialization_parameters.
71! d3par renamed to runtime_parameters.
72!
73! 2921 2018-03-22 15:05:23Z Giersch
74! Activation of spinup has been moved from lsm/usm_parin to parin itself
75!
76! 2906 2018-03-19 08:56:40Z Giersch
77! ENVIRONMENT variables read/write_svf has been added
78!
79! 2894 2018-03-15 09:17:58Z Giersch
80! read_var_list has been renamed to rrd_global, all module related _parin
81! routines are called before reading the global restart data to overwrite them
82! in case of restart runs
83!
84! 2881 2018-03-13 16:24:40Z suehring
85! Added flag for switching on/off calculation of soil moisture
86!
87! 2849 2018-03-05 10:49:33Z Giersch
88! Position of d3par namelist in parameter file is unimportant now
89!
90! 2826 2018-02-21 12:39:28Z Giersch
91! Bugfix in setting the default boundary conditions for nest domains
92!
93! 2817 2018-02-19 16:32:21Z knoop
94! Preliminary gust module interface implemented
95!
96! 2773 2018-01-30 14:12:54Z suehring
97! Nesting for chemical species implemented
98!
99! 2766 2018-01-22 17:17:47Z kanani
100! Removed preprocessor directive __chem
101!
102! 2718 2018-01-02 08:49:38Z maronga
103! Corrected "Former revisions" section
104!
105! 2696 2017-12-14 17:12:51Z kanani
106! Change in file header (GPL part)
107! Implementation of uv exposure model (FK)
108! Added rans_mode and turbulence_closure to inipar (TG)
109! Implementation of chemistry module
110! Sorting of USE list (FK)
111! Forcing implemented, and initialization with inifor (MS)
112!
113! 2600 2017-11-01 14:11:20Z raasch
114! some comments added and variables renamed concerning r2599
115!
116! 2599 2017-11-01 13:18:45Z hellstea
117! The i/o grouping is updated to work correctly also in nested runs.
118!
119! 2575 2017-10-24 09:57:58Z maronga
120! Renamed phi -> latitude, added longitude
121!
122! 2563 2017-10-19 15:36:10Z Giersch
123! Changed position where restart files are closed.
124!
125! 2550 2017-10-16 17:12:01Z boeske
126! Added complex_terrain
127!
128! 2544 2017-10-13 18:09:32Z maronga
129! Moved day_of_year_init and time_utc_init to inipar.
130!
131! 2397 2017-09-04 16:22:48Z suehring
132! Enable initialization of 3d model by user in the child domain.
133!
134! 2375 2017-08-29 14:10:28Z schwenkel
135! Added aerosol initialization for bulk microphysics
136!
137! 2372 2017-08-25 12:37:32Z sward
138! y_shift added to namelist
139!
140! 2365 2017-08-21 14:59:59Z kanani
141! Vertical grid nesting: add vnest_start_time to d3par (SadiqHuq)
142!
143! 2339 2017-08-07 13:55:26Z gronemeier
144! corrected timestamp in header
145!
146! 2338 2017-08-07 12:15:38Z gronemeier
147! Modularize 1D model
148!
149! 2310 2017-07-11 09:37:02Z gronemeier
150! Bugfix: re-arranged call for error messages for ENVPAR file
151!
152! 2304 2017-07-04 14:35:55Z suehring
153! Bugfix, enable restarts for child domain.
154!
155! 2298 2017-06-29 09:28:18Z raasch
156! -return_addres, return_username in ENVPAR, -cross_ts_uymax, cross_ts_uymin in
157! d3par
158!
159! 2296 2017-06-28 07:53:56Z maronga
160! Added parameters for model spinup
161!
162! 2292 2017-06-20 09:51:42Z schwenkel
163! Implementation of new microphysic scheme: cloud_scheme = 'morrison'
164! includes two more prognostic equations for cloud drop concentration (nc) 
165! and cloud water content (qc).
166!
167! 2267 2017-06-09 09:33:25Z gronemeier
168! Bugfix: removed skipping of reading namelists in case of omitted d3par
169!
170! 2259 2017-06-08 09:09:11Z gronemeier
171! Implemented synthetic turbulence generator
172!
173! 2233 2017-05-30 18:08:54Z suehring
174!
175! 2232 2017-05-30 17:47:52Z suehring
176! typo corrected
177! +wall_salinityflux
178! +tunnel_height, tunnel_lenght, tunnel_width_x, tunnel_width_y,
179!  tunnel_wall_depth
180!
181! 2118 2017-01-17 16:38:49Z raasch
182! -background_communication from inipar
183!
184! 2050 2016-11-08 15:00:55Z gronemeier
185! Implement turbulent outflow condition
186!
187! 2037 2016-10-26 11:15:40Z knoop
188! Anelastic approximation implemented
189!
190! 2035 2016-10-24 15:06:17Z suehring
191! Remove check for npex and npey in nesting case
192!
193! 2011 2016-09-19 17:29:57Z kanani
194! Added flag lsf_exception to allow explicit enabling of large scale forcing
195! together with buildings on flat terrain.
196!
197! 2007 2016-08-24 15:47:17Z kanani
198! Added call to urban surface model for reading of &urban_surface_par
199!
200! 2004 2016-08-24 10:25:59Z suehring
201! Humidity and passive scalar treated separately in nesting mode
202!
203! 2000 2016-08-20 18:09:15Z knoop
204! Forced header and separation lines into 80 columns
205!
206! 1992 2016-08-12 15:14:59Z suehring
207! +top_scalarflux
208!
209! 1960 2016-07-12 16:34:24Z suehring
210! Allocation of s_init
211!
212! 1957 2016-07-07 10:43:48Z suehring
213! flight module added
214!
215! 1955 2016-07-01 12:38:59Z hellstea
216! The parameter intializating_actions is set to 'set_constant_profiles for
217! all nest domains in order to make sure that diagnostic variables are properly
218! initialized for nest domains. Prognostic variables are later initialized by
219! interpolation from the parent domain.
220!
221! 1917 2016-05-27 14:28:12Z witha
222! Initial version of purely vertical nesting introduced.
223!
224! 1914 2016-05-26 14:44:07Z witha
225! Added call to wind turbine model for reading of &wind_turbine_par
226!
227! 1849 2016-04-08 11:33:18Z hoffmann
228! Adapted for modularization of microphysics
229!
230! 1833 2016-04-07 14:23:03Z raasch
231! call of spectra_parin
232!
233! 1831 2016-04-07 13:15:51Z hoffmann
234! turbulence renamed collision_turbulence, drizzle renamed
235! cloud_water_sedimentation
236! curvature_solution_effects removed
237!
238! 1826 2016-04-07 12:01:39Z maronga
239! Added call to radiation model for reading of &radiation_par.
240! Added call to plant canopy model for reading of &canopy_par.
241!
242! 1817 2016-04-06 15:44:20Z maronga
243! Added call to land surface model for reading of &lsm_par
244!
245! 1804 2016-04-05 16:30:18Z maronga
246! Removed code for parameter file check (__check)
247!
248! 1783 2016-03-06 18:36:17Z raasch
249! +netcdf_deflate in d3par, netcdf module and variable names changed
250!
251! 1764 2016-02-28 12:45:19Z raasch
252! cpp-statements for nesting removed, explicit settings of boundary conditions
253! in nest domains,
254! bugfix: npex/npey message moved from inipar to d3par
255! bugfix: check of lateral boundary conditions from check_parameters to here,
256! because they will be already used in init_pegrid and init_grid
257!
258! 1762 2016-02-25 12:31:13Z hellstea
259! Introduction of nested domain feature
260!
261! 1691 2015-10-26 16:17:44Z maronga
262! Added parameter most_method. Renamed prandtl_layer to constant_flux_layer.
263!
264! 1682 2015-10-07 23:56:08Z knoop
265! Code annotations made doxygen readable
266!
267! 1560 2015-03-06 10:48:54Z keck
268! +recycling_yshift
269!
270! 1496 2014-12-02 17:25:50Z maronga
271! Renamed: "radiation -> "cloud_top_radiation"
272!
273! 1484 2014-10-21 10:53:05Z kanani
274! Changes due to new module structure of the plant canopy model:
275!   canopy-model related parameters moved to new package canopy_par in
276!   subroutine package_parin
277!
278! 1429 2014-07-15 12:53:45Z knoop
279! +ensemble_member_nr to prepare the random_generator for ensemble runs
280!
281! 1402 2014-05-09 14:25:13Z raasch
282! location messages modified, batch_job included in envpar-NAMELIST
283!
284! 1384 2014-05-02 14:31:06Z raasch
285! location messages added
286!
287! 1365 2014-04-22 15:03:56Z boeske
288! Usage of large scale forcing enabled:
289! +use_subsidence_tendencies
290!
291! 1361 2014-04-16 15:17:48Z hoffmann
292! +call_microphysics_at_all_substeps
293!
294! 1359 2014-04-11 17:15:14Z hoffmann
295! REAL constants provided with KIND-attribute
296!
297! 1353 2014-04-08 15:21:23Z heinze
298! REAL constants provided with KIND-attribute
299!
300! 1327 2014-03-21 11:00:16Z raasch
301! -data_output_format, do3d_compress, do3d_comp_prec
302!
303! 1320 2014-03-20 08:40:49Z raasch
304! ONLY-attribute added to USE-statements,
305! kind-parameters added to all INTEGER and REAL declaration statements,
306! kinds are defined in new module kinds,
307! old module precision_kind is removed,
308! revision history before 2012 removed,
309! comment fields (!:) to be used for variable explanations added to
310! all variable declaration statements
311!
312! 1318 2014-03-17 13:35:16Z raasch
313! +cpu_log_barrierwait in d3par
314!
315! 1301 2014-03-06 13:29:46Z heinze
316! +large_scale_subsidence
317!
318! 1241 2013-10-30 11:36:58Z heinze
319! +nudging
320! +large_scale_forcing
321!
322! 1216 2013-08-26 09:31:42Z raasch
323! +transpose_compute_overlap in inipar
324!
325! 1195 2013-07-01 12:27:57Z heinze
326! Bugfix: allocate ref_state
327!
328! 1179 2013-06-14 05:57:58Z raasch
329! +reference_state in inipar
330!
331! 1159 2013-05-21 11:58:22Z fricke
332! +use_cmax
333!
334! 1128 2013-04-12 06:19:32Z raasch
335! +background_communication in inipar
336!
337! 1115 2013-03-26 18:16:16Z hoffmann
338! unused variables removed
339!
340! 1092 2013-02-02 11:24:22Z raasch
341! unused variables removed
342!
343! 1065 2012-11-22 17:42:36Z hoffmann
344! +nc, c_sedimentation, limiter_sedimentation, turbulence
345! -mu_constant, mu_constant_value
346!
347! 1053 2012-11-13 17:11:03Z hoffmann
348! necessary expansions according to the two new prognostic equations (nr, qr)
349! of the two-moment cloud physics scheme and steering parameters:
350! +*_init, *_surface, *_surface_initial_change, *_vertical_gradient,
351! +*_vertical_gradient_level, surface_waterflux_*,
352! +cloud_scheme, drizzle, mu_constant, mu_constant_value, ventilation_effect
353!
354! 1036 2012-10-22 13:43:42Z raasch
355! code put under GPL (PALM 3.9)
356!
357! 1015 2012-09-27 09:23:24Z raasch
358! -adjust_mixing_length
359!
360! 1003 2012-09-14 14:35:53Z raasch
361! -grid_matching
362!
363! 1001 2012-09-13 14:08:46Z raasch
364! -cut_spline_overshoot, long_filter_factor, overshoot_limit_*, ups_limit_*
365!
366! 996 2012-09-07 10:41:47Z raasch
367! -use_prior_plot1d_parameters
368!
369! 978 2012-08-09 08:28:32Z fricke
370! -km_damp_max, outflow_damping_width
371! +pt_damping_factor, pt_damping_width
372! +z0h_factor
373!
374! 964 2012-07-26 09:14:24Z raasch
375! -cross_normalized_x, cross_normalized_y, cross_xtext, z_max_do1d,
376! z_max_do1d_normalized
377!
378! 940 2012-07-09 14:31:00Z raasch
379! +neutral in inipar
380!
381! 927 2012-06-06 19:15:04Z raasch
382! +masking_method in inipar
383!
384! 824 2012-02-17 09:09:57Z raasch
385! +curvature_solution_effects in inipar
386!
387! 809 2012-01-30 13:32:58Z maronga
388! Bugfix: replaced .AND. and .NOT. with && and ! in the preprocessor directives
389!
390! 807 2012-01-25 11:53:51Z maronga
391! New cpp directive "__check" implemented which is used by check_namelist_files
392!
393! Revision 1.1  1997/07/24 11:22:50  raasch
394! Initial revision
395!
396!
397! Description:
398! ------------
399!> This subroutine reads variables controling the run from the NAMELIST files
400!------------------------------------------------------------------------------!
401 SUBROUTINE parin
402 
403
404    USE arrays_3d,                                                             &
405        ONLY:  pt_init, q_init, ref_state, s_init, sa_init,                    &     
406               ug, u_init, v_init, vg
407
408    USE chemistry_model_mod,                                                   &
409        ONLY:  chem_parin
410       
411    USE chem_modules
412
413    USE control_parameters
414
415    USE cpulog,                                                                &
416        ONLY:  cpu_log_barrierwait
417
418    USE date_and_time_mod,                                                     &
419        ONLY:  day_of_year_init, time_utc_init
420
421    USE dvrp_variables,                                                        &
422        ONLY:  local_dvrserver_running
423
424    USE flight_mod,                                                            &
425        ONLY:  flight_parin
426
427    USE grid_variables,                                                        &
428        ONLY:  dx, dy
429
430    USE gust_mod,                                                              &
431        ONLY: gust_parin
432
433    USE indices,                                                               &
434        ONLY:  nx, ny, nz
435
436    USE kinds
437
438    USE land_surface_model_mod,                                                &
439        ONLY: lsm_parin
440
441    USE microphysics_mod,                                                      &
442        ONLY:  c_sedimentation, cloud_water_sedimentation,                     &
443               collision_turbulence, curvature_solution_effects_bulk,          &
444               dry_aerosol_radius, limiter_sedimentation, na_init, nc_const,   &
445               sigma_bulk, ventilation_effect
446
447    USE model_1d_mod,                                                          &
448        ONLY:  damp_level_1d, dt_pr_1d, dt_run_control_1d, end_time_1d
449
450    USE multi_agent_system_mod,                                                &
451        ONLY:  mas_parin
452
453    USE netcdf_interface,                                                      &
454        ONLY:  netcdf_data_format, netcdf_deflate, netcdf_precision
455
456    USE pegrid
457               
458    USE plant_canopy_model_mod,                                                &
459         ONLY: pcm_parin
460
461    USE pmc_interface,                                                         &
462        ONLY:  nested_run, nesting_mode
463
464    USE profil_parameter,                                                      &
465        ONLY:  cross_profiles, profile_columns, profile_rows
466
467    USE progress_bar,                                                          &
468        ONLY :  batch_job
469
470    USE radiation_model_mod,                                                   &
471        ONLY: radiation_parin
472
473    USE read_restart_data_mod,                                                 &
474        ONLY:  rrd_global     
475
476    USE spectra_mod,                                                           &
477        ONLY :  spectra_parin
478
479    USE statistics,                                                            &
480        ONLY:  hom, hom_sum, pr_palm, region, statistic_regions
481
482    USE synthetic_turbulence_generator_mod,                                    &
483        ONLY:  stg_parin
484
485    USE turbulence_closure_mod,                                                &
486        ONLY:  rans_const_c, rans_const_sigma
487
488    USE urban_surface_mod,                                                     &
489        ONLY: usm_parin
490
491    USE uv_exposure_model_mod,                                                 &
492        ONLY:  uvem_parin
493
494    USE vertical_nesting_mod,                                                  &
495        ONLY:  vnest_start_time
496
497    USE wind_turbine_model_mod,                                                &
498        ONLY:  wtm_parin
499
500
501    IMPLICIT NONE
502
503    CHARACTER (LEN=80) ::  line  !< dummy string that contains the current line of the parameter file
504
505    INTEGER(iwp) ::  global_id      !< process id with respect to MPI_COMM_WORLD
506    INTEGER(iwp) ::  global_procs   !< # of procs with respect to MPI_COMM_WORLD
507    INTEGER(iwp) ::  i              !<
508    INTEGER(iwp) ::  ioerr          !< error flag for open/read/write
509
510    NAMELIST /inipar/  aerosol_bulk, alpha_surface, approximation, bc_e_b,     &
511                       bc_lr, bc_ns, bc_p_b, bc_p_t, bc_pt_b, bc_pt_t, bc_q_b, &
512             bc_q_t,bc_s_b, bc_s_t, bc_sa_t, bc_uv_b, bc_uv_t,                 &
513             bottom_salinityflux, building_height, building_length_x,          &
514             building_length_y, building_wall_left, building_wall_south,       &
515             calc_soil_moisture_during_spinup,                                 &
516             call_psolver_at_all_substeps, call_microphysics_at_all_substeps,  &
517             canyon_height,                                                    &
518             canyon_width_x, canyon_width_y, canyon_wall_left,                 &
519             canyon_wall_south, c_sedimentation, cfl_factor, cloud_droplets,   &
520             cloud_physics, cloud_scheme, cloud_top_radiation,                 &
521             cloud_water_sedimentation,                                        &
522             collective_wait, collision_turbulence, complex_terrain,           &
523             conserve_volume_flow,                                             &
524             conserve_volume_flow_mode, constant_flux_layer,                   &
525             coupling_start_time, curvature_solution_effects_bulk,             &
526             cycle_mg, damp_level_1d,                                          &
527             data_output_during_spinup,                                        &
528             day_of_year_init,                                                 &
529             dissipation_1d,                                                   &
530             dp_external, dp_level_b, dp_smooth, dpdxy, dry_aerosol_radius,    &
531             dt, dt_pr_1d, dt_run_control_1d, dt_spinup, dx, dy, dz, dz_max,   &
532             dz_stretch_factor, dz_stretch_level, dz_stretch_level_start,      &
533             dz_stretch_level_end, end_time_1d, ensemble_member_nr, e_init,    &
534             e_min, fft_method, flux_input_mode, flux_output_mode,             &
535             galilei_transformation, humidity,                                 &
536             inflow_damping_height, inflow_damping_width,                      &
537             inflow_disturbance_begin, inflow_disturbance_end,                 &
538             initializing_actions, km_constant,                                &
539             large_scale_forcing, large_scale_subsidence, latitude,            &
540             limiter_sedimentation, longitude,                                 &
541             loop_optimization, lsf_exception, masking_method, mg_cycles,      &
542             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec,         &
543             most_method, na_init, nc_const, nesting_offline,                  &
544             netcdf_precision, neutral, ngsrb,                                 &
545             nsor, nsor_ini, nudging, nx, ny, nz, ocean, omega, omega_sor,     &
546             outflow_source_plane, passive_scalar,                             &
547             prandtl_number, precipitation, psolver, pt_damping_factor,        &
548             pt_damping_width, pt_reference, pt_surface,                       &
549             pt_surface_initial_change, pt_vertical_gradient,                  &
550             pt_vertical_gradient_level, q_surface, q_surface_initial_change,  &
551             q_vertical_gradient, q_vertical_gradient_level,                   &
552             random_generator, random_heatflux, rans_const_c, rans_const_sigma,&
553             rans_mode,                                                        &
554             rayleigh_damping_factor, rayleigh_damping_height,                 &
555             recycling_width, recycling_yshift,                                &
556             reference_state, residual_limit,                                  &
557             roughness_length, sa_surface,                                     &
558             sa_vertical_gradient, sa_vertical_gradient_level, scalar_advec,   &
559             scalar_rayleigh_damping, sigma_bulk,                              &
560             spinup_time, spinup_pt_amplitude, spinup_pt_mean,                 &
561             statistic_regions, subs_vertical_gradient,                        &
562             subs_vertical_gradient_level, surface_heatflux, surface_pressure, &
563             surface_scalarflux, surface_waterflux,                            &
564             s_surface, s_surface_initial_change, s_vertical_gradient,         &
565             s_vertical_gradient_level, time_utc_init, timestep_scheme,        &
566             topography, topography_grid_convention, top_heatflux,             &
567             top_momentumflux_u, top_momentumflux_v, top_salinityflux,         &
568             top_scalarflux, transpose_compute_overlap,                        &
569             tunnel_height, tunnel_length, tunnel_width_x, tunnel_width_y,     &
570             tunnel_wall_depth, turbulence_closure,                            &
571             turbulent_inflow, turbulent_outflow,                              &
572             use_subsidence_tendencies, ug_surface, ug_vertical_gradient,      &
573             use_free_convection_scaling,                                      &
574             ug_vertical_gradient_level, use_surface_fluxes, use_cmax,         &
575             use_top_fluxes, use_ug_for_galilei_tr, use_upstream_for_tke,      &
576             uv_heights, u_bulk, u_profile, vg_surface, vg_vertical_gradient,  &
577             vg_vertical_gradient_level, v_bulk, v_profile, ventilation_effect,&
578             wall_adjustment, wall_heatflux, wall_humidityflux,                &
579             wall_salinityflux, wall_scalarflux, y_shift, zeta_max, zeta_min,  &
580             z0h_factor
581
582    NAMELIST /initialization_parameters/  aerosol_bulk, alpha_surface,         &
583             approximation, bc_e_b,                                            &
584             bc_lr, bc_ns, bc_p_b, bc_p_t, bc_pt_b, bc_pt_t, bc_q_b,           &
585             bc_q_t,bc_s_b, bc_s_t, bc_sa_t, bc_uv_b, bc_uv_t,                 &
586             bottom_salinityflux, building_height, building_length_x,          &
587             building_length_y, building_wall_left, building_wall_south,       &
588             calc_soil_moisture_during_spinup,                                 &
589             call_psolver_at_all_substeps, call_microphysics_at_all_substeps,  &
590             canyon_height,                                                    &
591             canyon_width_x, canyon_width_y, canyon_wall_left,                 &
592             canyon_wall_south, c_sedimentation, cfl_factor, cloud_droplets,   &
593             cloud_physics, cloud_scheme, cloud_top_radiation,                 &
594             cloud_water_sedimentation,                                        &
595             collective_wait, collision_turbulence, complex_terrain,           &
596             conserve_volume_flow,                                             &
597             conserve_volume_flow_mode, constant_flux_layer,                   &
598             coupling_start_time, curvature_solution_effects_bulk,             &
599             cycle_mg, damp_level_1d,                                          &
600             data_output_during_spinup,                                        &
601             day_of_year_init,                                                 &
602             dissipation_1d,                                                   &
603             dp_external, dp_level_b, dp_smooth, dpdxy, dry_aerosol_radius,    &
604             dt, dt_pr_1d, dt_run_control_1d, dt_spinup, dx, dy, dz, dz_max,   &
605             dz_stretch_factor, dz_stretch_level, dz_stretch_level_start,      &
606             dz_stretch_level_end, end_time_1d, ensemble_member_nr, e_init,    &
607             e_min, fft_method, flux_input_mode, flux_output_mode,             &
608             galilei_transformation, humidity,                                 &
609             inflow_damping_height, inflow_damping_width,                      &
610             inflow_disturbance_begin, inflow_disturbance_end,                 &
611             initializing_actions, km_constant,                                &
612             large_scale_forcing, large_scale_subsidence, latitude,            &
613             limiter_sedimentation, longitude,                                 &
614             loop_optimization, lsf_exception, masking_method, mg_cycles,      &
615             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec,         &
616             most_method, na_init, nc_const, nesting_offline,                  &
617             netcdf_precision, neutral, ngsrb,                                 &
618             nsor, nsor_ini, nudging, nx, ny, nz, ocean, omega, omega_sor,     &
619             outflow_source_plane, passive_scalar,                             &
620             prandtl_number, precipitation, psolver, pt_damping_factor,        &
621             pt_damping_width, pt_reference, pt_surface,                       &
622             pt_surface_initial_change, pt_vertical_gradient,                  &
623             pt_vertical_gradient_level, q_surface, q_surface_initial_change,  &
624             q_vertical_gradient, q_vertical_gradient_level,                   &
625             random_generator, random_heatflux, rans_const_c, rans_const_sigma,&
626             rans_mode,                                                        &
627             rayleigh_damping_factor, rayleigh_damping_height,                 &
628             recycling_width, recycling_yshift,                                &
629             reference_state, residual_limit,                                  &
630             roughness_length, sa_surface,                                     &
631             sa_vertical_gradient, sa_vertical_gradient_level, scalar_advec,   &
632             scalar_rayleigh_damping, sigma_bulk,                              &
633             spinup_time, spinup_pt_amplitude, spinup_pt_mean,                 &
634             statistic_regions, subs_vertical_gradient,                        &
635             subs_vertical_gradient_level, surface_heatflux, surface_pressure, &
636             surface_scalarflux, surface_waterflux,                            &
637             s_surface, s_surface_initial_change, s_vertical_gradient,         &
638             s_vertical_gradient_level, time_utc_init, timestep_scheme,        &
639             topography, topography_grid_convention, top_heatflux,             &
640             top_momentumflux_u, top_momentumflux_v, top_salinityflux,         &
641             top_scalarflux, transpose_compute_overlap,                        &
642             tunnel_height, tunnel_length, tunnel_width_x, tunnel_width_y,     &
643             tunnel_wall_depth, turbulence_closure,                            &
644             turbulent_inflow, turbulent_outflow,                              &
645             use_subsidence_tendencies, ug_surface, ug_vertical_gradient,      &
646             ug_vertical_gradient_level, use_surface_fluxes, use_cmax,         &
647             use_top_fluxes, use_ug_for_galilei_tr, use_upstream_for_tke,      &
648             use_free_convection_scaling,                                      &
649             uv_heights, u_bulk, u_profile, vg_surface, vg_vertical_gradient,  &
650             vg_vertical_gradient_level, v_bulk, v_profile, ventilation_effect,&
651             wall_adjustment, wall_heatflux, wall_humidityflux,                &
652             wall_salinityflux, wall_scalarflux, y_shift, zeta_max, zeta_min,  &
653             z0h_factor
654             
655    NAMELIST /d3par/  averaging_interval, averaging_interval_pr,               &
656             cpu_log_barrierwait, create_disturbances,                         &
657             cross_profiles, data_output, data_output_masks,                   &
658             data_output_pr, data_output_2d_on_each_pe, disturbance_amplitude, &
659             disturbance_energy_limit, disturbance_level_b,                    &
660             disturbance_level_t, do2d_at_begin, do3d_at_begin,                &
661             dt, dt_averaging_input, dt_averaging_input_pr,                    &
662             dt_coupling, dt_data_output, dt_data_output_av, dt_disturb,       &
663             dt_domask, dt_dopr, dt_dopr_listing, dt_dots, dt_do2d_xy,         &
664             dt_do2d_xz, dt_do2d_yz, dt_do3d, dt_max, dt_restart,              &
665             dt_run_control,end_time, force_print_header, mask_scale_x,        &
666             mask_scale_y, mask_scale_z, mask_x, mask_y, mask_z, mask_x_loop,  &
667             mask_y_loop, mask_z_loop, netcdf_data_format, netcdf_deflate,     &
668             normalizing_region, npex, npey, nz_do3d,                          &
669             precipitation_amount_interval, profile_columns, profile_rows,     &
670             restart_time, section_xy, section_xz, section_yz,                 &
671             skip_time_data_output, skip_time_data_output_av, skip_time_dopr,  &
672             skip_time_do2d_xy, skip_time_do2d_xz, skip_time_do2d_yz,          &
673             skip_time_do3d, skip_time_domask, synchronous_exchange,           &
674             termination_time_needed, vnest_start_time
675
676    NAMELIST /runtime_parameters/  averaging_interval, averaging_interval_pr,  &
677             cpu_log_barrierwait, create_disturbances,                         &
678             cross_profiles, data_output, data_output_masks,                   &
679             data_output_pr, data_output_2d_on_each_pe, disturbance_amplitude, &
680             disturbance_energy_limit, disturbance_level_b,                    &
681             disturbance_level_t, do2d_at_begin, do3d_at_begin,                &
682             dt, dt_averaging_input, dt_averaging_input_pr,                    &
683             dt_coupling, dt_data_output, dt_data_output_av, dt_disturb,       &
684             dt_domask, dt_dopr, dt_dopr_listing, dt_dots, dt_do2d_xy,         &
685             dt_do2d_xz, dt_do2d_yz, dt_do3d, dt_max, dt_restart,              &
686             dt_run_control,end_time, force_print_header, mask_scale_x,        &
687             mask_scale_y, mask_scale_z, mask_x, mask_y, mask_z, mask_x_loop,  &
688             mask_y_loop, mask_z_loop, netcdf_data_format, netcdf_deflate,     &
689             normalizing_region, npex, npey, nz_do3d,                          &
690             precipitation_amount_interval, profile_columns, profile_rows,     &
691             restart_time, section_xy, section_xz, section_yz,                 &
692             skip_time_data_output, skip_time_data_output_av, skip_time_dopr,  &
693             skip_time_do2d_xy, skip_time_do2d_xz, skip_time_do2d_yz,          &
694             skip_time_do3d, skip_time_domask, synchronous_exchange,           &
695             termination_time_needed, vnest_start_time
696
697    NAMELIST /envpar/  batch_job, host, local_dvrserver_running,               &
698                       maximum_cpu_time_allowed, maximum_parallel_io_streams,  &
699                       read_svf, revision, run_identifier, tasks_per_node,     &
700                       write_binary, write_svf
701
702!
703!-- First read values of environment variables (this NAMELIST file is
704!-- generated by palmrun)
705    CALL location_message( 'reading environment parameters from ENVPAR', .FALSE. )
706
707    OPEN ( 90, FILE='ENVPAR', STATUS='OLD', FORM='FORMATTED', IOSTAT=ioerr )
708
709    IF ( ioerr /= 0 )  THEN
710       message_string = 'local file ENVPAR not found' //                       &
711                        '&some variables for steering may not be properly set'
712       CALL message( 'parin', 'PA0276', 0, 1, 0, 6, 0 )
713    ELSE
714       READ ( 90, envpar, IOSTAT=ioerr )
715       IF ( ioerr < 0 )  THEN
716          message_string = 'no envpar-NAMELIST found in local file '  //       &
717                           'ENVPAR& or some variables for steering may '  //   &
718                           'not be properly set'
719          CALL message( 'parin', 'PA0278', 0, 1, 0, 6, 0 )
720       ELSEIF ( ioerr > 0 )  THEN
721          message_string = 'errors in local file ENVPAR' //                    &
722                           '&some variables for steering may not be properly set'
723          CALL message( 'parin', 'PA0277', 0, 1, 0, 6, 0 )
724       ENDIF
725       CLOSE ( 90 )
726    ENDIF
727
728    CALL location_message( 'finished', .TRUE. )
729!
730!-- Calculate the number of groups into which parallel I/O is split.
731!-- The default for files which are opened by all PEs (or where each
732!-- PE opens his own independent file) is, that all PEs are doing input/output
733!-- in parallel at the same time. This might cause performance or even more
734!-- severe problems depending on the configuration of the underlying file
735!-- system.
736!-- Calculation of the number of blocks and the I/O group must be based on all
737!-- PEs involved in this run. Since myid and numprocs are related to the
738!-- comm2d communicator, which gives only a subset of all PEs in case of
739!-- nested runs, that information must be inquired again from the global
740!-- communicator.
741!-- First, set the default:
742#if defined( __parallel )
743    CALL MPI_COMM_RANK( MPI_COMM_WORLD, global_id, ierr )
744    CALL MPI_COMM_SIZE( MPI_COMM_WORLD, global_procs, ierr )
745#else
746    global_id    = 0
747    global_procs = 1
748#endif
749    IF ( maximum_parallel_io_streams == -1  .OR.                               &
750         maximum_parallel_io_streams > global_procs )  THEN
751       maximum_parallel_io_streams = global_procs
752    ENDIF
753!
754!-- Now calculate the number of io_blocks and the io_group to which the
755!-- respective PE belongs. I/O of the groups is done in serial, but in parallel
756!-- for all PEs belonging to the same group.
757    io_blocks = global_procs / maximum_parallel_io_streams
758    io_group  = MOD( global_id+1, io_blocks )
759   
760    CALL location_message( 'reading NAMELIST parameters from PARIN', .FALSE. )
761!
762!-- Data is read in parallel by groups of PEs
763    DO  i = 0, io_blocks-1
764       IF ( i == io_group )  THEN
765
766!
767!--       Open the NAMELIST-file which is send with this job
768          CALL check_open( 11 )
769
770!
771!--       Read the control parameters for initialization.
772!--       The namelist "inipar" must be provided in the NAMELIST-file.
773          READ ( 11, initialization_parameters, ERR=10, END=11 )
774
775          GOTO 12
776
777 10       message_string = 'errors in initialization_parameters & or no ' //  &
778                           'initialization_parameters-namelist ' //           &
779                           'found (CRAY-machines only)'
780          CALL message( 'parin', 'PA0271', 1, 2, 0, 6, 0 )
781
782 11       REWIND ( 11 )
783          READ ( 11, inipar, ERR=13, END=14 )
784 
785          message_string = 'namelist inipar is deprecated and will be ' //    &
786                          'removed in near future. & Please use namelist ' // &
787                          'initialization_parameters instead'
788          CALL message( 'parin', 'PA0017', 0, 1, 0, 6, 0 )
789 
790          GOTO 12
791 
792 13       message_string = 'errors in inipar & or no inipar-namelist ' //      &
793                           'found (CRAY-machines only)'
794          CALL message( 'parin', 'PA0271', 1, 2, 0, 6, 0 )
795         
796 14       message_string = 'no initialization_parameters-namelist found'
797          CALL message( 'parin', 'PA0272', 1, 2, 0, 6, 0 )
798
799!
800!--       Try to read runtime parameters given by the user for this run
801!--       (namelist "runtime_parameters"). The namelist "runtime_parmeters"   
802!--       can be omitted. In that case default values are used for the         
803!--       parameters.
804 12       line = ' '
805
806          REWIND ( 11 )
807          line = ' '
808          DO   WHILE ( INDEX( line, '&runtime_parameters' ) == 0 )
809             READ ( 11, '(A)', END=20 )  line
810          ENDDO
811          BACKSPACE ( 11 )
812
813!
814!--       Read namelist
815          READ ( 11, runtime_parameters )
816
817          GOTO 21
818         
819 20       REWIND ( 11 )
820          line = ' '
821          DO   WHILE ( INDEX( line, '&d3par' ) == 0 )
822             READ ( 11, '(A)', END=21 )  line
823          ENDDO
824          BACKSPACE ( 11 )
825 
826 !
827!--       Read namelist
828          READ ( 11, d3par )
829 
830          message_string = 'namelist d3par is deprecated and will be ' //      &
831                          'removed in near future. &Please use namelist ' //   &
832                          'runtime_parameters instead'
833          CALL message( 'parin', 'PA0487', 0, 1, 0, 6, 0 )
834         
835 21       CONTINUE
836
837!
838!--       Check if land surface model is used and read &lsm_par if required
839          CALL lsm_parin
840
841!
842!--       Check if urban surface model is used and read &urban_surface_par if required
843          CALL usm_parin
844
845!
846!--       Check if spectra shall be calculated and read spectra_par if required
847          CALL spectra_parin
848
849!
850!--       Check if radiation model is used and read &radiation_par if required
851          CALL radiation_parin
852
853!
854!--       Check if gust module is used and read &gust_par if required
855          CALL gust_parin
856
857!
858!--       Check if multi agent system is used and read &agents_par if required
859          CALL mas_parin
860
861!
862!--       Check if plant canopy model is used and read &canopy_par if required
863          CALL pcm_parin
864
865!
866!--       Read control parameters for optionally used model software packages
867          CALL package_parin
868
869!
870!--       Check if wind turbine model is used and read &wind_turbine_par if
871!--       required
872          CALL wtm_parin
873!
874!--       Check if virtual flights should be carried out and read &flight_par
875!--       if required
876          CALL flight_parin
877!
878!--       Check if synthetic turbulence generator is used and read stg_par if
879!--       required
880          CALL stg_parin
881!
882!--       Read chemistry variables
883          CALL chem_parin
884!
885!--       Check if uv exposure model is used and read &uvexposure_par
886          CALL uvem_parin
887!
888!--       Read user-defined variables
889          CALL user_parin
890
891!
892!--       If required, read control parameters from restart file (produced by
893!--       a prior run). All PEs are reading from file created by PE0 (see
894!--       check_open)
895          IF ( TRIM( initializing_actions ) == 'read_restart_data' )  THEN
896
897             CALL rrd_global
898!
899!--          Increment the run count
900             runnr = runnr + 1
901          ENDIF
902
903!
904!--       Activate spinup
905          IF ( land_surface .OR. urban_surface )  THEN
906             IF ( spinup_time > 0.0_wp )  THEN
907                coupling_start_time = spinup_time
908                time_since_reference_point = simulated_time - coupling_start_time
909                IF ( spinup_pt_mean == 9999999.9_wp )  THEN
910                   spinup_pt_mean = pt_surface
911                ENDIF
912                end_time = end_time + spinup_time
913                IF ( TRIM( initializing_actions ) /= 'read_restart_data' )     &
914                   spinup = .TRUE.
915             ENDIF
916          ENDIF
917
918!
919!--       In case of nested runs, explicitly set nesting boundary conditions.
920!--       This will overwrite the user settings and basic defaults.
921!--       bc_lr and bc_ns always need to be cyclic for vertical nesting.
922          IF ( nested_run )  THEN
923             IF ( nesting_mode == 'vertical' )  THEN
924                IF (bc_lr /= 'cyclic' .OR. bc_ns /= 'cyclic' )  THEN
925                   WRITE ( message_string, *) 'bc_lr and bc_ns were set to ,', &
926                        'cyclic for vertical nesting'
927                   CALL message( 'parin', 'PA0428', 0, 0, 0, 6, 0 )
928                   bc_lr   = 'cyclic'
929                   bc_ns   = 'cyclic'
930                ENDIF
931                IF ( child_domain )  THEN
932                   bc_uv_t  = 'nested'
933                   bc_pt_t  = 'nested'
934                   bc_q_t   = 'nested'
935                   bc_s_t   = 'nested'
936                   bc_cs_t  = 'nested'
937                   bc_p_t   = 'neumann' 
938                ENDIF
939!
940!--          For other nesting modes only set boundary conditions for
941!--          nested domains.
942             ELSE
943                IF ( child_domain )  THEN
944                   bc_lr    = 'nested'
945                   bc_ns    = 'nested'
946                   bc_uv_t  = 'nested'
947                   bc_pt_t  = 'nested'
948                   bc_q_t   = 'nested'
949                   bc_s_t   = 'nested'
950                   bc_cs_t  = 'nested'
951                   bc_p_t   = 'neumann'
952                ENDIF
953             ENDIF
954          ENDIF
955!
956!--       Set boundary conditions also in case the model is offline-nested in
957!--       larger-scale models.
958          IF ( nesting_offline )  THEN
959             bc_lr    = 'nesting_offline'
960             bc_ns    = 'nesting_offline'
961             bc_uv_t  = 'nesting_offline'
962             bc_pt_t  = 'nesting_offline'
963             bc_q_t   = 'nesting_offline'
964             bc_s_t   = 'nesting_offline'  ! scalar boundary condition is not clear
965             bc_cs_t  = 'nesting_offline'  ! same for chemical species
966             bc_p_t   = 'neumann'
967          ENDIF
968
969!         
970!--       In case of nested runs, make sure that initializing_actions =
971!--       'set_constant_profiles' even though the constant-profiles
972!--       initializations for the prognostic variables will be overwritten
973!--       by pmci_child_initialize and pmci_parent_initialize. This is,
974!--       however, important e.g. to make sure that diagnostic variables
975!--       are set properly. An exception is made in case of restart runs and
976!--       if user decides to do everything by its own.
977          IF ( child_domain  .AND.  .NOT. (                                    &
978               TRIM( initializing_actions ) == 'read_restart_data'      .OR.   &
979               TRIM( initializing_actions ) == 'set_constant_profiles'  .OR.   &
980               TRIM( initializing_actions ) == 'by_user' ) )  THEN
981             message_string = 'initializing_actions = ' //                     &
982                              TRIM( initializing_actions ) // ' has been ' //  &
983                              'changed to set_constant_profiles in child ' //  &
984                              'domain.' 
985             CALL message( 'parin', 'PA0492', 0, 0, 0, 6, 0 )
986
987             initializing_actions = 'set_constant_profiles'
988          ENDIF           
989!
990!--       Check validity of lateral boundary conditions. This has to be done
991!--       here because they are already used in init_pegrid and init_grid and
992!--       therefore cannot be check in check_parameters
993          IF ( bc_lr /= 'cyclic'  .AND.  bc_lr /= 'dirichlet/radiation'  .AND. &
994               bc_lr /= 'radiation/dirichlet'  .AND.  bc_lr /= 'nested'  .AND. &
995               bc_lr /= 'nesting_offline' )  THEN
996             message_string = 'unknown boundary condition: bc_lr = "' // &
997                              TRIM( bc_lr ) // '"'
998             CALL message( 'parin', 'PA0049', 1, 2, 0, 6, 0 )
999          ENDIF
1000          IF ( bc_ns /= 'cyclic'  .AND.  bc_ns /= 'dirichlet/radiation'  .AND. &
1001               bc_ns /= 'radiation/dirichlet'  .AND.  bc_ns /= 'nested'  .AND. &
1002               bc_ns /= 'nesting_offline' )  THEN
1003             message_string = 'unknown boundary condition: bc_ns = "' // &
1004                              TRIM( bc_ns ) // '"'
1005             CALL message( 'parin', 'PA0050', 1, 2, 0, 6, 0 )
1006          ENDIF
1007!
1008!--       Set internal variables used for speed optimization in if clauses
1009          IF ( bc_lr /= 'cyclic' )               bc_lr_cyc    = .FALSE.
1010          IF ( bc_lr == 'dirichlet/radiation' )  bc_lr_dirrad = .TRUE.
1011          IF ( bc_lr == 'radiation/dirichlet' )  bc_lr_raddir = .TRUE.
1012          IF ( bc_ns /= 'cyclic' )               bc_ns_cyc    = .FALSE.
1013          IF ( bc_ns == 'dirichlet/radiation' )  bc_ns_dirrad = .TRUE.
1014          IF ( bc_ns == 'radiation/dirichlet' )  bc_ns_raddir = .TRUE.
1015
1016!
1017!--       Definition of names of areas used for computing statistics. They must
1018!--       be defined at this place, because they are allowed to be redefined by
1019!--       the user in user_parin.
1020          region = 'total domain'
1021
1022!
1023!--       Check in case of initial run, if the grid point numbers are well
1024!--       defined and allocate some arrays which are already needed in
1025!--       init_pegrid or check_parameters. During restart jobs, these arrays
1026!--       will be allocated in rrd_global. All other arrays are allocated
1027!--       in init_3d_model.
1028          IF ( TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
1029
1030             IF ( nx <= 0 )  THEN
1031                WRITE( message_string, * ) 'no value or wrong value given',    &
1032                                           ' for nx: nx=', nx
1033                CALL message( 'parin', 'PA0273', 1, 2, 0, 6, 0 )
1034             ENDIF
1035             IF ( ny <= 0 )  THEN
1036                WRITE( message_string, * ) 'no value or wrong value given',    &
1037                                           ' for ny: ny=', ny
1038                CALL message( 'parin', 'PA0274', 1, 2, 0, 6, 0 )
1039             ENDIF
1040             IF ( nz <= 0 )  THEN
1041                WRITE( message_string, * ) 'no value or wrong value given',    &
1042                                           ' for nz: nz=', nz
1043                CALL message( 'parin', 'PA0275', 1, 2, 0, 6, 0 )
1044             ENDIF
1045!
1046!--          ATTENTION: in case of changes to the following statement please
1047!--                  also check the allocate statement in routine rrd_global
1048             ALLOCATE( pt_init(0:nz+1), q_init(0:nz+1), s_init(0:nz+1),        &
1049                       ref_state(0:nz+1), sa_init(0:nz+1), ug(0:nz+1),         &
1050                       u_init(0:nz+1), v_init(0:nz+1), vg(0:nz+1),             &
1051                       hom(0:nz+1,2,pr_palm+max_pr_user,0:statistic_regions),  &
1052                       hom_sum(0:nz+1,pr_palm+max_pr_user,0:statistic_regions) )
1053
1054             hom = 0.0_wp
1055
1056          ENDIF
1057
1058!
1059!--       NAMELIST-file is not needed anymore
1060          CALL close_file( 11 )
1061
1062       ENDIF
1063#if defined( __parallel )
1064       CALL MPI_BARRIER( MPI_COMM_WORLD, ierr )
1065#endif
1066    ENDDO
1067
1068    CALL location_message( 'finished', .TRUE. )
1069
1070 END SUBROUTINE parin
Note: See TracBrowser for help on using the repository browser.