source: palm/trunk/SOURCE/modules.f90 @ 4109

Last change on this file since 4109 was 4109, checked in by suehring, 2 years ago

Control discretization of advection term: separate initialization of WS advection flags for momentum and scalars. In this context, resort the bits and do some minor formatting; Make initialization of scalar-advection flags more flexible, i.e. introduce an arguemnt list to indicate non-cyclic boundaries (required for decycled scalars such as chemical species or aerosols); Introduce extended 'degradation zones', where horizontal advection of passive scalars is discretized by first-order scheme at all grid points that in the vicinity of buildings (<= 3 grid points). Even though no building is within the numerical stencil, first-order scheme is used. At fourth and fifth grid point the order of the horizontal advection scheme is successively upgraded. These extended degradation zones are used to avoid stationary numerical oscillations, which are responsible for high concentration maxima that may appear under shear-free stable conditions. Therefore, an additional 3D interger array used to store control flags is introduced; Change interface for scalar advection routine; Bugfix, avoid uninitialized value sk_num in vector version of WS scalar advection; Chemistry: Decycling boundary conditions are only set at the ghost points not on the prognostic grid points; Land-surface model: Relax checks for non-consistent initialization in case static or dynamic input is provided. For example, soil_temperature or deep_soil_temperature is not mandatory any more if dynamic input is available. Also, improper settings of x_type in namelist are only checked if no static file is available.

  • Property svn:keywords set to Id
