source: palm/tags/release-3.2/SOURCE/modules.f90 @ 4109

Last change on this file since 4109 was 77, checked in by raasch, 17 years ago

New:
---

particle reflection from vertical walls implemented, particle SGS model adjusted to walls

Wall functions for vertical walls now include diabatic conditions. New subroutines wall_fluxes, wall_fluxes_e. New 4D-array rif_wall.

new d3par-parameter netcdf_64bit_3d to switch on 64bit offset only for 3D files

new d3par-parameter dt_max to define the maximum value for the allowed timestep

new inipar-parameter loop_optimization to control the loop optimization method

new inipar-parameter pt_refrence. If given, this value is used as the reference that in buoyancy terms (otherwise, the instantaneous horizontally averaged temperature is used).

new user interface user_advec_particles

new initializing action "by_user" calls user_init_3d_model and allows the initial setting of all 3d arrays

topography height informations are stored on arrays zu_s_inner and zw_w_inner and output to the 2d/3d NetCDF files

samples added to the user interface which show how to add user-define time series quantities.

calculation/output of precipitation amount, precipitation rate and z0 (by setting "pra*", "prr*", "z0*" with data_output). The time interval on which the precipitation amount is defined is set by new d3par-parameter precipitation_amount_interval

unit 9 opened for debug output (file DEBUG_<pe#>)

Makefile, advec_particles, average_3d_data, buoyancy, calc_precipitation, check_open, check_parameters, data_output_2d, diffusion_e, diffusion_u, diffusion_v, diffusion_w, diffusivities, header, impact_of_latent_heat, init_particles, init_3d_model, modules, netcdf, parin, production_e, read_var_list, read_3d_binary, sum_up_3d_data, user_interface, write_var_list, write_3d_binary

New: wall_fluxes

Changed:


General revision of non-cyclic horizontal boundary conditions: radiation boundary conditions are now used instead of Neumann conditions at the outflow (calculation needs velocity values for t-dt, which are stored on new arrays u_m_l, u_m_r, etc.), calculation of mean outflow is not needed any more, volume flow control is added for the outflow boundary (currently only for the north boundary!!), additional gridpoints along x and y (uxrp, vynp) are not needed any more, routine "boundary_conds" now operates on timelevel t+dt and is not split in two parts (main, uvw_outflow) any more, Neumann boundary conditions at inflow/outflow in case of non-cyclic boundary conditions for all 2d-arrays that are handled by exchange_horiz_2d

The FFT-method for solving the Poisson-equation is now working with Neumann boundary conditions both at the bottom and the top. This requires adjustments of the tridiagonal coefficients and subtracting the horizontally averaged mean from the vertical velocity field.

+age_m in particle_type

Particles-package is now part of the default code ("-p particles" is not needed any more).

Move call of user_actions( 'after_integration' ) below increment of times
and counters. user_actions is now called for each statistic region and has as an argument the number of the respective region (sr)

d3par-parameter data_output_ts removed. Timeseries output for "profil" removed. Timeseries are now switched on by dt_dots. Timeseries data is collected in flow_statistics.

Initial velocities at nzb+1 are regarded for volume flow control in case they have been set zero before (to avoid small timesteps); see new internal parameters u/v_nzb_p1_for_vfc.

q is not allowed to become negative (prognostic_equations).

poisfft_init is only called if fft-solver is switched on (init_pegrid).

d3par-parameter moisture renamed to humidity.

Subversion global revision number is read from mrun and added to the run description header and to the run control (_rc) file.

vtk directives removed from main program.

The uitility routine interpret_config reads PALM environment variables from NAMELIST instead using the system call GETENV.

advec_u_pw, advec_u_up, advec_v_pw, advec_v_up, asselin_filter, check_parameters, coriolis, data_output_dvrp, data_output_ptseries, data_output_ts, data_output_2d, data_output_3d, diffusion_u, diffusion_v, exchange_horiz, exchange_horiz_2d, flow_statistics, header, init_grid, init_particles, init_pegrid, init_rankine, init_pt_anomaly, init_1d_model, init_3d_model, modules, palm, package_parin, parin, poisfft, poismg, prandtl_fluxes, pres, production_e, prognostic_equations, read_var_list, read_3d_binary, sor, swap_timelevel, time_integration, write_var_list, write_3d_binary

Errors:


Bugfix: preset of tendencies te_em, te_um, te_vm in init_1d_model

Bugfix in sample for reading user defined data from restart file (user_init)

Bugfix in setting diffusivities for cases with the outflow damping layer extending over more than one subdomain (init_3d_model)

Check for possible negative humidities in the initial humidity profile.

in Makefile, default suffixes removed from the suffix list to avoid calling of m2c in
# case of .mod files

Makefile
check_parameters, init_1d_model, init_3d_model, user_interface

  • Property svn:keywords set to Id
File size: 45.0 KB
Line 
1 MODULE advection
2
3
4!------------------------------------------------------------------------------!
5! Actual revisions:
6! -----------------
7!
8!
9! Former revisions:
10! -----------------
11! $Id: modules.f90 77 2007-03-29 04:26:56Z suehring $
12!
13! 75 2007-03-22 09:54:05Z raasch
14! +arrays precipitation_amount, precipitation_rate, precipitation_rate_av,
15! rif_wall, z0_av, +arrays u_m_l, u_m_r, etc. for radiation boundary conditions,
16! +loop_optimization, netcdf_64bit_3d, zu_s_inner, zw_w_inner, id_var_zusi_*,
17! id_var_zwwi_*, ts_value, u_nzb_p1_for_vfc, v_nzb_p1_for_vfc, pt_reference,
18! use_pt_reference, precipitation_amount_interval, revision
19! +age_m in particle_type, moisture renamed humidity,
20! -data_output_ts, dots_n, uvmean_outflow, uxrp, vynp,
21! arrays dots_label and dots_unit now dimensioned with dots_max,
22! setting of palm version moved to main program
23!
24! 37 2007-03-01 08:33:54Z raasch
25! +constant_top_heatflux, top_heatflux, use_top_fluxes, +arrays for top fluxes,
26! +nzt_diff, default of bc_pt_t renamed "initial_gradient"
27! Bugfix: p is not a pointer
28!
29! RCS Log replace by Id keyword, revision history cleaned up
30!
31! Revision 1.95  2007/02/11 13:18:30  raasch
32! version 3.1b (last under RCS control)
33!
34! Revision 1.1  1997/07/24 11:21:26  raasch
35! Initial revision
36!
37!
38! Description:
39! ------------
40! Definition of variables for special advection schemes
41!------------------------------------------------------------------------------!
42
43    REAL ::  spl_gamma_x, spl_gamma_y
44
45    REAL, DIMENSION(:), ALLOCATABLE   ::  aex, bex, dex, eex, spl_z_x, spl_z_y
46    REAL, DIMENSION(:,:), ALLOCATABLE ::  spl_tri_x, spl_tri_y, spl_tri_zu, &
47                                          spl_tri_zw
48
49    SAVE
50
51 END MODULE advection
52
53
54
55
56 MODULE array_kind
57
58!------------------------------------------------------------------------------!
59! Description:
60! ------------
61! Definition of type parameters (used for the definition of single or double
62! precision variables)
63!------------------------------------------------------------------------------!
64
65    INTEGER, PARAMETER ::  dpk = SELECTED_REAL_KIND( 12 ), &
66                           spk = SELECTED_REAL_KIND( 6 )
67
68    SAVE
69
70 END MODULE array_kind
71
72
73
74
75 MODULE arrays_3d
76
77!------------------------------------------------------------------------------!
78! Description:
79! ------------
80! Definition of all arrays defined on the computational grid
81!------------------------------------------------------------------------------!
82
83    USE array_kind
84
85    REAL, DIMENSION(:), ALLOCATABLE ::                                         &
86          ddzu, dd2zu, dzu, ddzw, dzw, km_damp_x, km_damp_y, l_grid, pt_init,  &
87          q_init, rdf, ug, u_init, u_nzb_p1_for_vfc, vg, v_init,               &
88          v_nzb_p1_for_vfc, zu, zw
89
90    REAL, DIMENSION(:,:), ALLOCATABLE ::                                       &
91          dzu_mg, dzw_mg, f1_mg, f2_mg, f3_mg, pt_slope_ref, qs, ts, us, z0
92
93    REAL, DIMENSION(:,:), ALLOCATABLE, TARGET ::                               &
94          qsws_1, qsws_2, qswst_1, qswst_2, rif_1, rif_2, shf_1, shf_2,        &
95          tswst_1, tswst_2, usws_1, usws_2, vsws_1, vsws_2
96
97    REAL, DIMENSION(:,:), POINTER ::                                           &
98          qsws, qsws_m, qswst, qswst_m, rif, rif_m, shf, shf_m, tswst,         &
99          tswst_m, usws, usws_m, vsws, vsws_m
100
101    REAL, DIMENSION(:,:,:), ALLOCATABLE ::                                     &
102          d, diss, l_wall, tend, u_m_l, u_m_n, u_m_r, u_m_s, v_m_l, v_m_n,     &
103          v_m_r, v_m_s, w_m_l, w_m_n, w_m_r, w_m_s
104
105    REAL, DIMENSION(:,:,:), ALLOCATABLE, TARGET ::                             &
106          ql_v, ql_vp
107
108    REAL, DIMENSION(:,:,:), ALLOCATABLE, TARGET ::                             &
109          e_1, e_2, e_3, kh_1, kh_2, km_1, km_2, p, pt_1, pt_2, pt_3, q_1,     &
110          q_2, q_3, ql_1, ql_2, u_1, u_2, u_3, v_1, v_2, v_3, vpt_1, vpt_2,    &
111          w_1, w_2, w_3
112
113    REAL, DIMENSION(:,:,:), POINTER ::                                         &
114          e, e_m, e_p, kh, kh_m, km, km_m, pt, pt_m, pt_p, q, q_m, q_p, ql,    &
115          ql_c, te_m, tpt_m, tq_m, tu_m, tv_m, tw_m, u, u_m, u_p, v, v_m, v_p, &
116          vpt, vpt_m, w, w_m, w_p
117
118    REAL, DIMENSION(:,:,:,:), ALLOCATABLE ::  rif_wall
119
120    SAVE
121
122 END MODULE arrays_3d
123
124
125
126
127 MODULE averaging
128
129!------------------------------------------------------------------------------!
130! Description:
131! ------------
132! Definition of variables needed for time-averaging of 2d/3d data
133!------------------------------------------------------------------------------!
134
135    REAL, DIMENSION(:,:), ALLOCATABLE ::  lwp_av, precipitation_rate_av, &
136                                          ts_av, us_av, z0_av
137
138    REAL, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: &
139          e_av, p_av, pc_av, pr_av, pt_av, q_av, ql_av, ql_c_av, ql_v_av, &
140          ql_vp_av, qv_av, s_av, u_av, v_av, vpt_av, w_av
141
142 END MODULE averaging
143
144
145
146
147 MODULE cloud_parameters
148
149!------------------------------------------------------------------------------!
150! Description:
151! ------------
152! Definition of variables and constants for cloud physics
153!------------------------------------------------------------------------------!
154
155    REAL  ::  b_cond, cp = 1005.0, diff_coeff_l = 0.23E-4,                     &
156              effective_coll_efficiency, l_d_cp, l_d_r, l_d_rv, l_v = 2.5E+06, &
157              mass_of_solute, molecular_weight_of_solute,                      &
158              prec_time_const = 0.001, ql_crit = 0.0005, rho_l = 1.0E3,        &
159              r_d = 287.0, r_v = 461.51, rho_surface,                          &
160              thermal_conductivity_l = 2.43E-2
161
162    REAL, DIMENSION(:), ALLOCATABLE :: hydro_press, pt_d_t, t_d_pt
163
164    REAL, DIMENSION(:,:), ALLOCATABLE ::  precipitation_amount, &
165                                          precipitation_rate
166
167    SAVE
168
169 END MODULE cloud_parameters
170
171
172
173
174 MODULE constants
175
176!------------------------------------------------------------------------------!
177! Description:
178! ------------
179! Definition of general constants
180!------------------------------------------------------------------------------!
181
182    REAL    ::  pi = 3.141592654
183
184    SAVE
185
186 END MODULE constants
187
188
189
190
191 MODULE control_parameters
192
193!------------------------------------------------------------------------------!
194! Description:
195! ------------
196! Definition of parameters for program control
197!------------------------------------------------------------------------------!
198
199    TYPE plot_precision
200       CHARACTER (LEN=6) ::  variable
201       INTEGER           ::  precision
202    END TYPE plot_precision
203
204    TYPE(plot_precision), DIMENSION(100) ::  plot_3d_precision =               &
205                        (/ plot_precision( 'u', 2 ), plot_precision( 'v', 2 ), &
206                           plot_precision( 'w', 2 ), plot_precision( 'p', 5 ), &
207                           plot_precision( 'pt', 2 ),                          &
208                           ( plot_precision( ' ', 1 ), i9 = 1,95 ) /)
209
210    TYPE file_status
211       LOGICAL ::  opened, opened_before
212    END TYPE file_status
213
214    TYPE(file_status), DIMENSION(200) :: openfile = file_status(.FALSE.,.FALSE.)
215
216
217    CHARACTER (LEN=1)   ::  cycle_mg = 'w', timestep_reason = ' '
218    CHARACTER (LEN=5)   ::  write_binary = 'false'
219    CHARACTER (LEN=6)   ::  grid_matching = 'match'
220    CHARACTER (LEN=8)   ::  run_date, run_time
221    CHARACTER (LEN=9)   ::  simulated_time_chr
222    CHARACTER (LEN=12)  ::  version = ' ', revision = ' '
223    CHARACTER (LEN=16)  ::  loop_optimization = 'default', &
224                            momentum_advec = 'pw-scheme', &
225                            psolver = 'poisfft', &
226                            scalar_advec = 'pw-scheme'
227    CHARACTER (LEN=20)  ::  bc_e_b = 'neumann', bc_lr = 'cyclic', &
228                            bc_ns = 'cyclic', bc_p_b = 'neumann', &
229                            bc_p_t = 'dirichlet', bc_pt_b = 'dirichlet', &
230                            bc_pt_t = 'initial_gradient', &
231                            bc_q_b = 'dirichlet', bc_q_t = 'neumann', &
232                            bc_s_b = 'dirichlet', bc_s_t = 'neumann', &
233                            bc_uv_b = 'dirichlet', bc_uv_t = 'dirichlet', &
234                            dissipation_1d = 'as_in_3d_model', &
235                            fft_method = 'system-specific', &
236                            mixing_length_1d = 'as_in_3d_model', &
237                            random_generator = 'numerical-recipes', &
238                            timestep_scheme = 'runge-kutta-3'
239    CHARACTER (LEN=40)  ::  avs_data_file, topography = 'flat'
240    CHARACTER (LEN=64)  ::  host
241    CHARACTER (LEN=80)  ::  log_message, run_identifier
242    CHARACTER (LEN=100) ::  initializing_actions = ' ', run_description_header
243
244    CHARACTER (LEN=7),  DIMENSION(100) ::  do3d_comp_prec = ' '
245    CHARACTER (LEN=10), DIMENSION(10)  ::  data_output_format = ' '
246    CHARACTER (LEN=10), DIMENSION(100) ::  data_output = ' ',    &
247                                           data_output_pr = ' ', &
248                                           data_output_user = ' ', doav = ' '
249    CHARACTER (LEN=20), DIMENSION(10)  ::  netcdf_precision = ' '
250
251    CHARACTER (LEN=10), DIMENSION(0:1,100) ::  do2d = ' ', do3d = ' '
252
253    INTEGER ::  average_count_pr = 0, average_count_sp = 0, &
254                average_count_3d = 0, current_timestep_number = 0, &
255                dist_range = 0, disturbance_level_ind_b, &
256                disturbance_level_ind_t, doav_n = 0, dopr_n = 0, &
257                dopr_time_count = 0, dopts_time_count = 0, &
258                dosp_time_count = 0, dots_time_count = 0, &
259                do2d_xy_n = 0, do2d_xz_n = 0, do2d_yz_n = 0, do3d_avs_n = 0, &
260                dvrp_filecount = 0, dz_stretch_level_index, gamma_mg, &
261                grid_level, ibc_e_b, ibc_p_b, ibc_p_t, ibc_pt_b, ibc_pt_t, &
262                ibc_q_b, ibc_q_t, ibc_uv_b, ibc_uv_t, &
263                inflow_disturbance_begin = -1, inflow_disturbance_end = -1, &
264                intermediate_timestep_count, intermediate_timestep_count_max, &
265                iran = -1234567, last_dt_change = 0, maximum_grid_level, &
266                mgcycles = 0, mg_cycles = -1, mg_switch_to_pe0_level = 0, &
267                ngsrb = 2, nsor = 20, nsor_ini = 100, n_sor, &
268                normalizing_region = 0, nz_do1d, nz_do3d = -9999, &
269                outflow_damping_width = -1, prt_time_count = 0, runnr = 0, &
270                skip_do_avs = 0, timestep_count = 0
271
272    INTEGER ::  dist_nxl(0:1), dist_nxr(0:1), dist_nyn(0:1), dist_nys(0:1), &
273                do2d_no(0:1) = 0, do2d_xy_time_count(0:1), &
274                do2d_xz_time_count(0:1), do2d_yz_time_count(0:1), &
275                do3d_no(0:1) = 0, do3d_time_count(0:1), &
276                pt_vertical_gradient_level_ind(10) = -9999, &
277                q_vertical_gradient_level_ind(10) = -9999, &
278                section(100,3), section_xy(100) = -9999, &
279                section_xz(100) = -9999, section_yz(100) = -9999, &
280                ug_vertical_gradient_level_ind(10) = -9999, &
281                vg_vertical_gradient_level_ind(10) = -9999
282
283    INTEGER, DIMENSION(:), ALLOCATABLE ::  grid_level_count
284
285    LOGICAL ::  adjust_mixing_length = .FALSE., avs_output = .FALSE., &
286                call_psolver_at_all_substeps = .TRUE., &
287                cloud_droplets = .FALSE., cloud_physics = .FALSE., &
288                conserve_volume_flow = .FALSE., constant_diffusion = .FALSE., &
289                constant_heatflux = .TRUE., constant_top_heatflux = .TRUE., &
290                constant_waterflux = .TRUE., create_disturbances = .TRUE., &
291                cut_spline_overshoot = .TRUE., &
292                data_output_2d_on_each_pe = .TRUE., do2d_at_begin = .FALSE., &
293                do3d_at_begin = .FALSE., do3d_compress = .FALSE., &
294                do_sum = .FALSE., dt_changed = .FALSE., dt_fixed = .FALSE., &
295                disturbance_created = .FALSE., &
296                first_call_advec_particles = .TRUE., &
297                force_print_header = .FALSE., galilei_transformation = .FALSE.,&
298                humidity = .FALSE., inflow_l = .FALSE., inflow_n = .FALSE., &
299                inflow_r = .FALSE., inflow_s = .FALSE., iso2d_output = .FALSE.,&
300                mg_switch_to_pe0 = .FALSE., &
301                netcdf_output = .FALSE., netcdf_64bit = .FALSE., &
302                netcdf_64bit_3d = .TRUE., &
303                outflow_l = .FALSE., outflow_n = .FALSE., outflow_r = .FALSE., &
304                outflow_s = .FALSE., passive_scalar = .FALSE., &
305                prandtl_layer = .TRUE., precipitation = .FALSE., &
306                profil_output = .FALSE., radiation = .FALSE., &
307                random_heatflux = .FALSE., run_control_header = .FALSE., &
308                sloping_surface = .FALSE., stop_dt = .FALSE., &
309                terminate_run = .FALSE., use_prior_plot1d_parameters = .FALSE.,&
310                use_pt_reference = .FALSE., use_surface_fluxes = .FALSE., &
311                use_top_fluxes = .FALSE., use_ug_for_galilei_tr = .TRUE., &
312                use_upstream_for_tke = .FALSE., wall_adjustment = .TRUE.
313
314    LOGICAL ::  data_output_xy(0:1) = .FALSE., data_output_xz(0:1) = .FALSE., &
315                data_output_yz(0:1) = .FALSE.
316
317    REAL ::  advected_distance_x = 0.0, advected_distance_y = 0.0, &
318             alpha_surface = 0.0, asselin_filter_factor = 0.1, &
319             averaging_interval = 0.0, averaging_interval_pr = 9999999.9, &
320             averaging_interval_sp = 9999999.9, bc_pt_t_val, bc_q_t_val, &
321             building_height = 50.0, building_length_x = 50.0, &
322             building_length_y = 50.0, building_wall_left = 9999999.9, &
323             building_wall_south = 9999999.9, cfl_factor = -1.0, &
324             cos_alpha_surface, disturbance_amplitude = 0.25, &
325             disturbance_energy_limit = 0.01, disturbance_level_b = -1.0, &
326             disturbance_level_t = -1.0, dt = -1.0, dt_averaging_input = 0.0, &
327             dt_averaging_input_pr = 9999999.9, dt_data_output = 9999999.9, &
328             dt_data_output_av = 9999999.9, dt_disturb = 9999999.9, &
329             dt_dopr = 9999999.9, dt_dopr_listing = 9999999.9, &
330             dt_dopts = 9999999.9, dt_dosp = 9999999.9, dt_dots = 9999999.9, &
331             dt_do2d_xy = 9999999.9, dt_do2d_xz = 9999999.9, &
332             dt_do2d_yz = 9999999.9, dt_do3d = 9999999.9, dt_dvrp = 9999999.9, &
333             dt_max = 20.0, dt_prel = 9999999.9, dt_restart = 9999999.9, &
334             dt_run_control = 60.0, dt_3d = -1.0, dz = -1.0, &
335             dz_max = 9999999.9, dz_stretch_factor = 1.08, &
336             dz_stretch_level = 100000.0, e_min = 0.0, end_time = 0.0, &
337             f = 0.0, fs = 0.0, g = 9.81, kappa = 0.4, km_constant = -1.0, &
338             km_damp_max = -1.0, long_filter_factor = 0.0, &
339             maximum_cpu_time_allowed = 0.0, molecular_viscosity = 1.461E-5, &
340             old_dt = 1.0E-10, omega = 7.29212E-5, omega_sor = 1.8, &
341             overshoot_limit_e = 0.0, overshoot_limit_pt = 0.0, &
342             overshoot_limit_u = 0.0, overshoot_limit_v = 0.0, &
343             overshoot_limit_w = 0.0, particle_maximum_age = 9999999.9, &
344             phi = 55.0, prandtl_number = 1.0, &
345             precipitation_amount_interval = 9999999.9, &
346             pt_reference = 9999999.9, &
347             pt_slope_offset = 0.0, pt_surface = 300.0, &
348             pt_surface_initial_change = 0.0, q_surface = 0.0, &
349             q_surface_initial_change = 0.0, rayleigh_damping_factor = -1.0, &
350             rayleigh_damping_height = -1.0, residual_limit = 1.0E-4, &
351             restart_time = 9999999.9, rif_max = 1.0, rif_min = -5.0, &
352             roughness_length = 0.1, simulated_time = 0.0, &
353             simulated_time_at_begin, sin_alpha_surface, &
354             skip_time_data_output = 0.0, skip_time_data_output_av = 9999999.9,&
355             skip_time_dopr = 9999999.9, skip_time_dosp = 9999999.9, &
356             skip_time_do2d_xy = 9999999.9, skip_time_do2d_xz = 9999999.9, &
357             skip_time_do2d_yz = 9999999.9, skip_time_do3d = 9999999.9, &
358             surface_heatflux = 9999999.9, surface_pressure = 1013.25, &
359             surface_scalarflux = 0.0, surface_waterflux = 0.0, &
360             s_surface = 0.0, s_surface_initial_change = 0.0, &
361             termination_time_needed = -1.0, time_disturb = 0.0, &
362             time_dopr = 0.0, time_dopr_av = 0.0, time_dopr_listing = 0.0, &
363             time_dopts = 0.0, time_dosp = 0.0, time_dosp_av = 0.0, &
364             time_dots = 0.0, time_do2d_xy = 0.0, time_do2d_xz = 0.0, &
365             time_do2d_yz = 0.0, time_do3d = 0.0, time_do_av = 0.0, &
366             time_do_sla = 0.0, time_dvrp = 0.0, time_prel = 0.0, &
367             time_restart = 9999999.9, time_run_control = 0.0, &
368             top_heatflux = 9999999.9, ug_surface = 0.0, u_gtrans = 0.0, &
369             ups_limit_e = 0.0, ups_limit_pt = 0.0, ups_limit_u = 0.0, &
370             ups_limit_v = 0.0, ups_limit_w = 0.0, vg_surface = 0.0, &
371             v_gtrans = 0.0, wall_adjustment_factor = 1.8, z_max_do1d = -1.0, &
372             z_max_do1d_normalized = -1.0, z_max_do2d = -1.0
373
374    REAL ::  do2d_xy_last_time(0:1) = -1.0, do2d_xz_last_time(0:1) = -1.0, &
375             do2d_yz_last_time(0:1) = -1.0, pt_vertical_gradient(10) = 0.0, &
376             pt_vertical_gradient_level(10) = -1.0, &
377             q_vertical_gradient(10) = 0.0, &
378             q_vertical_gradient_level(10) = -1.0, &
379             s_vertical_gradient(10) = 0.0, &
380             s_vertical_gradient_level(10) = -1.0, threshold(20) = 0.0, &
381             tsc(10) = (/ 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 /), &
382             ug_vertical_gradient(10) = 0.0, &
383             ug_vertical_gradient_level(10) = -1.0, &
384             vg_vertical_gradient(10) = 0.0, &
385             vg_vertical_gradient_level(10) = -1.0, &
386             volume_flow(1:2) = 0.0, volume_flow_area(1:2) = 0.0, &
387             volume_flow_initial(1:2) = 0.0, wall_heatflux(0:4) = 0.0
388
389
390    SAVE
391
392 END MODULE control_parameters
393
394
395
396
397 MODULE cpulog
398
399!------------------------------------------------------------------------------!
400! Description:
401! ------------
402! Definition of variables for cpu-time measurements
403!------------------------------------------------------------------------------!
404
405    REAL ::  initial_wallclock_time
406
407    TYPE logpoint
408       REAL               ::  isum, ivect, mean, mtime, mtimevec, sum, vector
409       INTEGER            ::  counts
410       CHARACTER (LEN=20) ::  place
411    END TYPE logpoint
412
413    TYPE(logpoint), DIMENSION(100) ::  log_point = logpoint( 0.0, 0.0, 0.0,   &
414                                       0.0, 0.0, 0.0, 0.0, 0, ' ' ),          &
415                                       log_point_s = logpoint( 0.0, 0.0, 0.0, &
416                                       0.0, 0.0, 0.0, 0.0, 0, ' ' )
417
418    SAVE
419
420 END MODULE cpulog
421
422
423
424
425 MODULE dvrp_variables
426
427!------------------------------------------------------------------------------!
428! Description:
429! ------------
430! Definition of variables used with dvrp-software
431!------------------------------------------------------------------------------!
432
433    CHARACTER (LEN=10) ::  dvrp_output = 'rtsp'
434
435    CHARACTER (LEN=20), DIMENSION(10) ::  mode_dvrp = &
436                                     (/ ( '                    ', i9 = 1,10 ) /)
437
438    CHARACTER (LEN=80) ::  dvrp_directory = 'default',                    &
439                           dvrp_file      = 'default',                    &
440                           dvrp_host      = 'origin.rvs.uni-hannover.de', &
441                           dvrp_password  = '********',                   &
442                           dvrp_username  = ' '
443
444    INTEGER ::  dvrp_colourtable_entries = 4, islice_dvrp, nx_dvrp, ny_dvrp, &
445                nz_dvrp
446
447    INTEGER, DIMENSION(10) ::  slicer_position_dvrp
448
449    LOGICAL ::  cyclic_dvrp = .FALSE., lock_steering_update = .FALSE., &
450                use_seperate_pe_for_dvrp_output = .FALSE.
451
452    REAL    ::  superelevation = 1.0, superelevation_x = 1.0, &
453                superelevation_y = 1.0
454
455#if defined( __decalpha )
456    REAL, DIMENSION(2,10)  ::  slicer_range_limits_dvrp = (/ &
457                                -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, &
458                                -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, &
459                                -1.0, 1.0, -1.0, 1.0 /)
460
461    REAL, DIMENSION(2,100) ::  interval_values_dvrp, interval_h_dvrp =       &
462                               (/ 270.0, 225.0, 225.0, 180.0, 70.0, 25.0,    &
463                                  25.0, -25.0, ( 0.0, i9 = 1, 192 ) /),      &
464                               interval_l_dvrp = 0.5, interval_s_dvrp = 1.0, &
465                               interval_a_dvrp = 0.0
466#else
467    REAL, DIMENSION(2,10)  ::  slicer_range_limits_dvrp
468
469    REAL, DIMENSION(2,100) ::  interval_values_dvrp, interval_h_dvrp,        &
470                               interval_l_dvrp = 0.5, interval_s_dvrp = 1.0, &
471                               interval_a_dvrp = 0.0
472
473    DATA  slicer_range_limits_dvrp / -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, &
474                                     -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, &
475                                     -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, &
476                                     -1.0, 1.0 /
477
478    DATA  interval_h_dvrp / 270.0, 225.0, 225.0, 180.0, 70.0, 25.0, &
479                            25.0, -25.0, 192 * 0.0 /
480#endif
481
482    REAL, DIMENSION(:), ALLOCATABLE ::  xcoor_dvrp, ycoor_dvrp, zcoor_dvrp
483
484    TYPE steering
485       CHARACTER (LEN=20) ::  name
486       REAL               ::  min, max
487       INTEGER            ::  imin, imax
488    END TYPE steering
489
490    TYPE(steering), DIMENSION(:), ALLOCATABLE ::  steering_dvrp
491
492    SAVE
493
494 END MODULE dvrp_variables
495
496
497
498
499 MODULE grid_variables
500
501!------------------------------------------------------------------------------!
502! Description:
503! ------------
504! Definition of grid spacings
505!------------------------------------------------------------------------------!
506
507    REAL ::  ddx, ddx2, dx = 1.0, dx2, ddy, ddy2, dy = 1.0, dy2
508
509    REAL, DIMENSION(:), ALLOCATABLE ::  ddx2_mg, ddy2_mg
510
511    REAL, DIMENSION(:,:), ALLOCATABLE ::  fwxm, fwxp, fwym, fwyp, fxm, fxp,   &
512                                          fym, fyp, wall_e_x, wall_e_y,       &
513                                          wall_u, wall_v, wall_w_x, wall_w_y, &
514                                          zu_s_inner, zw_w_inner
515
516    SAVE
517
518 END MODULE grid_variables
519
520
521
522
523 MODULE indices
524
525!------------------------------------------------------------------------------!
526! Description:
527! ------------
528! Definition of array bounds and number of gridpoints
529!------------------------------------------------------------------------------!
530
531    INTEGER ::  ngp_sums, nnx, nx = 0, nxa, nxl, nxr, nxra, nny, ny = 0, nya,  &
532                nyn, nyna, nys, nnz, nz = 0, nza, nzb, nzb_diff, nzt, nzta,    &
533                nzt_diff
534
535    INTEGER, DIMENSION(:), ALLOCATABLE ::                                      &
536                ngp_2dh, ngp_3d, ngp_3d_inner,                                 &
537                nnx_pe, nny_pe, nxl_mg, nxr_mg, nyn_mg, nys_mg, nzt_mg
538
539    INTEGER, DIMENSION(:,:), ALLOCATABLE ::                                    &
540                ngp_2dh_outer, mg_loc_ind, nzb_diff_s_inner, nzb_diff_s_outer, &
541                nzb_diff_u, nzb_diff_v, nzb_inner, nzb_outer, nzb_s_inner,     &
542                nzb_s_outer, nzb_u_inner, nzb_u_outer, nzb_v_inner,            &
543                nzb_v_outer, nzb_w_inner, nzb_w_outer, nzb_2d
544
545    SAVE
546
547 END MODULE indices
548
549
550
551
552 MODULE interfaces
553
554!------------------------------------------------------------------------------!
555! Description:
556! ------------
557! Interfaces for special subroutines which use optional parameters
558!------------------------------------------------------------------------------!
559
560    INTERFACE
561
562       SUBROUTINE cpu_log( log_event, place, modus, barrierwait )
563
564          USE cpulog
565
566          CHARACTER (LEN=*)           ::  modus, place
567          CHARACTER (LEN=*), OPTIONAL ::  barrierwait
568          TYPE(logpoint)              ::  log_event
569
570       END SUBROUTINE cpu_log
571
572    END INTERFACE
573
574
575
576    INTERFACE
577
578       SUBROUTINE global_min_max ( i1, i2, j1, j2, k1, k2, feld, mode, wert, &
579                                   wert_ijk, wert1, wert1_ijk )
580          CHARACTER (LEN=*), INTENT(IN) ::  mode
581          INTEGER, INTENT(IN)           ::  i1, i2, j1, j2, k1, k2
582          INTEGER                       ::  wert_ijk(3)
583          INTEGER, OPTIONAL             ::  wert1_ijk(3)
584          REAL                          ::  wert
585          REAL, OPTIONAL                ::  wert1
586          REAL, INTENT(IN)              ::  feld(i1:i2,j1:j2,k1:k2)
587
588       END SUBROUTINE global_min_max
589
590    END INTERFACE
591
592    SAVE
593
594 END MODULE interfaces
595
596
597
598 MODULE pointer_interfaces
599
600!------------------------------------------------------------------------------!
601! Description:
602! ------------
603! Interfaces for subroutines with pointer arguments called in
604! prognostic_equations
605!------------------------------------------------------------------------------!
606
607    INTERFACE
608
609       SUBROUTINE advec_s_bc( sk, sk_char )
610
611          CHARACTER (LEN=*), INTENT(IN)   ::  sk_char
612          REAL, DIMENSION(:,:,:), POINTER ::  sk
613
614       END SUBROUTINE advec_s_bc
615
616    END INTERFACE
617
618
619    SAVE
620
621 END MODULE pointer_interfaces
622
623
624
625
626 MODULE model_1d
627
628!------------------------------------------------------------------------------!
629! Description:
630! ------------
631! Definition of variables for the 1D-model
632!------------------------------------------------------------------------------!
633
634    INTEGER ::  current_timestep_number_1d = 0, damp_level_ind_1d, &
635                last_dt_change_1d = 0 
636
637    LOGICAL ::  run_control_header_1d = .FALSE., stop_dt_1d = .FALSE. 
638
639    REAL ::     damp_level_1d = -1.0, dt_1d = 60.0, dt_max_1d = 300.0, &
640                dt_pr_1d = 9999999.9, dt_run_control_1d = 60.0, &
641                end_time_1d = 864000.0, old_dt_1d = 1.0E-10, &
642                qs1d, simulated_time_1d = 0.0, time_pr_1d = 0.0, &
643                time_run_control_1d = 0.0, ts1d, us1d, usws1d, usws1d_m, &
644                vsws1d, vsws1d_m, z01d
645
646
647    REAL, DIMENSION(:), ALLOCATABLE ::  e1d, e1d_m, e1d_p, kh1d, kh1d_m, km1d, &
648                                        km1d_m, l_black, l1d, l1d_m, rif1d,    &
649                                        te_e, te_em, te_u, te_um, te_v, te_vm, &
650                                        u1d, u1d_m, u1d_p, v1d, v1d_m, v1d_p
651
652    SAVE
653
654 END MODULE model_1d
655
656
657
658
659 MODULE netcdf_control
660
661!------------------------------------------------------------------------------!
662! Description:
663! ------------
664! Definition of parameters and variables for netcdf control.
665!------------------------------------------------------------------------------!
666
667#if defined( __netcdf )
668    USE netcdf
669#endif
670
671    INTEGER, PARAMETER ::  dopr_norm_num = 7, dopts_num = 26, dots_max = 100, &
672                           replace_num = 6
673
674    INTEGER ::  dots_num = 22
675
676    CHARACTER, DIMENSION( replace_num ) :: &
677                           replace_char = (/ '''', '"', '*', '/', '(', ')' /), &
678                           replace_by   = (/ 'p' , 'p', 's', 'o', '_', '_' /)
679
680    CHARACTER (LEN=6), DIMENSION(dopr_norm_num) ::  dopr_norm_names =   &
681         (/ 'wpt0  ', 'ws2   ', 'tsw2  ', 'ws3   ', 'ws2tsw', 'wstsw2', &
682            'z_i   ' /)
683
684    CHARACTER (LEN=6), DIMENSION(dopr_norm_num) ::  dopr_norm_longnames = &
685         (/ 'wpt0  ', 'w*2   ', 't*w2  ', 'w*3   ', 'w*2t*w', 'w*t*w2',   &
686            'z_i   ' /)
687
688    CHARACTER (LEN=7), DIMENSION(dopts_num) :: dopts_label = &
689          (/ 'tnpt   ', 'x_     ', 'y_     ', 'z_     ', 'z_abs  ', 'u      ', &
690             'v      ', 'w      ', 'u"     ', 'v"     ', 'w"     ', 'npt_up ', &
691             'w_up   ', 'w_down ', 'npt_max', 'npt_min', 'x*2    ', 'y*2    ', &
692             'z*2    ', 'u*2    ', 'v*2    ', 'w*2    ', 'u"2    ', 'v"2    ', &
693             'w"2    ', 'npt*2  ' /)
694
695    CHARACTER (LEN=7), DIMENSION(dopts_num) :: dopts_unit = &
696          (/ 'number ', 'm      ', 'm      ', 'm      ', 'm      ', 'm/s    ', &
697             'm/s    ', 'm/s    ', 'm/s    ', 'm/s    ', 'm/s    ', 'number ', &
698             'm/s    ', 'm/s    ', 'number ', 'number ', 'm2     ', 'm2     ', &
699             'm2     ', 'm2/s2  ', 'm2/s2  ', 'm2/s2  ', 'm2/s2  ', 'm2/s2  ', &
700             'm2/s2  ', 'number2' /)
701
702    CHARACTER (LEN=7), DIMENSION(dots_max) :: dots_label = &
703          (/ 'E      ', 'E*     ', 'dt     ', 'u*     ', 'th*    ', 'umax   ', &
704             'vmax   ', 'wmax   ', 'div_new', 'div_old', 'z_i_wpt', 'z_i_pt ', &
705             'w*     ', 'w"pt"0 ', 'w"pt"  ', 'wpt    ', 'pt(0)  ', 'pt(zp) ', &
706             'splptx ', 'splpty ', 'splptz ', 'mo_L   ',                       &
707             ( 'unknown', i9 = 1, 78) /)
708
709    CHARACTER (LEN=7), DIMENSION(dots_max) :: dots_unit = &
710          (/ 'm2/s2  ', 'm2/s2  ', 's      ', 'm/s    ', 'K      ', 'm/s    ', &
711             'm/s    ', 'm/s    ', 's-1    ', 's-1    ', 'm      ', 'm      ', &
712             'm/s    ', 'K m/s  ', 'K m/s  ', 'k m/s  ', 'K      ', 'K      ', &
713             '%      ', '%      ', '%      ', 'm      ',                       &
714             ( 'unknown', i9 = 1, 78 ) /)
715
716    CHARACTER (LEN=7), DIMENSION(100) ::  dopr_unit = 'unknown'
717
718    CHARACTER (LEN=7), DIMENSION(0:1,100) ::  do2d_unit, do3d_unit
719
720    CHARACTER (LEN=16), DIMENSION(25) ::  prt_var_names = &
721          (/ 'pt_age          ', 'pt_dvrp_size    ', 'pt_origin_x     ', &
722             'pt_origin_y     ', 'pt_origin_z     ', 'pt_radius       ', &
723             'pt_speed_x      ', 'pt_speed_y      ', 'pt_speed_z      ', &
724             'pt_weight_factor', 'pt_x            ', 'pt_y            ', &
725             'pt_z            ', 'pt_color        ', 'pt_group        ', &
726             'pt_tailpoints   ', 'pt_tail_id      ', 'pt_density_ratio', &
727             'pt_exp_arg      ', 'pt_exp_term     ', 'not_used        ', &
728             'not_used        ', 'not_used        ', 'not_used        ', &
729             'not_used        ' /)
730
731    CHARACTER (LEN=16), DIMENSION(25) ::  prt_var_units = &
732          (/ 'seconds         ', 'meters          ', 'meters          ', &
733             'meters          ', 'meters          ', 'meters          ', &
734             'm/s             ', 'm/s             ', 'm/s             ', &
735             'factor          ', 'meters          ', 'meters          ', &
736             'meters          ', 'none            ', 'none            ', &
737             'none            ', 'none            ', 'ratio           ', &
738             'none            ', 'none            ', 'not_used        ', &
739             'not_used        ', 'not_used        ', 'not_used        ', &
740             'not_used        ' /)
741
742    INTEGER ::  id_dim_prtnum, id_dim_time_pr, id_dim_time_prt, &
743                id_dim_time_pts, id_dim_time_sp, id_dim_time_ts, id_dim_x_sp, &
744                id_dim_y_sp, id_dim_zu_sp, id_dim_zw_sp, id_set_pr, &
745                id_set_prt, id_set_pts, id_set_sp, id_set_ts, id_var_prtnum, &
746                id_var_rnop_prt, id_var_time_pr, id_var_time_prt, &
747                id_var_time_pts, id_var_time_sp, id_var_time_ts, id_var_x_sp, &
748                id_var_y_sp, id_var_zu_sp, id_var_zw_sp, nc_stat
749
750    INTEGER, DIMENSION(0:1) ::  id_dim_time_xy, id_dim_time_xz, &
751                id_dim_time_yz, id_dim_time_3d, id_dim_x_xy, id_dim_xu_xy, &
752                id_dim_x_xz, id_dim_xu_xz, id_dim_x_yz, id_dim_xu_yz, &
753                id_dim_x_3d, id_dim_xu_3d, id_dim_y_xy, id_dim_yv_xy, &
754                id_dim_y_xz, id_dim_yv_xz, id_dim_y_yz, id_dim_yv_yz, &
755                id_dim_y_3d, id_dim_yv_3d, id_dim_zu_xy, id_dim_zu1_xy, &
756                id_dim_zu_xz, id_dim_zu_yz, id_dim_zu_3d, id_dim_zw_xy, &
757                id_dim_zw_xz, id_dim_zw_yz, id_dim_zw_3d, id_set_xy, &
758                id_set_xz, id_set_yz, id_set_3d, id_var_ind_x_yz, &
759                id_var_ind_y_xz, id_var_ind_z_xy, id_var_time_xy, &
760                id_var_time_xz, id_var_time_yz, id_var_time_3d, id_var_x_xy, &
761                id_var_xu_xy, id_var_x_xz, id_var_xu_xz, id_var_x_yz, &
762                id_var_xu_yz, id_var_x_3d, id_var_xu_3d, id_var_y_xy, &
763                id_var_yv_xy, id_var_y_xz, id_var_yv_xz, id_var_y_yz, &
764                id_var_yv_yz, id_var_y_3d, id_var_yv_3d, id_var_zusi_xy, &
765                id_var_zusi_3d, id_var_zu_xy, id_var_zu1_xy, id_var_zu_xz, &
766                id_var_zu_yz, id_var_zu_3d, id_var_zwwi_xy, id_var_zwwi_3d, &
767                id_var_zw_xy, id_var_zw_xz, id_var_zw_yz, id_var_zw_3d
768
769    INTEGER, DIMENSION(10)  ::  id_var_dospx, id_var_dospy, nc_precision 
770    INTEGER, DIMENSION(20)  ::  id_var_prt
771    INTEGER, DIMENSION(dopr_norm_num) ::  id_var_norm_dopr
772
773    INTEGER, DIMENSION(dopts_num,0:10) ::  id_var_dopts
774    INTEGER, DIMENSION(0:1,100)        ::  id_var_do2d, id_var_do3d
775    INTEGER, DIMENSION(100,0:9)        ::  id_dim_z_pr, id_var_dopr, &
776                                           id_var_z_pr
777    INTEGER, DIMENSION(dots_max,0:9)   ::  id_var_dots
778
779
780    SAVE
781
782 END MODULE netcdf_control
783
784
785
786 MODULE particle_attributes
787
788!------------------------------------------------------------------------------!
789! Description:
790! ------------
791! Definition of variables used to compute particle transport
792!------------------------------------------------------------------------------!
793
794    USE array_kind
795
796    CHARACTER (LEN=15)  ::  bc_par_lr = 'cyclic',  bc_par_ns = 'cyclic', &
797                            bc_par_b  = 'reflect', bc_par_t  = 'absorb'
798
799#if defined( __parallel )
800    INTEGER ::  mpi_particle_type
801#endif
802    INTEGER ::  ibc_par_lr, ibc_par_ns, ibc_par_b, ibc_par_t,                  &
803                iran_part = -1234567, maximum_number_of_particles = 1000,      &
804                maximum_number_of_tailpoints = 100,                            &
805                maximum_number_of_tails = 0,                                   &
806                number_of_initial_particles = 0, number_of_particles = 0,      &
807                number_of_particle_groups = 1, number_of_tails = 0,            &
808                number_of_initial_tails = 0, particles_per_point = 1,          &
809                particle_file_count = 0, skip_particles_for_tail = 100,        &
810                total_number_of_particles, total_number_of_tails = 0
811
812    INTEGER, PARAMETER ::  max_number_of_particle_groups = 10
813
814    INTEGER, DIMENSION(:), ALLOCATABLE     ::  new_tail_id
815    INTEGER, DIMENSION(:,:,:), ALLOCATABLE ::  prt_count, prt_start_index
816
817    LOGICAL ::  particle_advection = .FALSE., random_start_position = .FALSE., &
818                read_particles_from_restartfile = .TRUE.,                      &
819                uniform_particles = .TRUE., use_particle_tails = .FALSE.,      &
820                use_sgs_for_particles = .FALSE.,                               &
821                vertical_particle_advection = .TRUE.,                          &
822                write_particle_statistics = .FALSE.
823    LOGICAL, DIMENSION(:), ALLOCATABLE ::  particle_mask, tail_mask
824
825    REAL    ::  c_0 = 3.0, dt_min_part = 0.0002,                               &
826                dt_write_particle_data = 9999999.9, dvrp_psize = 9999999.9,    &
827                end_time_prel = 9999999.9, initial_weighting_factor = 1.0,     &
828                maximum_tailpoint_age = 100000.0,                              &
829                minimum_tailpoint_distance = 0.0,                              &
830                particle_advection_start = 0.0, sgs_wfu_part = 0.3333333,      &
831                sgs_wfv_part = 0.3333333, sgs_wfw_part = 0.3333333,            &
832                time_write_particle_data = 0.0
833
834    REAL, DIMENSION(max_number_of_particle_groups) ::  &
835                density_ratio = 9999999.9, pdx = 9999999.9, pdy = 9999999.9, &
836                pdz = 9999999.9, psb = 9999999.9, psl = 9999999.9,           &
837                psn = 9999999.9, psr = 9999999.9, pss = 9999999.9,           &
838                pst = 9999999.9, radius = 9999999.9
839
840    REAL, DIMENSION(:,:,:), ALLOCATABLE ::  particle_tail_coordinates
841
842
843    TYPE particle_type
844       SEQUENCE
845       REAL    ::  age, age_m, dt_sum, dvrp_psize, e_m, origin_x, origin_y, &
846                   origin_z, radius, speed_x, speed_x_sgs, speed_y,         &
847                   speed_y_sgs, speed_z, speed_z_sgs, weight_factor, x, y, z
848       INTEGER ::  color, group, tailpoints, tail_id
849    END TYPE particle_type
850
851    TYPE(particle_type), DIMENSION(:), ALLOCATABLE ::  initial_particles, &
852                                                       particles
853
854    TYPE particle_groups_type
855       SEQUENCE
856       REAL    ::  density_ratio, radius, exp_arg, exp_term
857    END TYPE particle_groups_type
858
859    TYPE(particle_groups_type), DIMENSION(max_number_of_particle_groups) ::&
860                   particle_groups
861
862    SAVE
863
864 END MODULE particle_attributes
865
866
867
868
869
870 MODULE pegrid
871
872!------------------------------------------------------------------------------!
873! Description:
874! ------------
875! Definition of variables which define processor topology and the exchange of
876! ghost point layers. This modules must be placed in all routines which contain
877! MPI-calls.
878!------------------------------------------------------------------------------!
879
880#if defined( __parallel )
881#if defined( __lcmuk )
882    USE MPI
883!    INCLUDE "mpif.h"
884#else
885    INCLUDE "mpif.h"
886#endif
887#endif
888    CHARACTER(LEN=5)       ::  myid_char = '', myid_char_14 = ''
889    INTEGER                ::  myid=0, npex = -1, npey = -1, numprocs = 1, &
890                               tasks_per_node = -9999, threads_per_task = 1
891
892#if defined( __parallel )
893    INTEGER ::  comm1dx, comm1dy, comm2d, comm_palm, ierr, myidx, myidy,       &
894                ndim = 2, ngp_y, pleft, pnorth, pright, psouth,                &
895                sendrecvcount_xy, sendrecvcount_yz, sendrecvcount_zx,          &
896                sendrecvcount_zyd, sendrecvcount_yxd,                          &
897                type_x, type_x_int, ibuf(12), pcoord(2), pdims(2),             &
898                status(MPI_STATUS_SIZE)
899
900    INTEGER, DIMENSION(:), ALLOCATABLE ::  ngp_yz, type_xz
901
902    LOGICAL ::  reorder = .TRUE.
903    LOGICAL, DIMENSION(2) ::  cyclic = (/ .TRUE. , .TRUE. /), &
904                              remain_dims
905#endif
906
907    SAVE
908
909 END MODULE pegrid
910
911
912
913
914 MODULE profil_parameter
915
916!------------------------------------------------------------------------------!
917! Description:
918! ------------
919! Definition of variables which control PROFIL-output
920!------------------------------------------------------------------------------!
921
922    INTEGER, PARAMETER ::  crmax = 100
923
924    CHARACTER (LEN=10), DIMENSION(100) ::  dopr_label = ' '
925
926    CHARACTER (LEN=10), DIMENSION(crmax) ::  cross_normalized_x = ' ', &
927                                             cross_normalized_y = ' '
928
929    CHARACTER (LEN=20), DIMENSION(20) ::  cross_ts_profiles = &
930                           (/ ' E E*               ', ' dt                 ', &
931                              ' u* w*              ', ' th*                ', &
932                              ' umax vmax wmax     ', ' div_old div_new    ', &
933                              ' z_i_wpt z_i_pt     ', ' w"pt"0 w"pt" wpt   ', &
934                              ' pt(0) pt(zp)       ', ' splux spluy spluz  ', &
935                              ' L                  ',                         &
936                            ( '                    ', i9 = 1, 9 ) /)
937
938    CHARACTER (LEN=40), DIMENSION(crmax) ::  cross_xtext = &
939                           (/ 'windspeed in ms>->1         ', &
940                              'pot. temperature in K       ', &
941                              'heat flux in K ms>->1       ', &
942                              'momentum flux in m>2s>2     ', &
943                              'eddy diffusivity in m>2s>->1', &
944                              'mixing length in m          ', &
945                            ( '                            ', i9 = 1, 94 ) /)
946
947    CHARACTER (LEN=100), DIMENSION(crmax) ::  cross_profiles = &
948                           (/ ' u v                           ', &
949                              ' pt                            ', &
950                              ' w"pt" w*pt* w*pt*BC wpt wptBC ', &
951                              ' w"u" w*u* wu w"v" w*v* wv     ', &
952                              ' km kh                         ', &
953                              ' l                             ', &
954                         ( '                               ', i9 = 1, 94 ) /)
955
956    INTEGER ::  profile_columns = 3, profile_rows = 2, profile_number = 0
957
958    INTEGER ::  cross_linecolors(100,crmax) = 1, &
959                cross_linestyles(100,crmax) = 0, &
960                cross_profile_numbers(100,crmax) = 0, &
961                cross_pnc_local(crmax), cross_profile_number_count(crmax) = 0, &
962                cross_ts_numbers(crmax,crmax) = 0, &
963                cross_ts_number_count(crmax) = 0, dopr_crossindex(100) = 0, &
964                dopr_index(100) = 0, dopr_initial_index(100) = 0, &
965                dots_crossindex(100) = 0, dots_index(100) = 0, &
966                linecolors(10) = (/ 2, 3, 4,  5, 7, 8, 12, 15, 16, 23 /), &
967                linestyles(11) = (/ 0, 7, 3, 10, 4, 1,  9,  2,  5,  8, 6 /)
968               
969
970    REAL ::  cross_normx_factor(100,crmax) = 1.0, &
971             cross_normy_factor(100,crmax) = 1.0, &
972             cross_ts_uymax(20) = &
973                             (/ 999.999, 999.999, 999.999, 999.999, 999.999,   &
974                                999.999, 999.999, 999.999, 999.999, 999.999,   &
975                                999.999, 999.999, 999.999, 999.999, 999.999,   &
976                                999.999, 999.999, 999.999, 999.999, 999.999 /),&
977             cross_ts_uymax_computed(20) = 999.999, &
978             cross_ts_uymin(20) = &
979                             (/ 999.999, 999.999, 999.999,  -5.000, 999.999,   &
980                                999.999,   0.000, 999.999, 999.999, 999.999,   &
981                                999.999, 999.999, 999.999, 999.999, 999.999,   &
982                                999.999, 999.999, 999.999, 999.999, 999.999 /),&
983             cross_ts_uymin_computed(20) = 999.999, &
984             cross_uxmax(crmax) = 0.0, cross_uxmax_computed(crmax) = -1.0, &
985             cross_uxmax_normalized(crmax) = 0.0, &
986             cross_uxmax_normalized_computed(crmax) = -1.0, &
987             cross_uxmin(crmax) = 0.0, cross_uxmin_computed(crmax) =  1.0, &
988             cross_uxmin_normalized(crmax) = 0.0, &
989             cross_uxmin_normalized_computed(crmax) = 1.0, &
990             cross_uymax(crmax), cross_uymin(crmax)
991
992    SAVE
993
994 END MODULE profil_parameter
995
996
997
998
999 MODULE spectrum
1000
1001!------------------------------------------------------------------------------!
1002! Description:
1003! ------------
1004! Definition of quantities used for computing spectra
1005!------------------------------------------------------------------------------!
1006
1007    CHARACTER (LEN=6),  DIMENSION(1:5) ::  header_char = (/ 'PS(u) ', 'PS(v) ',&
1008                                           'PS(w) ', 'PS(pt)', 'PS(q) ' /)
1009    CHARACTER (LEN=2),  DIMENSION(10)  ::  spectra_direction = 'x'
1010    CHARACTER (LEN=10), DIMENSION(10)  ::  data_output_sp  = ' '
1011    CHARACTER (LEN=25), DIMENSION(1:5) ::  utext_char =                    &
1012                                           (/ '-power spectrum of u     ', &
1013                                              '-power spectrum of v     ', &
1014                                              '-power spectrum of w     ', &
1015                                              '-power spectrum of ^1185 ', &
1016                                              '-power spectrum of q     ' /)
1017    CHARACTER (LEN=39), DIMENSION(1:5) ::  ytext_char =                        &
1018                                 (/ 'k ^2236 ^2566^2569<u(k) in m>2s>->2    ', &
1019                                    'k ^2236 ^2566^2569<v(k) in m>2s>->2    ', &
1020                                    'k ^2236 ^2566^2569<w(k) in m>2s>->2    ', &
1021                                    'k ^2236 ^2566^2569<^1185(k) in m>2s>->2', &
1022                                    'k ^2236 ^2566^2569<q(k) in m>2s>->2    ' /)
1023
1024    INTEGER ::  klist_x = 0, klist_y = 0, n_sp_x = 0, n_sp_y = 0
1025
1026    INTEGER ::  comp_spectra_level(10) = 999999,                   &
1027                lstyles(10) = (/ 0, 7, 3, 10, 1, 4, 9, 2, 6, 8 /), &
1028                plot_spectra_level(10) = 999999
1029
1030    REAL    ::  time_to_start_sp = 0.0
1031
1032    SAVE
1033
1034 END MODULE spectrum
1035
1036
1037
1038
1039 MODULE statistics
1040
1041!------------------------------------------------------------------------------!
1042! Description:
1043! ------------
1044! Definition of statistical quantities, e.g. global sums
1045!------------------------------------------------------------------------------!
1046
1047    CHARACTER (LEN=40) ::  region(0:9)
1048    INTEGER ::  statistic_regions = 0, var_hom = 80, var_sum = 80, var_ts = 100
1049    INTEGER ::  u_max_ijk(3), v_max_ijk(3), w_max_ijk(3)
1050    LOGICAL ::  flow_statistics_called = .FALSE.
1051    REAL ::     u_max, v_max, w_max
1052    REAL, DIMENSION(:), ALLOCATABLE       ::  sums_divnew_l, sums_divold_l
1053    REAL, DIMENSION(:,:), ALLOCATABLE     ::  sums, sums_wsts_bc_l, ts_value
1054    REAL, DIMENSION(:,:,:), ALLOCATABLE   ::  hom_sum, rmask, spectrum_x, &
1055                                              spectrum_y, sums_l, sums_l_l, &
1056                                              sums_up_fraction_l
1057    REAL, DIMENSION(:,:,:,:), ALLOCATABLE ::  hom
1058
1059    SAVE
1060
1061 END MODULE statistics
1062
1063
1064
1065
1066 MODULE transpose_indices
1067
1068!------------------------------------------------------------------------------!
1069! Description:
1070! ------------
1071! Definition of indices for transposed arrays
1072!------------------------------------------------------------------------------!
1073
1074    INTEGER ::  nxl_y, nxl_yd, nxl_z, nxr_y, nxr_ya, nxr_yd, nxr_yda, nxr_z, &
1075                nxr_za, nyn_x, nyn_xa, nyn_z, nyn_za, nys_x, nys_z, nzb_x,   &
1076                nzb_y, nzb_yd, nzt_x, nzt_xa, nzt_y, nzt_ya, nzt_yd, nzt_yda
1077               
1078
1079    SAVE
1080
1081 END MODULE transpose_indices
Note: See TracBrowser for help on using the repository browser.