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

Last change on this file since 1015 was 1015, checked in by raasch, 12 years ago

Starting with changes required for GPU optimization. OpenACC statements for using NVIDIA GPUs added.
Adjustment of mixing length to the Prandtl mixing length at first grid point above ground removed.
mask array is set zero for ghost boundaries

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