File size: 138.8 KB
Line 
1!> @file modules.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-2019 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! ------------------
22! -advc_flags_1, advc_flags_2
23! +advc_flags_m, advc_flags_s
24!
25! Former revisions:
26! -----------------
27! $Id: modules.f90 4109 2019-07-22 17:00:34Z suehring $
28! remove old_dt
29!
30! 4079 2019-07-09 18:04:41Z suehring
31! + monotonic_limiter_z
32!
33! 4069 2019-07-01 14:05:51Z Giersch
34! Masked output running index mid has been introduced as a local variable to
35! avoid runtime error (Loop variable has been modified) in time_integration
36!
37! 4017 2019-06-06 12:16:46Z schwenkel
38! increase maximum number of virtual flights
39!
40! 3987 2019-05-22 09:52:13Z kanani
41! Introduce alternative switch for debug output during timestepping
42!
43! 3885 2019-04-11 11:29:34Z kanani
44! Changes related to global restructuring of location messages and introduction
45! of additional debug messages
46!
47! 3871 2019-04-08 14:38:39Z knoop
48! Initialized parameter region
49!
50! 3746 2019-02-16 12:41:27Z gronemeier
51! Removed most_method
52!
53! 3648 2019-01-02 16:35:46Z suehring
54! -surface_data_output +surface_output
55!
56! 3636 2018-12-19 13:48:34Z raasch
57! nopointer option removed
58!
59! 3597 2018-12-04 08:40:18Z maronga
60! Added flag parameter do_output_at_2m for automatic output of 2m-temperature
61!
62! 3589 2018-11-30 15:09:51Z suehring
63! Move the control parameter "salsa" from salsa_mod to control_parameters
64! (M. Kurppa)
65!
66! 3582 2018-11-29 19:16:36Z suehring
67! dom_dwd_user, Schrempf:
68! -uv_exposure flag, UV model is now part of biometeorology_mod
69!
70! 3543 2018-11-20 17:06:15Z suehring
71! +type_x_byte, type_y_byte
72!
73! 3542 2018-11-20 17:04:13Z suehring
74! +run_zone
75!
76! 3473 2018-10-30 20:50:15Z suehring
77! +virtual_measurement
78!
79! 3472 2018-10-30 20:43:50Z suehring
80! Add indoor model (kanani, srissman, tlang)
81!
82! 3467 2018-10-30 19:05:21Z suehring
83! Add biometeorology
84!
85! 3435 2018-10-26 18:25:44Z gronemeier
86! +mask_k_over_surface, mask_surface
87!
88! 3422 2018-10-24 19:01:57Z gronemeier
89! bugfix: increase number of blanks in output string
90!
91! 3421 2018-10-24 18:39:32Z gronemeier
92! Renamed output variables
93! +surface_data_output
94!
95! 3355 2018-10-16 14:03:34Z knoop
96! (from branch resler)
97! Increase dimension of uv_heights etc.
98!
99! 3302 2018-10-03 02:39:40Z raasch
100! +u/v_stokes_zu, u/v_stokes_zw
101!
102! 3298 2018-10-02 12:21:11Z kanani
103! Minor formatting/clean-up (kanani)
104! Added some variables for time treatment (Russo)
105!
106! 3294 2018-10-01 02:37:10Z raasch
107! ocean renamed ocean_mode
108!
109! 3289 2018-09-28 10:23:58Z suehring
110! +num_mean_inflow_profiles
111!
112! 3288 2018-09-28 10:23:08Z suehring
113! Modularization of all bulk cloud physics code components
114!
115! 3240 2018-09-12 12:04:40Z Giersch
116! max_pr_user_tmp has been defined as a control variable because it is not
117! local anymore
118!
119! 3235 2018-09-07 14:06:15Z sward
120! Added global variable dim_size_agtnum to own module. Necessary to avoid
121! circular dependency in agent output.
122!
123! 3232 2018-09-07 12:21:44Z raasch
124! references to mrun replaced by palmrun, and updated
125!
126! 3198 2018-08-15 09:23:10Z sward
127! Added multi_agent_system_end and multi_agent_system_start
128!
129! 3183 2018-07-27 14:25:55Z suehring
130! Rename offline nesting variables:
131! -inflow_l, inflow_n, inflow_r, inflow_s,
132!  nest_bound_l, nest_bound_n, nest_bound_r, nest_bound_s, nest_domain, forcing,
133!  force_bound_l, force_bound_n, force_bound_r, force_bound_s, outflow_l,
134!  outflow_n, outflow_r, outflow_s
135! +bc_dirichlet_l, bc_dirichlet_n, bc_dirichlet_n, bc_dirichlet_r,
136!  bc_radiation_l, bc_radiation_n, bc_radiation_n, bc_radiation_r, child_domain
137!  nesting_offline
138!
139! 3182 2018-07-27 13:36:03Z suehring
140! Default value of dz_max has changed to a more uncommon value of 999 (value
141! of dz_max can not be part of dz values when using new stretching procedure)
142!
143! 3159 2018-07-20 11:20:01Z sward
144! Added multi agent system
145!
146! 3157 2018-07-19 21:08:49Z maronga
147! added use_free_convection_scaling
148!
149! 3129 2018-07-16 07:45:13Z gronemeier
150! add target attribute to km and kh, necessary for output in tcm_data_output_3d
151!
152! 3120 2018-07-11 18:30:57Z gronemeier
153! +les_dynamic
154!
155! 3083 2018-06-19 14:03:12Z gronemeier
156! set dt_3d = 0.01
157!
158! 3065 2018-06-12 07:03:02Z Giersch
159! Variables concerning stretching introduced or revised
160!
161! 3045 2018-05-28 07:55:41Z Giersch
162! z_max_do2d removed
163!
164! 3026 2018-05-22 10:30:53Z schwenkel
165! Changed the name specific humidity to mixing ratio, since we are computing
166! mixing ratios.
167!
168! 3014 2018-05-09 08:42:38Z maronga
169! Added default values of u_max, v_max, and w_max to avoid floating invalid
170! during spinup
171!
172! 3004 2018-04-27 12:33:25Z Giersch
173! precipitation_rate removed
174!
175! 3003 2018-04-23 10:22:58Z Giersch
176! The inversion height is defined as a global variable now which belongs to the
177! module statistics
178!
179! 2968 2018-04-13 11:52:24Z suehring
180! +topo_min_level
181!
182! 2964 2018-04-12 16:04:03Z raasch
183! *_time_count variables are all initialized with zero now
184!
185! 2918 2018-03-21 15:52:14Z gronemeier
186! -l_grid, -l_wall
187!
188! 2906 2018-03-19 08:56:40Z Giersch
189! Module control_parameters has been extended with ENVIRONMENT variables
190! read/write_svf
191!
192! 2894 2018-03-15 09:17:58Z Giersch
193! _prerun flags were removed, Control paramters restart_string and length have
194! been added
195!
196! 2881 2018-03-13 16:24:40Z suehring
197! Added flag for switching on/off calculation of soil moisture
198!
199! 2797 2018-02-08 13:24:35Z suehring
200! +ghf_av
201!
202! 2776 2018-01-31 10:44:42Z Giersch
203! Variable synthetic_turbulence_generator has been abbreviated and _prerun flags
204! for skipping module related restart data has beed introduced
205!
206! 2765 2018-01-22 11:34:58Z maronga
207! Set initial value for time_since_reference_point
208!
209! 2746 2018-01-15 12:06:04Z suehring
210! +plant_canopy
211!
212! 2742 2018-01-12 14:59:47Z suehring
213! +tsurf_av
214!
215! 2735 2018-01-11 12:01:27Z suehring
216! +r_a_av
217!
218! 2718 2018-01-02 08:49:38Z maronga
219! Corrected "Former revisions" section
220!
221! 2696 2017-12-14 17:12:51Z kanani
222! Change in file header (GPL part)
223! Implementation of uv exposure model (FK)
224! + turbulence closure variables (control_parameters)
225! + arrays for prognostic equation of disspiation (arrays_3d)
226! + km_av, kh_av (TG)
227! Implementation of chemistry module (FK)
228! -lod
229! +topo_distinct (MS)
230!
231! 2669 2017-12-06 16:03:27Z raasch
232! CONTIGUOUS-attribut added to 3d pointer arrays,
233! coupling_char extended to LEN=8
234!
235! 2575 2017-10-24 09:57:58Z maronga
236! Renamed phi -> latitude, moved longitude from radiation model to modules
237!
238! 2563 2017-10-19 15:36:10Z Giersch
239! Variable wind_turbine was added to control_parameters
240!
241! 2550 2017-10-16 17:12:01Z boeske
242! complex_terrain namelist parameter added
243!
244! 2508 2017-10-02 08:57:09Z suehring
245! Change default value for pt/q/s/sa_vertical_gradient_level
246!
247! 2499 2017-09-22 16:47:58Z kanani
248! Default changed to fft_method = 'temperton-algorithm'
249!
250! 2408 2017-09-05 15:47:53Z gronemeier
251! Changed default value of mg_cycles from -1 to 4.
252!
253! 2375 2017-08-29 14:10:28Z schwenkel
254! Moved mass_of_solute, molecular_weight_of_solute, molecular_weight_of_water,
255! vanthoff back from particle attributes because they can now also be used in
256! bulk microphysics.
257! Added aerosol_bulk, aerosol_nacl, aerosol_c3h4o4, aerosol_nh4no3
258!
259! 2372 2017-08-25 12:37:32Z sward
260! y_shift namelist parameter added
261!
262! 2339 2017-08-07 13:55:26Z gronemeier
263! corrected timestamp in header
264!
265! 2338 2017-08-07 12:15:38Z gronemeier
266! moved 1d-model varaibles to own module model_1d_mod
267!
268! 2337 2017-08-07 08:59:53Z gronemeier
269! -old_dt_1d
270! +l1d_diss
271!
272! 2326 2017-08-01 07:23:24Z gronemeier
273! Updated variable descriptions
274!
275! 2320 2017-07-21 12:47:43Z suehring
276! -ptnudge, qnudge, tnudge, td_lsa_lpt, td_lsa_q, td_sub_lpt, td_sub_q, ug_vert,
277!  vg_vert, unudge, vnudge, wsubs_vert, shf_surf, p_surf, pt_surf, q_surt,
278!  qsws_surf, tmp_tnudge, timenudge, time_surf, time_vert
279!
280! 2300 2017-06-29 13:31:14Z raasch
281! default value for host changed to '????', default value for loop_optimization
282! changed to 'cache', default value for termination_time_needed set to 35.0
283!
284! 2298 2017-06-29 09:28:18Z raasch
285! missing variable descriptions have been added,
286! type of write_binary changed from CHARACTER to LOGICAL
287! -plot_precision, plot_3d_precision, return_addres, return_username,
288! avs_data_file, exchange_mg, sendrecvcound_yxd, sendrecv_in_background,
289! port_name, profile_number, cross_ts_numbers, cross_ts_number_count,
290! dots_crossindex, dots_index, cross_ts_uymax, cross_ts_uymax_computed,
291! cross_ts_uymin, cross_ts_uymin_computed
292!
293! 2296 2017-06-28 07:53:56Z maronga
294! Added parameters for model spinup
295!
296! 2292 2017-06-20 09:51:42Z schwenkel
297! Implementation of new microphysic scheme: cloud_scheme = 'morrison'
298! includes two more prognostic equations for cloud drop concentration (nc) 
299! and cloud water content (qc).
300!
301! 2277 2017-06-12 10:47:51Z kanani
302! Added doxygen comments for variables/parameters,
303! removed unused variables dissipation_control, do2d_xy_n, do2d_xz_n, do2d_yz_n,
304! do3d_avs_n, lptnudge, lqnudge, lunudge, lvnudge, lwnudge, skip_do_avs,
305! sums_up_fraction_l.
306!
307! 2259 2017-06-08 09:09:11Z gronemeier
308! Implemented synthetic turbulence generator
309!
310! 2256 2017-06-07 13:58:08Z suehring
311! Change default value of zeta_min to -20
312! Increase dimension for wall_heatflux, etc.
313!
314! 2233 2017-05-30 18:08:54Z suehring
315!
316! 2232 2017-05-30 17:47:52Z suehring
317! Renamed wall_flags_0 and wall_flags_00 into advc_flags_1 and advc_flags_2,
318! respectively. Moreover, introduced further flag array wall_flags_0.
319!
320! Adjustments for new topography concept:
321!   -fwxm, fwxp, fwym, fwyp, fxm, fxp, fym, fyp, rif_wall, wall_e_x, wall_e_y,
322!   -wall_v, wall_u, wall_w_x, wall_w_y, wall_qflux, wall_sflux, wall_nrflux,
323!   -wall_qrflux
324!
325! Adjustments for new surface concept:
326!   +land_surface
327!   -z0, z0h, z0q, us, ts, qs, qsws, nrs, nrsws, qrs, qrsws, ssws, ss, saswsb
328!   -nzb_diff_u, nzb_diff_v, nzt_diff
329!   -uswst, vswst, tswst, sswst, saswst, qswst, qrswst, nrswst, qswst_remote
330!
331! Generic tunnel setup:
332!   +tunnel_height, tunnel_length, tunnel_width_x, tunnel_width_y,
333!   +tunnel_wall_depth
334!
335! Topography input via netcdf
336!   +lod
337!
338! 2200 2017-04-11 11:37:51Z suehring
339! -monotonic_adjustment
340!
341! 2174 2017-03-13 08:18:57Z maronga
342! Changed default values for most_method to 'newton'
343!
344! 2118 2017-01-17 16:38:49Z raasch
345! -acc_rank, background_communication, i_left, i_right, j_south, j_north,
346!  num_acc_per_node, on_device
347!
348! 2107 2017-01-09 12:21:49Z kanani
349! Preparation for doxygen comments (Giersch)
350!
351! 2050 2016-11-08 15:00:55Z gronemeier
352! Implement turbulent outflow condition
353!
354! 2037 2016-10-26 11:15:40Z knoop
355! Anelastic approximation implemented
356!
357! 2031 2016-10-21 15:11:58Z knoop
358! renamed variable rho to rho_ocean and rho_av to rho_ocean_av
359!
360! 2011 2016-09-19 17:29:57Z kanani
361! +urban_surface, +lsf_exception, +varnamelength
362!
363! 2007 2016-08-24 15:47:17Z kanani
364! Increased DIMENSION of data_output, data_output_user, do2d, do3d
365!
366! 2000 2016-08-20 18:09:15Z knoop
367! Forced header and separation lines into 80 columns
368!
369! 1992 2016-08-12 15:14:59Z suehring
370! +constant_top_scalarflux, top_scalarflux
371! default of bc_s_t adjusted
372!
373! 1968 2016-07-18 12:01:49Z suehring
374! Changed dimension for MPI-datatypes type_x_int and type_y_int
375!
376! 1960 2016-07-12 16:34:24Z suehring
377! Separate humidity and passive scalar
378! +bc_s_t_val, diss_s_s, diss_l_s, flux_s_s, flux_l_s, s, sp, s1, s2, s3, ssws_av,
379!  s_init, s_surf, sums_wsss_ws_l, ss, ssws, sswst, ts_m, wall_sflux
380! +constant_scalarflux, ibc_s_b, ibc_s_t, s_vertical_gradient_level_ind
381!
382! Unused variables removed
383! -gamma_x, gamma_y, gamma_z, var_x, var_y, var_z
384!
385! Change initial values (in order to unify gradient calculation):
386! pt_vertical_gradient_level, sa_vertical_gradient_level
387!
388! 1957 2016-07-07 10:43:48Z suehring
389! +fl_max, num_leg, num_var_fl, num_var_fl_user, var_fl_max, virtual_flight
390!
391! 1918 2016-05-27 14:35:57Z raasch
392! default timestep switched from -1.0 to +1.0 in order to avoid wrong sign of
393! initially calculated divergence
394!
395! 1906 2016-05-24 14:38:08Z suehring
396! default value of mg_switch_to_pe0_level changed to -1
397!
398! 1849 2016-04-08 11:33:18Z hoffmann
399! bfactor, mass_of_solute, molecular_weight_of_solute, molecular_weight_of_water,
400! vanthoff moved to mod_particle_attributes.
401! dt_micro and several cloud_parameters moved to microphysics_mod.
402! 1d-microphysics profiles moved to microphysics_mod.
403!
404! 1845 2016-04-08 08:29:13Z raasch
405! -nzb_2d
406!
407! 1833 2016-04-07 14:23:03Z raasch
408! spectra parameter moved to spectra module
409!
410! 1831 2016-04-07 13:15:51Z hoffmann
411! curvature_solution_effects removed
412! turbulence renamed collision_turbulence, drizzle renamed
413! cloud_water_sedimentation
414!
415! 1822 2016-04-07 07:49:42Z hoffmann
416! icloud_scheme removed. microphysics_sat_adjust, microphysics_kessler,
417! microphysics_seifert added.
418!
419! 1815 2016-04-06 13:49:59Z raasch
420! cpp-directive for decalpha removed
421!
422! 1808 2016-04-05 19:44:00Z raasch
423! MPI module used by default on all machines
424!
425! 1804 2016-04-05 16:30:18Z maronga
426! Removed code for parameter file check (__check)
427!
428! 1788 2016-03-10 11:01:04Z maronga
429! Added roughness length for moisture (z0q)
430!
431! 1786 2016-03-08 05:49:27Z raasch
432! module spectrum moved to new separate module
433!
434! 1783 2016-03-06 18:36:17Z raasch
435! netcdf variables moved to the netcdf-interface module
436!
437! 1779 2016-03-03 08:01:28Z raasch
438! coupling_char extended to LEN=3
439!
440! 1764 2016-02-28 12:45:19Z raasch
441! some reformatting
442!
443! 1762 2016-02-25 12:31:13Z hellstea
444! +nest_* variables, size of volume_flow arrays increased by one element
445!
446! 1738 2015-12-18 13:56:05Z raasch
447! +mean_surface_level_height
448!
449! 1695 2015-10-27 10:03:11Z maronga
450! Removed rif (forgotten in last revision)
451!
452! 1693 2015-10-27 08:35:45Z maronga
453! Renamed zp -> z_mo
454!
455! 1691 2015-10-26 16:17:44Z maronga
456! Renamed Obukhov length. Added ol, removed rif. Increased number of profiles
457! (pr_palm). Changed default values for dissipation_1d to 'detering' and
458! (mixing_length_1d to 'blackadar'. Added most_method. rif_min and rif_max
459! renamed to zeta_min and zeta_max and new values assigned.
460!
461! 1682 2015-10-07 23:56:08Z knoop
462! Code annotations made doxygen readable
463!
464! 1677 2015-10-02 13:25:23Z boeske
465! +ngp_yz_int, type_xz_int, type_yz_int
466!
467! 1666 2015-09-23 07:31:10Z raasch
468! +user_interface_current_revision, user_interface_required_revision in
469! control_parameters
470!
471! 1639 2015-08-31 14:46:48Z knoop
472! Bugfix: string 'unknown' extended to match LEN=13
473!
474! 1575 2015-03-27 09:56:27Z raasch
475! +ngp_xz
476!
477! 1560 2015-03-06 10:48:54Z keck
478! +recycling_yshift
479!
480! 1557 2015-03-05 16:43:04Z suehring
481! +monotonic_adjustment
482!
483! 1551 2015-03-03 14:18:16Z maronga
484! Increased pr_palm to 120. Increased length of dots_unit and dots_label to 13
485! digits. Increased length of domask, do2d, and do3d to 20 digits.
486!
487! 1496 2014-12-02 17:25:50Z maronga
488! Renamed "radiation" -> "cloud_top_radiation"
489!
490! 1484 2014-10-21 10:53:05Z kanani
491! Changes due to new module structure of the plant canopy model:
492!   canopy-model related parameters/variables moved to module
493!   plant_canopy_model_mod
494!
495! 1468 2014-09-24 14:06:57Z maronga
496! Adapted for use on up to 6-digit processor cores.
497! Increased identifier string length for user-defined quantities to 20.
498!
499! 1450 2014-08-21 07:31:51Z heinze
500! ntnudge from 100 to 1000 increased to allow longer simulations
501!
502! 1431 2014-07-15 14:47:17Z suehring
503! +var_d
504!
505! 1429 2014-07-15 12:53:45Z knoop
506! +ensemble_member_nr to prepare the random_generator for ensemble runs
507!
508! 1382 2014-04-30 12:15:41Z boeske
509! Renamed variables which store large scale forcing tendencies
510! pt_lsa -> td_lsa_lpt, pt_subs -> td_sub_lpt,
511! q_lsa  -> td_lsa_q,   q_subs  -> td_sub_q
512!
513! 1365 2014-04-22 15:03:56Z boeske
514! Usage of large scale forcing enabled:
515! increase pr_palm from 90 to 100 to allow for more standard profiles
516! + ngp_sums_ls, pt_lsa, pt_subs, q_lsa, q_subs, tmp_tnudge, sums_ls_l,
517! use_subsidence_tendencies
518!
519! 1361 2014-04-16 15:17:48Z hoffmann
520! tend_* removed
521! call_microphysics_at_all_substeps added
522! default of drizzle set to true
523!
524! 1359 2014-04-11 17:15:14Z hoffmann
525! particle_attributes moved to mod_particle_attributes.f90
526!
527! 1353 2014-04-08 15:21:23Z heinze
528! REAL constants provided with KIND-attribute
529!
530! 1327 2014-03-21 11:00:16Z raasch
531! REAL constants defined as wp-kind
532! -avs_output, data_output_format, do3d_compress, iso2d_output, netcdf_output
533!
534! 1320 2014-03-20 08:40:49Z raasch
535! ONLY-attribute added to USE-statements,
536! kind-parameters added to all INTEGER and REAL declaration statements,
537! kinds are defined in new module kinds,
538! old module precision_kind is removed,
539! revision history before 2012 removed,
540! comment fields (!:) to be used for variable explanations added to
541! all variable declaration statements
542!
543! 1318 2014-03-17 13:35:16Z raasch
544! module cpulog moved to new separate module-file
545! interface for cpu_log removed
546!
547! 1314 2014-03-14 18:25:17Z suehring
548! + log_z_z0, number_of_sublayers, z0_av_global
549! 1308 2014-03-13 14:58:42Z fricke
550! +ntdim_2d_xy, ntdim_2d_xz, ntdim_2d_yz, ntdim_3d
551!
552! 1257 2013-11-08 15:18:40Z raasch
553! set default values for grid indices of maximum velocity components
554! u|v|w_max_ijk
555!
556! 1241 2013-10-30 11:36:58Z heinze
557! Usage of nudging enabled
558! +nudging, ntnudge, ptnudge, qnudge, tnudge, unudge, vnudge, wnudge
559! increase pr_palm from 80 to 90 to allow for more standard profiles
560!
561! Enable prescribed time depenend surface fluxes and geostrophic wind read in
562! from external file LSF_DATA
563! +large_scale_forcing, lsf_surf, lsf_vert, nlsf, time_surf, shf_surf, qsws_surf,
564!  pt_surf, q_surf, p_surf, time_vert, ug_vert, vg_vert, wsubs_vert
565!
566! 1221 2013-09-10 08:59:13Z raasch
567! wall_flags_0 changed to 32bit int, +wall_flags_00,
568! +rflags_s_inner, rflags_invers
569!
570! 1216 2013-08-26 09:31:42Z raasch
571! +transpose_compute_overlap,
572! several variables are now defined in the serial (non-parallel) case also
573!
574! 1212 2013-08-15 08:46:27Z raasch
575! +tri
576!
577! 1179 2013-06-14 05:57:58Z raasch
578! +reference_state, ref_state, use_initial_profile_as_reference, vpt_reference,
579! use_reference renamed use_single_reference_value
580!
581! 1159 2013-05-21 11:58:22Z fricke
582! -bc_lr_dirneu, bc_lr_neudir, bc_ns_dirneu, bc_ns_neudir
583! +use_cmax
584!
585! 1128 2013-04-12 06:19:32Z raasch
586! +background_communication, i_left, i_right, j_north, j_south, req, req_count,
587! send_receive, sendrecv_in_background, wait_stat
588!
589! 1115 2013-03-26 18:16:16Z hoffmann
590! unused variables removed
591!
592! 1113 2013-03-10 02:48:14Z raasch
593! +on_device
594!
595! 1111 2013-03-08 23:54:10Z raasch
596! +tric, nr_timesteps_this_run
597!
598! 1106 2013-03-04 05:31:38Z raasch
599! array_kind renamed precision_kind, pdims defined in serial code
600! bugfix: default value assigned to coupling_start_time
601!
602! 1095 2013-02-03 02:21:01Z raasch
603! FORTRAN error in r1092 removed
604!
605! 1092 2013-02-02 11:24:22Z raasch
606! character length in some derived type changed for better alignment
607!
608! 1065 2012-11-22 17:42:36Z hoffmann
609! + c_sedimentation, limiter_sedimentation, turbulence, a_1, a_2, a_3, b_1, b_2,
610! + b_3, c_1, c_2, c_3, beta_cc
611!
612! bottom boundary condition of qr, nr changed from Dirichlet to Neumann
613!
614! 1053 2012-11-13 17:11:03Z hoffmann
615! necessary expansions according to the two new prognostic equations (nr, qr)
616! of the two-moment cloud physics scheme:
617! +*_init, flux_l_*, diss_l_*, flux_s_*, diss_s_*, *sws, *swst, tend_*, *, *_p
618! +t*_m, *_1, *_2, *_3, *_av, bc_*_b, bc_*_t, ibc_*_b, ibc_*_t, bc_*_t_val,
619! +*_vertical_gradient, *_surface_initial_change, *_vertical_gradient_level,
620! +*_vertical_gradient_level_ind, *_surface, constant_waterflux_*, 
621! +cloud_scheme, icloud_scheme, surface_waterflux_*, sums_ws*s_ws_l, wall_*flux
622!
623! constants for the two-moment scheme:
624! +a_vent, a_term, b_vent, b_term, c_evap, c_term, cof, eps_sb, k_cc, k_cr, k_rr,
625! +k_br, kappa_rr, kin_vis_air, mu_constant_value, nc, pirho_l, dpirho_l, rho_1,
626! +schmidt, schmidt_p_1d3, stp, x0, xmin, xmax, dt_precipitation, w_precipitation
627!
628! steering parameters for the two_moment scheme:
629! +mu_constant, ventilation_effect
630!
631! 1036 2012-10-22 13:43:42Z raasch
632! code put under GPL (PALM 3.9)
633!
634! 1031 2012-10-19 14:35:30Z raasch
635! +output_format_netcdf
636!
637! 1015 2012-09-27 09:23:24Z raasch
638! +acc_rank, num_acc_per_node,
639! -adjust_mixing_length
640!
641! 1010 2012-09-20 07:59:54Z raasch
642! pointer free version can be generated with cpp switch __nopointer
643!
644! 1003 2012-09-14 14:35:53Z raasch
645! -grid_matching, nxa, nya, etc., nnx_pe, nny_pe, spl_*
646!
647! 1001 2012-09-13 14:08:46Z raasch
648! -asselin_filter_factor, cut_spline_overshoot, dt_changed, last_dt_change,
649! last_dt_change_1d, long_filter_factor, overshoot_limit_*, ups_limit_*
650! several pointer/target arrays converted to normal ones
651!
652! 996 2012-09-07 10:41:47Z raasch
653! -use_prior_plot1d_parameters
654!
655! 978 2012-08-09 08:28:32Z fricke
656! +c_u_m, c_u_m_l, c_v_m, c_v_m_l, c_w_m, c_w_m_l,
657! +bc_lr_dirneu, bc_lr_neudir, bc_ns_dirneu, bc_ns_neudir
658! -km_damp_x, km_damp_y, km_damp_max, outflow_damping_width
659! +z0h, z0h_av, z0h_factor, z0h1d
660! +ptdf_x, ptdf_y, pt_damping_width, pt_damping_factor
661!
662! 964 2012-07-26 09:14:24Z raasch
663! -cross_linecolors, cross_linestyles, cross_normalized_x, cross_normx_factor,
664! cross_normalized_y, cross_normy_factor, cross_pnc_local,
665! cross_profile_numbers, cross_profile_number_counter, cross_uxmax,
666! cross_uxmax_computed, cross_uxmax_normalized,
667! cross_uxmax_normalized_computed, cross_uxmin, cross_uxmin_computed,
668! cross_uxmin_normalized, cross_uxmin_normalized_computed, cross_uymax,
669! cross_uymin, cross_xtext, dopr_crossindex, dopr_label, linecolors, linestyles,
670! nz_do1d, profil_output, z_max_do1d, z_max_do1d_normalized
671!
672! 951 2012-07-19 14:22:52Z hoffmann
673! changing profile_columns and profile_rows
674!
675! 940 2012-07-09 14:31:00Z raasch
676! +neutral
677!
678! 927 2012-06-06 19:15:04Z raasch
679! +masking_method
680!
681! 880 2012-04-13 06:28:59Z raasch
682! gathered_size, subdomain_size moved to control_parameters
683!
684! 866 2012-03-28 06:44:41Z raasch
685! interface for global_min_max changed
686!
687! 861 2012-03-26 14:18:34Z suehring
688! +wall_flags_0
689! -boundary_flags
690! +nzb_max
691! +adv_sca_1, +adv_mom_1
692!
693! 849 2012-03-15 10:35:09Z raasch
694! +deleted_particles, deleted_tails, tr.._count_sum, tr.._count_recv_sum in
695! particle_attributes,
696! +de_dx, de_dy, de_dz in arrays_3d,
697! first_call_advec_particles renamed first_call_lpm
698!
699! 828 2012-02-21 12:00:36Z raasch
700! +dissipation_classes, radius_classes, use_kernel_tables,
701! particle feature color renamed class
702!
703! 825 2012-02-19 03:03:44Z raasch
704! +bfactor, curvature_solution_effects, eps_ros, molecular_weight_of_water,
705! vanthoff, -b_cond in cloud_parameters,
706! dopts_num increased to 29, particle attributes speed_x|y|z_sgs renamed
707! rvar1|2|3
708! wang_collision_kernel and turbulence_effects_on_collision replaced by
709! collision_kernel, hall_kernel, palm_kernel, wang_kernel
710!
711! 809 2012-01-30 13:32:58Z marongas
712! Bugfix: replaced .AND. and .NOT. with && and ! in the preprocessor directives
713!
714! 807 2012-01-25 11:53:51Z maronga
715! New cpp directive "__check" implemented which is used by check_namelist_files.
716! New parameter check_restart has been defined which is needed by
717! check_namelist_files only.
718!
719! 805 2012-01-17 15:53:28Z franke
720! Bugfix collective_wait must be out of parallel branch for runs in serial mode
721!
722! 801 2012-01-10 17:30:36Z suehring
723! Dimesion of sums_wsus_ws_l, ! sums_wsvs_ws_l, sums_us2_ws_l, sums_vs2_ws_l,
724! sums_ws2_ws_l, sums_wspts_ws_l, sums_wsqs_ws_l, sums_wssas_ws_l increased.
725! for thread-safe summation in advec_ws.
726!
727! RCS Log replace by Id keyword, revision history cleaned up
728!
729! Revision 1.95  2007/02/11 13:18:30  raasch
730! version 3.1b (last under RCS control)
731!
732! Revision 1.1  1997/07/24 11:21:26  raasch
733! Initial revision
734!
735!
736!------------------------------------------------------------------------------!
737! Description:
738! ------------
739!> Definition of global variables
740!------------------------------------------------------------------------------!
741
742
743!------------------------------------------------------------------------------!
744! Description:
745! ------------
746!> Definition of variables for special advection schemes.
747!------------------------------------------------------------------------------!
748 MODULE advection
749 
750    USE kinds
751
752    REAL(wp), DIMENSION(:), ALLOCATABLE ::  aex  !< exponential coefficient for the Bott-Chlond advection scheme
753    REAL(wp), DIMENSION(:), ALLOCATABLE ::  bex  !< exponential coefficient for the Bott-Chlond advection scheme
754    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dex  !< exponential coefficient for the Bott-Chlond advection scheme
755    REAL(wp), DIMENSION(:), ALLOCATABLE ::  eex  !< exponential coefficient for the Bott-Chlond advection scheme
756   
757    SAVE
758
759 END MODULE advection
760
761
762
763!------------------------------------------------------------------------------!
764! Description:
765! ------------
766!> The variable in this module is used by multi_agent_system_mod AND
767!> netcdf_interface_mod. It must be here to avoid circular dependency.
768!> This is a workaround.
769!------------------------------------------------------------------------------!
770 MODULE mas_global_attributes
771 
772    USE kinds
773
774    INTEGER(iwp) ::  dim_size_agtnum  !< size of agent number dimension for netCDF output
775
776    SAVE
777
778 END MODULE mas_global_attributes
779
780
781!------------------------------------------------------------------------------!
782! Description:
783! ------------
784!> Definition of all arrays defined on the computational grid.
785!------------------------------------------------------------------------------!
786 MODULE arrays_3d
787
788    USE kinds
789
790    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_u_m                  !< mean phase velocity at outflow for u-component used in radiation boundary condition
791    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_u_m_l                !< mean phase velocity at outflow for u-component used in radiation boundary condition (local subdomain value)
792    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_v_m                  !< mean phase velocity at outflow for v-component used in radiation boundary condition
793    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_v_m_l                !< mean phase velocity at outflow for v-component used in radiation boundary condition (local subdomain value)
794    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_w_m                  !< mean phase velocity at outflow for w-component used in radiation boundary condition
795    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_w_m_l                !< mean phase velocity at outflow for w-component used in radiation boundary condition (local subdomain value)
796    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddzu                   !< 1/dzu
797    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddzu_pres              !< modified ddzu for pressure solver
798    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dd2zu                  !< 1/(dzu(k)+dzu(k+1))
799    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dzu                    !< vertical grid size (u-grid)
800    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddzw                   !< 1/dzw
801    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dzw                    !< vertical grid size (w-grid)
802    REAL(wp), DIMENSION(:), ALLOCATABLE ::  hyp                    !< hydrostatic pressure
803    REAL(wp), DIMENSION(:), ALLOCATABLE ::  inflow_damping_factor  !< used for turbulent inflow (non-cyclic boundary conditions)
804    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ptdf_x                 !< damping factor for potential temperature in x-direction
805    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ptdf_y                 !< damping factor for potential temperature in y-direction
806    REAL(wp), DIMENSION(:), ALLOCATABLE ::  pt_init                !< initial profile of potential temperature
807    REAL(wp), DIMENSION(:), ALLOCATABLE ::  q_init                 !< initial profile of total water mixing ratio
808                                                                   !< (or total water content with active cloud physics)
809    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rdf                    !< rayleigh damping factor for velocity components
810    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rdf_sc                 !< rayleigh damping factor for scalar quantities
811    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ref_state              !< reference state of potential temperature
812                                                                   !< (and density in case of ocean simulation)
813    REAL(wp), DIMENSION(:), ALLOCATABLE ::  s_init                 !< initial profile of passive scalar concentration
814    REAL(wp), DIMENSION(:), ALLOCATABLE ::  sa_init                !< initial profile of salinity (ocean)
815    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ug                     !< geostrophic wind component in x-direction
816    REAL(wp), DIMENSION(:), ALLOCATABLE ::  u_init                 !< initial profile of horizontal velocity component u
817    REAL(wp), DIMENSION(:), ALLOCATABLE ::  u_stokes_zu            !< u-component of Stokes drift velocity at zu levels
818    REAL(wp), DIMENSION(:), ALLOCATABLE ::  u_stokes_zw            !< u-component of Stokes drift velocity at zw levels
819    REAL(wp), DIMENSION(:), ALLOCATABLE ::  vg                     !< geostrophic wind component in y-direction
820    REAL(wp), DIMENSION(:), ALLOCATABLE ::  v_init                 !< initial profile of horizontal velocity component v
821    REAL(wp), DIMENSION(:), ALLOCATABLE ::  v_stokes_zu            !< v-component of Stokes drift velocity at zu levels
822    REAL(wp), DIMENSION(:), ALLOCATABLE ::  v_stokes_zw            !< v-component of Stokes drift velocity at zw levels
823    REAL(wp), DIMENSION(:), ALLOCATABLE ::  w_subs                 !< subsidence/ascent velocity
824    REAL(wp), DIMENSION(:), ALLOCATABLE ::  x                      !< horizontal grid coordinate of v-grid (in m)
825    REAL(wp), DIMENSION(:), ALLOCATABLE ::  xu                     !< horizontal grid coordinate of u-grid (in m)
826    REAL(wp), DIMENSION(:), ALLOCATABLE ::  y                      !< horizontal grid coordinate of u-grid (in m)
827    REAL(wp), DIMENSION(:), ALLOCATABLE ::  yv                     !< horizontal grid coordinate of v-grid (in m)
828    REAL(wp), DIMENSION(:), ALLOCATABLE ::  zu                     !< vertical grid coordinate of u-grid (in m)
829    REAL(wp), DIMENSION(:), ALLOCATABLE ::  zw                     !< vertical grid coordinate of w-grid (in m)
830
831    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  c_u                   !< phase speed of u-velocity component
832    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  c_v                   !< phase speed of v-velocity component
833    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  c_w                   !< phase speed of w-velocity component
834    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_diss           !< artificial numerical dissipation flux at south face of grid box - TKE dissipation
835    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_e              !< artificial numerical dissipation flux at south face of grid box - subgrid-scale TKE
836    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_nc             !< artificial numerical dissipation flux at south face of grid box - clouddrop-number concentration   
837    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_nr             !< artificial numerical dissipation flux at south face of grid box - raindrop-number concentration   
838    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_pt             !< artificial numerical dissipation flux at south face of grid box - potential temperature
839    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_q              !< artificial numerical dissipation flux at south face of grid box - mixing ratio
840    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_qc             !< artificial numerical dissipation flux at south face of grid box - cloudwater
841    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_qr             !< artificial numerical dissipation flux at south face of grid box - rainwater
842    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_s              !< artificial numerical dissipation flux at south face of grid box - passive scalar
843    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_sa             !< artificial numerical dissipation flux at south face of grid box - salinity
844    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_u              !< artificial numerical dissipation flux at south face of grid box - u-component
845    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_v              !< artificial numerical dissipation flux at south face of grid box - v-component
846    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_w              !< artificial numerical dissipation flux at south face of grid box - w-component
847    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  dzu_mg                !< vertical grid size (u-grid) for multigrid pressure solver
848    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  dzw_mg                !< vertical grid size (w-grid) for multigrid pressure solver
849    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_diss           !< 6th-order advective flux at south face of grid box - TKE dissipation
850    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_e              !< 6th-order advective flux at south face of grid box - subgrid-scale TKE
851    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_nc             !< 6th-order advective flux at south face of grid box - clouddrop-number concentration
852    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_nr             !< 6th-order advective flux at south face of grid box - raindrop-number concentration
853    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_pt             !< 6th-order advective flux at south face of grid box - potential temperature
854    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_q              !< 6th-order advective flux at south face of grid box - mixing ratio
855    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_qc             !< 6th-order advective flux at south face of grid box - cloudwater
856    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_qr             !< 6th-order advective flux at south face of grid box - rainwater
857    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_s              !< 6th-order advective flux at south face of grid box - passive scalar
858    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_sa             !< 6th-order advective flux at south face of grid box - salinity
859    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_u              !< 6th-order advective flux at south face of grid box - u-component
860    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_v              !< 6th-order advective flux at south face of grid box - v-component
861    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_w              !< 6th-order advective flux at south face of grid box - w-component
862    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f1_mg                 !< grid factor used in right hand side of Gauss-Seidel equation (multigrid)
863    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f2_mg                 !< grid factor used in right hand side of Gauss-Seidel equation (multigrid)
864    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f3_mg                 !< grid factor used in right hand side of Gauss-Seidel equation (multigrid)
865    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  mean_inflow_profiles  !< used for turbulent inflow (non-cyclic boundary conditions)
866    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  precipitation_amount  !< precipitation amount due to gravitational settling (bulk microphysics)
867    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  pt_slope_ref          !< potential temperature in rotated coordinate system
868                                                                    !< (in case of sloped surface)
869    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  total_2d_a            !< horizontal array to store the total domain data, used for atmosphere-ocean coupling (atmosphere data)
870    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  total_2d_o            !< horizontal array to store the total domain data, used for atmosphere-ocean coupling (ocean data)
871   
872    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  d           !< divergence
873    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  de_dx       !< gradient of sgs tke in x-direction (lpm)
874    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  de_dy       !< gradient of sgs tke in y-direction (lpm)
875    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  de_dz       !< gradient of sgs tke in z-direction (lpm)
876    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_diss !< artificial numerical dissipation flux at left face of grid box - TKE dissipation
877    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_e    !< artificial numerical dissipation flux at left face of grid box - subgrid-scale TKE
878    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_nc   !< artificial numerical dissipation flux at left face of grid box - clouddrop-number concentration
879    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_nr   !< artificial numerical dissipation flux at left face of grid box - raindrop-number concentration
880    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_pt   !< artificial numerical dissipation flux at left face of grid box - potential temperature
881    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_q    !< artificial numerical dissipation flux at left face of grid box - mixing ratio
882    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_qc   !< artificial numerical dissipation flux at left face of grid box - cloudwater
883    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_qr   !< artificial numerical dissipation flux at left face of grid box - rainwater
884    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_s    !< artificial numerical dissipation flux at left face of grid box - passive scalar
885    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_sa   !< artificial numerical dissipation flux at left face of grid box - salinity
886    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_u    !< artificial numerical dissipation flux at left face of grid box - u-component
887    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_v    !< artificial numerical dissipation flux at left face of grid box - v-component
888    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_w    !< artificial numerical dissipation flux at left face of grid box - w-component
889    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_diss !< 6th-order advective flux at south face of grid box - TKE dissipation
890    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_e    !< 6th-order advective flux at south face of grid box - subgrid-scale TKE
891    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_nc   !< 6th-order advective flux at south face of grid box - clouddrop-number concentration
892    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_nr   !< 6th-order advective flux at south face of grid box - raindrop-number concentration
893    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_pt   !< 6th-order advective flux at south face of grid box - potential temperature
894    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_q    !< 6th-order advective flux at south face of grid box - mixing ratio
895    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_qc   !< 6th-order advective flux at south face of grid box - cloudwater
896    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_qr   !< 6th-order advective flux at south face of grid box - rainwater
897    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_s    !< 6th-order advective flux at south face of grid box - passive scalar
898    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_sa   !< 6th-order advective flux at south face of grid box - salinity
899    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_u    !< 6th-order advective flux at south face of grid box - u-component
900    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_v    !< 6th-order advective flux at south face of grid box - v-component
901    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_w    !< 6th-order advective flux at south face of grid box - w-component
902    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  kh  !< eddy diffusivity for heat
903    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  km  !< eddy diffusivity for momentum
904    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  prr         !< rain rate
905    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  p_loc       !< local array in multigrid/sor solver containing the pressure which is iteratively advanced in each iteration step
906    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  tend        !< tendency field (time integration)
907    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  tric        !< coefficients of the tridiagonal matrix for solution of the Poisson equation in Fourier space
908    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_l       !< velocity data (u at left boundary) from time level t-dt required for radiation boundary condition
909    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_n       !< velocity data (u at north boundary) from time level t-dt required for radiation boundary condition
910    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_r       !< velocity data (u at right boundary) from time level t-dt required for radiation boundary condition
911    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_s       !< velocity data (u at south boundary) from time level t-dt required for radiation boundary condition
912    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_l       !< velocity data (v at left boundary) from time level t-dt required for radiation boundary condition
913    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_n       !< velocity data (v at north boundary) from time level t-dt required for radiation boundary condition
914    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_r       !< velocity data (v at right boundary) from time level t-dt required for radiation boundary condition
915    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_s       !< velocity data (v at south boundary) from time level t-dt required for radiation boundary condition
916    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_l       !< velocity data (w at left boundary) from time level t-dt required for radiation boundary condition
917    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_n       !< velocity data (w at north boundary) from time level t-dt required for radiation boundary condition
918    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_r       !< velocity data (w at right boundary) from time level t-dt required for radiation boundary condition
919    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_s       !< velocity data (w at south boundary) from time level t-dt required for radiation boundary condition
920
921    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_1  !< pointer for swapping of timelevels for respective quantity
922    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_2  !< pointer for swapping of timelevels for respective quantity
923    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_3  !< pointer for swapping of timelevels for respective quantity
924    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_1     !< pointer for swapping of timelevels for respective quantity
925    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_2     !< pointer for swapping of timelevels for respective quantity
926    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_3     !< pointer for swapping of timelevels for respective quantity
927    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  p       !< pointer: perturbation pressure
928    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  prho_1  !< pointer for swapping of timelevels for respective quantity
929    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_1    !< pointer for swapping of timelevels for respective quantity
930    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_2    !< pointer for swapping of timelevels for respective quantity
931    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_3    !< pointer for swapping of timelevels for respective quantity
932    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_1    !< pointer for swapping of timelevels for respective quantity
933    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_2    !< pointer for swapping of timelevels for respective quantity
934    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_3    !< pointer for swapping of timelevels for respective quantity
935    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_1    !< pointer for swapping of timelevels for respective quantity
936    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_2    !< pointer for swapping of timelevels for respective quantity
937    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_3    !< pointer for swapping of timelevels for respective quantity
938    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_1     !< pointer for swapping of timelevels for respective quantity
939    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_2     !< pointer for swapping of timelevels for respective quantity
940    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_3     !< pointer for swapping of timelevels for respective quantity
941    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_1    !< pointer for swapping of timelevels for respective quantity
942    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_2    !< pointer for swapping of timelevels for respective quantity
943    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_3    !< pointer for swapping of timelevels for respective quantity
944    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_v    !< pointer: volume of liquid water
945    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_vp   !< pointer: liquid water weighting factor
946    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_1    !< pointer for swapping of timelevels for respective quantity
947    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_2    !< pointer for swapping of timelevels for respective quantity
948    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_1    !< pointer for swapping of timelevels for respective quantity
949    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_2    !< pointer for swapping of timelevels for respective quantity
950    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_3    !< pointer for swapping of timelevels for respective quantity
951    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  rho_1   !< pointer for swapping of timelevels for respective quantity
952    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_1     !< pointer for swapping of timelevels for respective quantity
953    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_2     !< pointer for swapping of timelevels for respective quantity
954    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_3     !< pointer for swapping of timelevels for respective quantity
955    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_1    !< pointer for swapping of timelevels for respective quantity
956    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_2    !< pointer for swapping of timelevels for respective quantity
957    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_3    !< pointer for swapping of timelevels for respective quantity
958    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_1     !< pointer for swapping of timelevels for respective quantity
959    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_2     !< pointer for swapping of timelevels for respective quantity
960    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_3     !< pointer for swapping of timelevels for respective quantity
961    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_1     !< pointer for swapping of timelevels for respective quantity
962    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_2     !< pointer for swapping of timelevels for respective quantity
963    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_3     !< pointer for swapping of timelevels for respective quantity
964    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vpt_1   !< pointer for swapping of timelevels for respective quantity
965    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_1     !< pointer for swapping of timelevels for respective quantity
966    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_2     !< pointer for swapping of timelevels for respective quantity
967    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_3     !< pointer for swapping of timelevels for respective quantity
968
969    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  diss       !< pointer: TKE dissipation
970    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  diss_p     !< pointer: prognostic value of TKE dissipation
971    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  e          !< pointer: subgrid-scale turbulence kinetic energy (sgs tke)
972    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  e_p        !< pointer: prognostic value of sgs tke
973    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nc         !< pointer: cloud drop number density
974    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nc_p       !< pointer: prognostic value of cloud drop number density
975    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nr         !< pointer: rain drop number density
976    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nr_p       !< pointer: prognostic value of rain drop number density
977    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  prho       !< pointer: potential density
978    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  pt         !< pointer: potential temperature
979    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  pt_p       !< pointer: prognostic value of potential temperature
980    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  q          !< pointer: mixing ratio
981    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  q_p        !< pointer: prognostic value of mixing ratio
982    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qc         !< pointer: cloud water content
983    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qc_p       !< pointer: cloud water content
984    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  ql         !< pointer: liquid water content
985    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  ql_c       !< pointer: change in liquid water content due to
986                                                                   !< condensation/evaporation during last time step
987    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qr         !< pointer: rain water content
988    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qr_p       !< pointer: prognostic value of rain water content
989    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  rho_ocean  !< pointer: density of ocean
990    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  s          !< pointer: passive scalar
991    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  s_p        !< pointer: prognostic value of passive scalar
992    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  sa         !< pointer: ocean salinity
993    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  sa_p       !< pointer: prognostic value of ocean salinity
994    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tdiss_m    !< pointer: weighted tendency of diss for previous sub-timestep (Runge-Kutta)
995    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  te_m       !< pointer: weighted tendency of e for previous sub-timestep (Runge-Kutta)
996    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tnc_m      !< pointer: weighted tendency of nc for previous sub-timestep (Runge-Kutta)
997    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tnr_m      !< pointer: weighted tendency of nr for previous sub-timestep (Runge-Kutta)
998    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tpt_m      !< pointer: weighted tendency of pt for previous sub-timestep (Runge-Kutta)
999    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tq_m       !< pointer: weighted tendency of q for previous sub-timestep (Runge-Kutta)
1000    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tqc_m      !< pointer: weighted tendency of qc for previous sub-timestep (Runge-Kutta)
1001    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tqr_m      !< pointer: weighted tendency of qr for previous sub-timestep (Runge-Kutta)
1002    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  ts_m       !< pointer: weighted tendency of s for previous sub-timestep (Runge-Kutta)
1003    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tsa_m      !< pointer: weighted tendency of sa for previous sub-timestep (Runge-Kutta)
1004    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tu_m       !< pointer: weighted tendency of u for previous sub-timestep (Runge-Kutta)
1005    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tv_m       !< pointer: weighted tendency of v for previous sub-timestep (Runge-Kutta)
1006    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tw_m       !< pointer: weighted tendency of w for previous sub-timestep (Runge-Kutta)
1007    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  u          !< pointer: horizontal velocity component u (x-direction)
1008    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  u_p        !< pointer: prognostic value of u
1009    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  v          !< pointer: horizontal velocity component v (y-direction)
1010    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  v_p        !< pointer: prognostic value of v
1011    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  vpt        !< pointer: virtual potential temperature
1012    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  w          !< pointer: vertical velocity component w (z-direction)
1013    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  w_p        !< pointer: prognostic value of w
1014
1015    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  tri    !<  array to hold the tridiagonal matrix for solution of the Poisson equation in Fourier space (4th dimension for threads)
1016
1017    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rho_air      !< air density profile on the uv grid
1018    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rho_air_zw   !< air density profile on the w grid
1019    REAL(wp), DIMENSION(:), ALLOCATABLE ::  drho_air     !< inverse air density profile on the uv grid
1020    REAL(wp), DIMENSION(:), ALLOCATABLE ::  drho_air_zw  !< inverse air density profile on the w grid
1021
1022    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  rho_air_mg     !< air density profiles on the uv grid for multigrid
1023    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  rho_air_zw_mg  !< air density profiles on the w grid for multigrid
1024
1025    REAL(wp), DIMENSION(:), ALLOCATABLE ::  heatflux_input_conversion       !< conversion factor array for heatflux input
1026    REAL(wp), DIMENSION(:), ALLOCATABLE ::  waterflux_input_conversion      !< conversion factor array for waterflux input
1027    REAL(wp), DIMENSION(:), ALLOCATABLE ::  momentumflux_input_conversion   !< conversion factor array for momentumflux input
1028    REAL(wp), DIMENSION(:), ALLOCATABLE ::  heatflux_output_conversion      !< conversion factor array for heatflux output
1029    REAL(wp), DIMENSION(:), ALLOCATABLE ::  waterflux_output_conversion     !< conversion factor array for waterflux output
1030    REAL(wp), DIMENSION(:), ALLOCATABLE ::  momentumflux_output_conversion  !< conversion factor array for momentumflux output
1031
1032    REAL(wp), DIMENSION(:), ALLOCATABLE ::  hyrho   !< density of air calculated with hydrostatic pressure
1033    REAL(wp), DIMENSION(:), ALLOCATABLE ::  exner   !< ratio of actual and potential temperature
1034    REAL(wp), DIMENSION(:), ALLOCATABLE ::  d_exner !< ratio of potential and actual temperature
1035
1036    SAVE
1037
1038 END MODULE arrays_3d
1039
1040
1041!------------------------------------------------------------------------------!
1042! Description:
1043! ------------
1044!> Definition of variables needed for time-averaging of 2d/3d data.
1045!------------------------------------------------------------------------------!
1046 MODULE averaging
1047 
1048    USE kinds
1049
1050    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ghf_av                 !< avg. ground heat flux
1051    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  lwp_av                 !< avg. liquid water path
1052    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ol_av                  !< avg. Obukhov length
1053    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  pt_2m_av               !< avg. 2m- air potential temperature
1054    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  qsws_av                !< avg. surface moisture flux
1055    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  r_a_av                 !< avg. resistance
1056    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ssws_av                !< avg. surface scalar flux
1057    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  shf_av                 !< avg. surface heat flux
1058    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  tsurf_av               !< avg. surface temperature
1059    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ts_av                  !< avg. characteristic temperature scale
1060    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  us_av                  !< avg. friction velocity
1061    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  z0_av                  !< avg. roughness length for momentum
1062    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  z0h_av                 !< avg. roughness length for heat
1063    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  z0q_av                 !< avg. roughness length for moisture
1064
1065    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_av       !< avg. tke dissipation rate
1066    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_av          !< avg. subgrid-scale tke
1067    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  kh_av         !< avg. eddy diffusivity for heat
1068    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  km_av         !< avg. eddy diffusivity for momentum
1069    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  lpt_av        !< avg. liquid water potential temperature
1070    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_av         !< avg. cloud drop number density
1071    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_av         !< avg. rain drop number density
1072    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  p_av          !< avg. perturbation pressure
1073    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pc_av         !< avg. particle/droplet concentration
1074    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pr_av         !< avg. particle/droplet radius
1075    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  prr_av        !< avg. precipitation rate
1076    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_av         !< avg. potential temperature
1077    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_av          !< avg. mixing ratio
1078                                                                      !< (or total water content with active cloud physics)
1079    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_av         !< avg. cloud water content
1080    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_av         !< avg. liquid water content
1081    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_c_av       !< avg. change in liquid water content due to
1082                                                                      !< condensation/evaporation during last time step
1083    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_v_av       !< avg. volume of liquid water
1084    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_vp_av      !< avg. liquid water weighting factor
1085    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_av         !< avg. rain water content
1086    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qv_av         !< avg. water vapor content (mixing ratio)
1087    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  rho_ocean_av  !< avg. ocean density
1088    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_av          !< avg. passive scalar
1089    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_av         !< avg. salinity
1090    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_av          !< avg. horizontal velocity component u
1091    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_av          !< avg. horizontal velocity component v
1092    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vpt_av        !< avg. virtual potential temperature
1093    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_av          !< avg. vertical velocity component
1094 
1095 END MODULE averaging
1096
1097 
1098!------------------------------------------------------------------------------!
1099! Description:
1100! ------------
1101!> Definition of parameters for program control
1102!------------------------------------------------------------------------------!
1103 MODULE control_parameters
1104
1105    USE kinds
1106
1107    TYPE file_status
1108       LOGICAL ::  opened         !< file is currently open
1109       LOGICAL ::  opened_before  !< file is currently closed, but has been openend before
1110    END TYPE file_status
1111   
1112    INTEGER, PARAMETER      ::  mask_xyz_dimension = 100  !< limit of mask dimensions (100 points in each direction)
1113    INTEGER, PARAMETER      ::  max_masks = 50            !< maximum number of masks
1114    INTEGER(iwp), PARAMETER ::  varnamelength = 30        !< length of output variable names
1115
1116    TYPE(file_status), DIMENSION(200+2*max_masks) ::                &  !< indicates if file is open or if it has been opened before
1117                             openfile = file_status(.FALSE.,.FALSE.)
1118
1119    CHARACTER (LEN=1)    ::  cycle_mg = 'w'                               !< namelist parameter (see documentation)
1120    CHARACTER (LEN=1)    ::  timestep_reason = ' '                        !< 'A'dvection or 'D'iffusion criterion, written to RUN_CONTROL file
1121    CHARACTER (LEN=8)    ::  coupling_char = ''                           !< appended to filenames in coupled or nested runs ('_O': ocean PE,
1122                                                                          !< '_NV': vertically nested atmosphere PE, '_N##': PE of nested domain ##
1123    CHARACTER (LEN=10)   ::  run_date = ' '                               !< date of simulation run
1124    CHARACTER (LEN=8)    ::  run_time = ' '                               !< time of simulation run
1125    CHARACTER (LEN=5)    ::  run_zone = ' '                               !< time zone of simulation run
1126    CHARACTER (LEN=9)    ::  simulated_time_chr                           !< simulated time, printed to RUN_CONTROL file
1127    CHARACTER (LEN=11)   ::  topography_grid_convention = ' '             !< namelist parameter
1128    CHARACTER (LEN=12)   ::  version = ' '                                !< PALM version number
1129    CHARACTER (LEN=12)   ::  revision = ' '                               !< PALM revision number
1130    CHARACTER (LEN=12)   ::  user_interface_current_revision = ' '        !< revision number of the currently used user-interface (must match user_interface_required_revision)
1131    CHARACTER (LEN=12)   ::  user_interface_required_revision = ' '       !< required user-interface revision number
1132    CHARACTER (LEN=16)   ::  conserve_volume_flow_mode = 'default'        !< namelist parameter
1133    CHARACTER (LEN=16)   ::  loop_optimization = 'cache'                  !< namelist parameter
1134    CHARACTER (LEN=16)   ::  momentum_advec = 'ws-scheme'                 !< namelist parameter
1135    CHARACTER (LEN=16)   ::  psolver = 'poisfft'                          !< namelist parameter
1136    CHARACTER (LEN=16)   ::  scalar_advec = 'ws-scheme'                   !< namelist parameter
1137    CHARACTER (LEN=20)   ::  approximation = 'boussinesq'                 !< namelist parameter
1138    CHARACTER (LEN=40)   ::  flux_input_mode = 'approximation-specific'   !< type of flux input: dynamic or kinematic
1139    CHARACTER (LEN=40)   ::  flux_output_mode = 'approximation-specific'  !< type of flux output: dynamic or kinematic
1140    CHARACTER (LEN=20)   ::  bc_e_b = 'neumann'                           !< namelist parameter
1141    CHARACTER (LEN=20)   ::  bc_lr = 'cyclic'                             !< namelist parameter
1142    CHARACTER (LEN=20)   ::  bc_ns = 'cyclic'                             !< namelist parameter
1143    CHARACTER (LEN=20)   ::  bc_p_b = 'neumann'                           !< namelist parameter
1144    CHARACTER (LEN=20)   ::  bc_p_t = 'dirichlet'                         !< namelist parameter
1145    CHARACTER (LEN=20)   ::  bc_pt_b = 'dirichlet'                        !< namelist parameter
1146    CHARACTER (LEN=20)   ::  bc_pt_t = 'initial_gradient'                 !< namelist parameter
1147    CHARACTER (LEN=20)   ::  bc_q_b = 'dirichlet'                         !< namelist parameter
1148    CHARACTER (LEN=20)   ::  bc_q_t = 'neumann'                           !< namelist parameter
1149    CHARACTER (LEN=20)   ::  bc_s_b = 'dirichlet'                         !< namelist parameter
1150    CHARACTER (LEN=20)   ::  bc_s_t = 'initial_gradient'                  !< namelist parameter
1151    CHARACTER (LEN=20)   ::  bc_uv_b = 'dirichlet'                        !< namelist parameter
1152    CHARACTER (LEN=20)   ::  bc_uv_t = 'dirichlet'                        !< namelist parameter
1153    CHARACTER (LEN=20)   ::  coupling_mode = 'uncoupled'                  !< coupling mode for atmosphere-ocean coupling 
1154    CHARACTER (LEN=20)   ::  coupling_mode_remote = 'uncoupled'           !< coupling mode of the remote process in case of coupled atmosphere-ocean runs
1155    CHARACTER (LEN=20)   ::  dissipation_1d = 'detering'                  !< namelist parameter
1156    CHARACTER (LEN=20)   ::  fft_method = 'temperton-algorithm'           !< namelist parameter
1157    CHARACTER (LEN=20)   ::  mixing_length_1d = 'blackadar'               !< namelist parameter
1158    CHARACTER (LEN=20)   ::  random_generator = 'random-parallel'         !< namelist parameter
1159    CHARACTER (LEN=20)   ::  reference_state = 'initial_profile'          !< namelist parameter 
1160    CHARACTER (LEN=20)   ::  timestep_scheme = 'runge-kutta-3'            !< namelist parameter       
1161    CHARACTER (LEN=20)   ::  turbulence_closure = 'Moeng_Wyngaard'        !< namelist parameter
1162    CHARACTER (LEN=40)   ::  topography = 'flat'                          !< namelist parameter
1163    CHARACTER (LEN=64)   ::  host = '????'                                !< configuration identifier as given by palmrun option -c, ENVPAR namelist parameter provided by palmrun
1164    CHARACTER (LEN=80)   ::  log_message                                  !< user-defined message for debugging (sse data_log.f90)
1165    CHARACTER (LEN=80)   ::  run_identifier                               !< run identifier as given by palmrun option -r, ENVPAR namelist parameter provided by palmrun
1166    CHARACTER (LEN=100)  ::  initializing_actions = ' '                   !< namelist parameter
1167    CHARACTER (LEN=100)  ::  restart_string = ' '                         !< for storing strings in case of writing/reading restart data
1168    CHARACTER (LEN=210)  ::  run_description_header                       !< string containing diverse run informations as run identifier, coupling mode, host, ensemble number, run date and time
1169    CHARACTER (LEN=1000) ::  debug_string = ' '                           !<.....
1170    CHARACTER (LEN=1000) ::  message_string = ' '                         !< dynamic string for error message output
1171
1172    CHARACTER (LEN=varnamelength), DIMENSION(500) ::  data_output = ' '       !< namelist parameter
1173    CHARACTER (LEN=varnamelength), DIMENSION(500) ::  data_output_user = ' '  !< namelist parameter
1174    CHARACTER (LEN=varnamelength), DIMENSION(500) ::  doav = ' '              !< label array for multi-dimensional,
1175                                                                              !< averaged output quantities
1176                                           
1177    CHARACTER (LEN=varnamelength), DIMENSION(max_masks,100) ::  data_output_masks = ' '       !< namelist parameter
1178    CHARACTER (LEN=varnamelength), DIMENSION(max_masks,100) ::  data_output_masks_user = ' '  !< namelist parameter
1179
1180    CHARACTER (LEN=varnamelength), DIMENSION(300) ::  data_output_pr = ' '  !< namelist parameter
1181   
1182    CHARACTER (LEN=varnamelength), DIMENSION(200) ::  data_output_pr_user = ' '  !< namelist parameter
1183   
1184    CHARACTER (LEN=varnamelength), DIMENSION(max_masks,0:1,100) ::  domask = ' ' !< label array for multi-dimensional,
1185                                                                                 !< masked output quantities
1186   
1187    CHARACTER (LEN=varnamelength), DIMENSION(0:1,500) ::  do2d = ' '  !< label array for 2d output quantities
1188    CHARACTER (LEN=varnamelength), DIMENSION(0:1,500) ::  do3d = ' '  !< label array for 3d output quantities
1189
1190    INTEGER(iwp), PARAMETER ::  fl_max = 500     !< maximum number of virtual-flight measurements
1191    INTEGER(iwp), PARAMETER ::  var_fl_max = 20  !< maximum number of different sampling variables in virtual flight measurements
1192   
1193    INTEGER(iwp) ::  abort_mode = 1                    !< abort condition (nested runs)
1194    INTEGER(iwp) ::  agt_time_count = 0                !< number of output intervals for agent data output
1195    INTEGER(iwp) ::  average_count_pr = 0              !< number of samples in vertical-profile output
1196    INTEGER(iwp) ::  average_count_3d = 0              !< number of samples in 3d output
1197    INTEGER(iwp) ::  current_timestep_number = 0       !< current timestep number, printed to RUN_CONTROL file
1198    INTEGER(iwp) ::  coupling_topology = 0             !< switch for atmosphere-ocean-coupling: 0: same number of grid points and PEs along x and y in atmosphere and ocean, otherwise 1
1199    INTEGER(iwp) ::  dist_range = 0                    !< switch for steering the horizontal disturbance range, 1: inflow disturbances in case of non-cyclic horizontal BC, 0: otherwise
1200    INTEGER(iwp) ::  disturbance_level_ind_b           !< lowest grid index where flow disturbance is applied
1201    INTEGER(iwp) ::  disturbance_level_ind_t           !< highest grid index where flow disturbance is applied
1202    INTEGER(iwp) ::  doav_n = 0                        !< number of 2d/3d output quantities subject to time averaging
1203    INTEGER(iwp) ::  dopr_n = 0                        !< number of profile output quantities subject to time averaging
1204    INTEGER(iwp) ::  dopr_time_count = 0               !< number of output intervals for profile output
1205    INTEGER(iwp) ::  dopts_time_count = 0              !< number of output intervals for particle data timeseries
1206    INTEGER(iwp) ::  dots_time_count = 0               !< number of output intervals for timeseries output
1207    INTEGER(iwp) ::  dp_level_ind_b = 0                !< lowest grid index for external pressure gradient forcing
1208    INTEGER(iwp) ::  ensemble_member_nr = 0            !< namelist parameter
1209    INTEGER(iwp) ::  gamma_mg                          !< switch for steering the multigrid cycle: 1: v-cycle, 2: w-cycle
1210    INTEGER(iwp) ::  gathered_size                     !< number of total domain grid points of the grid level which is gathered on PE0 (multigrid solver)
1211    INTEGER(iwp) ::  grid_level                        !< current grid level handled in the multigrid solver
1212    INTEGER(iwp) ::  ibc_e_b                           !< integer flag for bc_e_b
1213    INTEGER(iwp) ::  ibc_p_b                           !< integer flag for bc_p_b
1214    INTEGER(iwp) ::  ibc_p_t                           !< integer flag for bc_p_t
1215    INTEGER(iwp) ::  ibc_pt_b                          !< integer flag for bc_pt_b
1216    INTEGER(iwp) ::  ibc_pt_t                          !< integer flag for bc_pt_t
1217    INTEGER(iwp) ::  ibc_q_b                           !< integer flag for bc_q_b
1218    INTEGER(iwp) ::  ibc_q_t                           !< integer flag for bc_q_t
1219    INTEGER(iwp) ::  ibc_s_b                           !< integer flag for bc_s_b
1220    INTEGER(iwp) ::  ibc_s_t                           !< integer flag for bc_s_t
1221    INTEGER(iwp) ::  ibc_uv_b                          !< integer flag for bc_uv_b
1222    INTEGER(iwp) ::  ibc_uv_t                          !< integer flag for bc_uv_t
1223    INTEGER(iwp) ::  inflow_disturbance_begin = -1     !< namelist parameter
1224    INTEGER(iwp) ::  inflow_disturbance_end = -1       !< namelist parameter
1225    INTEGER(iwp) ::  intermediate_timestep_count       !< number of current Runge-Kutta substep
1226    INTEGER(iwp) ::  intermediate_timestep_count_max   !< maximum number of Runge-Kutta substeps
1227    INTEGER(iwp) ::  io_group = 0                      !< I/O group to which the PE belongs (= #PE / io_blocks)
1228    INTEGER(iwp) ::  io_blocks = 1                     !< number of blocks for which I/O is done in sequence (total number of PEs / maximum_parallel_io_streams)
1229    INTEGER(iwp) ::  iran = -1234567                   !< integer random number used for flow disturbances
1230    INTEGER(iwp) ::  length = 0                        !< integer that specifies the length of a string in case of writing/reading restart data
1231    INTEGER(iwp) ::  masks = 0                         !< counter for number of masked output quantities
1232    INTEGER(iwp) ::  maximum_grid_level                !< number of grid levels that the multigrid solver is using
1233    INTEGER(iwp) ::  maximum_parallel_io_streams = -1  !< maximum number of parallel io streams that the underlying parallel file system allows, set with palmrun option -w, ENVPAR namelist parameter, provided by palmrun
1234    INTEGER(iwp) ::  max_pr_user = 0                   !< number of user-defined profiles (must not change within a job chain)
1235    INTEGER(iwp) ::  max_pr_user_tmp = 0               !< number of user-defined profiles that is temporary stored to check it against max_pr_user in case of restarts
1236    INTEGER(iwp) ::  mgcycles = 0                      !< number of multigrid cycles that the multigrid solver has actually carried out
1237    INTEGER(iwp) ::  mg_cycles = 4                     !< namelist parameter
1238    INTEGER(iwp) ::  mg_switch_to_pe0_level = -1       !< namelist parameter
1239    INTEGER(iwp) ::  ngsrb = 2                         !< namelist parameter
1240    INTEGER(iwp) ::  nr_timesteps_this_run = 0         !< number of timesteps (cpu time measurements)
1241    INTEGER(iwp) ::  nsor = 20                         !< namelist parameter
1242    INTEGER(iwp) ::  nsor_ini = 100                    !< namelist parameter
1243    INTEGER(iwp) ::  n_sor                             !< number of iterations to be used in SOR-scheme
1244    INTEGER(iwp) ::  normalizing_region = 0            !< namelist parameter
1245    INTEGER(iwp) ::  num_mean_inflow_profiles = 7      !< number of mean inflow profiles in case of turbulent inflow
1246    INTEGER(iwp) ::  num_leg=0                         !< number of different legs in virtual flight measurements
1247    INTEGER(iwp) ::  num_var_fl                        !< number of sampling/output variables in virtual flight measurements
1248    INTEGER(iwp) ::  num_var_fl_user=0                 !< number of user-defined sampling/output variables in virtual flight measurements
1249    INTEGER(iwp) ::  number_stretch_level_start        !< number of user-specified start levels for stretching
1250    INTEGER(iwp) ::  number_stretch_level_end          !< number of user-specified end levels for stretching
1251    INTEGER(iwp) ::  nz_do3d = -9999                   !< namelist parameter
1252    INTEGER(iwp) ::  prt_time_count = 0                !< number of output intervals for particle data output
1253    INTEGER(iwp) ::  recycling_plane                   !< position of recycling plane along x (in grid points) in case of turbulence recycling
1254    INTEGER(iwp) ::  runnr = 0                         !< number of run in job chain
1255    INTEGER(iwp) ::  subdomain_size                    !< number of grid points in (3d) subdomain including ghost points
1256    INTEGER(iwp) ::  terminate_coupled = 0             !< switch for steering termination in case of coupled runs
1257    INTEGER(iwp) ::  terminate_coupled_remote = 0      !< switch for steering termination in case of coupled runs (condition of the remote model)
1258    INTEGER(iwp) ::  timestep_count = 0                !< number of timesteps carried out since the beginning of the initial run
1259    INTEGER(iwp) ::  y_shift = 0                       !< namelist parameter
1260   
1261    INTEGER(iwp) ::  dist_nxl(0:1)                               !< left boundary of disturbance region
1262    INTEGER(iwp) ::  dist_nxr(0:1)                               !< right boundary of disturbance region
1263    INTEGER(iwp) ::  dist_nyn(0:1)                               !< north boundary of disturbance region
1264    INTEGER(iwp) ::  dist_nys(0:1)                               !< south boundary of disturbance region
1265    INTEGER(iwp) ::  do2d_no(0:1) = 0                            !< number of 2d output quantities
1266    INTEGER(iwp) ::  do2d_xy_time_count(0:1) = 0                 !< number of output intervals for 2d data (xy)
1267    INTEGER(iwp) ::  do2d_xz_time_count(0:1) = 0                 !< number of output intervals for 2d data (xz)
1268    INTEGER(iwp) ::  do2d_yz_time_count(0:1) = 0                 !< number of output intervals for 2d data (yz)
1269    INTEGER(iwp) ::  do3d_no(0:1) = 0                            !< number of 3d output quantities
1270    INTEGER(iwp) ::  do3d_time_count(0:1) = 0                    !< number of output intervals for 3d data
1271    INTEGER(iwp) ::  domask_no(max_masks,0:1) = 0                !< number of masked output quantities
1272    INTEGER(iwp) ::  domask_time_count(max_masks,0:1)            !< number of output intervals for masked data
1273    INTEGER(iwp) ::  dz_stretch_level_end_index(9)               !< vertical grid level index until which the vertical grid spacing is stretched
1274    INTEGER(iwp) ::  dz_stretch_level_start_index(9)             !< vertical grid level index above which the vertical grid spacing is stretched
1275    INTEGER(iwp) ::  mask_size(max_masks,3) = -1                 !< size of mask array per mask and dimension (for netcdf output)
1276    INTEGER(iwp) ::  mask_size_l(max_masks,3) = -1               !< subdomain size of mask array per mask and dimension (for netcdf output)
1277    INTEGER(iwp) ::  mask_start_l(max_masks,3) = -1              !< subdomain start index of mask array (for netcdf output)
1278    INTEGER(iwp) ::  pt_vertical_gradient_level_ind(10) = -9999  !< grid index values of pt_vertical_gradient_level(s)
1279    INTEGER(iwp) ::  q_vertical_gradient_level_ind(10) = -9999   !< grid index values of q_vertical_gradient_level(s)
1280    INTEGER(iwp) ::  s_vertical_gradient_level_ind(10) = -9999   !< grid index values of s_vertical_gradient_level(s)   
1281    INTEGER(iwp) ::  section(100,3)                              !< collective array for section_xy/xz/yz
1282    INTEGER(iwp) ::  section_xy(100) = -9999                     !< namelist parameter
1283    INTEGER(iwp) ::  section_xz(100) = -9999                     !< namelist parameter
1284    INTEGER(iwp) ::  section_yz(100) = -9999                     !< namelist parameter
1285    INTEGER(iwp) ::  ug_vertical_gradient_level_ind(10) = -9999  !< grid index values of ug_vertical_gradient_level(s)
1286    INTEGER(iwp) ::  vg_vertical_gradient_level_ind(10) = -9999  !< grid index values of vg_vertical_gradient_level(s)
1287    INTEGER(iwp) ::  subs_vertical_gradient_level_i(10) = -9999  !< grid index values of subs_vertical_gradient_level(s)
1288
1289    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_2d_xy  !< number of output intervals for 2d data (xy)
1290    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_2d_xz  !< number of output intervals for 2d data (xz)
1291    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_2d_yz  !< number of output intervals for 2d data (yz)
1292    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_3d     !< number of output intervals for 3d data
1293
1294    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  grid_level_count  !< internal switch for steering the multigrid v- and w-cycles
1295
1296    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_i         !< subdomain grid index of masked output point on x-dimension
1297    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_j         !< subdomain grid index of masked output point on y-dimension
1298    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_k         !< subdomain grid index of masked output point on z-dimension
1299    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_i_global  !< global grid index of masked output point on x-dimension
1300    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_j_global  !< global grid index of masked output point on y-dimension
1301    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_k_global  !< global grid index of masked output point on z-dimension
1302
1303    INTEGER(iwp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_k_over_surface = -1  !< namelist parameter, k index of height over surface
1304
1305    LOGICAL ::  agent_time_unlimited = .FALSE.                   !< namelist parameter
1306    LOGICAL ::  air_chemistry = .FALSE.                          !< chemistry model switch
1307    LOGICAL ::  bc_dirichlet_l                                   !< flag indicating dirichlet boundary condition on left model boundary
1308    LOGICAL ::  bc_dirichlet_n                                   !< flag indicating dirichlet boundary condition on north model boundary
1309    LOGICAL ::  bc_dirichlet_r                                   !< flag indicating dirichlet boundary condition on right model boundary
1310    LOGICAL ::  bc_dirichlet_s                                   !< flag indicating dirichlet boundary condition on south model boundary
1311    LOGICAL ::  bc_lr_cyc =.TRUE.                                !< left-right boundary condition cyclic?
1312    LOGICAL ::  bc_lr_dirrad = .FALSE.                           !< left-right boundary condition dirichlet/radiation?
1313    LOGICAL ::  bc_lr_raddir = .FALSE.                           !< left-right boundary condition radiation/dirichlet?
1314    LOGICAL ::  bc_ns_cyc = .TRUE.                               !< north-south boundary condition cyclic?
1315    LOGICAL ::  bc_ns_dirrad = .FALSE.                           !< north-south boundary condition dirichlet/radiation?
1316    LOGICAL ::  bc_ns_raddir = .FALSE.                           !< north-south boundary condition radiation/dirichlet?
1317    LOGICAL ::  bc_radiation_l = .FALSE.                         !< radiation boundary condition for outflow at left domain boundary
1318    LOGICAL ::  bc_radiation_n = .FALSE.                         !< radiation boundary condition for outflow at north domain boundary
1319    LOGICAL ::  bc_radiation_r = .FALSE.                         !< radiation boundary condition for outflow at right domain boundary
1320    LOGICAL ::  bc_radiation_s = .FALSE.                         !< radiation boundary condition for outflow at south domain boundary
1321    LOGICAL ::  biometeorology = .FALSE.                         !< biometeorology module switch
1322    LOGICAL ::  calc_soil_moisture_during_spinup = .FALSE.       !< namelist parameter
1323    LOGICAL ::  call_psolver_at_all_substeps = .TRUE.            !< namelist parameter
1324    LOGICAL ::  child_domain  = .FALSE.                          !< flag indicating that model is nested in a parent domain
1325    LOGICAL ::  cloud_droplets = .FALSE.                         !< namelist parameter
1326    LOGICAL ::  complex_terrain = .FALSE.                        !< namelist parameter
1327    LOGICAL ::  conserve_volume_flow = .FALSE.                   !< namelist parameter
1328    LOGICAL ::  constant_diffusion = .FALSE.                     !< diffusion coefficient constant?
1329    LOGICAL ::  constant_flux_layer = .TRUE.                     !< namelist parameter
1330    LOGICAL ::  constant_heatflux = .TRUE.                       !< heat flux at all surfaces constant?
1331    LOGICAL ::  constant_top_heatflux = .TRUE.                   !< heat flux at domain top constant?
1332    LOGICAL ::  constant_top_momentumflux = .FALSE.              !< momentum flux at domain topconstant?
1333    LOGICAL ::  constant_top_salinityflux = .TRUE.               !< constant salinity flux at ocean surface
1334    LOGICAL ::  constant_top_scalarflux = .TRUE.                 !< passive-scalar flux at domain top constant?
1335    LOGICAL ::  constant_scalarflux = .TRUE.                     !< passive-scalar flux at surfaces constant?
1336    LOGICAL ::  constant_waterflux = .TRUE.                      !< water flux at all surfaces constant?
1337    LOGICAL ::  create_disturbances = .TRUE.                     !< namelist parameter
1338    LOGICAL ::  data_output_during_spinup = .FALSE.              !< namelist parameter
1339    LOGICAL ::  data_output_2d_on_each_pe = .TRUE.               !< namelist parameter
1340    LOGICAL ::  debug_output = .FALSE.                           !< namelist parameter
1341    LOGICAL ::  debug_output_timestep = .FALSE.                  !< namelist parameter
1342    LOGICAL ::  disturbance_created = .FALSE.                    !< flow disturbance imposed?
1343    LOGICAL ::  do2d_at_begin = .FALSE.                          !< namelist parameter
1344    LOGICAL ::  do3d_at_begin = .FALSE.                          !< namelist parameter
1345    LOGICAL ::  do_output_at_2m = .FALSE.                        !< flag for activating calculation of potential temperature at z = 2 m
1346    LOGICAL ::  do_sum = .FALSE.                                 !< contribute to time average of profile data?
1347    LOGICAL ::  dp_external = .FALSE.                            !< namelist parameter
1348    LOGICAL ::  dp_smooth = .FALSE.                              !< namelist parameter
1349    LOGICAL ::  dt_fixed = .FALSE.                               !< fixed timestep (namelist parameter dt set)?
1350    LOGICAL ::  dt_3d_reached                                    !< internal timestep for particle advection
1351    LOGICAL ::  dt_3d_reached_l                                  !< internal timestep for particle advection
1352    LOGICAL ::  first_call_lpm = .TRUE.                          !< call lpm only once per timestep?
1353    LOGICAL ::  first_call_mas = .TRUE.                          !< call mas only once per timestep
1354    LOGICAL ::  force_print_header = .FALSE.                     !< namelist parameter
1355    LOGICAL ::  galilei_transformation = .FALSE.                 !< namelist parameter
1356    LOGICAL ::  humidity = .FALSE.                               !< namelist parameter
1357    LOGICAL ::  humidity_remote = .FALSE.                        !< switch for receiving near-surface humidity flux (atmosphere-ocean coupling)
1358    LOGICAL ::  indoor_model = .FALSE.                           !< switch for indoor-climate and energy-demand model
1359    LOGICAL ::  large_scale_forcing = .FALSE.                    !< namelist parameter
1360    LOGICAL ::  large_scale_subsidence = .FALSE.                 !< namelist parameter
1361    LOGICAL ::  land_surface = .FALSE.                           !< use land surface model?
1362    LOGICAL ::  les_dynamic = .FALSE.                            !< use dynamic subgrid model as turbulence closure for LES mode
1363    LOGICAL ::  les_mw = .FALSE.                                 !< use Moeng-Wyngaard turbulence closure for LES mode
1364    LOGICAL ::  lsf_exception = .FALSE.                          !< use of lsf with buildings (temporary)?
1365    LOGICAL ::  lsf_surf = .TRUE.                                !< use surface forcing (large scale forcing)?
1366    LOGICAL ::  lsf_vert = .TRUE.                                !< use atmospheric forcing (large scale forcing)?
1367    LOGICAL ::  masking_method = .FALSE.                         !< namelist parameter
1368    LOGICAL ::  mg_switch_to_pe0 = .FALSE.                       !< internal multigrid switch for steering the ghost point exchange in case that data has been collected on PE0
1369    LOGICAL ::  monotonic_limiter_z = .FALSE.                    !< use monotonic flux limiter for vertical scalar advection
1370    LOGICAL ::  nesting_offline = .FALSE.                        !< flag controlling offline nesting in COSMO model 
1371    LOGICAL ::  neutral = .FALSE.                                !< namelist parameter
1372    LOGICAL ::  nudging = .FALSE.                                !< namelist parameter
1373    LOGICAL ::  ocean_mode = .FALSE.                             !< namelist parameter
1374    LOGICAL ::  passive_scalar = .FALSE.                         !< namelist parameter
1375    LOGICAL ::  plant_canopy = .FALSE.                           !< switch for use of plant canopy model
1376    LOGICAL ::  random_heatflux = .FALSE.                        !< namelist parameter
1377    LOGICAL ::  rans_mode = .FALSE.                              !< switch between RANS and LES mode
1378    LOGICAL ::  rans_tke_e = .FALSE.                             !< use TKE-e turbulence closure for RANS mode
1379    LOGICAL ::  rans_tke_l = .FALSE.                             !< use TKE-l turbulence closure for RANS mode
1380    LOGICAL ::  read_svf = .FALSE.                               !< ENVPAR namelist parameter to steer input of svf (ENVPAR is provided by palmrun)
1381    LOGICAL ::  recycling_yshift = .FALSE.                       !< namelist parameter
1382    LOGICAL ::  run_control_header = .FALSE.                     !< onetime output of RUN_CONTROL header
1383    LOGICAL ::  run_coupled = .TRUE.                             !< internal switch telling PALM to run in coupled mode (i.e. to exchange surface data) in case of atmosphere-ocean coupling
1384    LOGICAL ::  salsa = .FALSE.                                  !< switch for the sectional aerosol module salsa
1385    LOGICAL ::  scalar_rayleigh_damping = .TRUE.                 !< namelist parameter
1386    LOGICAL ::  sloping_surface = .FALSE.                        !< use sloped surface? (namelist parameter alpha_surface)
1387    LOGICAL ::  spinup = .FALSE.                                 !< perform model spinup without atmosphere code?
1388    LOGICAL ::  surface_output = .FALSE.                         !< output of surface data
1389    LOGICAL ::  stop_dt = .FALSE.                                !< internal switch to stop the time stepping
1390    LOGICAL ::  synchronous_exchange = .FALSE.                   !< namelist parameter
1391    LOGICAL ::  syn_turb_gen = .FALSE.                           !< flag for synthetic turbulence generator module
1392    LOGICAL ::  terminate_run = .FALSE.                          !< terminate run (cpu-time limit, restarts)?
1393    LOGICAL ::  topo_no_distinct = .FALSE.                       !< flag controlling classification of topography surfaces
1394    LOGICAL ::  transpose_compute_overlap = .FALSE.              !< namelist parameter
1395    LOGICAL ::  turbulent_inflow = .FALSE.                       !< namelist parameter
1396    LOGICAL ::  turbulent_outflow = .FALSE.                      !< namelist parameter
1397    LOGICAL ::  urban_surface = .FALSE.                          !< use urban surface model?
1398    LOGICAL ::  use_cmax = .TRUE.                                !< namelist parameter
1399    LOGICAL ::  use_free_convection_scaling = .FALSE.            !< namelist parameter to switch on free convection velocity scale in calculation of horizontal wind speed (surface_layer_fluxes)
1400    LOGICAL ::  use_initial_profile_as_reference = .FALSE.       !< use of initial profiles as reference state?
1401    LOGICAL ::  use_prescribed_profile_data = .FALSE.            !< use of prescribed wind profiles?
1402                                                                 !< (namelist parameters u_profile, v_profile)
1403    LOGICAL ::  use_single_reference_value = .FALSE.             !< use of single value as reference state?
1404    LOGICAL ::  use_subsidence_tendencies = .FALSE.              !< namelist parameter
1405    LOGICAL ::  use_surface_fluxes = .FALSE.                     !< namelist parameter
1406    LOGICAL ::  use_top_fluxes = .FALSE.                         !< namelist parameter
1407    LOGICAL ::  use_ug_for_galilei_tr = .TRUE.                   !< namelist parameter
1408    LOGICAL ::  use_upstream_for_tke = .FALSE.                   !< namelist parameter
1409    LOGICAL ::  virtual_flight = .FALSE.                         !< use virtual flight model
1410    LOGICAL ::  virtual_measurement = .FALSE.                    !< control parameter to switch-on virtual measurements
1411    LOGICAL ::  wall_adjustment = .TRUE.                         !< namelist parameter
1412    LOGICAL ::  wind_turbine = .FALSE.                           !< flag for use of wind turbine model
1413    LOGICAL ::  write_binary = .FALSE.                           !< ENVPAR namelist parameter to steer restart I/O (ENVPAR is provided by palmrun)
1414    LOGICAL ::  write_svf = .FALSE.                              !< ENVPAR namelist parameter to steer output of svf (ENVPAR is provided by palmrun)
1415    LOGICAL ::  ws_scheme_sca = .FALSE.                          !< use Wicker-Skamarock scheme (scalar advection)?
1416    LOGICAL ::  ws_scheme_mom = .FALSE.                          !< use Wicker-Skamarock scheme (momentum advection)?
1417
1418    LOGICAL ::  data_output_xy(0:1) = .FALSE.                !< output of xy cross-section data?
1419    LOGICAL ::  data_output_xz(0:1) = .FALSE.                !< output of xz cross-section data?
1420    LOGICAL ::  data_output_yz(0:1) = .FALSE.                !< output of yz cross-section data?
1421
1422    LOGICAL, DIMENSION(max_masks) ::  mask_surface = .FALSE.      !< flag for surface-following masked output
1423
1424    REAL(wp) ::  advected_distance_x = 0.0_wp                  !< advected distance of model domain along x
1425                                                               !< (galilei transformation)
1426    REAL(wp) ::  advected_distance_y = 0.0_wp                  !< advected distance of model domain along y
1427                                                               !< (galilei transformation)
1428    REAL(wp) ::  alpha_surface = 0.0_wp                        !< namelist parameter
1429    REAL(wp) ::  atmos_ocean_sign = 1.0_wp                     !< vertical-grid conversion factor
1430                                                               !< (=1.0 in atmosphere, =-1.0 in ocean)
1431    REAL(wp) ::  averaging_interval = 0.0_wp                   !< namelist parameter
1432    REAL(wp) ::  averaging_interval_pr = 9999999.9_wp          !< namelist parameter
1433    REAL(wp) ::  bc_pt_t_val                                   !< vertical gradient of pt near domain top
1434    REAL(wp) ::  bc_q_t_val                                    !< vertical gradient of humidity near domain top
1435    REAL(wp) ::  bc_s_t_val                                    !< vertical gradient of passive scalar near domain top
1436    REAL(wp) ::  bottom_salinityflux = 0.0_wp                  !< namelist parameter
1437    REAL(wp) ::  building_height = 50.0_wp                     !< namelist parameter
1438    REAL(wp) ::  building_length_x = 50.0_wp                   !< namelist parameter
1439    REAL(wp) ::  building_length_y = 50.0_wp                   !< namelist parameter
1440    REAL(wp) ::  building_wall_left = 9999999.9_wp             !< namelist parameter
1441    REAL(wp) ::  building_wall_south = 9999999.9_wp            !< namelist parameter
1442    REAL(wp) ::  canyon_height = 50.0_wp                       !< namelist parameter
1443    REAL(wp) ::  canyon_width_x = 9999999.9_wp                 !< namelist parameter
1444    REAL(wp) ::  canyon_width_y = 9999999.9_wp                 !< namelist parameter
1445    REAL(wp) ::  canyon_wall_left = 9999999.9_wp               !< namelist parameter
1446    REAL(wp) ::  canyon_wall_south = 9999999.9_wp              !< namelist parameter
1447    REAL(wp) ::  cfl_factor = -1.0_wp                          !< namelist parameter
1448    REAL(wp) ::  cos_alpha_surface                             !< cosine of alpha_surface
1449    REAL(wp) ::  coupling_start_time = 0.0_wp                  !< namelist parameter
1450    REAL(wp) ::  days_since_reference_point = 0.0_wp           !< days after atmosphere-ocean coupling has been activated,
1451                                                               !< or after spinup phase of LSM has been finished
1452    REAL(wp) ::  disturbance_amplitude = 0.25_wp               !< namelist parameter
1453    REAL(wp) ::  disturbance_energy_limit = 0.01_wp            !< namelist parameter
1454    REAL(wp) ::  disturbance_level_b = -9999999.9_wp           !< namelist parameter
1455    REAL(wp) ::  disturbance_level_t = -9999999.9_wp           !< namelist parameter
1456    REAL(wp) ::  dp_level_b = 0.0_wp                           !< namelist parameter
1457    REAL(wp) ::  dt = -1.0_wp                                  !< namelist parameter
1458    REAL(wp) ::  dt_averaging_input = 0.0_wp                   !< namelist parameter
1459    REAL(wp) ::  dt_averaging_input_pr = 9999999.9_wp          !< namelist parameter
1460    REAL(wp) ::  dt_coupling = 9999999.9_wp                    !< namelist parameter
1461    REAL(wp) ::  dt_data_output = 9999999.9_wp                 !< namelist parameter
1462    REAL(wp) ::  dt_data_output_av = 9999999.9_wp              !< namelist parameter
1463    REAL(wp) ::  dt_disturb = 9999999.9_wp                     !< namelist parameter
1464    REAL(wp) ::  dt_dopr = 9999999.9_wp                        !< namelist parameter
1465    REAL(wp) ::  dt_dopr_listing = 9999999.9_wp                !< namelist parameter
1466    REAL(wp) ::  dt_dopts = 9999999.9_wp                       !< namelist parameter
1467    REAL(wp) ::  dt_dots = 9999999.9_wp                        !< namelist parameter
1468    REAL(wp) ::  dt_do2d_xy = 9999999.9_wp                     !< namelist parameter
1469    REAL(wp) ::  dt_do2d_xz = 9999999.9_wp                     !< namelist parameter
1470    REAL(wp) ::  dt_do2d_yz = 9999999.9_wp                     !< namelist parameter
1471    REAL(wp) ::  dt_do3d = 9999999.9_wp                        !< namelist parameter
1472    REAL(wp) ::  dt_max = 20.0_wp                              !< namelist parameter
1473    REAL(wp) ::  dt_restart = 9999999.9_wp                     !< namelist parameter
1474    REAL(wp) ::  dt_run_control = 60.0_wp                      !< namelist parameter
1475    REAL(wp) ::  dt_spinup = 60.0_wp                           !< namelist parameter
1476    REAL(wp) ::  dt_write_agent_data = 9999999.9_wp            !< namelist parameter
1477    REAL(wp) ::  dt_3d = 0.01_wp                               !< time step
1478    REAL(wp) ::  dz_max = 999.0_wp                             !< namelist parameter
1479    REAL(wp) ::  dz_stretch_factor = 1.08_wp                   !< namelist parameter
1480    REAL(wp) ::  dz_stretch_level = -9999999.9_wp              !< namelist parameter
1481    REAL(wp) ::  e_init = 0.0_wp                               !< namelist parameter
1482    REAL(wp) ::  e_min = 0.0_wp                                !< namelist parameter
1483    REAL(wp) ::  end_time = 0.0_wp                             !< namelist parameter
1484    REAL(wp) ::  f = 0.0_wp                                    !< Coriolis parameter
1485    REAL(wp) ::  fs = 0.0_wp                                   !< Coriolis parameter
1486    REAL(wp) ::  inflow_damping_height = 9999999.9_wp          !< namelist parameter
1487    REAL(wp) ::  inflow_damping_width = 9999999.9_wp           !< namelist parameter
1488    REAL(wp) ::  km_constant = -1.0_wp                         !< namelist parameter
1489    REAL(wp) ::  latitude = 55.0_wp                            !< namelist parameter
1490    REAL(wp) ::  longitude = 0.0_wp                            !< namelist parameter
1491    REAL(wp) ::  mask_scale_x = 1.0_wp                         !< namelist parameter
1492    REAL(wp) ::  mask_scale_y = 1.0_wp                         !< namelist parameter
1493    REAL(wp) ::  mask_scale_z = 1.0_wp                         !< namelist parameter
1494    REAL(wp) ::  maximum_cpu_time_allowed = 0.0_wp             !< given wall time for run
1495    REAL(wp) ::  molecular_viscosity = 1.461E-5_wp             !< molecular viscosity (used in lsm and lpm)
1496    REAL(wp) ::  multi_agent_system_end   = 9999999.9_wp       !< namelist parameter (see documentation)
1497    REAL(wp) ::  multi_agent_system_start = 0.0_wp             !< namelist parameter (see documentation)
1498    REAL(wp) ::  omega = 7.29212E-5_wp                         !< namelist parameter
1499    REAL(wp) ::  omega_sor = 1.8_wp                            !< namelist parameter
1500    REAL(wp) ::  outflow_source_plane = -9999999.9_wp          !< namelist parameter
1501    REAL(wp) ::  particle_maximum_age = 9999999.9_wp           !< namelist parameter
1502    REAL(wp) ::  prandtl_number = 1.0_wp                       !< namelist parameter
1503    REAL(wp) ::  pt_damping_factor = 0.0_wp                    !< namelist parameter
1504    REAL(wp) ::  pt_damping_width = 0.0_wp                     !< namelist parameter
1505    REAL(wp) ::  pt_reference = 9999999.9_wp                   !< namelist parameter
1506    REAL(wp) ::  pt_slope_offset = 0.0_wp                      !< temperature difference between left and right
1507                                                               !< boundary of total domain
1508    REAL(wp) ::  pt_surface = 300.0_wp                         !< namelist parameter
1509    REAL(wp) ::  pt_surface_initial_change = 0.0_wp            !< namelist parameter
1510    REAL(wp) ::  q_surface = 0.0_wp                            !< namelist parameter
1511    REAL(wp) ::  q_surface_initial_change = 0.0_wp             !< namelist parameter
1512    REAL(wp) ::  rayleigh_damping_factor = -1.0_wp             !< namelist parameter
1513    REAL(wp) ::  rayleigh_damping_height = -1.0_wp             !< namelist parameter
1514    REAL(wp) ::  recycling_width = 9999999.9_wp                !< namelist parameter
1515    REAL(wp) ::  residual_limit = 1.0E-4_wp                    !< namelist parameter
1516    REAL(wp) ::  restart_time = 9999999.9_wp                   !< namelist parameter
1517    REAL(wp) ::  rho_reference                                 !< reference state of density
1518    REAL(wp) ::  rho_surface                                   !< surface value of density
1519    REAL(wp) ::  roughness_length = 0.1_wp                     !< namelist parameter
1520    REAL(wp) ::  simulated_time = 0.0_wp                       !< elapsed simulated time
1521    REAL(wp) ::  simulated_time_at_begin                       !< elapsed simulated time of previous run (job chain)
1522    REAL(wp) ::  sin_alpha_surface                             !< sine of alpha_surface (sloped surface)
1523    REAL(wp) ::  skip_time_data_output = 0.0_wp                !< namelist parameter
1524    REAL(wp) ::  skip_time_data_output_av = 9999999.9_wp       !< namelist parameter
1525    REAL(wp) ::  skip_time_dopr = 9999999.9_wp                 !< namelist parameter
1526    REAL(wp) ::  skip_time_do2d_xy = 9999999.9_wp              !< namelist parameter
1527    REAL(wp) ::  skip_time_do2d_xz = 9999999.9_wp              !< namelist parameter
1528    REAL(wp) ::  skip_time_do2d_yz = 9999999.9_wp              !< namelist parameter
1529    REAL(wp) ::  skip_time_do3d = 9999999.9_wp                 !< namelist parameter
1530    REAL(wp) ::  spinup_pt_amplitude = 9999999.9_wp            !< namelist parameter
1531    REAL(wp) ::  spinup_pt_mean = 9999999.9_wp                 !< namelist parameter
1532    REAL(wp) ::  spinup_time = 0.0_wp                          !< namelist parameter
1533    REAL(wp) ::  surface_heatflux = 9999999.9_wp               !< namelist parameter
1534    REAL(wp) ::  surface_pressure = 1013.25_wp                 !< namelist parameter
1535    REAL(wp) ::  surface_scalarflux = 9999999.9_wp             !< namelist parameter
1536    REAL(wp) ::  surface_waterflux = 9999999.9_wp              !< namelist parameter
1537    REAL(wp) ::  s_surface = 0.0_wp                            !< namelist parameter
1538    REAL(wp) ::  s_surface_initial_change = 0.0_wp             !< namelist parameter
1539    REAL(wp) ::  termination_time_needed = 35.0_wp             !< namelist parameter
1540    REAL(wp) ::  time_coupling = 0.0_wp                        !< time since last coupling (surface_coupler)
1541    REAL(wp) ::  time_disturb = 0.0_wp                         !< time since last flow disturbance
1542    REAL(wp) ::  time_dopr = 0.0_wp                            !< time since last profile output
1543    REAL(wp) ::  time_dopr_av = 0.0_wp                         !< time since last averaged profile output
1544    REAL(wp) ::  time_dopr_listing = 0.0_wp                    !< time since last profile output (ASCII) on file
1545    REAL(wp) ::  time_dopts = 0.0_wp                           !< time since last particle timeseries output
1546    REAL(wp) ::  time_dosp = 0.0_wp                            !< time since last spectra output
1547    REAL(wp) ::  time_dosp_av = 0.0_wp                         !< time since last averaged spectra output
1548    REAL(wp) ::  time_dots = 0.0_wp                            !< time since last timeseries output
1549    REAL(wp) ::  time_do2d_xy = 0.0_wp                         !< time since last xy cross-section output
1550    REAL(wp) ::  time_do2d_xz = 0.0_wp                         !< time since last xz cross-section output
1551    REAL(wp) ::  time_do2d_yz = 0.0_wp                         !< time since last yz cross-section output
1552    REAL(wp) ::  time_do3d = 0.0_wp                            !< time since last 3d output
1553    REAL(wp) ::  time_do_av = 0.0_wp                           !< time since last averaged-data output
1554    REAL(wp) ::  time_do_sla = 0.0_wp                          !< time since last
1555    REAL(wp) ::  time_restart = 9999999.9_wp                   !< time at which run shall be terminated and restarted
1556    REAL(wp) ::  time_run_control = 0.0_wp                     !< time since last RUN_CONTROL output
1557    REAL(wp) ::  time_since_reference_point = 0.0_wp           !< time after atmosphere-ocean coupling has been activated, or time after spinup phase of LSM has been finished
1558    REAL(wp) ::  top_heatflux = 9999999.9_wp                   !< namelist parameter
1559    REAL(wp) ::  top_momentumflux_u = 9999999.9_wp             !< namelist parameter
1560    REAL(wp) ::  top_momentumflux_v = 9999999.9_wp             !< namelist parameter
1561    REAL(wp) ::  top_salinityflux = 9999999.9_wp               !< namelist parameter
1562    REAL(wp) ::  top_scalarflux = 9999999.9_wp                 !< namelist parameter
1563    REAL(wp) ::  tunnel_height = 9999999.9_wp                  !< namelist parameter
1564    REAL(wp) ::  tunnel_length = 9999999.9_wp                  !< namelist parameter
1565    REAL(wp) ::  tunnel_width_x = 9999999.9_wp                 !< namelist parameter
1566    REAL(wp) ::  tunnel_width_y = 9999999.9_wp                 !< namelist parameter
1567    REAL(wp) ::  tunnel_wall_depth = 9999999.9_wp              !< namelist parameter
1568    REAL(wp) ::  ug_surface = 0.0_wp                           !< namelist parameter
1569    REAL(wp) ::  u_bulk = 0.0_wp                               !< namelist parameter
1570    REAL(wp) ::  u_gtrans = 0.0_wp                             !< transformed wind component (galilei transformation)
1571    REAL(wp) ::  vg_surface = 0.0_wp                           !< namelist parameter
1572    REAL(wp) ::  vpt_reference = 9999999.9_wp                  !< reference state of virtual potential temperature
1573    REAL(wp) ::  v_bulk = 0.0_wp                               !< namelist parameter
1574    REAL(wp) ::  v_gtrans = 0.0_wp                             !< transformed wind component (galilei transformation)
1575    REAL(wp) ::  wall_adjustment_factor = 1.8_wp               !< adjustment factor for mixing length l
1576    REAL(wp) ::  zeta_max = 20.0_wp                            !< namelist parameter
1577    REAL(wp) ::  zeta_min = -20.0_wp                           !< namelist parameter
1578    REAL(wp) ::  z0h_factor = 1.0_wp                           !< namelist parameter
1579
1580    REAL(wp) ::  do2d_xy_last_time(0:1) = -1.0_wp                  !< time of previous xy output
1581    REAL(wp) ::  do2d_xz_last_time(0:1) = -1.0_wp                  !< time of previous xz output
1582    REAL(wp) ::  do2d_yz_last_time(0:1) = -1.0_wp                  !< time of previous yz output
1583    REAL(wp) ::  dpdxy(1:2) = 0.0_wp                               !< namelist parameter
1584    REAL(wp) ::  dt_domask(max_masks) = 9999999.9_wp               !< namelist parameter
1585    REAL(wp) ::  dz(10) = -1.0_wp                                  !< namelist parameter
1586    REAL(wp) ::  dz_stretch_level_start(9) = -9999999.9_wp         !< namelist parameter
1587    REAL(wp) ::  dz_stretch_level_end(9) = 9999999.9_wp            !< namelist parameter
1588    REAL(wp) ::  dz_stretch_factor_array(9) = 1.08_wp              !< namelist parameter
1589    REAL(wp) ::  mask_scale(3)                                     !< collective array for mask_scale_x/y/z
1590    REAL(wp) ::  pt_vertical_gradient(10) = 0.0_wp                 !< namelist parameter
1591    REAL(wp) ::  pt_vertical_gradient_level(10) = -999999.9_wp   !< namelist parameter
1592    REAL(wp) ::  q_vertical_gradient(10) = 0.0_wp                  !< namelist parameter
1593    REAL(wp) ::  q_vertical_gradient_level(10) = -999999.9_wp    !< namelist parameter
1594    REAL(wp) ::  s_vertical_gradient(10) = 0.0_wp                  !< namelist parameter
1595    REAL(wp) ::  s_vertical_gradient_level(10) = -999999.9_wp    !< namelist parameter
1596    REAL(wp) ::  skip_time_domask(max_masks) = 9999999.9_wp        !< namelist parameter
1597    REAL(wp) ::  threshold(20) = 0.0_wp                            !< namelist parameter
1598    REAL(wp) ::  time_domask(max_masks) = 0.0_wp                   !< namelist parameter
1599    REAL(wp) ::  tsc(10) = (/ 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, &    !< array used for controlling time-integration at different substeps
1600                 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp /)
1601    REAL(wp) ::  u_profile(200) = 9999999.9_wp                     !< namelist parameter
1602    REAL(wp) ::  uv_heights(200) = 9999999.9_wp                    !< namelist parameter
1603    REAL(wp) ::  v_profile(200) = 9999999.9_wp                     !< namelist parameter
1604    REAL(wp) ::  ug_vertical_gradient(10) = 0.0_wp                 !< namelist parameter
1605    REAL(wp) ::  ug_vertical_gradient_level(10) = -9999999.9_wp    !< namelist parameter
1606    REAL(wp) ::  vg_vertical_gradient(10) = 0.0_wp                 !< namelist parameter
1607    REAL(wp) ::  vg_vertical_gradient_level(10) = -9999999.9_wp    !< namelist parameter
1608    REAL(wp) ::  volume_flow(1:3) = 0.0_wp                         !< volume flow through 1:yz-plane, 2: xz-plane, 3: xy-plane (nest childs only)
1609    REAL(wp) ::  volume_flow_area(1:3) = 0.0_wp                    !< area of the respective volume flow planes
1610    REAL(wp) ::  volume_flow_initial(1:3) = 0.0_wp                 !< initial volume flow (t=0) through the respective volume flow planes
1611    REAL(wp) ::  wall_heatflux(0:5) = 0.0_wp                       !< namelist parameter
1612    REAL(wp) ::  wall_humidityflux(0:5) = 0.0_wp                   !< namelist parameter
1613    REAL(wp) ::  wall_salinityflux(0:5) = 0.0_wp                   !< namelist parameter
1614    REAL(wp) ::  wall_scalarflux(0:5) = 0.0_wp                     !< namelist parameter
1615    REAL(wp) ::  subs_vertical_gradient(10) = 0.0_wp               !< namelist parameter
1616    REAL(wp) ::  subs_vertical_gradient_level(10) = -9999999.9_wp  !< namelist parameter
1617
1618    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dp_smooth_factor  !< smoothing factor for external pressure gradient forcing
1619
1620    REAL(wp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_x = -1.0_wp  !< namelist parameter
1621    REAL(wp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_y = -1.0_wp  !< namelist parameter
1622    REAL(wp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_z = -1.0_wp  !< namelist parameter
1623   
1624    REAL(wp), DIMENSION(max_masks,3) ::  mask_x_loop = -1.0_wp  !< namelist parameter
1625    REAL(wp), DIMENSION(max_masks,3) ::  mask_y_loop = -1.0_wp  !< namelist parameter
1626    REAL(wp), DIMENSION(max_masks,3) ::  mask_z_loop = -1.0_wp  !< namelist parameter
1627   
1628!
1629!--    internal mask arrays ("mask,dimension,selection")
1630       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  mask       !< collective array for mask_x/y/z
1631       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  mask_loop  !< collective array for mask_x/y/z_loop
1632
1633    SAVE
1634
1635 END MODULE control_parameters
1636
1637
1638!------------------------------------------------------------------------------!
1639! Description:
1640! ------------
1641!> Definition of grid spacings.
1642!------------------------------------------------------------------------------!
1643 MODULE grid_variables
1644
1645    USE kinds
1646
1647    REAL(wp) ::  ddx          !< 1/dx
1648    REAL(wp) ::  ddx2         !< 1/dx2
1649    REAL(wp) ::  dx = 1.0_wp  !< horizontal grid size (along x-direction)
1650    REAL(wp) ::  dx2          !< dx*dx
1651    REAL(wp) ::  ddy          !< 1/dy
1652    REAL(wp) ::  ddy2         !< 1/dy2
1653    REAL(wp) ::  dy = 1.0_wp  !< horizontal grid size (along y-direction)
1654    REAL(wp) ::  dy2          !< dy*dy
1655
1656    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddx2_mg  !< 1/dx_l**2 (dx_l: grid spacing along x on different multigrid level)
1657    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddy2_mg  !< 1/dy_l**2 (dy_l: grid spacing along y on different multigrid level)
1658
1659    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  zu_s_inner  !< height of topography top on scalar grid
1660    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  zw_w_inner  !< height of topography top on w grid
1661                                             
1662    SAVE
1663
1664 END MODULE grid_variables
1665
1666
1667!------------------------------------------------------------------------------!
1668! Description:
1669! ------------
1670!> Definition of array bounds, number of gridpoints, and wall flag arrays.
1671!------------------------------------------------------------------------------!
1672 MODULE indices
1673
1674    USE kinds
1675
1676    INTEGER(iwp) ::  nbgp = 3       !< number of boundary ghost points
1677    INTEGER(iwp) ::  ngp_sums       !< number of vertical profile grid points time number of output profiles - used for allreduce statements in MPI calls
1678    INTEGER(iwp) ::  ngp_sums_ls    !< number of vertical profile grid points time number of large-scale forcing profiles - used for allreduce statements in MPI calls
1679    INTEGER(iwp) ::  nnx            !< number of subdomain grid points in x-direction
1680    INTEGER(iwp) ::  nx = 0         !< nx+1 = total number of grid points in x-direction
1681    INTEGER(iwp) ::  nx_a           !< in coupled atmosphere-ocean runs: total number of grid points along x (atmosphere)
1682    INTEGER(iwp) ::  nx_o           !< in coupled atmosphere-ocean runs: total number of grid points along x (ocean)
1683    INTEGER(iwp) ::  nxl            !< left-most grid index of subdomain (excluding ghost points)
1684    INTEGER(iwp) ::  nxlg           !< left-most grid index of subdomain (including ghost points)
1685    INTEGER(iwp) ::  nxlu           !< =nxl+1 (at left domain boundary with inflow from left), else =nxl (used for u-velocity component)
1686    INTEGER(iwp) ::  nxr            !< right-most grid index of subdomain (excluding ghost points)
1687    INTEGER(iwp) ::  nxrg           !< right-most grid index of subdomain (including ghost points)
1688    INTEGER(iwp) ::  nx_on_file     !< nx of previous run in job chain
1689    INTEGER(iwp) ::  nny            !< number of subdomain grid points in y-direction
1690    INTEGER(iwp) ::  ny = 0         !< ny+1 = total number of grid points in y-direction
1691    INTEGER(iwp) ::  ny_a           !< in coupled atmosphere-ocean runs: total number of grid points along y (atmosphere)
1692    INTEGER(iwp) ::  ny_o           !< in coupled atmosphere-ocean runs: total number of grid points along y (ocean)
1693    INTEGER(iwp) ::  nyn            !< north-most grid index of subdomain (excluding ghost points)
1694    INTEGER(iwp) ::  nyng           !< north-most grid index of subdomain (including ghost points)
1695    INTEGER(iwp) ::  nys            !< south-most grid index of subdomain (excluding ghost points)
1696    INTEGER(iwp) ::  nysg           !< south-most grid index of subdomain (including ghost points)
1697    INTEGER(iwp) ::  nysv           !< =nys+1 (at south domain boundary with inflow from south), else =nys (used for v-velocity component)
1698    INTEGER(iwp) ::  ny_on_file     !< ny of previous run in job chain
1699    INTEGER(iwp) ::  nnz            !< number of subdomain grid points in z-direction
1700    INTEGER(iwp) ::  nz = 0         !< total number of grid points in z-direction
1701    INTEGER(iwp) ::  nzb            !< bottom grid index of computational domain
1702    INTEGER(iwp) ::  nzb_diff       !< will be removed
1703    INTEGER(iwp) ::  nzb_max        !< vertical index of topography top
1704    INTEGER(iwp) ::  nzt            !< nzt+1 = top grid index of computational domain
1705    INTEGER(iwp) ::  topo_min_level !< minimum topography-top index (usually equal to nzb)
1706
1707    INTEGER(idp), DIMENSION(:), ALLOCATABLE ::  ngp_3d        !< number of grid points of the total domain
1708    INTEGER(idp), DIMENSION(:), ALLOCATABLE ::  ngp_3d_inner  !< ! need to have 64 bit for grids > 2E9
1709                   
1710    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_2dh  !< number of grid points of a horizontal cross section through the total domain
1711    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nxl_mg   !< left-most grid index of subdomain on different multigrid level
1712    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nxr_mg   !< right-most grid index of subdomain on different multigrid level
1713    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nyn_mg   !< north-most grid index of subdomain on different multigrid level
1714    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nys_mg   !< south-most grid index of subdomain on different multigrid level
1715    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nzt_mg   !< top-most grid index of subdomain on different multigrid level
1716
1717
1718    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  ngp_2dh_outer     !< number of horizontal grid points which are non-topography and non-surface-bounded
1719    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  ngp_2dh_s_inner   !< number of horizontal grid points which are non-topography
1720    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mg_loc_ind        !< internal array to store index bounds of all PEs of that multigrid level where data is collected to PE0
1721    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_diff_s_inner  !< will be removed
1722    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_diff_s_outer  !< will be removed
1723    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_inner         !< will be removed
1724    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_outer         !< will be removed
1725    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_s_inner       !< will be removed
1726    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_s_outer       !< will be removed
1727    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_u_inner       !< will be removed
1728    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_u_outer       !< will be removed
1729    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_v_inner       !< will be removed
1730    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_v_outer       !< will be removed
1731    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_w_inner       !< will be removed
1732    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_w_outer       !< will be removed
1733
1734    INTEGER(iwp), DIMENSION(:,:,:), POINTER ::  flags  !< pointer to wall_flags_1-10
1735
1736    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_1   !< topograpyh masking flag on multigrid level 1
1737    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_2   !< topograpyh masking flag on multigrid level 2
1738    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_3   !< topograpyh masking flag on multigrid level 3
1739    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_4   !< topograpyh masking flag on multigrid level 4
1740    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_5   !< topograpyh masking flag on multigrid level 5
1741    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_6   !< topograpyh masking flag on multigrid level 6
1742    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_7   !< topograpyh masking flag on multigrid level 7
1743    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_8   !< topograpyh masking flag on multigrid level 8
1744    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_9   !< topograpyh masking flag on multigrid level 9
1745    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_10  !< topograpyh masking flag on multigrid level 10
1746
1747    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  advc_flags_m            !< flags used to degrade order of advection scheme for momentum
1748    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  advc_flags_s            !< flags used to degrade order of advection scheme for scalar quantities
1749    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  wall_flags_0            !< flags to mask topography and surface-bounded grid points
1750
1751    SAVE
1752
1753 END MODULE indices
1754
1755
1756!------------------------------------------------------------------------------!
1757! Description:
1758! ------------
1759!> Interfaces for special subroutines which use optional parameters.
1760!------------------------------------------------------------------------------!
1761 MODULE interfaces
1762
1763    INTERFACE
1764
1765!------------------------------------------------------------------------------!
1766! Description:
1767! ------------
1768!> @todo Missing subroutine description.
1769!------------------------------------------------------------------------------!
1770       SUBROUTINE global_min_max ( i1, i2, j1, j2, k1, k2, array, mode, offset, &
1771                                   result, result_ijk, result1, result1_ijk )
1772
1773          USE kinds
1774
1775          CHARACTER (LEN=*), INTENT(IN) ::  mode                      !< mode of global min/max function: can be 'min', 'max', 'minmax', 'abs', or 'absoff'
1776          INTEGER(iwp), INTENT(IN)      ::  i1                        !< internal index of min/max function
1777          INTEGER(iwp), INTENT(IN)      ::  i2                        !< internal index of min/max function
1778          INTEGER(iwp), INTENT(IN)      ::  j1                        !< internal index of min/max function
1779          INTEGER(iwp), INTENT(IN)      ::  j2                        !< internal index of min/max function
1780          INTEGER(iwp), INTENT(IN)      ::  k1                        !< internal index of min/max function
1781          INTEGER(iwp), INTENT(IN)      ::  k2                        !< internal index of min/max function
1782          INTEGER(iwp)                  ::  result_ijk(3)             !< grid index result of min/max function
1783          INTEGER(iwp), OPTIONAL        ::  result1_ijk(3)            !< optional grid index result of min/max function
1784          REAL(wp)                      ::  offset                    !< min/max function calculates absolute value with respect to an offset
1785          REAL(wp)                      ::  result                    !< result of min/max function
1786          REAL(wp), OPTIONAL            ::  result1                   !< optional result of min/max function
1787          REAL(wp), INTENT(IN)          ::  array(i1:i2,j1:j2,k1:k2)  !< input array of min/max function
1788
1789       END SUBROUTINE global_min_max
1790
1791    END INTERFACE
1792
1793    SAVE
1794
1795 END MODULE interfaces
1796
1797
1798!------------------------------------------------------------------------------!
1799! Description:
1800! ------------
1801!> Interfaces for subroutines with pointer arguments called in
1802!> prognostic_equations.
1803!------------------------------------------------------------------------------!
1804 MODULE pointer_interfaces
1805
1806    INTERFACE
1807
1808!------------------------------------------------------------------------------!
1809! Description:
1810! ------------
1811!> @todo Missing subroutine description.
1812!------------------------------------------------------------------------------!
1813       SUBROUTINE advec_s_bc( sk, sk_char )
1814
1815          USE kinds
1816
1817          CHARACTER (LEN=*), INTENT(IN) ::  sk_char  !< string for treated scalar in Bott-Chlond scheme
1818
1819          REAL(wp), DIMENSION(:,:,:), POINTER ::  sk  !< treated scalar array in Bott-Chlond scheme
1820
1821       END SUBROUTINE advec_s_bc
1822
1823    END INTERFACE
1824
1825    SAVE
1826
1827 END MODULE pointer_interfaces
1828
1829
1830!------------------------------------------------------------------------------!
1831! Description:
1832! ------------
1833!> Definition of variables which define processor topology and the exchange of
1834!> ghost point layers. This module must be placed in all routines containing
1835!> MPI-calls.
1836!------------------------------------------------------------------------------!
1837 MODULE pegrid
1838
1839    USE kinds
1840
1841#if defined( __parallel )
1842#if defined( __mpifh )
1843    INCLUDE "mpif.h"
1844#else
1845    USE MPI
1846#endif
1847#endif
1848    CHARACTER(LEN=2) ::  send_receive = 'al'     !<
1849    CHARACTER(LEN=7) ::  myid_char = ''          !< character string containing processor id number
1850   
1851    INTEGER(iwp) ::  comm1dx                     !< communicator for domain decomposition along x
1852    INTEGER(iwp) ::  comm1dy                     !< communicator for domain decomposition along y
1853    INTEGER(iwp) ::  comm2d                      !< standard 2d (xy) communicator used in PALM for the process group the PE belongs to
1854    INTEGER(iwp) ::  comm_inter                  !< intercommunicator that connects atmosphere/ocean process groups
1855    INTEGER(iwp) ::  comm_palm                   !< internal communicator used during the MPI setup at the beginning of a run
1856    INTEGER(iwp) ::  id_inflow = 0               !< myidx of procs at inflow (turbulent inflow method)
1857    INTEGER(iwp) ::  id_outflow = 0              !< myidx of procs at outflow (turbulent outflow method)
1858    INTEGER(iwp) ::  id_outflow_source = 0       !< myidx of procs including ouflow source plane (turbulent outflow method)
1859    INTEGER(iwp) ::  id_recycling = 0            !< myidx of procs containing the recycling plane (turbulence recycling method)
1860    INTEGER(iwp) ::  ierr                        !< standard error parameter in MPI calls
1861    INTEGER(iwp) ::  myid = 0                    !< id number of processor element
1862    INTEGER(iwp) ::  myidx = 0                   !< id number of processor elements with same position along x-direction
1863    INTEGER(iwp) ::  myidy = 0                   !< id number of processor elements with same position along y-direction
1864    INTEGER(iwp) ::  ndim = 2                    !< dimension of the virtual PE grid
1865    INTEGER(iwp) ::  ngp_a                       !< used in atmosphere/ocean coupling: total number of horizontal grid points (atmosphere)
1866    INTEGER(iwp) ::  ngp_o                       !< used in atmosphere/ocean coupling: total number of horizontal grid points (ocean)
1867    INTEGER(iwp) ::  ngp_xy                      !< used in atmosphere/ocean coupling: number of grid points of the subdomain
1868    INTEGER(iwp) ::  ngp_y                       !< number of subdomain grid points along y including ghost points
1869    INTEGER(iwp) ::  npex = -1                   !< number of processor elements in x-direction
1870    INTEGER(iwp) ::  npey = -1                   !< number of processor elements in y-direction
1871    INTEGER(iwp) ::  numprocs = 1                !< total number of appointed processor elements
1872    INTEGER(iwp) ::  numprocs_previous_run = -1  !< total number of appointed processor elements in previous run (job chain)
1873    INTEGER(iwp) ::  pleft                       !< MPI-address of the processor left of the current one
1874    INTEGER(iwp) ::  pnorth                      !< MPI-address of the processor north of the current one
1875    INTEGER(iwp) ::  pright                      !< MPI-address of the processor right of the current one
1876    INTEGER(iwp) ::  psouth                      !< MPI-address of the processor south of the current one
1877    INTEGER(iwp) ::  req_count = 0               !< MPI return variable - checks if Send-Receive operation is already finished
1878    INTEGER(iwp) ::  sendrecvcount_xy            !< number of subdomain gridpoints to be exchanged in direct transpositions (y --> x, or x --> y) or second (2d) transposition x --> y
1879    INTEGER(iwp) ::  sendrecvcount_yz            !< number of subdomain gridpoints to be exchanged in third (2d) transposition y --> z
1880    INTEGER(iwp) ::  sendrecvcount_zx            !< number of subdomain gridpoints to be exchanged in first (2d) transposition z --> x
1881    INTEGER(iwp) ::  sendrecvcount_zyd           !< number of subdomain gridpoints to be exchanged in direct transpositions z --> y (used for calculating spectra)
1882    INTEGER(iwp) ::  target_id                   !< in atmosphere/ocean coupling: id of the ocean/atmosphere counterpart PE with whom the atmosphere/ocean PE exchanges data
1883    INTEGER(iwp) ::  tasks_per_node = -9999      !< MPI tasks per compute node
1884    INTEGER(iwp) ::  threads_per_task = 1        !< number of OPENMP threads per MPI task
1885    INTEGER(iwp) ::  type_x                      !< derived MPI datatype for 2-D ghost-point exchange - north / south
1886    INTEGER(iwp) ::  type_xy                     !< derived MPI datatype for 2-D ghost-point exchange - north / south
1887    INTEGER(iwp) ::  type_y                      !< derived MPI datatype for 2-D exchange in atmosphere-ocean coupler
1888
1889    INTEGER(iwp) ::  pdims(2) = 1  !< number of processors along x-y dimension
1890    INTEGER(iwp) ::  req(100)      !< MPI return variable indicating if send-receive operation is finished
1891
1892    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  hor_index_bounds               !< horizontal index bounds
1893    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  hor_index_bounds_previous_run  !< horizontal index bounds of previous run
1894
1895    LOGICAL ::  collective_wait = .FALSE.          !< switch to set an explicit MPI barrier in front of all collective MPI calls
1896
1897#if defined( __parallel )
1898    INTEGER(iwp) ::  ibuf(12)                 !< internal buffer for calculating MPI settings
1899    INTEGER(iwp) ::  pcoord(2)                !< PE coordinates along x and y
1900    INTEGER(iwp) ::  status(MPI_STATUS_SIZE)  !< MPI status variable used in various MPI calls
1901   
1902    INTEGER(iwp), DIMENSION(MPI_STATUS_SIZE,100) ::  wait_stat  !< MPI status variable used in various MPI calls
1903   
1904    INTEGER(iwp) ::  type_x_byte !< derived MPI datatype for 2-D 8-bit integer ghost-point exchange - north / south
1905    INTEGER(iwp) ::  type_y_byte !< derived MPI datatype for 2-D integer ghost-point exchange - left / right
1906   
1907    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_xz      !< number of ghost points in xz-plane on different multigrid level
1908    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_xz_int  !< number of ghost points in xz-plane on different multigrid level
1909    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_yz      !< number of ghost points in yz-plane on different multigrid level
1910    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_yz_int  !< number of ghost points in yz-plane on different multigrid level
1911    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_x_int  !< derived MPI datatype for 2-D integer ghost-point exchange - north / south
1912    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_xz     !< derived MPI datatype for 3-D integer ghost-point exchange - north / south
1913    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_xz_int !< derived MPI datatype for 3-D integer ghost-point exchange - north / south
1914    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_y_int  !< derived MPI datatype for 2-D integer ghost-point exchange - left / right
1915    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_yz     !< derived MPI datatype for 3-D integer ghost-point exchange - left / right
1916    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_yz_int !< derived MPI datatype for 3-D integer ghost-point exchange - left / right
1917
1918    LOGICAL ::  left_border_pe  = .FALSE.  !< = .TRUE. if PE is on left border of computational domain
1919    LOGICAL ::  north_border_pe = .FALSE.  !< = .TRUE. if PE is on north border of computational domain
1920    LOGICAL ::  reorder = .TRUE.           !< switch to allow MPI the reorder of ranking (e.g. row-major or column-major)
1921    LOGICAL ::  right_border_pe = .FALSE.  !< = .TRUE. if PE is on right border of computational domain
1922    LOGICAL ::  south_border_pe = .FALSE.  !< = .TRUE. if PE is on south border of computational domain
1923
1924    LOGICAL, DIMENSION(2) ::  cyclic = (/ .TRUE. , .TRUE. /)  !< boundary conditions of the virtual PE grid
1925    LOGICAL, DIMENSION(2) ::  remain_dims                     !< internal array used to determine sub-topologies for transpositions
1926#endif
1927
1928    SAVE
1929
1930 END MODULE pegrid
1931
1932
1933!------------------------------------------------------------------------------!
1934! Description:
1935! ------------
1936!> Definition of variables which control PROFIL-output.
1937!------------------------------------------------------------------------------!
1938 MODULE profil_parameter
1939
1940    USE kinds
1941
1942    INTEGER(iwp), PARAMETER ::  crmax = 100  !< maximum number of coordinate systems for profile output
1943
1944    CHARACTER (LEN=27), DIMENSION(20) ::  cross_ts_profiles = &  !< time series to be plotted into one coordinate system, respectively
1945                           (/ ' E E*                      ', &
1946                              ' dt                        ', &
1947                              ' u* w*                     ', &
1948                              ' th*                       ', &
1949                              ' umax vmax wmax            ', &
1950                              ' div_old div_new           ', &
1951                              ' zi_wtheta zi_theta        ', &
1952                              ' w"theta"0 w"theta" wtheta ', &
1953                              ' theta(0) theta(zp)        ', &
1954                              ' splux spluy spluz         ', &
1955                              ' L                         ', &
1956                            ( '                           ', i9 = 1, 9 ) /)
1957
1958    CHARACTER (LEN=100), DIMENSION(crmax) ::  cross_profiles = &  !< quantities to be plotted into one coordinate system, respectively
1959                          (/ ' u v                                          ', &
1960                             ' pt                                           ', &
1961                             ' w"theta" w*theta* w*theta*BC wtheta wthetaBC ', &
1962                             ' w"u" w*u* wu w"v" w*v* wv                    ', &
1963                             ' km kh                                        ', &
1964                             ' l                                            ', &
1965             ( '                                              ', i9 = 1, 94 ) /)
1966
1967    INTEGER(iwp) ::  profile_columns = 2  !< number of coordinate systems on a profile plot per column
1968    INTEGER(iwp) ::  profile_rows = 3     !< number of coordinate systems on a profile plot per row
1969
1970    INTEGER(iwp) ::  dopr_index(300) = 0                !< index number of respective profile quantity
1971    INTEGER(iwp) ::  dopr_initial_index(300) = 0        !< index number of initial profiles to be output
1972               
1973    SAVE
1974
1975 END MODULE profil_parameter
1976
1977!------------------------------------------------------------------------------!
1978! Description:
1979! ------------
1980!> Definition of statistical quantities, e.g. global sums.
1981!------------------------------------------------------------------------------!
1982 MODULE statistics
1983
1984    USE kinds
1985
1986    CHARACTER (LEN=40) ::  region(0:9) =  &  !< label for statistic region
1987                           'total domain                            '
1988 
1989    INTEGER(iwp) ::  pr_palm = 200          !< maximum number of output profiles
1990    INTEGER(iwp) ::  statistic_regions = 0  !< identifier for statistic regions
1991
1992    INTEGER(iwp) ::  u_max_ijk(3) = -1  !< index values (i,j,k) of location where u_max occurs
1993    INTEGER(iwp) ::  v_max_ijk(3) = -1  !< index values (i,j,k) of location where v_max occurs
1994    INTEGER(iwp) ::  w_max_ijk(3) = -1  !< index values (i,j,k) of location where w_max occurs
1995   
1996    LOGICAL ::  flow_statistics_called = .FALSE.  !< flag that tells other routines if flow statistics was executed
1997                                                  !< (after each timestep)
1998   
1999    REAL(wp) ::  u_max = 0.0_wp  !< maximum of absolute u-veloctiy in entire domain
2000    REAL(wp) ::  v_max = 0.0_wp  !< maximum of absolute v-veloctiy in entire domain
2001    REAL(wp) ::  w_max = 0.0_wp  !< maximum of absolute w-veloctiy in entire domain
2002
2003    REAL(wp), DIMENSION(2) ::  z_i  !< inversion height
2004   
2005    REAL(wp), DIMENSION(:), ALLOCATABLE ::  mean_surface_level_height  !< mean surface level height for the different statistic regions
2006    REAL(wp), DIMENSION(:), ALLOCATABLE ::  sums_divnew_l              !< subdomain sum (_l) of divergence after pressure
2007                                                                       !< solver call (new)
2008    REAL(wp), DIMENSION(:), ALLOCATABLE ::  sums_divold_l              !< subdomain sum (_l) of divergence before pressure
2009                                                                       !< solver call (old)
2010    REAL(wp), DIMENSION(:), ALLOCATABLE ::  weight_substep             !< weighting factor for substeps in timestepping
2011    REAL(wp), DIMENSION(:), ALLOCATABLE ::  weight_pres                !< substep weighting factor for pressure solver
2012   
2013    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums             !< global sum array for the various output quantities
2014    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_salsa_ws_l  !< subdomain sum of vertical salsa flux w's' (5th-order advection scheme only)
2015    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsts_bc_l   !< subdomain sum of sensible heat flux in Bott-Chlond scheme
2016    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ts_value         !< timeseries output array for the various output quantities
2017    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsus_ws_l   !< subdomain sum of vertical momentum flux w'u' (5th-order advection scheme only)
2018    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsvs_ws_l   !< subdomain sum of vertical momentum flux w'v' (5th-order advection scheme only)
2019    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_us2_ws_l    !< subdomain sum of horizontal momentum flux u'u' (5th-order advection scheme only)
2020    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_vs2_ws_l    !< subdomain sum of horizontal momentum flux v'v' (5th-order advection scheme only)
2021    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_ws2_ws_l    !< subdomain sum of vertical momentum flux w'w' (5th-order advection scheme only)
2022    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsncs_ws_l  !< subdomain sum of vertical clouddrop-number concentration flux w'nc' (5th-order advection scheme only)
2023    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsnrs_ws_l  !< subdomain sum of vertical raindrop-number concentration flux w'nr' (5th-order advection scheme only)
2024    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wspts_ws_l  !< subdomain sum of vertical sensible heat flux w'pt' (5th-order advection scheme only)
2025    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsqs_ws_l   !< subdomain sum of vertical latent heat flux w'q' (5th-order advection scheme only)
2026    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsqcs_ws_l  !< subdomain sum of vertical cloudwater flux w'qc' (5th-order advection scheme only)
2027    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsqrs_ws_l  !< subdomain sum of vertical rainwater flux w'qr' (5th-order advection scheme only)
2028    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wssas_ws_l  !< subdomain sum of vertical salinity flux w'sa' (5th-order advection scheme only)
2029    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsss_ws_l   !< subdomain sum of vertical passive scalar flux w's' (5th-order advection scheme only)
2030    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_ls_l        !< subdomain sum of large scale forcing and nudging tendencies
2031                                             
2032    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  hom_sum             !< sum array for horizontal mean
2033    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  rmask               !< REAL flag array (0.0 or 1.0) for statistic regions
2034    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  sums_l              !< subdomain sum (_l) gathered for various quantities
2035    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  sums_l_l            !< subdomain sum (_l) of mixing length from diffusivities
2036   
2037    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  hom  !< horizontal mean of various quantities (profiles/timeseries)
2038
2039    SAVE
2040
2041 END MODULE statistics
2042
2043
2044
2045!------------------------------------------------------------------------------!
2046! Description:
2047! ------------
2048!> Definition of indices for transposed arrays.
2049!------------------------------------------------------------------------------!
2050 MODULE transpose_indices
2051
2052    USE kinds
2053
2054    INTEGER(iwp) ::  nxl_y   !< internal index bound for transpositions
2055    INTEGER(iwp) ::  nxl_yd  !< internal index bound for transpositions
2056    INTEGER(iwp) ::  nxl_z   !< internal index bound for transpositions
2057    INTEGER(iwp) ::  nxr_y   !< internal index bound for transpositions
2058    INTEGER(iwp) ::  nxr_yd  !< internal index bound for transpositions
2059    INTEGER(iwp) ::  nxr_z   !< internal index bound for transpositions
2060    INTEGER(iwp) ::  nyn_x   !< internal index bound for transpositions
2061    INTEGER(iwp) ::  nyn_z   !< internal index bound for transpositions
2062    INTEGER(iwp) ::  nys_x   !< internal index bound for transpositions
2063    INTEGER(iwp) ::  nys_z   !< internal index bound for transpositions
2064    INTEGER(iwp) ::  nzb_x   !< internal index bound for transpositions
2065    INTEGER(iwp) ::  nzb_y   !< internal index bound for transpositions
2066    INTEGER(iwp) ::  nzb_yd  !< internal index bound for transpositions
2067    INTEGER(iwp) ::  nzt_x   !< internal index bound for transpositions
2068    INTEGER(iwp) ::  nzt_y   !< internal index bound for transpositions
2069    INTEGER(iwp) ::  nzt_yd  !< internal index bound for transpositions
2070               
2071    SAVE
2072
2073 END MODULE transpose_indices
Note: See TracBrowser for help on using the repository browser.