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

Last change on this file since 707 was 707, checked in by raasch, 13 years ago

New:
---

In case of multigrid method, on coarse grid levels, gathered data are
identically processed on all PEs (before, on PE0 only), so that the subsequent
scattering of data is not neccessary any more. (modules, init_pegrid, poismg)

Changed:


Calculation of weighted average of p is now handled in the same way
regardless of the number of ghost layers (advection scheme). (pres)

multigrid and sor method are using p_loc for iterative
advancements of pressure. p_sub removed. (init_3d_model, modules, poismg, pres, sor)

bc_lr and bc_ns replaced by bc_lr_dirrad, bc_lr_raddir, bc_ns_dirrad, bc_ns_raddir
for speed optimization. (calc_spectra, check_parameters, exchange_horiz,
exchange_horiz_2d, header, init_3d_model, init_grid, init_pegrid, modules,
poismg, pres, sor, time_integration, timestep)

grid_level directly used as index for MPI data type arrays. (exchange_horiz,
poismg)

initial assignments of zero to array p for iterative solvers only (init_3d_model)

Errors:


localsum calculation modified for proper OpenMP reduction. (pres)

Bugfix: bottom (nzb) and top (nzt+1) boundary conditions set in routines
resid and restrict. They were missed before, which may have led to
unpredictable results. (poismg)

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