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

Last change on this file since 1314 was 1314, checked in by suehring, 10 years ago

Vertical logarithmic interpolation of horizontal particle speed for particles
between roughness height and first vertical grid level.

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