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

Last change on this file since 1179 was 1179, checked in by raasch, 11 years ago

New:
---
Initial profiles can be used as reference state in the buoyancy term. New parameter
reference_state introduced. Calculation and handling of reference state in buoyancy term revised.
binary version for restart files changed from 3.9 to 3.9a (no downward compatibility!),
initial profile for rho added to hom (id=77)

Errors:


small bugfix for background communication (time_integration)

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