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

Last change on this file since 1738 was 1738, checked in by raasch, 8 years ago

bugfixes for calculations in statistical regions which do not contain grid points in the lowest vertical levels, mean surface level height considered in the calculation of the characteristic vertical velocity

  • Property svn:keywords set to Id
File size: 71.1 KB
Line 
1!> @file modules.f90
2!--------------------------------------------------------------------------------!
3! This file is part of PALM.
4!
5! PALM is free software: you can redistribute it and/or modify it under the terms
6! of the GNU General Public License as published by the Free Software Foundation,
7! either version 3 of the License, or (at your option) any later version.
8!
9! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
10! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12!
13! You should have received a copy of the GNU General Public License along with
14! PALM. If not, see <http://www.gnu.org/licenses/>.
15!
16! Copyright 1997-2015 Leibniz Universitaet Hannover
17!--------------------------------------------------------------------------------!
18!
19! Current revisions:
20! ------------------
21! +mean_surface_level_height
22!
23! Former revisions:
24! -----------------
25! $Id: modules.f90 1738 2015-12-18 13:56:05Z raasch $
26!
27! 1695 2015-10-27 10:03:11Z maronga
28! Removed rif (forgotten in last revision)
29!
30! 1693 2015-10-27 08:35:45Z maronga
31! Renamed zp -> z_mo
32!
33! 1691 2015-10-26 16:17:44Z maronga
34! Renamed Obukhov length. Added ol, removed rif. Increased number of profiles
35! (pr_palm). Changed default values for dissipation_1d to 'detering' and
36! (mixing_length_1d to 'blackadar'. Added most_method. rif_min and rif_max
37! renamed to zeta_min and zeta_max and new values assigned.
38!
39! 1682 2015-10-07 23:56:08Z knoop
40! Code annotations made doxygen readable
41!
42! 1677 2015-10-02 13:25:23Z boeske
43! +ngp_yz_int, type_xz_int, type_yz_int
44!
45! 1666 2015-09-23 07:31:10Z raasch
46! +user_interface_current_revision, user_interface_required_revision in
47! control_parameters
48!
49! 1639 2015-08-31 14:46:48Z knoop
50! Bugfix: string 'unknown' extended to match LEN=13
51!
52! 1575 2015-03-27 09:56:27Z raasch
53! +ngp_xz
54!
55! 1560 2015-03-06 10:48:54Z keck
56! +recycling_yshift
57!
58! 1557 2015-03-05 16:43:04Z suehring
59! +monotonic_adjustment
60!
61! 1551 2015-03-03 14:18:16Z maronga
62! Increased pr_palm to 120. Increased length of dots_unit and dots_label to 13
63! digits. Increased length of domask, do2d, and do3d to 20 digits.
64!
65! 1496 2014-12-02 17:25:50Z maronga
66! Renamed "radiation" -> "cloud_top_radiation"
67!
68! 1484 2014-10-21 10:53:05Z kanani
69! Changes due to new module structure of the plant canopy model:
70!   canopy-model related parameters/variables moved to module
71!   plant_canopy_model_mod
72!
73! 1468 2014-09-24 14:06:57Z maronga
74! Adapted for use on up to 6-digit processor cores.
75! Increased identifier string length for user-defined quantities to 20.
76!
77! 1450 2014-08-21 07:31:51Z heinze
78! ntnudge from 100 to 1000 increased to allow longer simulations
79!
80! 1431 2014-07-15 14:47:17Z suehring
81! +var_d
82!
83! 1429 2014-07-15 12:53:45Z knoop
84! +ensemble_member_nr to prepare the random_generator for ensemble runs
85!
86! 1382 2014-04-30 12:15:41Z boeske
87! Renamed variables which store large scale forcing tendencies
88! pt_lsa -> td_lsa_lpt, pt_subs -> td_sub_lpt,
89! q_lsa  -> td_lsa_q,   q_subs  -> td_sub_q
90!
91! 1365 2014-04-22 15:03:56Z boeske
92! Usage of large scale forcing enabled:
93! increase pr_palm from 90 to 100 to allow for more standard profiles
94! + ngp_sums_ls, pt_lsa, pt_subs, q_lsa, q_subs, tmp_tnudge, sums_ls_l,
95! use_subsidence_tendencies
96!
97! 1361 2014-04-16 15:17:48Z hoffmann
98! tend_* removed
99! call_microphysics_at_all_substeps added
100! default of drizzle set to true
101!
102! 1359 2014-04-11 17:15:14Z hoffmann
103! particle_attributes moved to mod_particle_attributes.f90
104!
105! 1353 2014-04-08 15:21:23Z heinze
106! REAL constants provided with KIND-attribute
107!
108! 1327 2014-03-21 11:00:16Z raasch
109! REAL constants defined as wp-kind
110! -avs_output, data_output_format, do3d_compress, iso2d_output, netcdf_output
111!
112! 1320 2014-03-20 08:40:49Z raasch
113! ONLY-attribute added to USE-statements,
114! kind-parameters added to all INTEGER and REAL declaration statements,
115! kinds are defined in new module kinds,
116! old module precision_kind is removed,
117! revision history before 2012 removed,
118! comment fields (!:) to be used for variable explanations added to
119! all variable declaration statements
120!
121! 1318 2014-03-17 13:35:16Z raasch
122! module cpulog moved to new separate module-file
123! interface for cpu_log removed
124!
125! 1314 2014-03-14 18:25:17Z suehring
126! + log_z_z0, number_of_sublayers, z0_av_global
127! 1308 2014-03-13 14:58:42Z fricke
128! +ntdim_2d_xy, ntdim_2d_xz, ntdim_2d_yz, ntdim_3d
129!
130! 1257 2013-11-08 15:18:40Z raasch
131! set default values for grid indices of maximum velocity components
132! u|v|w_max_ijk
133!
134! 1241 2013-10-30 11:36:58Z heinze
135! Usage of nudging enabled
136! +nudging, ntnudge, ptnudge, qnudge, tnudge, unudge, vnudge, wnudge
137! increase pr_palm from 80 to 90 to allow for more standard profiles
138!
139! Enable prescribed time depenend surface fluxes and geostrophic wind read in
140! from external file LSF_DATA
141! +large_scale_forcing, lsf_surf, lsf_vert, nlsf, time_surf, shf_surf, qsws_surf,
142!  pt_surf, q_surf, p_surf, time_vert, ug_vert, vg_vert, wsubs_vert
143!
144! 1221 2013-09-10 08:59:13Z raasch
145! wall_flags_0 changed to 32bit int, +wall_flags_00,
146! +rflags_s_inner, rflags_invers
147!
148! 1216 2013-08-26 09:31:42Z raasch
149! +transpose_compute_overlap,
150! several variables are now defined in the serial (non-parallel) case also
151!
152! 1212 2013-08-15 08:46:27Z raasch
153! +tri
154!
155! 1179 2013-06-14 05:57:58Z raasch
156! +reference_state, ref_state, use_initial_profile_as_reference, vpt_reference,
157! use_reference renamed use_single_reference_value
158!
159! 1159 2013-05-21 11:58:22Z fricke
160! -bc_lr_dirneu, bc_lr_neudir, bc_ns_dirneu, bc_ns_neudir
161! +use_cmax
162!
163! 1128 2013-04-12 06:19:32Z raasch
164! +background_communication, i_left, i_right, j_north, j_south, req, req_count,
165! send_receive, sendrecv_in_background, wait_stat
166!
167! 1115 2013-03-26 18:16:16Z hoffmann
168! unused variables removed
169!
170! 1113 2013-03-10 02:48:14Z raasch
171! +on_device
172!
173! 1111 2013-03-08 23:54:10Z raasch
174! +tric, nr_timesteps_this_run
175!
176! 1106 2013-03-04 05:31:38Z raasch
177! array_kind renamed precision_kind, pdims defined in serial code
178! bugfix: default value assigned to coupling_start_time
179!
180! 1095 2013-02-03 02:21:01Z raasch
181! FORTRAN error in r1092 removed
182!
183! 1092 2013-02-02 11:24:22Z raasch
184! character length in some derived type changed for better alignment
185!
186! 1065 2012-11-22 17:42:36Z hoffmann
187! + c_sedimentation, limiter_sedimentation, turbulence, a_1, a_2, a_3, b_1, b_2,
188! + b_3, c_1, c_2, c_3, beta_cc
189!
190! bottom boundary condition of qr, nr changed from Dirichlet to Neumann
191!
192! 1053 2012-11-13 17:11:03Z hoffmann
193! necessary expansions according to the two new prognostic equations (nr, qr)
194! of the two-moment cloud physics scheme:
195! +*_init, flux_l_*, diss_l_*, flux_s_*, diss_s_*, *sws, *swst, tend_*, *, *_p
196! +t*_m, *_1, *_2, *_3, *_av, bc_*_b, bc_*_t, ibc_*_b, ibc_*_t, bc_*_t_val,
197! +*_vertical_gradient, *_surface_initial_change, *_vertical_gradient_level,
198! +*_vertical_gradient_level_ind, *_surface, constant_waterflux_*, 
199! +cloud_scheme, icloud_scheme, surface_waterflux_*, sums_ws*s_ws_l, wall_*flux
200!
201! constants for the two-moment scheme:
202! +a_vent, a_term, b_vent, b_term, c_evap, c_term, cof, eps_sb, k_cc, k_cr, k_rr,
203! +k_br, kappa_rr, kin_vis_air, mu_constant_value, nc, pirho_l, dpirho_l, rho_1,
204! +schmidt, schmidt_p_1d3, stp, x0, xmin, xmax, dt_precipitation, w_precipitation
205!
206! steering parameters for the two_moment scheme:
207! +mu_constant, ventilation_effect
208!
209! 1036 2012-10-22 13:43:42Z raasch
210! code put under GPL (PALM 3.9)
211!
212! 1031 2012-10-19 14:35:30Z raasch
213! +output_format_netcdf
214!
215! 1015 2012-09-27 09:23:24Z raasch
216! +acc_rank, num_acc_per_node,
217! -adjust_mixing_length
218!
219! 1010 2012-09-20 07:59:54Z raasch
220! pointer free version can be generated with cpp switch __nopointer
221!
222! 1003 2012-09-14 14:35:53Z raasch
223! -grid_matching, nxa, nya, etc., nnx_pe, nny_pe, spl_*
224!
225! 1001 2012-09-13 14:08:46Z raasch
226! -asselin_filter_factor, cut_spline_overshoot, dt_changed, last_dt_change,
227! last_dt_change_1d, long_filter_factor, overshoot_limit_*, ups_limit_*
228! several pointer/target arrays converted to normal ones
229!
230! 996 2012-09-07 10:41:47Z raasch
231! -use_prior_plot1d_parameters
232!
233! 978 2012-08-09 08:28:32Z fricke
234! +c_u_m, c_u_m_l, c_v_m, c_v_m_l, c_w_m, c_w_m_l,
235! +bc_lr_dirneu, bc_lr_neudir, bc_ns_dirneu, bc_ns_neudir
236! -km_damp_x, km_damp_y, km_damp_max, outflow_damping_width
237! +z0h, z0h_av, z0h_factor, z0h1d
238! +ptdf_x, ptdf_y, pt_damping_width, pt_damping_factor
239!
240! 964 2012-07-26 09:14:24Z raasch
241! -cross_linecolors, cross_linestyles, cross_normalized_x, cross_normx_factor,
242! cross_normalized_y, cross_normy_factor, cross_pnc_local,
243! cross_profile_numbers, cross_profile_number_counter, cross_uxmax,
244! cross_uxmax_computed, cross_uxmax_normalized,
245! cross_uxmax_normalized_computed, cross_uxmin, cross_uxmin_computed,
246! cross_uxmin_normalized, cross_uxmin_normalized_computed, cross_uymax,
247! cross_uymin, cross_xtext, dopr_crossindex, dopr_label, linecolors, linestyles,
248! nz_do1d, profil_output, z_max_do1d, z_max_do1d_normalized
249!
250! 951 2012-07-19 14:22:52Z hoffmann
251! changing profile_columns and profile_rows
252!
253! 940 2012-07-09 14:31:00Z raasch
254! +neutral
255!
256! 927 2012-06-06 19:15:04Z raasch
257! +masking_method
258!
259! 880 2012-04-13 06:28:59Z raasch
260! gathered_size, subdomain_size moved to control_parameters
261!
262! 866 2012-03-28 06:44:41Z raasch
263! interface for global_min_max changed
264!
265! 861 2012-03-26 14:18:34Z suehring
266! +wall_flags_0
267! -boundary_flags
268! +nzb_max
269! +adv_sca_1, +adv_mom_1
270!
271! 849 2012-03-15 10:35:09Z raasch
272! +deleted_particles, deleted_tails, tr.._count_sum, tr.._count_recv_sum in
273! particle_attributes,
274! +de_dx, de_dy, de_dz in arrays_3d,
275! first_call_advec_particles renamed first_call_lpm
276!
277! 828 2012-02-21 12:00:36Z raasch
278! +dissipation_classes, radius_classes, use_kernel_tables,
279! particle feature color renamed class
280!
281! 825 2012-02-19 03:03:44Z raasch
282! +bfactor, curvature_solution_effects, eps_ros, molecular_weight_of_water,
283! vanthoff, -b_cond in cloud_parameters,
284! dopts_num increased to 29, particle attributes speed_x|y|z_sgs renamed
285! rvar1|2|3
286! wang_collision_kernel and turbulence_effects_on_collision replaced by
287! collision_kernel, hall_kernel, palm_kernel, wang_kernel
288!
289! 809 2012-01-30 13:32:58Z marongas
290! Bugfix: replaced .AND. and .NOT. with && and ! in the preprocessor directives
291!
292! 807 2012-01-25 11:53:51Z maronga
293! New cpp directive "__check" implemented which is used by check_namelist_files.
294! New parameter check_restart has been defined which is needed by
295! check_namelist_files only.
296!
297! 805 2012-01-17 15:53:28Z franke
298! Bugfix collective_wait must be out of parallel branch for runs in serial mode
299!
300! 801 2012-01-10 17:30:36Z suehring
301! Dimesion of sums_wsus_ws_l, ! sums_wsvs_ws_l, sums_us2_ws_l, sums_vs2_ws_l,
302! sums_ws2_ws_l, sums_wspts_ws_l, sums_wsqs_ws_l, sums_wssas_ws_l increased.
303! for thread-safe summation in advec_ws.
304!
305! RCS Log replace by Id keyword, revision history cleaned up
306!
307! Revision 1.95  2007/02/11 13:18:30  raasch
308! version 3.1b (last under RCS control)
309!
310! Revision 1.1  1997/07/24 11:21:26  raasch
311! Initial revision
312!
313!
314!------------------------------------------------------------------------------!
315! Description:
316! ------------
317!> Definition of all variables
318!>
319!> @todo Add description for each variable
320!------------------------------------------------------------------------------!
321
322
323!------------------------------------------------------------------------------!
324! Description:
325! ------------
326!> Definition of variables for special advection schemes.
327!------------------------------------------------------------------------------!
328 MODULE advection
329 
330    USE kinds
331
332    REAL(wp), DIMENSION(:), ALLOCATABLE   ::  aex, bex, dex, eex
333
334    SAVE
335
336 END MODULE advection
337
338
339!------------------------------------------------------------------------------!
340! Description:
341! ------------
342!> Definition of all arrays defined on the computational grid.
343!------------------------------------------------------------------------------!
344 MODULE arrays_3d
345
346    USE kinds
347
348    REAL(wp), DIMENSION(:), ALLOCATABLE ::                                     &
349          c_u_m, c_u_m_l, c_v_m, c_v_m_l, c_w_m, c_w_m_l, ddzu, ddzu_pres,     &
350          dd2zu, dzu, ddzw, dzw, hyp, inflow_damping_factor, l_grid,           &
351          nc_1d, nr_1d, ptdf_x, ptdf_y, p_surf, pt_surf, pt_1d, pt_init,       &
352          qsws_surf, q_1d, q_init, q_surf, qc_1d, qr_1d, rdf, rdf_sc,          & 
353          ref_state, sa_init, shf_surf, timenudge, time_surf, time_vert,       &
354          tmp_tnudge, ug, u_init, u_nzb_p1_for_vfc, vg, v_init,                &
355          v_nzb_p1_for_vfc, w_subs, zu, zw
356
357    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::                                   &
358          c_u, c_v, c_w, diss_s_e, diss_s_nr, diss_s_pt, diss_s_q,             &
359          diss_s_qr, diss_s_sa, diss_s_u, diss_s_v, diss_s_w, dzu_mg, dzw_mg,  &
360          flux_s_e, flux_s_nr, flux_s_pt, flux_s_q, flux_s_qr, flux_s_sa,      &
361          flux_s_u, flux_s_v, flux_s_w, f1_mg, f2_mg, f3_mg,                   &
362          mean_inflow_profiles, nrs, nrsws, nrswst,                            &
363          ol,                                                                  & !< Obukhov length
364          ptnudge, pt_slope_ref,                                               &
365          qnudge, qs, qsws, qswst, qswst_remote, qrs, qrsws, qrswst,           &
366          saswsb, saswst, shf, tnudge, td_lsa_lpt, td_lsa_q, td_sub_lpt,       &
367          td_sub_q, total_2d_a, total_2d_o, ts, tswst, ug_vert, unudge, us,    &
368          usws, uswst, vnudge, vg_vert, vsws, vswst, wnudge, wsubs_vert, z0, z0h
369
370    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::                                 &
371          d, de_dx, de_dy, de_dz, diss, diss_l_e,                              &
372          diss_l_nr, diss_l_pt, diss_l_q, diss_l_qr, diss_l_sa, diss_l_u,      &
373          diss_l_v, diss_l_w, flux_l_e, flux_l_nr, flux_l_pt, flux_l_q,        &
374          flux_l_qr, flux_l_sa, flux_l_u, flux_l_v, flux_l_w, kh, km,          &
375          l_wall, p_loc, tend, tric,                                           &
376          u_m_l, u_m_n, u_m_r, u_m_s, v_m_l, v_m_n, v_m_r, v_m_s, w_m_l,       &
377          w_m_n, w_m_r, w_m_s
378
379#if defined( __nopointer )
380    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::                         &
381          e, e_p, nr, nr_p, p, prho, pt, pt_p, q, q_p, qc, ql, ql_c, ql_v,     &
382          ql_vp, qr, qr_p, rho, sa, sa_p, te_m, tnr_m, tpt_m, tq_m, tqr_m,     &
383          tsa_m, tu_m, tv_m, tw_m, u, u_p, v, v_p, vpt, w, w_p
384#else
385    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::                         &
386          e_1, e_2, e_3, p, prho_1, nr_1, nr_2, nr_3, pt_1, pt_2, pt_3, q_1,   &
387          q_2, q_3, qc_1, ql_v, ql_vp, ql_1, ql_2, qr_1, qr_2, qr_3, rho_1,    &
388          sa_1, sa_2, sa_3, u_1, u_2, u_3, v_1, v_2, v_3, vpt_1, w_1, w_2, w_3
389
390    REAL(wp), DIMENSION(:,:,:), POINTER ::                                     &
391          e, e_p, nr, nr_p, prho, pt, pt_p, q, q_p, qc, ql, ql_c, qr, qr_p,    &
392          rho, sa, sa_p, te_m, tnr_m, tpt_m, tq_m, tqr_m, tsa_m, tu_m, tv_m,   &
393          tw_m, u, u_p, v, v_p, vpt, w, w_p
394#endif
395
396    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  rif_wall, tri
397
398    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: var_x, var_y, var_z, gamma_x,   &
399                                           gamma_y, gamma_z
400
401
402    SAVE
403
404 END MODULE arrays_3d
405
406
407!------------------------------------------------------------------------------!
408! Description:
409! ------------
410!> Definition of variables needed for time-averaging of 2d/3d data.
411!------------------------------------------------------------------------------!
412 MODULE averaging
413 
414    USE kinds
415
416    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  lwp_av,                & !> Avg. liquid water path
417                                              precipitation_rate_av, & !> Avg. of precipitation rate
418                                              ol_av,                 & !> Avg. of Obukhov length
419                                              qsws_av,               & !> Avg. of surface moisture flux
420                                              shf_av,                & !> Avg. of surface heat flux
421                                              ts_av,                 & !> Avg. of characteristic temperature scale
422                                              us_av,                 & !> Avg. of friction velocity
423                                              z0_av,                 & !> Avg. of roughness length for momentum
424                                              z0h_av                   !> Avg. of roughness length for heat and moisture
425
426    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::                         &
427          e_av, lpt_av, nr_av, p_av, pc_av, pr_av, prr_av, pt_av, q_av, qc_av, &
428          ql_av, ql_c_av, ql_v_av, ql_vp_av, qr_av, qv_av, rho_av, s_av, sa_av,&
429          u_av, v_av, vpt_av, w_av
430 
431 END MODULE averaging
432
433
434!------------------------------------------------------------------------------!
435! Description:
436! ------------
437!> Definition of variables and constants for cloud physics.
438!------------------------------------------------------------------------------!
439 MODULE cloud_parameters
440 
441    USE kinds
442
443    LOGICAL ::  curvature_solution_effects = .FALSE., &
444                limiter_sedimentation = .TRUE., &
445                ventilation_effect = .FALSE.
446               
447
448    REAL(wp) ::  a_1 = 8.69E-4_wp,     & !< coef. in turb. parametrization (cm-2 s3)
449                 a_2 = -7.38E-5_wp,    & !< coef. in turb. parametrization (cm-2 s3)
450                 a_3 = -1.40E-2_wp,    & !< coef. in turb. parametrization
451                 a_term = 9.65_wp,     & !< coef. for terminal velocity (m s-1)
452                 a_vent = 0.78_wp,     & !< coef. for ventilation effect
453                 b_1 = 11.45E-6_wp,    & !< coef. in turb. parametrization (m)
454                 b_2 = 9.68E-6_wp,     & !< coef. in turb. parametrization (m)
455                 b_3 = 0.62_wp,        & !< coef. in turb. parametrization
456                 b_term = 9.8_wp,      & !< coef. for terminal velocity (m s-1)
457                 b_vent = 0.308_wp,    & !< coef. for ventilation effect
458                 beta_cc = 3.09E-4_wp, & !< coef. in turb. parametrization (cm-2 s3)
459                 bfactor,              & !< solution effect on diffusional growth
460                 c_1 = 4.82E-6_wp,     & !< coef. in turb. parametrization (m)
461                 c_2 = 4.8E-6_wp,      & !< coef. in turb. parametrization (m)
462                 c_3 = 0.76_wp,        & !< coef. in turb. parametrization
463                 c_const = 0.93_wp,    & !< const. in Taylor-microscale Reynolds number
464                 c_evap = 0.7_wp,      & !< constant in evaporation
465                 c_sedimentation = 2.0_wp, & !< Courant number of sedimentation process
466                 c_term = 600.0_wp,    & !< coef. for terminal velocity (m-1)
467                 cof(6) = (/ 76.18009172947146_wp,      & !< coefficients in the
468                             -86.50532032941677_wp,     & !< numerical
469                             24.01409824083091_wp,      & !< calculation of the
470                             -1.231739572450155_wp,     & !< gamma function
471                             0.1208650973866179E-2_wp,  &
472                             -0.5395239384953E-5_wp /), &
473                cp = 1005.0_wp,       & !< heat capacity of dry air (J kg-1 K-1)
474                diff_coeff_l = 0.23E-4_wp, & !< diffusivity of water vapor (m2 s-1)
475                effective_coll_efficiency, & !< effective collision efficiency
476                eps_ros = 1.0E-4_wp,  & !< accuracy of Rosenbrock method
477                eps_sb = 1.0E-20_wp,  & !< threshold in two-moments scheme
478                k_cc = 9.44E09_wp,    & !< const. cloud-cloud kernel (m3 kg-2 s-1)
479                k_cr0 = 4.33_wp,      & !< const. cloud-rain kernel (m3 kg-1 s-1)
480                k_rr = 7.12_wp,       & !< const. rain-rain kernel (m3 kg-1 s-1)
481                k_br = 1000._wp,      & !< const. in breakup parametrization (m-1)
482                k_st = 1.2E8_wp,      & !< const. in drizzle parametrization (m-1 s-1)
483                kappa_rr = 60.7_wp,   & !< const. in collision kernel (kg-1/3)
484                kin_vis_air = 1.4086E-5_wp, & !< kin. viscosity of air (m2 s-1)
485                l_v = 2.5E+06_wp,     & !< latent heat of vaporization (J kg-1)
486                l_d_cp, l_d_r, l_d_rv, & !< l_v / cp, l_v / r_d, l_v / r_v
487                mass_of_solute = 1.0E-17_wp, & !< soluted NaCl (kg)
488                molecular_weight_of_solute = 0.05844_wp, & !< mol. m. NaCl (kg mol-1)
489                molecular_weight_of_water = 0.01801528_wp, & !< mol. m. H2O (kg mol-1)
490                nc_const = 70.0E6_wp, & !< cloud droplet concentration
491                prec_time_const = 0.001_wp, & !< coef. in Kessler scheme
492                pirho_l, dpirho_l, & !< pi * rho_l / 6.0; 6.0 / ( pi * rho_l )
493                rho_l = 1.0E3_wp,     & !< density of water (kg m-3)
494                ql_crit = 0.0005_wp,  & !< coef. in Kessler scheme
495                r_d = 287.0_wp,       & !< sp. gas const. dry air (J kg-1 K-1)
496                r_v = 461.51_wp,      & !< sp. gas const. water vapor (J kg-1 K-1)
497                schmidt = 0.71_wp,    & !< Schmidt number
498                schmidt_p_1d3,        & !< schmidt**( 1.0 / 3.0 )
499                sed_qc_const,         & !< const. for sedimentation of cloud water
500                sigma_gc = 1.3_wp,    & !< log-normal geometric standard deviation
501                stp = 2.5066282746310005_wp, & !< parameter in gamma function
502                thermal_conductivity_l = 2.43E-2_wp, & !< therm. cond. air (J m-1 s-1 K-1)
503                vanthoff = 2.0_wp,    & !< van't Hoff factor for NaCl
504                x0 = 2.6E-10_wp,      & !< separating drop mass (kg)
505                xrmin = 2.6E-10_wp,   & !< minimum rain drop size (kg)
506                xrmax = 5.0E-6_wp,    & !< maximum rain drop site (kg)
507                dt_precipitation = 100.0_wp, & !< timestep precipitation (s)
508                w_precipitation = 9.65_wp      !< maximum terminal velocity (m s-1)
509
510    REAL(wp), DIMENSION(:), ALLOCATABLE     ::  hyrho, pt_d_t, t_d_pt 
511
512    REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  precipitation_amount, &
513                                                precipitation_rate
514!
515!-- 3D array of precipitation rate
516    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  prr
517
518    SAVE
519
520 END MODULE cloud_parameters
521
522
523!------------------------------------------------------------------------------!
524! Description:
525! ------------
526!> Definition of general constants.
527!------------------------------------------------------------------------------!
528 MODULE constants
529 
530    USE kinds
531
532    REAL(wp)  ::  pi = 3.141592654_wp
533    REAL(wp)  ::  adv_mom_1, adv_mom_3, adv_mom_5, adv_sca_1, adv_sca_3, adv_sca_5
534   
535
536    SAVE
537
538 END MODULE constants
539
540 
541!------------------------------------------------------------------------------!
542! Description:
543! ------------
544!> Definition of parameters for program control
545!------------------------------------------------------------------------------!
546 MODULE control_parameters
547
548    USE kinds
549
550    TYPE plot_precision
551       CHARACTER (LEN=8) ::  variable
552       INTEGER(iwp)      ::  precision
553    END TYPE plot_precision
554
555    TYPE(plot_precision), DIMENSION(100) ::  plot_3d_precision =               &
556                        (/ plot_precision( 'u', 2 ), plot_precision( 'v', 2 ), &
557                           plot_precision( 'w', 2 ), plot_precision( 'p', 5 ), &
558                           plot_precision( 'pt', 2 ),                          &
559                           ( plot_precision( ' ', 1 ), i9 = 1,95 ) /)
560
561    TYPE file_status
562       LOGICAL ::  opened, opened_before
563    END TYPE file_status
564   
565    INTEGER, PARAMETER :: mask_xyz_dimension = 100, max_masks = 50
566
567    TYPE(file_status), DIMENSION(200+2*max_masks) ::                &
568                             openfile = file_status(.FALSE.,.FALSE.)
569
570    CHARACTER (LEN=1)    ::  cycle_mg = 'w', timestep_reason = ' '
571    CHARACTER (LEN=2)    ::  coupling_char = ''
572    CHARACTER (LEN=5)    ::  write_binary = 'false'
573    CHARACTER (LEN=8)    ::  most_method = 'lookup', & !< NAMELIST parameter defining method to be used to calculate Okukhov length,
574                             run_date,               & !<
575                             run_time                  !<
576    CHARACTER (LEN=9)    ::  simulated_time_chr
577    CHARACTER (LEN=11)   ::  topography_grid_convention = ' '
578    CHARACTER (LEN=12)   ::  version = ' ', revision = ' ', &
579                             user_interface_current_revision = ' ', &
580                             user_interface_required_revision = ' '
581    CHARACTER (LEN=16)   ::  conserve_volume_flow_mode = 'default', &
582                             loop_optimization = 'default', &
583                             momentum_advec = 'ws-scheme', &
584                             psolver = 'poisfft', &
585                             scalar_advec = 'ws-scheme'
586    CHARACTER (LEN=20)   ::  bc_e_b = 'neumann', bc_lr = 'cyclic', &
587                             bc_ns = 'cyclic', bc_p_b = 'neumann', &
588                             bc_p_t = 'dirichlet', bc_pt_b = 'dirichlet', &
589                             bc_pt_t = 'initial_gradient', &
590                             bc_q_b = 'dirichlet', bc_q_t = 'neumann', &
591                             bc_s_b = 'dirichlet', bc_s_t = 'neumann', &
592                             bc_sa_t = 'neumann', &
593                             bc_uv_b = 'dirichlet', bc_uv_t = 'dirichlet', &
594                             cloud_scheme = 'seifert_beheng', &
595                             coupling_mode = 'uncoupled', &
596                             coupling_mode_remote = 'uncoupled', &
597                             dissipation_1d = 'detering', &
598                             fft_method = 'system-specific', &
599                             mixing_length_1d = 'blackadar', &
600                             random_generator = 'numerical-recipes', &
601                             reference_state = 'initial_profile', &
602                             return_addres, return_username, &
603                             timestep_scheme = 'runge-kutta-3'                             
604    CHARACTER (LEN=40)   ::  avs_data_file, output_format_netcdf, &
605                             topography = 'flat'
606    CHARACTER (LEN=64)   ::  host = ' '
607    CHARACTER (LEN=80)   ::  log_message, run_identifier
608    CHARACTER (LEN=100)  ::  initializing_actions = ' ' 
609    CHARACTER (LEN=110)  ::  run_description_header
610    CHARACTER (LEN=1000) ::  message_string = ' '
611
612    CHARACTER (LEN=20), DIMENSION(100) ::  data_output = ' ',    &
613                                           data_output_user = ' ', doav = ' '
614    CHARACTER (LEN=20), DIMENSION(max_masks,100) ::  &
615         data_output_masks = ' ', data_output_masks_user = ' '
616
617    CHARACTER (LEN=20), DIMENSION(300) ::  data_output_pr = ' '
618    CHARACTER (LEN=20), DIMENSION(200) ::  data_output_pr_user = ' '
619    CHARACTER (LEN=20), DIMENSION(11)  ::  netcdf_precision = ' '
620
621    CHARACTER (LEN=20), DIMENSION(max_masks,0:1,100) ::  domask = ' '
622    CHARACTER (LEN=20), DIMENSION(0:1,100) ::  do2d = ' ', do3d = ' '
623
624    INTEGER(iwp) ::  abort_mode = 1, average_count_pr = 0, average_count_sp = 0, &
625                     average_count_3d = 0, current_timestep_number = 0, &
626                     coupling_topology = 0, &
627                     dist_range = 0, disturbance_level_ind_b, &
628                     disturbance_level_ind_t, doav_n = 0, dopr_n = 0, &
629                     dopr_time_count = 0, dopts_time_count = 0, &
630                     dosp_time_count = 0, dots_time_count = 0, &
631                     do2d_xy_n = 0, do2d_xz_n = 0, do2d_yz_n = 0, do3d_avs_n = 0, &
632                     dp_level_ind_b = 0, dvrp_filecount = 0, &
633                     dz_stretch_level_index, ensemble_member_nr = 0, gamma_mg, gathered_size, &
634                     grid_level, ibc_e_b, ibc_p_b, ibc_p_t, &
635                     ibc_pt_b, ibc_pt_t, ibc_q_b, ibc_q_t, &
636                     ibc_sa_t, ibc_uv_b, ibc_uv_t, icloud_scheme, &
637                     inflow_disturbance_begin = -1, inflow_disturbance_end = -1, &
638                     intermediate_timestep_count, intermediate_timestep_count_max, &
639                     io_group = 0, io_blocks = 1, iran = -1234567, &
640                     masks = 0, maximum_grid_level, &
641                     maximum_parallel_io_streams = -1, max_pr_user = 0, &
642                     mgcycles = 0, mg_cycles = -1, mg_switch_to_pe0_level = 0, mid, &
643                     nlsf = 1000, ntnudge = 1000, netcdf_data_format = 2, ngsrb = 2, &
644                     nr_timesteps_this_run = 0, &
645                     nsor = 20, nsor_ini = 100, n_sor, normalizing_region = 0, &
646                     nz_do3d = -9999, prt_time_count = 0, &
647                     recycling_plane, runnr = 0, &
648                     skip_do_avs = 0, subdomain_size, terminate_coupled = 0, &
649                     terminate_coupled_remote = 0, timestep_count = 0
650
651    INTEGER(iwp) ::  dist_nxl(0:1), dist_nxr(0:1), dist_nyn(0:1), dist_nys(0:1), &
652                     do2d_no(0:1) = 0, do2d_xy_time_count(0:1), &
653                     do2d_xz_time_count(0:1), do2d_yz_time_count(0:1), &
654                     do3d_no(0:1) = 0, do3d_time_count(0:1), &
655                     domask_no(max_masks,0:1) = 0, domask_time_count(max_masks,0:1),&
656                     mask_size(max_masks,3) = -1, mask_size_l(max_masks,3) = -1, &
657                     mask_start_l(max_masks,3) = -1, &
658                     pt_vertical_gradient_level_ind(10) = -9999, &
659                     q_vertical_gradient_level_ind(10) = -9999, &
660                     sa_vertical_gradient_level_ind(10) = -9999, &
661                     section(100,3), section_xy(100) = -9999, &
662                     section_xz(100) = -9999, section_yz(100) = -9999, &
663                     ug_vertical_gradient_level_ind(10) = -9999, &
664                     vg_vertical_gradient_level_ind(10) = -9999, &
665                     subs_vertical_gradient_level_i(10) = -9999
666
667#if defined ( __check )
668    INTEGER(iwp) :: check_restart = 0
669#endif
670
671    INTEGER(iwp), DIMENSION(0:1) :: ntdim_2d_xy, ntdim_2d_xz, ntdim_2d_yz, ntdim_3d
672
673    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  grid_level_count
674
675    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE   ::  mask_i, mask_j, mask_k
676    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE   ::  &
677                    mask_i_global, mask_j_global, mask_k_global
678
679    LOGICAL ::  bc_lr_cyc =.TRUE., bc_lr_dirrad = .FALSE., &
680                bc_lr_raddir = .FALSE., bc_ns_cyc = .TRUE., &
681                bc_ns_dirrad = .FALSE., bc_ns_raddir = .FALSE.,&
682                call_microphysics_at_all_substeps = .FALSE., &
683                call_psolver_at_all_substeps = .TRUE., &
684                cloud_droplets = .FALSE., cloud_physics = .FALSE., &
685                cloud_top_radiation = .FALSE., &
686                conserve_volume_flow = .FALSE., constant_diffusion = .FALSE., &
687                constant_flux_layer = .TRUE., &
688                constant_heatflux = .TRUE., constant_top_heatflux = .TRUE., &
689                constant_top_momentumflux = .FALSE., &
690                constant_top_salinityflux = .TRUE., &
691                constant_waterflux = .TRUE., create_disturbances = .TRUE., &
692                data_output_2d_on_each_pe = .TRUE., & 
693                dissipation_control = .FALSE., disturbance_created = .FALSE., &
694                do2d_at_begin = .FALSE., do3d_at_begin = .FALSE., &
695                do_sum = .FALSE., &
696                dp_external = .FALSE., dp_smooth = .FALSE., &
697                drizzle = .TRUE., dt_fixed = .FALSE., &
698                dt_3d_reached, dt_3d_reached_l, exchange_mg = .FALSE., &
699                first_call_lpm = .TRUE., &
700                force_print_header = .FALSE., galilei_transformation = .FALSE.,&
701                humidity = .FALSE., humidity_remote = .FALSE., &
702                inflow_l = .FALSE., inflow_n = .FALSE., &
703                inflow_r = .FALSE., inflow_s = .FALSE., &
704                large_scale_forcing = .FALSE., &
705                large_scale_subsidence = .FALSE., lsf_surf = .TRUE., &
706                lsf_vert = .TRUE., lptnudge = .FALSE., lqnudge = .FALSE., &
707                lunudge = .FALSE., lvnudge = .FALSE., lwnudge = .FALSE., &
708                masking_method = .FALSE., mg_switch_to_pe0 = .FALSE., &
709                monotonic_adjustment = .FALSE., &
710                neutral = .FALSE., nudging = .FALSE., &
711                ocean = .FALSE., on_device = .FALSE., &
712                outflow_l = .FALSE., outflow_n = .FALSE., outflow_r = .FALSE., &
713                outflow_s = .FALSE., passive_scalar = .FALSE., &
714                precipitation = .FALSE., &
715                random_heatflux = .FALSE., recycling_yshift = .FALSE.,&
716                run_control_header = .FALSE., run_coupled = .TRUE., &
717                scalar_rayleigh_damping = .TRUE., sloping_surface = .FALSE., &
718                stop_dt = .FALSE., synchronous_exchange = .FALSE., &
719                terminate_run = .FALSE., transpose_compute_overlap = .FALSE., &
720                turbulence = .FALSE., turbulent_inflow = .FALSE., &
721                use_cmax = .TRUE., use_initial_profile_as_reference = .FALSE., &
722                use_prescribed_profile_data = .FALSE., &
723                use_single_reference_value = .FALSE., &
724                use_subsidence_tendencies = .FALSE., &
725                use_surface_fluxes = .FALSE., use_top_fluxes = .FALSE., &
726                use_ug_for_galilei_tr = .TRUE., use_upstream_for_tke = .FALSE.,&
727                wall_adjustment = .TRUE., ws_scheme_sca = .FALSE., &
728                ws_scheme_mom = .FALSE.
729
730    LOGICAL ::  data_output_xy(0:1) = .FALSE., data_output_xz(0:1) = .FALSE., &
731                data_output_yz(0:1) = .FALSE.
732
733    REAL(wp) ::  advected_distance_x = 0.0_wp, advected_distance_y = 0.0_wp, &
734                 alpha_surface = 0.0_wp, atmos_ocean_sign = 1.0_wp, &
735                 averaging_interval = 0.0_wp, averaging_interval_pr = 9999999.9_wp, &
736                 averaging_interval_sp = 9999999.9_wp, bc_pt_t_val, bc_q_t_val, &
737                 bottom_salinityflux = 0.0_wp, &
738                 building_height = 50.0_wp, building_length_x = 50.0_wp, &
739                 building_length_y = 50.0_wp, building_wall_left = 9999999.9_wp, &
740                 building_wall_south = 9999999.9_wp, canyon_height = 50.0_wp, &
741                 canyon_width_x = 9999999.9_wp, canyon_width_y = 9999999.9_wp, &
742                 canyon_wall_left = 9999999.9_wp, canyon_wall_south = 9999999.9_wp, &
743                 cfl_factor = -1.0_wp, cos_alpha_surface, &
744                 coupling_start_time = 0.0_wp, disturbance_amplitude = 0.25_wp, &
745                 disturbance_energy_limit = 0.01_wp, &
746                 disturbance_level_b = -9999999.9_wp, &
747                 disturbance_level_t = -9999999.9_wp, &
748                 dp_level_b = 0.0_wp, &
749                 dt = -1.0_wp, dt_averaging_input = 0.0_wp, &
750                 dt_averaging_input_pr = 9999999.9_wp, dt_coupling = 9999999.9_wp, &
751                 dt_data_output = 9999999.9_wp, &
752                 dt_data_output_av = 9999999.9_wp, dt_disturb = 9999999.9_wp, &
753                 dt_dopr = 9999999.9_wp, dt_dopr_listing = 9999999.9_wp, &
754                 dt_dopts = 9999999.9_wp, dt_dosp = 9999999.9_wp, dt_dots = 9999999.9_wp, &
755                 dt_do2d_xy = 9999999.9_wp, dt_do2d_xz = 9999999.9_wp, &
756                 dt_do2d_yz = 9999999.9_wp, dt_do3d = 9999999.9_wp, dt_dvrp = 9999999.9_wp, &
757                 dt_max = 20.0_wp, dt_micro = -1.0_wp, &
758                 dt_restart = 9999999.9_wp, &
759                 dt_run_control = 60.0_wp, dt_3d = -1.0_wp, dz = -1.0_wp, &
760                 dz_max = 9999999.9_wp, dz_stretch_factor = 1.08_wp, &
761                 dz_stretch_level = 100000.0_wp, e_init = 0.0_wp, e_min = 0.0_wp, &
762                 end_time = 0.0_wp, &
763                 f = 0.0_wp, fs = 0.0_wp, g = 9.81_wp, inflow_damping_height = 9999999.9_wp, &
764                 inflow_damping_width = 9999999.9_wp, kappa = 0.4_wp, km_constant = -1.0_wp,&
765                 mask_scale_x = 1.0_wp, mask_scale_y = 1.0_wp, mask_scale_z = 1.0_wp, &
766                 maximum_cpu_time_allowed = 0.0_wp,  &
767                 molecular_viscosity = 1.461E-5_wp, &
768                 old_dt = 1.0E-10_wp, omega = 7.29212E-5_wp, omega_sor = 1.8_wp, &
769                 particle_maximum_age = 9999999.9_wp, &
770                 phi = 55.0_wp, prandtl_number = 1.0_wp, &
771                 precipitation_amount_interval = 9999999.9_wp, prho_reference, &
772                 pt_damping_factor = 0.0_wp, pt_damping_width = 0.0_wp, &
773                 pt_reference = 9999999.9_wp, pt_slope_offset = 0.0_wp, &
774                 pt_surface = 300.0_wp, pt_surface_initial_change = 0.0_wp, &
775                 q_surface = 0.0_wp, q_surface_initial_change = 0.0_wp, &
776                 rayleigh_damping_factor = -1.0_wp, rayleigh_damping_height = -1.0_wp, &
777                 recycling_width = 9999999.9_wp, residual_limit = 1.0E-4_wp, &
778                 restart_time = 9999999.9_wp, rho_reference, rho_surface, &
779                 roughness_length = 0.1_wp, &
780                 sa_surface = 35.0_wp, &
781                 simulated_time = 0.0_wp, simulated_time_at_begin, sin_alpha_surface, &
782                 skip_time_data_output = 0.0_wp, skip_time_data_output_av = 9999999.9_wp,&
783                 skip_time_dopr = 9999999.9_wp, skip_time_dosp = 9999999.9_wp, &
784                 skip_time_do2d_xy = 9999999.9_wp, skip_time_do2d_xz = 9999999.9_wp, &
785                 skip_time_do2d_yz = 9999999.9_wp, skip_time_do3d = 9999999.9_wp, &
786                 surface_heatflux = 9999999.9_wp, surface_pressure = 1013.25_wp, &
787                 surface_scalarflux = 9999999.9_wp, surface_waterflux = 9999999.9_wp, &
788                 s_surface = 0.0_wp, s_surface_initial_change = 0.0_wp, &
789                 termination_time_needed = -1.0_wp, time_coupling = 0.0_wp, &
790                 time_disturb = 0.0_wp, time_dopr = 0.0_wp, time_dopr_av = 0.0_wp, &
791                 time_dopr_listing = 0.0_wp, time_dopts = 0.0_wp, time_dosp = 0.0_wp, &
792                 time_dosp_av = 0.0_wp, time_dots = 0.0_wp, time_do2d_xy = 0.0_wp, &
793                 time_do2d_xz = 0.0_wp, time_do2d_yz = 0.0_wp, time_do3d = 0.0_wp, &
794                 time_do_av = 0.0_wp, time_do_sla = 0.0_wp, time_dvrp = 0.0_wp, &
795                 time_restart = 9999999.9_wp, time_run_control = 0.0_wp,&
796                 time_since_reference_point, top_heatflux = 9999999.9_wp, &
797                 top_momentumflux_u = 9999999.9_wp, &
798                 top_momentumflux_v = 9999999.9_wp, top_salinityflux = 9999999.9_wp, &
799                 ug_surface = 0.0_wp, u_bulk = 0.0_wp, u_gtrans = 0.0_wp, &
800                 vg_surface = 0.0_wp, vpt_reference = 9999999.9_wp, &
801                 v_bulk = 0.0_wp, v_gtrans = 0.0_wp, wall_adjustment_factor = 1.8_wp, &
802                 zeta_max = 20.0_wp,    & !< Maximum value of zeta = z/L
803                 zeta_min = -9990.0_wp, & !< Minimum value of zeta = z/L
804                 z_max_do2d = -1.0_wp, z0h_factor = 1.0_wp
805
806    REAL(wp) ::  do2d_xy_last_time(0:1) = -1.0_wp, do2d_xz_last_time(0:1) = -1.0_wp, &
807                 do2d_yz_last_time(0:1) = -1.0_wp, dpdxy(1:2) = 0.0_wp, &
808                 dt_domask(max_masks) = 9999999.9_wp, &
809                 mask_scale(3), &
810                 pt_vertical_gradient(10) = 0.0_wp, &
811                 pt_vertical_gradient_level(10) = -9999999.9_wp, &
812                 q_vertical_gradient(10) = 0.0_wp, &
813                 q_vertical_gradient_level(10) = -1.0_wp, &
814                 s_vertical_gradient(10) = 0.0_wp, &
815                 s_vertical_gradient_level(10) = -1.0_wp, &
816                 sa_vertical_gradient(10) = 0.0_wp, &
817                 sa_vertical_gradient_level(10) = -9999999.9_wp, &
818                 skip_time_domask(max_masks) = 9999999.9_wp, threshold(20) = 0.0_wp, &
819                 time_domask(max_masks) = 0.0_wp, &
820                 tsc(10) = (/ 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp /), &
821                 u_profile(100) = 9999999.9_wp, uv_heights(100) = 9999999.9_wp, &
822                 v_profile(100) = 9999999.9_wp, &
823                 ug_vertical_gradient(10) = 0.0_wp, &
824                 ug_vertical_gradient_level(10) = -9999999.9_wp, &
825                 vg_vertical_gradient(10) = 0.0_wp, &
826                 vg_vertical_gradient_level(10) = -9999999.9_wp, &
827                 volume_flow(1:2) = 0.0_wp, volume_flow_area(1:2) = 0.0_wp, &
828                 volume_flow_initial(1:2) = 0.0_wp, wall_heatflux(0:4) = 0.0_wp, &
829                 wall_humidityflux(0:4) = 0.0_wp, wall_nrflux(0:4) = 0.0_wp, &
830                 wall_qflux(0:4) = 0.0_wp, wall_qrflux(0:4) = 0.0_wp, &
831                 wall_salinityflux(0:4) = 0.0_wp, wall_scalarflux(0:4) = 0.0_wp, &
832                 subs_vertical_gradient(10) = 0.0_wp, &
833                 subs_vertical_gradient_level(10) = -9999999.9_wp
834
835    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dp_smooth_factor
836
837    REAL(wp), DIMENSION(max_masks,mask_xyz_dimension) :: &
838            mask_x = -1.0_wp, mask_y = -1.0_wp, mask_z = -1.0_wp
839    REAL(wp), DIMENSION(max_masks,3) ::                  &
840            mask_x_loop = -1.0_wp, mask_y_loop = -1.0_wp, mask_z_loop = -1.0_wp
841   
842!
843!--    internal mask arrays ("mask,dimension,selection")
844       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  mask, mask_loop
845
846    SAVE
847
848 END MODULE control_parameters
849
850
851!------------------------------------------------------------------------------!
852! Description:
853! ------------
854!> Definition of variables used with dvrp-software.
855!------------------------------------------------------------------------------!
856 MODULE dvrp_variables
857
858     USE kinds
859
860    CHARACTER (LEN=10) ::  dvrp_output = 'rtsp', particle_color = 'none', &
861                           particle_dvrpsize = 'none'
862
863    CHARACTER (LEN=20), DIMENSION(10) ::  mode_dvrp = &
864                                     (/ ( '                    ', i9 = 1,10 ) /)
865
866    CHARACTER (LEN=80) ::  dvrp_directory = 'default',                    &
867                           dvrp_file      = 'default',                    &
868                           dvrp_host      = 'origin.rvs.uni-hannover.de', &
869                           dvrp_password  = '********',                   &
870                           dvrp_username  = ' '
871
872    INTEGER(iwp) ::  cluster_size = 1, dvrp_colortable_entries = 4,                 &
873                     dvrp_colortable_entries_prt = 22, islice_dvrp,                 &
874                     nx_dvrp, nxl_dvrp, nxr_dvrp, ny_dvrp, nyn_dvrp, nys_dvrp,      &
875                     nz_dvrp, pathlines_fadeintime = 5, pathlines_fadeouttime = 5,  &
876                     pathlines_linecount = 1000, pathlines_maxhistory = 40,         &
877                     pathlines_wavecount = 10, pathlines_wavetime = 50,             &
878                     vc_gradient_normals = 0, vc_mode = 0, vc_size_x = 2,           &
879                     vc_size_y = 2, vc_size_z = 2
880
881    INTEGER(iwp), DIMENSION(10) ::  slicer_position_dvrp
882
883    LOGICAL ::  cyclic_dvrp = .FALSE., dvrp_overlap, dvrp_total_overlap, &
884                local_dvrserver_running, lock_steering_update = .FALSE., &
885                use_seperate_pe_for_dvrp_output = .FALSE.
886
887    REAL(wp)    ::  clip_dvrp_l = 9999999.9_wp, clip_dvrp_n = 9999999.9_wp, &
888                    clip_dvrp_r = 9999999.9_wp, clip_dvrp_s = 9999999.9_wp, &
889                    superelevation = 1.0_wp, superelevation_x = 1.0_wp,     &
890                    superelevation_y = 1.0_wp, vc_alpha = 38.0_wp
891
892    REAL(wp), DIMENSION(2) ::  color_interval = (/ 0.0_wp, 1.0_wp /), &
893                               dvrpsize_interval = (/ 0.0_wp, 1.0_wp /)
894
895    REAL(wp), DIMENSION(3) ::  groundplate_color = (/ 0.0_wp, 0.6_wp, 0.0_wp /), &
896                               topography_color = (/ 0.8_wp, 0.7_wp, 0.6_wp /)
897
898#if defined( __decalpha )
899    REAL(wp), DIMENSION(2,10)  ::  slicer_range_limits_dvrp = RESHAPE( (/      &
900                                   -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, &
901                                   -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, &
902                                   -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp /), (/ 2, 10 /) )
903
904    REAL(wp), DIMENSION(3,10)  ::  isosurface_color = RESHAPE( (/                 &
905                                   0.9_wp, 0.9_wp, 0.9_wp,  0.8_wp, 0.1_wp, 0.1_wp,  0.1_wp, 0.1_wp, 0.8_wp, &
906                                   0.1_wp, 0.8_wp, 0.1_wp,  0.6_wp, 0.1_wp, 0.1_wp,  0.1_wp, 0.1_wp, 0.6_wp, &
907                                   0.1_wp, 0.6_wp, 0.1_wp,  0.4_wp, 0.1_wp, 0.1_wp,  0.1_wp, 0.1_wp, 0.4_wp, &
908                                   0.1_wp, 0.4_wp, 0.1_wp /), (/ 3, 10 /) )
909
910    REAL(sp), DIMENSION(2,100) ::  interval_values_dvrp, interval_h_dvrp =      &
911                                   RESHAPE( (/ 270.0_sp, 225.0_sp, 225.0_sp, 180.0_sp,      &
912                                                70.0_sp,  25.0_sp,  25.0_sp, -25.0_sp,      &
913                                               ( 0.0_sp, i9 = 1, 192 ) /),         &
914                                            (/ 2, 100 /) ),                     &
915                                   interval_l_dvrp = 0.5_sp, interval_s_dvrp = 1.0_sp,&
916                                   interval_a_dvrp = 0.0_sp,                       &
917                                   interval_values_dvrp_prt,                    &
918                                   interval_h_dvrp_prt = RESHAPE(               &
919                                   (/ 270.0_sp, 225.0_sp, 225.0_sp, 180.0_sp, 70.0_sp, 25.0_sp,   &
920                                      25.0_sp, -25.0_sp, ( 0.0_sp, i9 = 1, 192 ) /),     &
921                                                   (/ 2, 100 /) ),              &
922                                   interval_l_dvrp_prt = 0.5_sp,                   &
923                                   interval_s_dvrp_prt = 1.0_sp,                   &
924                                   interval_a_dvrp_prt = 0.0_sp
925#else
926    REAL(wp), DIMENSION(2,10)     ::  slicer_range_limits_dvrp
927
928    REAL(wp), DIMENSION(3,10)     ::  isosurface_color
929
930    REAL(sp), DIMENSION(2,100) ::  interval_values_dvrp,                       &
931                                   interval_values_dvrp_prt, interval_h_dvrp,  &
932                                   interval_h_dvrp_prt, interval_l_dvrp = 0.5_sp, &
933                                   interval_l_dvrp_prt = 0.5_sp, interval_s_dvrp = 1.0_sp, &
934                                   interval_s_dvrp_prt = 1.0_sp, interval_a_dvrp = 0.0_sp, &
935                                   interval_a_dvrp_prt = 0.0_sp
936
937    DATA  slicer_range_limits_dvrp / -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, &
938                                     -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, &
939                                     -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, &
940                                     -1.0_wp, 1.0_wp /
941
942    DATA  isosurface_color / 0.9_wp, 0.9_wp, 0.9_wp,  0.8_wp, 0.1_wp, 0.1_wp,  0.1_wp, 0.1_wp, 0.8_wp, &
943                             0.1_wp, 0.8_wp, 0.1_wp,  0.6_wp, 0.1_wp, 0.1_wp,  0.1_wp, 0.1_wp, 0.6_wp, &
944                             0.1_wp, 0.6_wp, 0.1_wp,  0.4_wp, 0.1_wp, 0.1_wp,  0.1_wp, 0.1_wp, 0.4_wp, &
945                             0.1_wp, 0.4_wp, 0.1_wp /
946
947    DATA  interval_h_dvrp / 270.0_wp, 225.0_wp, 225.0_wp, 180.0_wp, 70.0_wp, 25.0_wp, &
948                            25.0_wp, -25.0_wp, 192 * 0.0_wp /
949
950    DATA  interval_h_dvrp_prt / 270.0_wp, 225.0_wp, 225.0_wp, 180.0_wp, 70.0_wp, 25.0_wp, &
951                                25.0_wp, -25.0_wp, 192 * 0.0_wp /
952#endif
953
954    REAL(sp), DIMENSION(:), ALLOCATABLE ::  xcoor_dvrp, ycoor_dvrp, zcoor_dvrp
955
956    TYPE steering
957       CHARACTER (LEN=24) ::  name
958       REAL(sp)           ::  min, max
959       INTEGER(iwp)       ::  imin, imax
960    END TYPE steering
961
962    TYPE(steering), DIMENSION(:), ALLOCATABLE ::  steering_dvrp
963
964    SAVE
965
966 END MODULE dvrp_variables
967
968
969!------------------------------------------------------------------------------!
970! Description:
971! ------------
972!> Definition of grid spacings.
973!------------------------------------------------------------------------------!
974 MODULE grid_variables
975
976    USE kinds
977
978    REAL(wp) ::  ddx, ddx2, dx = 1.0_wp, dx2, ddy, ddy2, dy = 1.0_wp, dy2
979
980    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddx2_mg, ddy2_mg
981
982    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  fwxm, fwxp, fwym, fwyp, fxm, fxp,   &
983                                              fym, fyp, wall_e_x, wall_e_y,       &
984                                              wall_u, wall_v, wall_w_x, wall_w_y, &
985                                              zu_s_inner, zw_w_inner
986
987    SAVE
988
989 END MODULE grid_variables
990
991
992!------------------------------------------------------------------------------!
993! Description:
994! ------------
995!> Definition of array bounds, number of gridpoints, and wall flag arrays.
996!------------------------------------------------------------------------------!
997 MODULE indices
998
999    USE kinds
1000
1001    INTEGER(iwp) ::  i_left, i_right, j_north, j_south, nbgp = 3, ngp_sums,         &
1002                     ngp_sums_ls, nnx, nx = 0, nx_a, nx_o, nxl, nxlg, nxlu, nxr,    &
1003                     nxrg, nx_on_file, nny, ny = 0, ny_a, ny_o, nyn, nyng, nys,     &
1004                     nysg, nysv, ny_on_file, nnz, nz = 0, nzb, nzb_diff, nzb_max,   &
1005                     nzt, nzt_diff
1006
1007
1008    INTEGER(idp), DIMENSION(:), ALLOCATABLE ::      &
1009                ngp_3d, ngp_3d_inner   ! need to have 64 bit for grids > 2E9
1010
1011    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::                                  &
1012                   ngp_2dh, nxl_mg, nxr_mg, nyn_mg, nys_mg, nzt_mg
1013
1014
1015    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: ngp_2dh_outer, ngp_2dh_s_inner,  &
1016                   mg_loc_ind, nzb_diff_s_inner, nzb_diff_s_outer, nzb_diff_u,    &
1017                   nzb_diff_v, nzb_inner, nzb_outer, nzb_s_inner, nzb_s_outer,    &
1018                   nzb_u_inner, nzb_u_outer, nzb_v_inner, nzb_v_outer,            &
1019                   nzb_w_inner, nzb_w_outer, nzb_2d
1020
1021    INTEGER(iwp), DIMENSION(:,:,:), POINTER ::  flags
1022
1023    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  wall_flags_0, wall_flags_00
1024
1025    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::                       &
1026                   wall_flags_1, wall_flags_2, wall_flags_3, wall_flags_4,        &
1027                   wall_flags_5, wall_flags_6, wall_flags_7, wall_flags_8,        &
1028                   wall_flags_9, wall_flags_10
1029
1030    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  rflags_s_inner, rflags_invers
1031
1032    SAVE
1033
1034 END MODULE indices
1035
1036
1037!------------------------------------------------------------------------------!
1038! Description:
1039! ------------
1040!> Interfaces for special subroutines which use optional parameters.
1041!------------------------------------------------------------------------------!
1042 MODULE interfaces
1043
1044    INTERFACE
1045
1046!------------------------------------------------------------------------------!
1047! Description:
1048! ------------
1049!> @todo Missing subroutine description.
1050!------------------------------------------------------------------------------!
1051       SUBROUTINE global_min_max ( i1, i2, j1, j2, k1, k2, feld, mode, offset, &
1052                                   wert, wert_ijk, wert1, wert1_ijk )
1053
1054          USE kinds
1055
1056          CHARACTER (LEN=*), INTENT(IN)      ::  mode
1057          INTEGER(iwp), INTENT(IN)           ::  i1, i2, j1, j2, k1, k2
1058          INTEGER(iwp)                       ::  wert_ijk(3)
1059          INTEGER(iwp), OPTIONAL             ::  wert1_ijk(3)
1060          REAL(wp)                           ::  offset, wert
1061          REAL(wp), OPTIONAL                 ::  wert1
1062          REAL(wp), INTENT(IN)               ::  feld(i1:i2,j1:j2,k1:k2)
1063
1064       END SUBROUTINE global_min_max
1065
1066    END INTERFACE
1067
1068    SAVE
1069
1070 END MODULE interfaces
1071
1072
1073!------------------------------------------------------------------------------!
1074! Description:
1075! ------------
1076!> Interfaces for subroutines with pointer arguments called in
1077!> prognostic_equations.
1078!------------------------------------------------------------------------------!
1079 MODULE pointer_interfaces
1080
1081    INTERFACE
1082
1083!------------------------------------------------------------------------------!
1084! Description:
1085! ------------
1086!> @todo Missing subroutine description.
1087!------------------------------------------------------------------------------!
1088       SUBROUTINE advec_s_bc( sk, sk_char )
1089
1090          USE kinds
1091
1092          CHARACTER (LEN=*), INTENT(IN)   ::  sk_char
1093#if defined( __nopointer )
1094          REAL(wp), DIMENSION(:,:,:) ::  sk
1095#else
1096          REAL(wp), DIMENSION(:,:,:), POINTER ::  sk
1097#endif
1098       END SUBROUTINE advec_s_bc
1099
1100    END INTERFACE
1101
1102
1103    SAVE
1104
1105 END MODULE pointer_interfaces
1106
1107
1108!------------------------------------------------------------------------------!
1109! Description:
1110! ------------
1111!> Definition of variables for the 1D-model.
1112!------------------------------------------------------------------------------!
1113 MODULE model_1d
1114
1115    USE kinds
1116
1117    INTEGER(iwp) ::  current_timestep_number_1d = 0, damp_level_ind_1d
1118
1119    LOGICAL ::  run_control_header_1d = .FALSE., stop_dt_1d = .FALSE. 
1120
1121    REAL(wp) ::     damp_level_1d = -1.0_wp, dt_1d = 60.0_wp, dt_max_1d = 300.0_wp, &
1122                    dt_pr_1d = 9999999.9_wp, dt_run_control_1d = 60.0_wp, &
1123                    end_time_1d = 864000.0_wp, old_dt_1d = 1.0E-10_wp, &
1124                    qs1d, simulated_time_1d = 0.0_wp, time_pr_1d = 0.0_wp, &
1125                    time_run_control_1d = 0.0_wp, ts1d, us1d, usws1d, &
1126                    vsws1d, z01d, z0h1d
1127
1128
1129    REAL(wp), DIMENSION(:), ALLOCATABLE ::  e1d, e1d_p, kh1d, km1d, l_black, l1d,  &
1130                                            rif1d, te_e, te_em, te_u, te_um, te_v, &
1131                                            te_vm, u1d, u1d_p, v1d, v1d_p
1132
1133    SAVE
1134
1135 END MODULE model_1d
1136
1137
1138!------------------------------------------------------------------------------!
1139! Description:
1140! ------------
1141!> Definition of parameters and variables for netcdf control.
1142!------------------------------------------------------------------------------!
1143 MODULE netcdf_control
1144
1145    USE control_parameters, ONLY: max_masks
1146    USE kinds
1147#if defined( __netcdf )
1148    USE netcdf
1149#endif
1150
1151    INTEGER(iwp), PARAMETER ::  dopr_norm_num = 7, dopts_num = 29, dots_max = 100
1152
1153    INTEGER(iwp) ::  dots_num = 23
1154
1155    CHARACTER (LEN=6), DIMENSION(dopr_norm_num) ::  dopr_norm_names =          &
1156         (/ 'wpt0  ', 'ws2   ', 'tsw2  ', 'ws3   ', 'ws2tsw', 'wstsw2',        &
1157            'z_i   ' /)
1158
1159    CHARACTER (LEN=6), DIMENSION(dopr_norm_num) ::  dopr_norm_longnames =      &
1160         (/ 'wpt0  ', 'w*2   ', 't*w2  ', 'w*3   ', 'w*2t*w', 'w*t*w2',        &
1161            'z_i   ' /)
1162
1163    CHARACTER (LEN=7), DIMENSION(dopts_num) :: dopts_label =                   &
1164          (/ 'tnpt   ', 'x_     ', 'y_     ', 'z_     ', 'z_abs  ', 'u      ', &
1165             'v      ', 'w      ', 'u"     ', 'v"     ', 'w"     ', 'npt_up ', &
1166             'w_up   ', 'w_down ', 'radius ', 'r_min  ', 'r_max  ', 'npt_max', &
1167             'npt_min', 'x*2    ', 'y*2    ', 'z*2    ', 'u*2    ', 'v*2    ', &
1168             'w*2    ', 'u"2    ', 'v"2    ', 'w"2    ', 'npt*2  ' /)
1169
1170    CHARACTER (LEN=7), DIMENSION(dopts_num) :: dopts_unit =                    &
1171          (/ 'number ', 'm      ', 'm      ', 'm      ', 'm      ', 'm/s    ', &
1172             'm/s    ', 'm/s    ', 'm/s    ', 'm/s    ', 'm/s    ', 'number ', &
1173             'm/s    ', 'm/s    ', 'm      ', 'm      ', 'm      ', 'number ', &
1174             'number ', 'm2     ', 'm2     ', 'm2     ', 'm2/s2  ', 'm2/s2  ', &
1175             'm2/s2  ', 'm2/s2  ', 'm2/s2  ', 'm2/s2  ', 'number2' /)
1176
1177    CHARACTER (LEN=13), DIMENSION(dots_max) :: dots_label =                    &
1178          (/ 'E            ', 'E*           ', 'dt           ',                &
1179             'u*           ', 'th*          ', 'umax         ',                &
1180             'vmax         ', 'wmax         ', 'div_new      ',                &
1181             'div_old      ', 'z_i_wpt      ', 'z_i_pt       ',                &
1182             'w*           ', 'w"pt"0       ', 'w"pt"        ',                &
1183             'wpt          ', 'pt(0)        ', 'pt(z_mo)     ',                &
1184             'w"u"0        ', 'w"v"0        ', 'w"q"0        ',                &
1185             'ol           ', 'q*           ',                                 &
1186             ( 'unknown      ', i9 = 1, dots_max-23 ) /)
1187
1188    CHARACTER (LEN=13), DIMENSION(dots_max) :: dots_unit =                     &
1189          (/ 'm2/s2        ', 'm2/s2        ', 's            ',                &
1190             'm/s          ', 'K            ', 'm/s          ',                &
1191             'm/s          ', 'm/s          ', 's-1          ',                &
1192             's-1          ', 'm            ', 'm            ',                &
1193             'm/s          ', 'K m/s        ', 'K m/s        ',                &
1194             'K m/s        ', 'K            ', 'K            ',                &
1195             'm2/s2        ', 'm2/s2        ', 'kg m/s       ',                &
1196             'm            ', 'kg/kg        ',                                 &
1197             ( 'unknown      ', i9 = 1, dots_max-23 ) /)
1198
1199    CHARACTER (LEN=9), DIMENSION(300) ::  dopr_unit = 'unknown'
1200
1201    CHARACTER (LEN=7), DIMENSION(0:1,100) ::  do2d_unit, do3d_unit
1202
1203    CHARACTER (LEN=16), DIMENSION(25) ::  prt_var_names = &
1204          (/ 'pt_age          ', 'pt_dvrp_size    ', 'pt_origin_x     ', &
1205             'pt_origin_y     ', 'pt_origin_z     ', 'pt_radius       ', &
1206             'pt_speed_x      ', 'pt_speed_y      ', 'pt_speed_z      ', &
1207             'pt_weight_factor', 'pt_x            ', 'pt_y            ', &
1208             'pt_z            ', 'pt_color        ', 'pt_group        ', &
1209             'pt_tailpoints   ', 'pt_tail_id      ', 'pt_density_ratio', &
1210             'pt_exp_arg      ', 'pt_exp_term     ', 'not_used        ', &
1211             'not_used        ', 'not_used        ', 'not_used        ', &
1212             'not_used        ' /)
1213
1214    CHARACTER (LEN=16), DIMENSION(25) ::  prt_var_units = &
1215          (/ 'seconds         ', 'meters          ', 'meters          ', &
1216             'meters          ', 'meters          ', 'meters          ', &
1217             'm/s             ', 'm/s             ', 'm/s             ', &
1218             'factor          ', 'meters          ', 'meters          ', &
1219             'meters          ', 'none            ', 'none            ', &
1220             'none            ', 'none            ', 'ratio           ', &
1221             'none            ', 'none            ', 'not_used        ', &
1222             'not_used        ', 'not_used        ', 'not_used        ', &
1223             'not_used        ' /)
1224
1225    INTEGER(iwp) ::  id_dim_prtnum, id_dim_time_pr, id_dim_time_prt, &
1226                     id_dim_time_pts, id_dim_time_sp, id_dim_time_ts, id_dim_x_sp, &
1227                     id_dim_y_sp, id_dim_zu_sp, id_dim_zw_sp, id_set_pr, &
1228                     id_set_prt, id_set_pts, id_set_sp, id_set_ts, id_var_prtnum, &
1229                     id_var_rnop_prt, id_var_time_pr, id_var_time_prt, &
1230                     id_var_time_pts, id_var_time_sp, id_var_time_ts, id_var_x_sp, &
1231                     id_var_y_sp, id_var_zu_sp, id_var_zw_sp, nc_stat
1232
1233    INTEGER(iwp), DIMENSION(0:1) ::  id_dim_time_xy, id_dim_time_xz, &
1234                    id_dim_time_yz, id_dim_time_3d, id_dim_x_xy, id_dim_xu_xy, &
1235                    id_dim_x_xz, id_dim_xu_xz, id_dim_x_yz, id_dim_xu_yz, &
1236                    id_dim_x_3d, id_dim_xu_3d, id_dim_y_xy, id_dim_yv_xy, &
1237                    id_dim_y_xz, id_dim_yv_xz, id_dim_y_yz, id_dim_yv_yz, &
1238                    id_dim_y_3d, id_dim_yv_3d, id_dim_zu_xy, id_dim_zu1_xy, &
1239                    id_dim_zu_xz, id_dim_zu_yz, id_dim_zu_3d, id_dim_zw_xy, &
1240                    id_dim_zw_xz, id_dim_zw_yz, id_dim_zw_3d, id_set_xy, &
1241                    id_set_xz, id_set_yz, id_set_3d, id_var_ind_x_yz, &
1242                    id_var_ind_y_xz, id_var_ind_z_xy, id_var_time_xy, &
1243                    id_var_time_xz, id_var_time_yz, id_var_time_3d, id_var_x_xy, &
1244                    id_var_xu_xy, id_var_x_xz, id_var_xu_xz, id_var_x_yz, &
1245                    id_var_xu_yz, id_var_x_3d, id_var_xu_3d, id_var_y_xy, &
1246                    id_var_yv_xy, id_var_y_xz, id_var_yv_xz, id_var_y_yz, &
1247                    id_var_yv_yz, id_var_y_3d, id_var_yv_3d, id_var_zusi_xy, &
1248                    id_var_zusi_3d, id_var_zu_xy, id_var_zu1_xy, id_var_zu_xz, &
1249                    id_var_zu_yz, id_var_zu_3d, id_var_zwwi_xy, id_var_zwwi_3d, &
1250                    id_var_zw_xy, id_var_zw_xz, id_var_zw_yz, id_var_zw_3d
1251
1252    INTEGER(iwp), DIMENSION(10)  ::  id_var_dospx, id_var_dospy
1253    INTEGER(iwp), DIMENSION(20)  ::  id_var_prt
1254    INTEGER(iwp), DIMENSION(11)  ::  nc_precision
1255    INTEGER(iwp), DIMENSION(dopr_norm_num) ::  id_var_norm_dopr
1256
1257    INTEGER(iwp), DIMENSION(dopts_num,0:10) ::  id_var_dopts
1258    INTEGER(iwp), DIMENSION(0:1,100)        ::  id_var_do2d, id_var_do3d
1259    INTEGER(iwp), DIMENSION(100,0:9)        ::  id_dim_z_pr, id_var_dopr, &
1260                                               id_var_z_pr
1261    INTEGER(iwp), DIMENSION(dots_max,0:9)   ::  id_var_dots
1262
1263!
1264!-- masked output
1265    CHARACTER (LEN=7), DIMENSION(max_masks,0:1,100) ::  domask_unit
1266
1267    LOGICAL ::  output_for_t0 = .FALSE.
1268
1269    INTEGER(iwp), DIMENSION(1:max_masks,0:1) ::  id_dim_time_mask, id_dim_x_mask, &
1270                   id_dim_xu_mask, id_dim_y_mask, id_dim_yv_mask, id_dim_zu_mask, &
1271                   id_dim_zw_mask, &
1272                   id_set_mask, &
1273                   id_var_time_mask, id_var_x_mask, id_var_xu_mask, &
1274                   id_var_y_mask, id_var_yv_mask, id_var_zu_mask, id_var_zw_mask, &
1275                   id_var_zusi_mask, id_var_zwwi_mask
1276
1277    INTEGER(iwp), DIMENSION(1:max_masks,0:1,100)         ::  id_var_domask
1278
1279    SAVE
1280
1281 END MODULE netcdf_control
1282
1283
1284!------------------------------------------------------------------------------!
1285! Description:
1286! ------------
1287!> Definition of variables which define processor topology and the exchange of
1288!> ghost point layers. This modules must be placed in all routines which contain
1289!> MPI-calls.
1290!------------------------------------------------------------------------------!
1291 MODULE pegrid
1292
1293    USE kinds
1294
1295#if defined( __parallel ) && ! defined ( __check )
1296#if defined( __lc )
1297    USE MPI
1298#else
1299    INCLUDE "mpif.h"
1300#endif
1301#endif
1302    CHARACTER(LEN=2) ::  send_receive = 'al'
1303    CHARACTER(LEN=7) ::  myid_char = ''
1304    INTEGER(iwp)          ::  acc_rank, comm1dx, comm1dy, comm2d, comm_inter,       &
1305                              comm_palm, id_inflow = 0, id_recycling = 0, ierr,     &
1306                              myid = 0, myidx = 0, myidy = 0, ndim = 2, ngp_a,      &
1307                              ngp_o, ngp_xy, ngp_y, npex = -1, npey = -1,           &
1308                              numprocs = 1, numprocs_previous_run = -1,             &
1309                              num_acc_per_node = 0, pleft, pnorth, pright, psouth,  &
1310                              req_count = 0, sendrecvcount_xy, sendrecvcount_yz,    &
1311                              sendrecvcount_zx, sendrecvcount_zyd,                  &
1312                              sendrecvcount_yxd, target_id, tasks_per_node = -9999, &
1313                              threads_per_task = 1, type_x, type_x_int, type_xy,    &
1314                              type_y, type_y_int
1315
1316    INTEGER(iwp)          ::  pdims(2) = 1, req(100)
1317
1318    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  hor_index_bounds, &
1319                                                  hor_index_bounds_previous_run
1320
1321    LOGICAL ::  background_communication =.FALSE., collective_wait = .FALSE., &
1322                sendrecv_in_background = .FALSE.
1323
1324#if defined( __parallel )
1325#if defined( __mpi2 )
1326    CHARACTER (LEN=MPI_MAX_PORT_NAME) ::  port_name
1327#endif
1328
1329    INTEGER(iwp) ::  ibuf(12), pcoord(2)
1330
1331#if ! defined ( __check )
1332    INTEGER(iwp) ::  status(MPI_STATUS_SIZE)
1333    INTEGER(iwp), DIMENSION(MPI_STATUS_SIZE,100) ::  wait_stat
1334#endif
1335
1336    INTEGER(iwp) :: ngp_yz_int, type_xz_int, type_yz_int
1337    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_xz, ngp_yz, type_xz, type_yz
1338
1339    LOGICAL ::  left_border_pe  = .FALSE., north_border_pe = .FALSE., &
1340                reorder = .TRUE., right_border_pe = .FALSE.,          &
1341                south_border_pe = .FALSE.
1342
1343    LOGICAL, DIMENSION(2) ::  cyclic = (/ .TRUE. , .TRUE. /), &
1344                              remain_dims
1345#endif
1346
1347    SAVE
1348
1349 END MODULE pegrid
1350
1351
1352!------------------------------------------------------------------------------!
1353! Description:
1354! ------------
1355!> Definition of variables which control PROFIL-output.
1356!------------------------------------------------------------------------------!
1357 MODULE profil_parameter
1358
1359    USE kinds
1360
1361    INTEGER(iwp), PARAMETER ::  crmax = 100
1362
1363    CHARACTER (LEN=20), DIMENSION(20) ::  cross_ts_profiles = &
1364                           (/ ' E E*               ', ' dt                 ', &
1365                              ' u* w*              ', ' th*                ', &
1366                              ' umax vmax wmax     ', ' div_old div_new    ', &
1367                              ' z_i_wpt z_i_pt     ', ' w"pt"0 w"pt" wpt   ', &
1368                              ' pt(0) pt(zp)       ', ' splux spluy spluz  ', &
1369                              ' L                  ',                         &
1370                            ( '                    ', i9 = 1, 9 ) /)
1371
1372    CHARACTER (LEN=100), DIMENSION(crmax) ::  cross_profiles = &
1373                           (/ ' u v                           ', &
1374                              ' pt                            ', &
1375                              ' w"pt" w*pt* w*pt*BC wpt wptBC ', &
1376                              ' w"u" w*u* wu w"v" w*v* wv     ', &
1377                              ' km kh                         ', &
1378                              ' l                             ', &
1379                         ( '                               ', i9 = 1, 94 ) /)
1380
1381    INTEGER(iwp) ::  profile_columns = 2, profile_rows = 3, profile_number = 0
1382
1383    INTEGER(iwp) ::  cross_ts_numbers(crmax,crmax) = 0, &
1384                     cross_ts_number_count(crmax) = 0, &
1385                     dopr_index(300) = 0, dopr_initial_index(300) = 0, &
1386                     dots_crossindex(100) = 0, dots_index(100) = 0
1387               
1388
1389    REAL(wp) ::  cross_ts_uymax(20) = &
1390                             (/ 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp,   &
1391                                999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp,   &
1392                                999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp,   &
1393                                999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp /),&
1394                 cross_ts_uymax_computed(20) = 999.999_wp, &
1395                 cross_ts_uymin(20) = &
1396                             (/ 999.999_wp, 999.999_wp, 999.999_wp,  -5.000_wp, 999.999_wp,   &
1397                                999.999_wp,   0.000_wp, 999.999_wp, 999.999_wp, 999.999_wp,   &
1398                                999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp,   &
1399                                999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp /),&
1400                 cross_ts_uymin_computed(20) = 999.999_wp
1401
1402    SAVE
1403
1404 END MODULE profil_parameter
1405
1406
1407!------------------------------------------------------------------------------!
1408! Description:
1409! ------------
1410!> Definition of quantities used for computing spectra.
1411!------------------------------------------------------------------------------!
1412 MODULE spectrum
1413
1414    USE kinds
1415
1416    CHARACTER (LEN=6),  DIMENSION(1:5) ::  header_char = (/ 'PS(u) ', 'PS(v) ',&
1417                                           'PS(w) ', 'PS(pt)', 'PS(q) ' /)
1418    CHARACTER (LEN=2),  DIMENSION(10)  ::  spectra_direction = 'x'
1419    CHARACTER (LEN=10), DIMENSION(10)  ::  data_output_sp  = ' '
1420    CHARACTER (LEN=25), DIMENSION(1:5) ::  utext_char =                    &
1421                                           (/ '-power spectrum of u     ', &
1422                                              '-power spectrum of v     ', &
1423                                              '-power spectrum of w     ', &
1424                                              '-power spectrum of ^1185 ', &
1425                                              '-power spectrum of q     ' /)
1426    CHARACTER (LEN=39), DIMENSION(1:5) ::  ytext_char =                        &
1427                                 (/ 'k ^2236 ^2566^2569<u(k) in m>2s>->2    ', &
1428                                    'k ^2236 ^2566^2569<v(k) in m>2s>->2    ', &
1429                                    'k ^2236 ^2566^2569<w(k) in m>2s>->2    ', &
1430                                    'k ^2236 ^2566^2569<^1185(k) in m>2s>->2', &
1431                                    'k ^2236 ^2566^2569<q(k) in m>2s>->2    ' /)
1432
1433    INTEGER(iwp) ::  klist_x = 0, klist_y = 0, n_sp_x = 0, n_sp_y = 0
1434
1435    INTEGER(iwp) ::  comp_spectra_level(100) = 999999,                   &
1436                     lstyles(100) = (/ 0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1437                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1438                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1439                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1440                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1441                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1442                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1443                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1444                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8,    &
1445                                       0, 7, 3, 10, 1, 4, 9, 2, 6, 8 /), &
1446                     plot_spectra_level(100) = 999999
1447
1448    REAL(wp)    ::  time_to_start_sp = 0.0_wp
1449
1450    SAVE
1451
1452 END MODULE spectrum
1453
1454
1455!------------------------------------------------------------------------------!
1456! Description:
1457! ------------
1458!> Definition of statistical quantities, e.g. global sums.
1459!------------------------------------------------------------------------------!
1460 MODULE statistics
1461
1462    USE kinds
1463
1464    CHARACTER (LEN=40) ::  region(0:9)
1465    INTEGER(iwp) ::  pr_palm = 130, statistic_regions = 0
1466    INTEGER(iwp) ::  u_max_ijk(3) = -1, v_max_ijk(3) = -1, w_max_ijk(3) = -1
1467    LOGICAL ::  flow_statistics_called = .FALSE.
1468    REAL(wp) ::     u_max, v_max, w_max
1469    REAL(wp), DIMENSION(:), ALLOCATABLE       ::  mean_surface_level_height,      &
1470                                                  sums_divnew_l, sums_divold_l,   &
1471                                                  var_d, weight_substep,          &
1472                                                  weight_pres
1473    REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  sums, sums_wsts_bc_l, ts_value, &
1474                                                  sums_wsus_ws_l, sums_wsvs_ws_l, &
1475                                                  sums_us2_ws_l, sums_vs2_ws_l,   &
1476                                                  sums_ws2_ws_l,                  &
1477                                                  sums_wsnrs_ws_l,                &
1478                                                  sums_wspts_ws_l,                &
1479                                                  sums_wssas_ws_l,                &
1480                                                  sums_wsqs_ws_l,                 &
1481                                                  sums_wsqrs_ws_l,                &
1482                                                  sums_ls_l
1483                                             
1484    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  hom_sum, rmask, spectrum_x,     &
1485                                                  spectrum_y, sums_l, sums_l_l,   &
1486                                                  sums_up_fraction_l
1487    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  hom
1488
1489    SAVE
1490
1491 END MODULE statistics
1492
1493
1494!------------------------------------------------------------------------------!
1495! Description:
1496! ------------
1497!> Definition of indices for transposed arrays.
1498!------------------------------------------------------------------------------!
1499 MODULE transpose_indices
1500
1501    USE kinds
1502
1503    INTEGER(iwp) ::  nxl_y, nxl_yd, nxl_z, nxr_y, nxr_yd, nxr_z, nyn_x, nyn_z, &
1504                     nys_x, nys_z, nzb_x, nzb_y, nzb_yd, nzt_x, nzt_y, nzt_yd
1505               
1506    SAVE
1507
1508 END MODULE transpose_indices
Note: See TracBrowser for help on using the repository browser.