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

Last change on this file since 667 was 667, checked in by suehring, 13 years ago

summary:


Gryschka:

  • Coupling with different resolution and different numbers of PEs in ocean and atmosphere is available
  • Exchange of u and v from ocean surface to atmosphere surface
  • Mirror boundary condition for u and v at the bottom are replaced by dirichlet boundary conditions
  • Inflow turbulence is now defined by flucuations around spanwise mean
  • Bugfixes for cyclic_fill and constant_volume_flow

Suehring:

  • New advection added ( Wicker and Skamarock 5th order ), therefore:
    • New module advec_ws.f90
    • Modified exchange of ghost boundaries.
    • Modified evaluation of turbulent fluxes
    • New index bounds nxlg, nxrg, nysg, nyng

advec_ws.f90


Advection scheme for scalars and momentum using the flux formulation of
Wicker and Skamarock 5th order.
Additionally the module contains of a routine using for initialisation and
steering of the statical evaluation. The computation of turbulent fluxes takes
place inside the advection routines.
In case of vector architectures Dirichlet and Radiation boundary conditions are
outstanding and not available. Furthermore simulations within topography are
not possible so far. A further routine local_diss_ij is available and is used
if a control of dissipative fluxes is desired.

check_parameters.f90


Exchange of parameters between ocean and atmosphere via PE0
Check for illegal combination of ws-scheme and timestep scheme.
Check for topography and ws-scheme.
Check for not cyclic boundary conditions in combination with ws-scheme and
loop_optimization = 'vector'.
Check for call_psolver_at_all_substeps and ws-scheme for momentum_advec.

Different processor/grid topology in atmosphere and ocean is now allowed!
Bugfixes in checking for conserve_volume_flow_mode.

exchange_horiz.f90


Dynamic exchange of ghost points with nbgp_local to ensure that no useless
ghost points exchanged in case of multigrid. type_yz(0) and type_xz(0) used for
normal grid, the remaining types used for the several grid levels.
Exchange is done via MPI-Vectors with a dynamic value of ghost points which
depend on the advection scheme. Exchange of left and right PEs is 10% faster
with MPI-Vectors than without.

flow_statistics.f90


When advection is computed with ws-scheme, turbulent fluxes are already
computed in the respective advection routines and buffered in arrays
sums_xxxx_ws_l(). This is due to a consistent treatment of statistics
with the numerics and to avoid unphysical kinks near the surface. So some if-
requests has to be done to dicern between fluxes from ws-scheme other advection
schemes. Furthermore the computation of z_i is only done if the heat flux
exceeds a minimum value. This affects only simulations of a neutral boundary
layer and is due to reasons of computations in the advection scheme.

inflow_turbulence.f90


Using nbgp recycling planes for a better resolution of the turbulent flow near
the inflow.

init_grid.f90


Definition of new array bounds nxlg, nxrg, nysg, nyng on each PE.
Furthermore the allocation of arrays and steering of loops is done with these
parameters. Call of exchange_horiz are modified.
In case of dirichlet bounday condition at the bottom zu(0)=0.0
dzu_mg has to be set explicitly for a equally spaced grid near bottom.
ddzu_pres added to use a equally spaced grid near bottom.

init_pegrid.f90


Moved determination of target_id's from init_coupling
Determination of parameters needed for coupling (coupling_topology, ngp_a, ngp_o)
with different grid/processor-topology in ocean and atmosphere

Adaption of ngp_xy, ngp_y to a dynamic number of ghost points.
The maximum_grid_level changed from 1 to 0. 0 is the normal grid, 1 to
maximum_grid_level the grids for multigrid, in which 0 and 1 are normal grids.
This distinction is due to reasons of data exchange and performance for the
normal grid and grids in poismg.
The definition of MPI-Vectors adapted to a dynamic numer of ghost points.
New MPI-Vectors for data exchange between left and right boundaries added.
This is due to reasons of performance (10% faster).

ATTENTION: nnz_x undefined problem still has to be solved!!!!!!!!
TEST OUTPUT (TO BE REMOVED) logging mpi2 ierr values

parin.f90


Steering parameter dissipation_control added in inipar.

Makefile


Module advec_ws added.

Modules


Removed u_nzb_p1_for_vfc and v_nzb_p1_for_vfc

For coupling with different resolution in ocean and atmophere:
+nx_a, +nx_o, ny_a, +ny_o, ngp_a, ngp_o, +total_2d_o, +total_2d_a,
+coupling_topology

Buffer arrays for the left sided advective fluxes added in arrays_3d.
+flux_s_u, +flux_s_v, +flux_s_w, +diss_s_u, +diss_s_v, +diss_s_w,
+flux_s_pt, +diss_s_pt, +flux_s_e, +diss_s_e, +flux_s_q, +diss_s_q,
+flux_s_sa, +diss_s_sa
3d arrays for dissipation control added. (only necessary for vector arch.)
+var_x, +var_y, +var_z, +gamma_x, +gamma_y, +gamma_z
Default of momentum_advec and scalar_advec changed to 'ws-scheme' .
+exchange_mg added in control_parameters to steer the data exchange.
Parameters +nbgp, +nxlg, +nxrg, +nysg, +nyng added in indices.
flag array +boundary_flags added in indices to steer the degradation of order
of the advective fluxes when non-cyclic boundaries are used.
MPI-datatypes +type_y, +type_y_int and +type_yz for data_exchange added in
pegrid.
+sums_wsus_ws_l, +sums_wsvs_ws_l, +sums_us2_ws_l, +sums_vs2_ws_l,
+sums_ws2_ws_l, +sums_wspts_ws_l, +sums_wssas_ws_l, +sums_wsqs_ws_l
and +weight_substep added in statistics to steer the statistical evaluation
of turbulent fluxes in the advection routines.
LOGICALS +ws_scheme_sca and +ws_scheme_mom added to get a better performance
in prognostic_equations.
LOGICAL +dissipation_control control added to steer numerical dissipation
in ws-scheme.

Changed length of string run_description_header

pres.f90


New allocation of tend when ws-scheme and multigrid is used. This is due to
reasons of perforance of the data_exchange. The same is done with p after
poismg is called.
nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng when no
multigrid is used. Calls of exchange_horiz are modified.

bugfix: After pressure correction no volume flow correction in case of
non-cyclic boundary conditions
(has to be done only before pressure correction)

Call of SOR routine is referenced with ddzu_pres.

prognostic_equations.f90


Calls of the advection routines with WS5 added.
Calls of ws_statistics added to set the statistical arrays to zero after each
time step.

advec_particles.f90


Declaration of de_dx, de_dy, de_dz adapted to additional ghost points.
Furthermore the calls of exchange_horiz were modified.

asselin_filter.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

average_3d_data.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

boundary_conds.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng
Removed mirror boundary conditions for u and v at the bottom in case of
ibc_uv_b == 0. Instead, dirichelt boundary conditions (u=v=0) are set
in init_3d_model

calc_liquid_water_content.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

calc_spectra.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng for
allocation of tend.

check_open.f90


Output of total array size was adapted to nbgp.

data_output_2d.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng in loops and
allocation of arrays local_2d and total_2d.
Calls of exchange_horiz are modified.

data_output_2d.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng in loops and
allocation of arrays. Calls of exchange_horiz are modified.
Skip-value skip_do_avs changed to a dynamic adaption of ghost points.

data_output_mask.f90


Calls of exchange_horiz are modified.

diffusion_e.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

diffusion_s.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

diffusion_u.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

diffusion_v.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

diffusion_w.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

diffusivities.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

diffusivities.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.
Calls of exchange_horiz are modified.

exchange_horiz_2d.f90


Dynamic exchange of ghost points with nbgp, which depends on the advection
scheme. Exchange between left and right PEs is now done with MPI-vectors.

global_min_max.f90


Adapting of the index arrays, because MINLOC assumes lowerbound
at 1 and not at nbgp.

init_3d_model.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng in loops and
allocation of arrays. Calls of exchange_horiz are modified.
Call ws_init to initialize arrays needed for statistical evaluation and
optimization when ws-scheme is used.
Initial volume flow is now calculated by using the variable hom_sum.
Therefore the correction of initial volume flow for non-flat topography
removed (removed u_nzb_p1_for_vfc and v_nzb_p1_for_vfc)
Changed surface boundary conditions for u and v in case of ibc_uv_b == 0 from
mirror bc to dirichlet boundary conditions (u=v=0), so that k=nzb is
representative for the height z0

Bugfix: type conversion of '1' to 64bit for the MAX function (ngp_3d_inner)

init_coupling.f90


determination of target_id's moved to init_pegrid

init_pt_anomaly.f90


Call of exchange_horiz are modified.

init_rankine.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.
Calls of exchange_horiz are modified.

init_slope.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.

header.f90


Output of advection scheme.

poismg.f90


Calls of exchange_horiz are modified.

prandtl_fluxes.f90


Changed surface boundary conditions for u and v from mirror bc to dirichelt bc,
therefore u(uzb,:,:) and v(nzb,:,:) is now representative for the height z0
nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

production_e.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng

read_3d_binary.f90


+/- 1 replaced with +/- nbgp when swapping and allocating variables.

sor.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.
Call of exchange_horiz are modified.
bug removed in declaration of ddzw(), nz replaced by nzt+1

subsidence.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.

sum_up_3d_data.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.

surface_coupler.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng in
MPI_SEND() and MPI_RECV.
additional case for nonequivalent processor and grid topopolgy in ocean and
atmosphere added (coupling_topology = 1)

Added exchange of u and v from Ocean to Atmosphere

time_integration.f90


Calls of exchange_horiz are modified.
Adaption to slooping surface.

timestep.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.

user_3d_data_averaging.f90, user_data_output_2d.f90, user_data_output_3d.f90,
user_actions.f90, user_init.f90, user_init_plant_canopy.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.

user_read_restart_data.f90


Allocation with nbgp.

wall_fluxes.f90


nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng.

write_compressed.f90


Array bounds and nx, ny adapted with nbgp.

sor.f90


bug removed in declaration of ddzw(), nz replaced by nzt+1

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