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

Last change on this file since 4293 was 4293, checked in by Giersch, 18 months ago

default values of flags indicating dirichlet boundary conditions on lateral model boundaries were set to .FALSE.

  • Property svn:keywords set to Id
File size: 118.1 KB
Line 
1!> @file modules.f90
2!------------------------------------------------------------------------------!
3! This file is part of the PALM model system.
4!
5! PALM is free software: you can redistribute it and/or modify it under the
6! terms of the GNU General Public License as published by the Free Software
7! Foundation, either version 3 of the License, or (at your option) any later
8! version.
9!
10! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
11! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13!
14! You should have received a copy of the GNU General Public License along with
15! PALM. If not, see <http://www.gnu.org/licenses/>.
16!
17! Copyright 1997-2019 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! ------------------
22!
23!
24! Former revisions:
25! -----------------
26! $Id: modules.f90 4293 2019-11-12 14:44:01Z Giersch $
27! Add origin_date_time
28!
29! 4146 2019-08-07 07:47:36Z gronemeier
30! Added rotation_angle
31!
32! 4184 2019-08-23 08:07:40Z oliver.maas
33! changed allocated length of recycling_method_for_thermodynamic_quantities
34! from 20 to 80 characters
35!
36! 4183 2019-08-23 07:33:16Z oliver.maas
37! removed recycle_absolute_quantities and raq
38! added recycling_method_for_thermodynamic_quantities
39!
40! 4182 2019-08-22 15:20:23Z scharf
41! Corrected "Former revisions" section
42!
43! 4173 2019-08-20 12:04:06Z gronemeier
44! add vdi_internal_controls
45!
46! 4172 2019-08-20 11:55:33Z oliver.maas
47! added recycle_absolute_quantities and raq
48!
49! 4168 2019-08-16 13:50:17Z suehring
50! +topo_top_ind
51!
52! 4131 2019-08-02 11:06:18Z monakurppa
53! Add max_pr_salsa to control_parameters. Used in creating profile output for
54! salsa.
55!
56! 4110 2019-07-22 17:05:21Z suehring
57! -advc_flags_1, advc_flags_2
58! +advc_flags_m, advc_flags_s
59!
60! 4109 2019-07-22 17:00:34Z suehring
61! remove old_dt
62!
63! 4079 2019-07-09 18:04:41Z suehring
64! + monotonic_limiter_z
65!
66! 4069 2019-07-01 14:05:51Z Giersch
67! Masked output running index mid has been introduced as a local variable to
68! avoid runtime error (Loop variable has been modified) in time_integration
69!
70! 4017 2019-06-06 12:16:46Z schwenkel
71! increase maximum number of virtual flights
72!
73! 3987 2019-05-22 09:52:13Z kanani
74! Introduce alternative switch for debug output during timestepping
75!
76! 3885 2019-04-11 11:29:34Z kanani
77! Changes related to global restructuring of location messages and introduction
78! of additional debug messages
79!
80! 3871 2019-04-08 14:38:39Z knoop
81! Initialized parameter region
82!
83! 3746 2019-02-16 12:41:27Z gronemeier
84! Removed most_method
85!
86! 3648 2019-01-02 16:35:46Z suehring
87! -surface_data_output +surface_output
88!
89!------------------------------------------------------------------------------!
90! Description:
91! ------------
92!> Definition of global variables
93!------------------------------------------------------------------------------!
94
95
96!------------------------------------------------------------------------------!
97! Description:
98! ------------
99!> Definition of variables for special advection schemes.
100!------------------------------------------------------------------------------!
101 MODULE advection
102 
103    USE kinds
104
105    REAL(wp), DIMENSION(:), ALLOCATABLE ::  aex  !< exponential coefficient for the Bott-Chlond advection scheme
106    REAL(wp), DIMENSION(:), ALLOCATABLE ::  bex  !< exponential coefficient for the Bott-Chlond advection scheme
107    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dex  !< exponential coefficient for the Bott-Chlond advection scheme
108    REAL(wp), DIMENSION(:), ALLOCATABLE ::  eex  !< exponential coefficient for the Bott-Chlond advection scheme
109   
110    SAVE
111
112 END MODULE advection
113
114
115
116!------------------------------------------------------------------------------!
117! Description:
118! ------------
119!> The variable in this module is used by multi_agent_system_mod AND
120!> netcdf_interface_mod. It must be here to avoid circular dependency.
121!> This is a workaround.
122!------------------------------------------------------------------------------!
123 MODULE mas_global_attributes
124 
125    USE kinds
126
127    INTEGER(iwp) ::  dim_size_agtnum  !< size of agent number dimension for netCDF output
128
129    SAVE
130
131 END MODULE mas_global_attributes
132
133
134!------------------------------------------------------------------------------!
135! Description:
136! ------------
137!> Definition of all arrays defined on the computational grid.
138!------------------------------------------------------------------------------!
139 MODULE arrays_3d
140
141    USE kinds
142
143    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_u_m                  !< mean phase velocity at outflow for u-component used in radiation boundary condition
144    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_u_m_l                !< mean phase velocity at outflow for u-component used in radiation boundary condition (local subdomain value)
145    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_v_m                  !< mean phase velocity at outflow for v-component used in radiation boundary condition
146    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_v_m_l                !< mean phase velocity at outflow for v-component used in radiation boundary condition (local subdomain value)
147    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_w_m                  !< mean phase velocity at outflow for w-component used in radiation boundary condition
148    REAL(wp), DIMENSION(:), ALLOCATABLE ::  c_w_m_l                !< mean phase velocity at outflow for w-component used in radiation boundary condition (local subdomain value)
149    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddzu                   !< 1/dzu
150    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddzu_pres              !< modified ddzu for pressure solver
151    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dd2zu                  !< 1/(dzu(k)+dzu(k+1))
152    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dzu                    !< vertical grid size (u-grid)
153    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddzw                   !< 1/dzw
154    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dzw                    !< vertical grid size (w-grid)
155    REAL(wp), DIMENSION(:), ALLOCATABLE ::  hyp                    !< hydrostatic pressure
156    REAL(wp), DIMENSION(:), ALLOCATABLE ::  inflow_damping_factor  !< used for turbulent inflow (non-cyclic boundary conditions)
157    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ptdf_x                 !< damping factor for potential temperature in x-direction
158    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ptdf_y                 !< damping factor for potential temperature in y-direction
159    REAL(wp), DIMENSION(:), ALLOCATABLE ::  pt_init                !< initial profile of potential temperature
160    REAL(wp), DIMENSION(:), ALLOCATABLE ::  q_init                 !< initial profile of total water mixing ratio
161                                                                   !< (or total water content with active cloud physics)
162    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rdf                    !< rayleigh damping factor for velocity components
163    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rdf_sc                 !< rayleigh damping factor for scalar quantities
164    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ref_state              !< reference state of potential temperature
165                                                                   !< (and density in case of ocean simulation)
166    REAL(wp), DIMENSION(:), ALLOCATABLE ::  s_init                 !< initial profile of passive scalar concentration
167    REAL(wp), DIMENSION(:), ALLOCATABLE ::  sa_init                !< initial profile of salinity (ocean)
168    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ug                     !< geostrophic wind component in x-direction
169    REAL(wp), DIMENSION(:), ALLOCATABLE ::  u_init                 !< initial profile of horizontal velocity component u
170    REAL(wp), DIMENSION(:), ALLOCATABLE ::  u_stokes_zu            !< u-component of Stokes drift velocity at zu levels
171    REAL(wp), DIMENSION(:), ALLOCATABLE ::  u_stokes_zw            !< u-component of Stokes drift velocity at zw levels
172    REAL(wp), DIMENSION(:), ALLOCATABLE ::  vg                     !< geostrophic wind component in y-direction
173    REAL(wp), DIMENSION(:), ALLOCATABLE ::  v_init                 !< initial profile of horizontal velocity component v
174    REAL(wp), DIMENSION(:), ALLOCATABLE ::  v_stokes_zu            !< v-component of Stokes drift velocity at zu levels
175    REAL(wp), DIMENSION(:), ALLOCATABLE ::  v_stokes_zw            !< v-component of Stokes drift velocity at zw levels
176    REAL(wp), DIMENSION(:), ALLOCATABLE ::  w_subs                 !< subsidence/ascent velocity
177    REAL(wp), DIMENSION(:), ALLOCATABLE ::  x                      !< horizontal grid coordinate of v-grid (in m)
178    REAL(wp), DIMENSION(:), ALLOCATABLE ::  xu                     !< horizontal grid coordinate of u-grid (in m)
179    REAL(wp), DIMENSION(:), ALLOCATABLE ::  y                      !< horizontal grid coordinate of u-grid (in m)
180    REAL(wp), DIMENSION(:), ALLOCATABLE ::  yv                     !< horizontal grid coordinate of v-grid (in m)
181    REAL(wp), DIMENSION(:), ALLOCATABLE ::  zu                     !< vertical grid coordinate of u-grid (in m)
182    REAL(wp), DIMENSION(:), ALLOCATABLE ::  zw                     !< vertical grid coordinate of w-grid (in m)
183
184    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  c_u                   !< phase speed of u-velocity component
185    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  c_v                   !< phase speed of v-velocity component
186    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  c_w                   !< phase speed of w-velocity component
187    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_diss           !< artificial numerical dissipation flux at south face of grid box - TKE dissipation
188    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_e              !< artificial numerical dissipation flux at south face of grid box - subgrid-scale TKE
189    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_nc             !< artificial numerical dissipation flux at south face of grid box - clouddrop-number concentration   
190    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_nr             !< artificial numerical dissipation flux at south face of grid box - raindrop-number concentration   
191    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_pt             !< artificial numerical dissipation flux at south face of grid box - potential temperature
192    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_q              !< artificial numerical dissipation flux at south face of grid box - mixing ratio
193    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_qc             !< artificial numerical dissipation flux at south face of grid box - cloudwater
194    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_qr             !< artificial numerical dissipation flux at south face of grid box - rainwater
195    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_s              !< artificial numerical dissipation flux at south face of grid box - passive scalar
196    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_sa             !< artificial numerical dissipation flux at south face of grid box - salinity
197    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_u              !< artificial numerical dissipation flux at south face of grid box - u-component
198    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_v              !< artificial numerical dissipation flux at south face of grid box - v-component
199    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  diss_s_w              !< artificial numerical dissipation flux at south face of grid box - w-component
200    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  dzu_mg                !< vertical grid size (u-grid) for multigrid pressure solver
201    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  dzw_mg                !< vertical grid size (w-grid) for multigrid pressure solver
202    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_diss           !< 6th-order advective flux at south face of grid box - TKE dissipation
203    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_e              !< 6th-order advective flux at south face of grid box - subgrid-scale TKE
204    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_nc             !< 6th-order advective flux at south face of grid box - clouddrop-number concentration
205    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_nr             !< 6th-order advective flux at south face of grid box - raindrop-number concentration
206    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_pt             !< 6th-order advective flux at south face of grid box - potential temperature
207    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_q              !< 6th-order advective flux at south face of grid box - mixing ratio
208    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_qc             !< 6th-order advective flux at south face of grid box - cloudwater
209    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_qr             !< 6th-order advective flux at south face of grid box - rainwater
210    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_s              !< 6th-order advective flux at south face of grid box - passive scalar
211    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_sa             !< 6th-order advective flux at south face of grid box - salinity
212    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_u              !< 6th-order advective flux at south face of grid box - u-component
213    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_v              !< 6th-order advective flux at south face of grid box - v-component
214    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  flux_s_w              !< 6th-order advective flux at south face of grid box - w-component
215    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f1_mg                 !< grid factor used in right hand side of Gauss-Seidel equation (multigrid)
216    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f2_mg                 !< grid factor used in right hand side of Gauss-Seidel equation (multigrid)
217    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  f3_mg                 !< grid factor used in right hand side of Gauss-Seidel equation (multigrid)
218    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  mean_inflow_profiles  !< used for turbulent inflow (non-cyclic boundary conditions)
219    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  precipitation_amount  !< precipitation amount due to gravitational settling (bulk microphysics)
220    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  pt_slope_ref          !< potential temperature in rotated coordinate system
221                                                                    !< (in case of sloped surface)
222    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  total_2d_a            !< horizontal array to store the total domain data, used for atmosphere-ocean coupling (atmosphere data)
223    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  total_2d_o            !< horizontal array to store the total domain data, used for atmosphere-ocean coupling (ocean data)
224   
225    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  d           !< divergence
226    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  de_dx       !< gradient of sgs tke in x-direction (lpm)
227    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  de_dy       !< gradient of sgs tke in y-direction (lpm)
228    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  de_dz       !< gradient of sgs tke in z-direction (lpm)
229    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_diss !< artificial numerical dissipation flux at left face of grid box - TKE dissipation
230    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_e    !< artificial numerical dissipation flux at left face of grid box - subgrid-scale TKE
231    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_nc   !< artificial numerical dissipation flux at left face of grid box - clouddrop-number concentration
232    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_nr   !< artificial numerical dissipation flux at left face of grid box - raindrop-number concentration
233    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_pt   !< artificial numerical dissipation flux at left face of grid box - potential temperature
234    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_q    !< artificial numerical dissipation flux at left face of grid box - mixing ratio
235    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_qc   !< artificial numerical dissipation flux at left face of grid box - cloudwater
236    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_qr   !< artificial numerical dissipation flux at left face of grid box - rainwater
237    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_s    !< artificial numerical dissipation flux at left face of grid box - passive scalar
238    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_sa   !< artificial numerical dissipation flux at left face of grid box - salinity
239    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_u    !< artificial numerical dissipation flux at left face of grid box - u-component
240    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_v    !< artificial numerical dissipation flux at left face of grid box - v-component
241    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  diss_l_w    !< artificial numerical dissipation flux at left face of grid box - w-component
242    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_diss !< 6th-order advective flux at south face of grid box - TKE dissipation
243    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_e    !< 6th-order advective flux at south face of grid box - subgrid-scale TKE
244    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_nc   !< 6th-order advective flux at south face of grid box - clouddrop-number concentration
245    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_nr   !< 6th-order advective flux at south face of grid box - raindrop-number concentration
246    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_pt   !< 6th-order advective flux at south face of grid box - potential temperature
247    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_q    !< 6th-order advective flux at south face of grid box - mixing ratio
248    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_qc   !< 6th-order advective flux at south face of grid box - cloudwater
249    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_qr   !< 6th-order advective flux at south face of grid box - rainwater
250    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_s    !< 6th-order advective flux at south face of grid box - passive scalar
251    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_sa   !< 6th-order advective flux at south face of grid box - salinity
252    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_u    !< 6th-order advective flux at south face of grid box - u-component
253    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_v    !< 6th-order advective flux at south face of grid box - v-component
254    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  flux_l_w    !< 6th-order advective flux at south face of grid box - w-component
255    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  kh  !< eddy diffusivity for heat
256    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  km  !< eddy diffusivity for momentum
257    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  prr         !< rain rate
258    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  p_loc       !< local array in multigrid/sor solver containing the pressure which is iteratively advanced in each iteration step
259    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  tend        !< tendency field (time integration)
260    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  tric        !< coefficients of the tridiagonal matrix for solution of the Poisson equation in Fourier space
261    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_l       !< velocity data (u at left boundary) from time level t-dt required for radiation boundary condition
262    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_n       !< velocity data (u at north boundary) from time level t-dt required for radiation boundary condition
263    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_r       !< velocity data (u at right boundary) from time level t-dt required for radiation boundary condition
264    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  u_m_s       !< velocity data (u at south boundary) from time level t-dt required for radiation boundary condition
265    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_l       !< velocity data (v at left boundary) from time level t-dt required for radiation boundary condition
266    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_n       !< velocity data (v at north boundary) from time level t-dt required for radiation boundary condition
267    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_r       !< velocity data (v at right boundary) from time level t-dt required for radiation boundary condition
268    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  v_m_s       !< velocity data (v at south boundary) from time level t-dt required for radiation boundary condition
269    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_l       !< velocity data (w at left boundary) from time level t-dt required for radiation boundary condition
270    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_n       !< velocity data (w at north boundary) from time level t-dt required for radiation boundary condition
271    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_r       !< velocity data (w at right boundary) from time level t-dt required for radiation boundary condition
272    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  w_m_s       !< velocity data (w at south boundary) from time level t-dt required for radiation boundary condition
273
274    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_1  !< pointer for swapping of timelevels for respective quantity
275    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_2  !< pointer for swapping of timelevels for respective quantity
276    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_3  !< pointer for swapping of timelevels for respective quantity
277    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_1     !< pointer for swapping of timelevels for respective quantity
278    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_2     !< pointer for swapping of timelevels for respective quantity
279    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_3     !< pointer for swapping of timelevels for respective quantity
280    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  p       !< pointer: perturbation pressure
281    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  prho_1  !< pointer for swapping of timelevels for respective quantity
282    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_1    !< pointer for swapping of timelevels for respective quantity
283    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_2    !< pointer for swapping of timelevels for respective quantity
284    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_3    !< pointer for swapping of timelevels for respective quantity
285    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_1    !< pointer for swapping of timelevels for respective quantity
286    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_2    !< pointer for swapping of timelevels for respective quantity
287    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_3    !< pointer for swapping of timelevels for respective quantity
288    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_1    !< pointer for swapping of timelevels for respective quantity
289    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_2    !< pointer for swapping of timelevels for respective quantity
290    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_3    !< pointer for swapping of timelevels for respective quantity
291    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_1     !< pointer for swapping of timelevels for respective quantity
292    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_2     !< pointer for swapping of timelevels for respective quantity
293    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_3     !< pointer for swapping of timelevels for respective quantity
294    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_1    !< pointer for swapping of timelevels for respective quantity
295    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_2    !< pointer for swapping of timelevels for respective quantity
296    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_3    !< pointer for swapping of timelevels for respective quantity
297    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_v    !< pointer: volume of liquid water
298    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_vp   !< pointer: liquid water weighting factor
299    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_1    !< pointer for swapping of timelevels for respective quantity
300    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_2    !< pointer for swapping of timelevels for respective quantity
301    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_1    !< pointer for swapping of timelevels for respective quantity
302    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_2    !< pointer for swapping of timelevels for respective quantity
303    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_3    !< pointer for swapping of timelevels for respective quantity
304    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  rho_1   !< pointer for swapping of timelevels for respective quantity
305    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_1     !< pointer for swapping of timelevels for respective quantity
306    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_2     !< pointer for swapping of timelevels for respective quantity
307    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_3     !< pointer for swapping of timelevels for respective quantity
308    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_1    !< pointer for swapping of timelevels for respective quantity
309    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_2    !< pointer for swapping of timelevels for respective quantity
310    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_3    !< pointer for swapping of timelevels for respective quantity
311    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_1     !< pointer for swapping of timelevels for respective quantity
312    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_2     !< pointer for swapping of timelevels for respective quantity
313    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_3     !< pointer for swapping of timelevels for respective quantity
314    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_1     !< pointer for swapping of timelevels for respective quantity
315    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_2     !< pointer for swapping of timelevels for respective quantity
316    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_3     !< pointer for swapping of timelevels for respective quantity
317    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vpt_1   !< pointer for swapping of timelevels for respective quantity
318    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_1     !< pointer for swapping of timelevels for respective quantity
319    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_2     !< pointer for swapping of timelevels for respective quantity
320    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_3     !< pointer for swapping of timelevels for respective quantity
321
322    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  diss       !< pointer: TKE dissipation
323    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  diss_p     !< pointer: prognostic value of TKE dissipation
324    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  e          !< pointer: subgrid-scale turbulence kinetic energy (sgs tke)
325    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  e_p        !< pointer: prognostic value of sgs tke
326    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nc         !< pointer: cloud drop number density
327    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nc_p       !< pointer: prognostic value of cloud drop number density
328    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nr         !< pointer: rain drop number density
329    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  nr_p       !< pointer: prognostic value of rain drop number density
330    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  prho       !< pointer: potential density
331    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  pt         !< pointer: potential temperature
332    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  pt_p       !< pointer: prognostic value of potential temperature
333    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  q          !< pointer: mixing ratio
334    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  q_p        !< pointer: prognostic value of mixing ratio
335    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qc         !< pointer: cloud water content
336    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qc_p       !< pointer: cloud water content
337    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  ql         !< pointer: liquid water content
338    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  ql_c       !< pointer: change in liquid water content due to
339                                                                   !< condensation/evaporation during last time step
340    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qr         !< pointer: rain water content
341    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  qr_p       !< pointer: prognostic value of rain water content
342    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  rho_ocean  !< pointer: density of ocean
343    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  s          !< pointer: passive scalar
344    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  s_p        !< pointer: prognostic value of passive scalar
345    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  sa         !< pointer: ocean salinity
346    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  sa_p       !< pointer: prognostic value of ocean salinity
347    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tdiss_m    !< pointer: weighted tendency of diss for previous sub-timestep (Runge-Kutta)
348    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  te_m       !< pointer: weighted tendency of e for previous sub-timestep (Runge-Kutta)
349    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tnc_m      !< pointer: weighted tendency of nc for previous sub-timestep (Runge-Kutta)
350    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tnr_m      !< pointer: weighted tendency of nr for previous sub-timestep (Runge-Kutta)
351    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tpt_m      !< pointer: weighted tendency of pt for previous sub-timestep (Runge-Kutta)
352    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tq_m       !< pointer: weighted tendency of q for previous sub-timestep (Runge-Kutta)
353    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tqc_m      !< pointer: weighted tendency of qc for previous sub-timestep (Runge-Kutta)
354    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tqr_m      !< pointer: weighted tendency of qr for previous sub-timestep (Runge-Kutta)
355    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  ts_m       !< pointer: weighted tendency of s for previous sub-timestep (Runge-Kutta)
356    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tsa_m      !< pointer: weighted tendency of sa for previous sub-timestep (Runge-Kutta)
357    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tu_m       !< pointer: weighted tendency of u for previous sub-timestep (Runge-Kutta)
358    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tv_m       !< pointer: weighted tendency of v for previous sub-timestep (Runge-Kutta)
359    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  tw_m       !< pointer: weighted tendency of w for previous sub-timestep (Runge-Kutta)
360    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  u          !< pointer: horizontal velocity component u (x-direction)
361    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  u_p        !< pointer: prognostic value of u
362    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  v          !< pointer: horizontal velocity component v (y-direction)
363    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  v_p        !< pointer: prognostic value of v
364    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  vpt        !< pointer: virtual potential temperature
365    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  w          !< pointer: vertical velocity component w (z-direction)
366    REAL(wp), DIMENSION(:,:,:), POINTER, CONTIGUOUS ::  w_p        !< pointer: prognostic value of w
367
368    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  tri    !<  array to hold the tridiagonal matrix for solution of the Poisson equation in Fourier space (4th dimension for threads)
369
370    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rho_air      !< air density profile on the uv grid
371    REAL(wp), DIMENSION(:), ALLOCATABLE ::  rho_air_zw   !< air density profile on the w grid
372    REAL(wp), DIMENSION(:), ALLOCATABLE ::  drho_air     !< inverse air density profile on the uv grid
373    REAL(wp), DIMENSION(:), ALLOCATABLE ::  drho_air_zw  !< inverse air density profile on the w grid
374
375    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  rho_air_mg     !< air density profiles on the uv grid for multigrid
376    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  rho_air_zw_mg  !< air density profiles on the w grid for multigrid
377
378    REAL(wp), DIMENSION(:), ALLOCATABLE ::  heatflux_input_conversion       !< conversion factor array for heatflux input
379    REAL(wp), DIMENSION(:), ALLOCATABLE ::  waterflux_input_conversion      !< conversion factor array for waterflux input
380    REAL(wp), DIMENSION(:), ALLOCATABLE ::  momentumflux_input_conversion   !< conversion factor array for momentumflux input
381    REAL(wp), DIMENSION(:), ALLOCATABLE ::  heatflux_output_conversion      !< conversion factor array for heatflux output
382    REAL(wp), DIMENSION(:), ALLOCATABLE ::  waterflux_output_conversion     !< conversion factor array for waterflux output
383    REAL(wp), DIMENSION(:), ALLOCATABLE ::  momentumflux_output_conversion  !< conversion factor array for momentumflux output
384
385    REAL(wp), DIMENSION(:), ALLOCATABLE ::  hyrho   !< density of air calculated with hydrostatic pressure
386    REAL(wp), DIMENSION(:), ALLOCATABLE ::  exner   !< ratio of actual and potential temperature
387    REAL(wp), DIMENSION(:), ALLOCATABLE ::  d_exner !< ratio of potential and actual temperature
388
389    SAVE
390
391 END MODULE arrays_3d
392
393
394!------------------------------------------------------------------------------!
395! Description:
396! ------------
397!> Definition of variables needed for time-averaging of 2d/3d data.
398!------------------------------------------------------------------------------!
399 MODULE averaging
400 
401    USE kinds
402
403    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ghf_av                 !< avg. ground heat flux
404    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  lwp_av                 !< avg. liquid water path
405    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ol_av                  !< avg. Obukhov length
406    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  pt_2m_av               !< avg. 2m- air potential temperature
407    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  qsws_av                !< avg. surface moisture flux
408    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  r_a_av                 !< avg. resistance
409    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ssws_av                !< avg. surface scalar flux
410    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  shf_av                 !< avg. surface heat flux
411    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  tsurf_av               !< avg. surface temperature
412    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ts_av                  !< avg. characteristic temperature scale
413    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  us_av                  !< avg. friction velocity
414    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  z0_av                  !< avg. roughness length for momentum
415    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  z0h_av                 !< avg. roughness length for heat
416    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  z0q_av                 !< avg. roughness length for moisture
417
418    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  diss_av       !< avg. tke dissipation rate
419    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  e_av          !< avg. subgrid-scale tke
420    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  kh_av         !< avg. eddy diffusivity for heat
421    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  km_av         !< avg. eddy diffusivity for momentum
422    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  lpt_av        !< avg. liquid water potential temperature
423    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nc_av         !< avg. cloud drop number density
424    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  nr_av         !< avg. rain drop number density
425    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  p_av          !< avg. perturbation pressure
426    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pc_av         !< avg. particle/droplet concentration
427    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pr_av         !< avg. particle/droplet radius
428    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  prr_av        !< avg. precipitation rate
429    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  pt_av         !< avg. potential temperature
430    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  q_av          !< avg. mixing ratio
431                                                                      !< (or total water content with active cloud physics)
432    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qc_av         !< avg. cloud water content
433    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_av         !< avg. liquid water content
434    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_c_av       !< avg. change in liquid water content due to
435                                                                      !< condensation/evaporation during last time step
436    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_v_av       !< avg. volume of liquid water
437    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ql_vp_av      !< avg. liquid water weighting factor
438    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qr_av         !< avg. rain water content
439    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  qv_av         !< avg. water vapor content (mixing ratio)
440    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  rho_ocean_av  !< avg. ocean density
441    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  s_av          !< avg. passive scalar
442    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sa_av         !< avg. salinity
443    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  u_av          !< avg. horizontal velocity component u
444    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  v_av          !< avg. horizontal velocity component v
445    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  vpt_av        !< avg. virtual potential temperature
446    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  w_av          !< avg. vertical velocity component
447 
448 END MODULE averaging
449
450 
451!------------------------------------------------------------------------------!
452! Description:
453! ------------
454!> Definition of parameters for program control
455!------------------------------------------------------------------------------!
456 MODULE control_parameters
457
458    USE kinds
459
460    TYPE file_status
461       LOGICAL ::  opened         !< file is currently open
462       LOGICAL ::  opened_before  !< file is currently closed, but has been openend before
463    END TYPE file_status
464   
465    INTEGER, PARAMETER      ::  mask_xyz_dimension = 100  !< limit of mask dimensions (100 points in each direction)
466    INTEGER, PARAMETER      ::  max_masks = 50            !< maximum number of masks
467    INTEGER(iwp), PARAMETER ::  varnamelength = 30        !< length of output variable names
468
469    TYPE(file_status), DIMENSION(200+2*max_masks) ::                &  !< indicates if file is open or if it has been opened before
470                             openfile = file_status(.FALSE.,.FALSE.)
471
472    CHARACTER (LEN=1)    ::  cycle_mg = 'w'                               !< namelist parameter (see documentation)
473    CHARACTER (LEN=1)    ::  timestep_reason = ' '                        !< 'A'dvection or 'D'iffusion criterion, written to RUN_CONTROL file
474    CHARACTER (LEN=8)    ::  coupling_char = ''                           !< appended to filenames in coupled or nested runs ('_O': ocean PE,
475                                                                          !< '_NV': vertically nested atmosphere PE, '_N##': PE of nested domain ##
476    CHARACTER (LEN=23)   ::  origin_date_time = '2019-06-21 12:00:00 +00' !< date and time to be simulated
477    CHARACTER (LEN=10)   ::  run_date = ' '                               !< date of simulation run
478    CHARACTER (LEN=8)    ::  run_time = ' '                               !< time of simulation run
479    CHARACTER (LEN=5)    ::  run_zone = ' '                               !< time zone of simulation run
480    CHARACTER (LEN=9)    ::  simulated_time_chr                           !< simulated time, printed to RUN_CONTROL file
481    CHARACTER (LEN=11)   ::  topography_grid_convention = ' '             !< namelist parameter
482    CHARACTER (LEN=12)   ::  version = ' '                                !< PALM version number
483    CHARACTER (LEN=12)   ::  revision = ' '                               !< PALM revision number
484    CHARACTER (LEN=12)   ::  user_interface_current_revision = ' '        !< revision number of the currently used user-interface (must match user_interface_required_revision)
485    CHARACTER (LEN=12)   ::  user_interface_required_revision = ' '       !< required user-interface revision number
486    CHARACTER (LEN=16)   ::  conserve_volume_flow_mode = 'default'        !< namelist parameter
487    CHARACTER (LEN=16)   ::  loop_optimization = 'cache'                  !< namelist parameter
488    CHARACTER (LEN=16)   ::  momentum_advec = 'ws-scheme'                 !< namelist parameter
489    CHARACTER (LEN=16)   ::  psolver = 'poisfft'                          !< namelist parameter
490    CHARACTER (LEN=16)   ::  scalar_advec = 'ws-scheme'                   !< namelist parameter
491    CHARACTER (LEN=20)   ::  approximation = 'boussinesq'                 !< namelist parameter
492    CHARACTER (LEN=40)   ::  flux_input_mode = 'approximation-specific'   !< type of flux input: dynamic or kinematic
493    CHARACTER (LEN=40)   ::  flux_output_mode = 'approximation-specific'  !< type of flux output: dynamic or kinematic
494    CHARACTER (LEN=20)   ::  bc_e_b = 'neumann'                           !< namelist parameter
495    CHARACTER (LEN=20)   ::  bc_lr = 'cyclic'                             !< namelist parameter
496    CHARACTER (LEN=20)   ::  bc_ns = 'cyclic'                             !< namelist parameter
497    CHARACTER (LEN=20)   ::  bc_p_b = 'neumann'                           !< namelist parameter
498    CHARACTER (LEN=20)   ::  bc_p_t = 'dirichlet'                         !< namelist parameter
499    CHARACTER (LEN=20)   ::  bc_pt_b = 'dirichlet'                        !< namelist parameter
500    CHARACTER (LEN=20)   ::  bc_pt_t = 'initial_gradient'                 !< namelist parameter
501    CHARACTER (LEN=20)   ::  bc_q_b = 'dirichlet'                         !< namelist parameter
502    CHARACTER (LEN=20)   ::  bc_q_t = 'neumann'                           !< namelist parameter
503    CHARACTER (LEN=20)   ::  bc_s_b = 'dirichlet'                         !< namelist parameter
504    CHARACTER (LEN=20)   ::  bc_s_t = 'initial_gradient'                  !< namelist parameter
505    CHARACTER (LEN=20)   ::  bc_uv_b = 'dirichlet'                        !< namelist parameter
506    CHARACTER (LEN=20)   ::  bc_uv_t = 'dirichlet'                        !< namelist parameter
507    CHARACTER (LEN=20)   ::  coupling_mode = 'uncoupled'                  !< coupling mode for atmosphere-ocean coupling 
508    CHARACTER (LEN=20)   ::  coupling_mode_remote = 'uncoupled'           !< coupling mode of the remote process in case of coupled atmosphere-ocean runs
509    CHARACTER (LEN=20)   ::  dissipation_1d = 'detering'                  !< namelist parameter
510    CHARACTER (LEN=20)   ::  fft_method = 'temperton-algorithm'           !< namelist parameter
511    CHARACTER (LEN=20)   ::  mixing_length_1d = 'blackadar'               !< namelist parameter
512    CHARACTER (LEN=20)   ::  random_generator = 'random-parallel'         !< namelist parameter
513    CHARACTER (LEN=80)   ::  recycling_method_for_thermodynamic_quantities = 'turbulent_fluctuation'        !< namelist parameter
514    CHARACTER (LEN=20)   ::  reference_state = 'initial_profile'          !< namelist parameter 
515    CHARACTER (LEN=20)   ::  timestep_scheme = 'runge-kutta-3'            !< namelist parameter       
516    CHARACTER (LEN=20)   ::  turbulence_closure = 'Moeng_Wyngaard'        !< namelist parameter
517    CHARACTER (LEN=40)   ::  topography = 'flat'                          !< namelist parameter
518    CHARACTER (LEN=64)   ::  host = '????'                                !< configuration identifier as given by palmrun option -c, ENVPAR namelist parameter provided by palmrun
519    CHARACTER (LEN=80)   ::  log_message                                  !< user-defined message for debugging (sse data_log.f90)
520    CHARACTER (LEN=80)   ::  run_identifier                               !< run identifier as given by palmrun option -r, ENVPAR namelist parameter provided by palmrun
521    CHARACTER (LEN=100)  ::  initializing_actions = ' '                   !< namelist parameter
522    CHARACTER (LEN=100)  ::  restart_string = ' '                         !< for storing strings in case of writing/reading restart data
523    CHARACTER (LEN=210)  ::  run_description_header                       !< string containing diverse run informations as run identifier, coupling mode, host, ensemble number, run date and time
524    CHARACTER (LEN=1000) ::  debug_string = ' '                           !<.....
525    CHARACTER (LEN=1000) ::  message_string = ' '                         !< dynamic string for error message output
526
527    CHARACTER (LEN=varnamelength), DIMENSION(500) ::  data_output = ' '       !< namelist parameter
528    CHARACTER (LEN=varnamelength), DIMENSION(500) ::  data_output_user = ' '  !< namelist parameter
529    CHARACTER (LEN=varnamelength), DIMENSION(500) ::  doav = ' '              !< label array for multi-dimensional,
530                                                                              !< averaged output quantities
531                                           
532    CHARACTER (LEN=varnamelength), DIMENSION(max_masks,100) ::  data_output_masks = ' '       !< namelist parameter
533    CHARACTER (LEN=varnamelength), DIMENSION(max_masks,100) ::  data_output_masks_user = ' '  !< namelist parameter
534
535    CHARACTER (LEN=varnamelength), DIMENSION(300) ::  data_output_pr = ' '  !< namelist parameter
536   
537    CHARACTER (LEN=varnamelength), DIMENSION(200) ::  data_output_pr_user = ' '  !< namelist parameter
538   
539    CHARACTER (LEN=varnamelength), DIMENSION(max_masks,0:1,100) ::  domask = ' ' !< label array for multi-dimensional,
540                                                                                 !< masked output quantities
541   
542    CHARACTER (LEN=varnamelength), DIMENSION(0:1,500) ::  do2d = ' '  !< label array for 2d output quantities
543    CHARACTER (LEN=varnamelength), DIMENSION(0:1,500) ::  do3d = ' '  !< label array for 3d output quantities
544
545    INTEGER(iwp), PARAMETER ::  fl_max = 500     !< maximum number of virtual-flight measurements
546    INTEGER(iwp), PARAMETER ::  var_fl_max = 20  !< maximum number of different sampling variables in virtual flight measurements
547   
548    INTEGER(iwp) ::  abort_mode = 1                    !< abort condition (nested runs)
549    INTEGER(iwp) ::  agt_time_count = 0                !< number of output intervals for agent data output
550    INTEGER(iwp) ::  average_count_pr = 0              !< number of samples in vertical-profile output
551    INTEGER(iwp) ::  average_count_3d = 0              !< number of samples in 3d output
552    INTEGER(iwp) ::  current_timestep_number = 0       !< current timestep number, printed to RUN_CONTROL file
553    INTEGER(iwp) ::  coupling_topology = 0             !< switch for atmosphere-ocean-coupling: 0: same number of grid points and PEs along x and y in atmosphere and ocean, otherwise 1
554    INTEGER(iwp) ::  dist_range = 0                    !< switch for steering the horizontal disturbance range, 1: inflow disturbances in case of non-cyclic horizontal BC, 0: otherwise
555    INTEGER(iwp) ::  disturbance_level_ind_b           !< lowest grid index where flow disturbance is applied
556    INTEGER(iwp) ::  disturbance_level_ind_t           !< highest grid index where flow disturbance is applied
557    INTEGER(iwp) ::  doav_n = 0                        !< number of 2d/3d output quantities subject to time averaging
558    INTEGER(iwp) ::  dopr_n = 0                        !< number of profile output quantities subject to time averaging
559    INTEGER(iwp) ::  dopr_time_count = 0               !< number of output intervals for profile output
560    INTEGER(iwp) ::  dopts_time_count = 0              !< number of output intervals for particle data timeseries
561    INTEGER(iwp) ::  dots_time_count = 0               !< number of output intervals for timeseries output
562    INTEGER(iwp) ::  dp_level_ind_b = 0                !< lowest grid index for external pressure gradient forcing
563    INTEGER(iwp) ::  ensemble_member_nr = 0            !< namelist parameter
564    INTEGER(iwp) ::  gamma_mg                          !< switch for steering the multigrid cycle: 1: v-cycle, 2: w-cycle
565    INTEGER(iwp) ::  gathered_size                     !< number of total domain grid points of the grid level which is gathered on PE0 (multigrid solver)
566    INTEGER(iwp) ::  grid_level                        !< current grid level handled in the multigrid solver
567    INTEGER(iwp) ::  ibc_e_b                           !< integer flag for bc_e_b
568    INTEGER(iwp) ::  ibc_p_b                           !< integer flag for bc_p_b
569    INTEGER(iwp) ::  ibc_p_t                           !< integer flag for bc_p_t
570    INTEGER(iwp) ::  ibc_pt_b                          !< integer flag for bc_pt_b
571    INTEGER(iwp) ::  ibc_pt_t                          !< integer flag for bc_pt_t
572    INTEGER(iwp) ::  ibc_q_b                           !< integer flag for bc_q_b
573    INTEGER(iwp) ::  ibc_q_t                           !< integer flag for bc_q_t
574    INTEGER(iwp) ::  ibc_s_b                           !< integer flag for bc_s_b
575    INTEGER(iwp) ::  ibc_s_t                           !< integer flag for bc_s_t
576    INTEGER(iwp) ::  ibc_uv_b                          !< integer flag for bc_uv_b
577    INTEGER(iwp) ::  ibc_uv_t                          !< integer flag for bc_uv_t
578    INTEGER(iwp) ::  inflow_disturbance_begin = -1     !< namelist parameter
579    INTEGER(iwp) ::  inflow_disturbance_end = -1       !< namelist parameter
580    INTEGER(iwp) ::  intermediate_timestep_count       !< number of current Runge-Kutta substep
581    INTEGER(iwp) ::  intermediate_timestep_count_max   !< maximum number of Runge-Kutta substeps
582    INTEGER(iwp) ::  io_group = 0                      !< I/O group to which the PE belongs (= #PE / io_blocks)
583    INTEGER(iwp) ::  io_blocks = 1                     !< number of blocks for which I/O is done in sequence (total number of PEs / maximum_parallel_io_streams)
584    INTEGER(iwp) ::  iran = -1234567                   !< integer random number used for flow disturbances
585    INTEGER(iwp) ::  length = 0                        !< integer that specifies the length of a string in case of writing/reading restart data
586    INTEGER(iwp) ::  masks = 0                         !< counter for number of masked output quantities
587    INTEGER(iwp) ::  maximum_grid_level                !< number of grid levels that the multigrid solver is using
588    INTEGER(iwp) ::  maximum_parallel_io_streams = -1  !< maximum number of parallel io streams that the underlying parallel file system allows, set with palmrun option -w, ENVPAR namelist parameter, provided by palmrun
589    INTEGER(iwp) ::  max_pr_salsa = 0                  !< number of salsa profiles (must not change within a job chain)
590    INTEGER(iwp) ::  max_pr_user = 0                   !< number of user-defined profiles (must not change within a job chain)
591    INTEGER(iwp) ::  max_pr_user_tmp = 0               !< number of user-defined profiles that is temporary stored to check it against max_pr_user in case of restarts
592    INTEGER(iwp) ::  mgcycles = 0                      !< number of multigrid cycles that the multigrid solver has actually carried out
593    INTEGER(iwp) ::  mg_cycles = 4                     !< namelist parameter
594    INTEGER(iwp) ::  mg_switch_to_pe0_level = -1       !< namelist parameter
595    INTEGER(iwp) ::  ngsrb = 2                         !< namelist parameter
596    INTEGER(iwp) ::  nr_timesteps_this_run = 0         !< number of timesteps (cpu time measurements)
597    INTEGER(iwp) ::  nsor = 20                         !< namelist parameter
598    INTEGER(iwp) ::  nsor_ini = 100                    !< namelist parameter
599    INTEGER(iwp) ::  n_sor                             !< number of iterations to be used in SOR-scheme
600    INTEGER(iwp) ::  normalizing_region = 0            !< namelist parameter
601    INTEGER(iwp) ::  num_mean_inflow_profiles = 7      !< number of mean inflow profiles in case of turbulent inflow
602    INTEGER(iwp) ::  num_leg=0                         !< number of different legs in virtual flight measurements
603    INTEGER(iwp) ::  num_var_fl                        !< number of sampling/output variables in virtual flight measurements
604    INTEGER(iwp) ::  num_var_fl_user=0                 !< number of user-defined sampling/output variables in virtual flight measurements
605    INTEGER(iwp) ::  number_stretch_level_start        !< number of user-specified start levels for stretching
606    INTEGER(iwp) ::  number_stretch_level_end          !< number of user-specified end levels for stretching
607    INTEGER(iwp) ::  nz_do3d = -9999                   !< namelist parameter
608    INTEGER(iwp) ::  prt_time_count = 0                !< number of output intervals for particle data output
609    INTEGER(iwp) ::  recycling_plane                   !< position of recycling plane along x (in grid points) in case of turbulence recycling
610    INTEGER(iwp) ::  runnr = 0                         !< number of run in job chain
611    INTEGER(iwp) ::  subdomain_size                    !< number of grid points in (3d) subdomain including ghost points
612    INTEGER(iwp) ::  terminate_coupled = 0             !< switch for steering termination in case of coupled runs
613    INTEGER(iwp) ::  terminate_coupled_remote = 0      !< switch for steering termination in case of coupled runs (condition of the remote model)
614    INTEGER(iwp) ::  timestep_count = 0                !< number of timesteps carried out since the beginning of the initial run
615    INTEGER(iwp) ::  y_shift = 0                       !< namelist parameter
616   
617    INTEGER(iwp) ::  dist_nxl(0:1)                               !< left boundary of disturbance region
618    INTEGER(iwp) ::  dist_nxr(0:1)                               !< right boundary of disturbance region
619    INTEGER(iwp) ::  dist_nyn(0:1)                               !< north boundary of disturbance region
620    INTEGER(iwp) ::  dist_nys(0:1)                               !< south boundary of disturbance region
621    INTEGER(iwp) ::  do2d_no(0:1) = 0                            !< number of 2d output quantities
622    INTEGER(iwp) ::  do2d_xy_time_count(0:1) = 0                 !< number of output intervals for 2d data (xy)
623    INTEGER(iwp) ::  do2d_xz_time_count(0:1) = 0                 !< number of output intervals for 2d data (xz)
624    INTEGER(iwp) ::  do2d_yz_time_count(0:1) = 0                 !< number of output intervals for 2d data (yz)
625    INTEGER(iwp) ::  do3d_no(0:1) = 0                            !< number of 3d output quantities
626    INTEGER(iwp) ::  do3d_time_count(0:1) = 0                    !< number of output intervals for 3d data
627    INTEGER(iwp) ::  domask_no(max_masks,0:1) = 0                !< number of masked output quantities
628    INTEGER(iwp) ::  domask_time_count(max_masks,0:1)            !< number of output intervals for masked data
629    INTEGER(iwp) ::  dz_stretch_level_end_index(9)               !< vertical grid level index until which the vertical grid spacing is stretched
630    INTEGER(iwp) ::  dz_stretch_level_start_index(9)             !< vertical grid level index above which the vertical grid spacing is stretched
631    INTEGER(iwp) ::  mask_size(max_masks,3) = -1                 !< size of mask array per mask and dimension (for netcdf output)
632    INTEGER(iwp) ::  mask_size_l(max_masks,3) = -1               !< subdomain size of mask array per mask and dimension (for netcdf output)
633    INTEGER(iwp) ::  mask_start_l(max_masks,3) = -1              !< subdomain start index of mask array (for netcdf output)
634    INTEGER(iwp) ::  pt_vertical_gradient_level_ind(10) = -9999  !< grid index values of pt_vertical_gradient_level(s)
635    INTEGER(iwp) ::  q_vertical_gradient_level_ind(10) = -9999   !< grid index values of q_vertical_gradient_level(s)
636    INTEGER(iwp) ::  s_vertical_gradient_level_ind(10) = -9999   !< grid index values of s_vertical_gradient_level(s)   
637    INTEGER(iwp) ::  section(100,3)                              !< collective array for section_xy/xz/yz
638    INTEGER(iwp) ::  section_xy(100) = -9999                     !< namelist parameter
639    INTEGER(iwp) ::  section_xz(100) = -9999                     !< namelist parameter
640    INTEGER(iwp) ::  section_yz(100) = -9999                     !< namelist parameter
641    INTEGER(iwp) ::  ug_vertical_gradient_level_ind(10) = -9999  !< grid index values of ug_vertical_gradient_level(s)
642    INTEGER(iwp) ::  vg_vertical_gradient_level_ind(10) = -9999  !< grid index values of vg_vertical_gradient_level(s)
643    INTEGER(iwp) ::  subs_vertical_gradient_level_i(10) = -9999  !< grid index values of subs_vertical_gradient_level(s)
644
645    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_2d_xy  !< number of output intervals for 2d data (xy)
646    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_2d_xz  !< number of output intervals for 2d data (xz)
647    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_2d_yz  !< number of output intervals for 2d data (yz)
648    INTEGER(iwp), DIMENSION(0:1) ::  ntdim_3d     !< number of output intervals for 3d data
649
650    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  grid_level_count  !< internal switch for steering the multigrid v- and w-cycles
651
652    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_i         !< subdomain grid index of masked output point on x-dimension
653    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_j         !< subdomain grid index of masked output point on y-dimension
654    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_k         !< subdomain grid index of masked output point on z-dimension
655    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_i_global  !< global grid index of masked output point on x-dimension
656    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_j_global  !< global grid index of masked output point on y-dimension
657    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_k_global  !< global grid index of masked output point on z-dimension
658
659    INTEGER(iwp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_k_over_surface = -1  !< namelist parameter, k index of height over surface
660
661    LOGICAL ::  agent_time_unlimited = .FALSE.                   !< namelist parameter
662    LOGICAL ::  air_chemistry = .FALSE.                          !< chemistry model switch
663    LOGICAL ::  bc_dirichlet_l = .FALSE.                         !< flag indicating dirichlet boundary condition on left model boundary
664    LOGICAL ::  bc_dirichlet_n = .FALSE.                         !< flag indicating dirichlet boundary condition on north model boundary
665    LOGICAL ::  bc_dirichlet_r = .FALSE.                         !< flag indicating dirichlet boundary condition on right model boundary
666    LOGICAL ::  bc_dirichlet_s = .FALSE.                         !< flag indicating dirichlet boundary condition on south model boundary
667    LOGICAL ::  bc_lr_cyc =.TRUE.                                !< left-right boundary condition cyclic?
668    LOGICAL ::  bc_lr_dirrad = .FALSE.                           !< left-right boundary condition dirichlet/radiation?
669    LOGICAL ::  bc_lr_raddir = .FALSE.                           !< left-right boundary condition radiation/dirichlet?
670    LOGICAL ::  bc_ns_cyc = .TRUE.                               !< north-south boundary condition cyclic?
671    LOGICAL ::  bc_ns_dirrad = .FALSE.                           !< north-south boundary condition dirichlet/radiation?
672    LOGICAL ::  bc_ns_raddir = .FALSE.                           !< north-south boundary condition radiation/dirichlet?
673    LOGICAL ::  bc_radiation_l = .FALSE.                         !< radiation boundary condition for outflow at left domain boundary
674    LOGICAL ::  bc_radiation_n = .FALSE.                         !< radiation boundary condition for outflow at north domain boundary
675    LOGICAL ::  bc_radiation_r = .FALSE.                         !< radiation boundary condition for outflow at right domain boundary
676    LOGICAL ::  bc_radiation_s = .FALSE.                         !< radiation boundary condition for outflow at south domain boundary
677    LOGICAL ::  biometeorology = .FALSE.                         !< biometeorology module switch
678    LOGICAL ::  calc_soil_moisture_during_spinup = .FALSE.       !< namelist parameter
679    LOGICAL ::  call_psolver_at_all_substeps = .TRUE.            !< namelist parameter
680    LOGICAL ::  child_domain  = .FALSE.                          !< flag indicating that model is nested in a parent domain
681    LOGICAL ::  cloud_droplets = .FALSE.                         !< namelist parameter
682    LOGICAL ::  complex_terrain = .FALSE.                        !< namelist parameter
683    LOGICAL ::  conserve_volume_flow = .FALSE.                   !< namelist parameter
684    LOGICAL ::  constant_diffusion = .FALSE.                     !< diffusion coefficient constant?
685    LOGICAL ::  constant_flux_layer = .TRUE.                     !< namelist parameter
686    LOGICAL ::  constant_heatflux = .TRUE.                       !< heat flux at all surfaces constant?
687    LOGICAL ::  constant_top_heatflux = .TRUE.                   !< heat flux at domain top constant?
688    LOGICAL ::  constant_top_momentumflux = .FALSE.              !< momentum flux at domain topconstant?
689    LOGICAL ::  constant_top_salinityflux = .TRUE.               !< constant salinity flux at ocean surface
690    LOGICAL ::  constant_top_scalarflux = .TRUE.                 !< passive-scalar flux at domain top constant?
691    LOGICAL ::  constant_scalarflux = .TRUE.                     !< passive-scalar flux at surfaces constant?
692    LOGICAL ::  constant_waterflux = .TRUE.                      !< water flux at all surfaces constant?
693    LOGICAL ::  create_disturbances = .TRUE.                     !< namelist parameter
694    LOGICAL ::  data_output_during_spinup = .FALSE.              !< namelist parameter
695    LOGICAL ::  data_output_2d_on_each_pe = .TRUE.               !< namelist parameter
696    LOGICAL ::  debug_output = .FALSE.                           !< namelist parameter
697    LOGICAL ::  debug_output_timestep = .FALSE.                  !< namelist parameter
698    LOGICAL ::  disturbance_created = .FALSE.                    !< flow disturbance imposed?
699    LOGICAL ::  do2d_at_begin = .FALSE.                          !< namelist parameter
700    LOGICAL ::  do3d_at_begin = .FALSE.                          !< namelist parameter
701    LOGICAL ::  do_output_at_2m = .FALSE.                        !< flag for activating calculation of potential temperature at z = 2 m
702    LOGICAL ::  do_sum = .FALSE.                                 !< contribute to time average of profile data?
703    LOGICAL ::  dp_external = .FALSE.                            !< namelist parameter
704    LOGICAL ::  dp_smooth = .FALSE.                              !< namelist parameter
705    LOGICAL ::  dt_fixed = .FALSE.                               !< fixed timestep (namelist parameter dt set)?
706    LOGICAL ::  dt_3d_reached                                    !< internal timestep for particle advection
707    LOGICAL ::  dt_3d_reached_l                                  !< internal timestep for particle advection
708    LOGICAL ::  first_call_lpm = .TRUE.                          !< call lpm only once per timestep?
709    LOGICAL ::  first_call_mas = .TRUE.                          !< call mas only once per timestep
710    LOGICAL ::  force_print_header = .FALSE.                     !< namelist parameter
711    LOGICAL ::  galilei_transformation = .FALSE.                 !< namelist parameter
712    LOGICAL ::  humidity = .FALSE.                               !< namelist parameter
713    LOGICAL ::  humidity_remote = .FALSE.                        !< switch for receiving near-surface humidity flux (atmosphere-ocean coupling)
714    LOGICAL ::  indoor_model = .FALSE.                           !< switch for indoor-climate and energy-demand model
715    LOGICAL ::  large_scale_forcing = .FALSE.                    !< namelist parameter
716    LOGICAL ::  large_scale_subsidence = .FALSE.                 !< namelist parameter
717    LOGICAL ::  land_surface = .FALSE.                           !< use land surface model?
718    LOGICAL ::  les_dynamic = .FALSE.                            !< use dynamic subgrid model as turbulence closure for LES mode
719    LOGICAL ::  les_mw = .FALSE.                                 !< use Moeng-Wyngaard turbulence closure for LES mode
720    LOGICAL ::  lsf_exception = .FALSE.                          !< use of lsf with buildings (temporary)?
721    LOGICAL ::  lsf_surf = .TRUE.                                !< use surface forcing (large scale forcing)?
722    LOGICAL ::  lsf_vert = .TRUE.                                !< use atmospheric forcing (large scale forcing)?
723    LOGICAL ::  masking_method = .FALSE.                         !< namelist parameter
724    LOGICAL ::  mg_switch_to_pe0 = .FALSE.                       !< internal multigrid switch for steering the ghost point exchange in case that data has been collected on PE0
725    LOGICAL ::  monotonic_limiter_z = .FALSE.                    !< use monotonic flux limiter for vertical scalar advection
726    LOGICAL ::  nesting_offline = .FALSE.                        !< flag controlling offline nesting in COSMO model 
727    LOGICAL ::  neutral = .FALSE.                                !< namelist parameter
728    LOGICAL ::  nudging = .FALSE.                                !< namelist parameter
729    LOGICAL ::  ocean_mode = .FALSE.                             !< namelist parameter
730    LOGICAL ::  passive_scalar = .FALSE.                         !< namelist parameter
731    LOGICAL ::  plant_canopy = .FALSE.                           !< switch for use of plant canopy model
732    LOGICAL ::  random_heatflux = .FALSE.                        !< namelist parameter
733    LOGICAL ::  rans_mode = .FALSE.                              !< switch between RANS and LES mode
734    LOGICAL ::  rans_tke_e = .FALSE.                             !< use TKE-e turbulence closure for RANS mode
735    LOGICAL ::  rans_tke_l = .FALSE.                             !< use TKE-l turbulence closure for RANS mode
736    LOGICAL ::  read_svf = .FALSE.                               !< ENVPAR namelist parameter to steer input of svf (ENVPAR is provided by palmrun)
737    LOGICAL ::  recycling_yshift = .FALSE.                       !< namelist parameter
738    LOGICAL ::  run_control_header = .FALSE.                     !< onetime output of RUN_CONTROL header
739    LOGICAL ::  run_coupled = .TRUE.                             !< internal switch telling PALM to run in coupled mode (i.e. to exchange surface data) in case of atmosphere-ocean coupling
740    LOGICAL ::  salsa = .FALSE.                                  !< switch for the sectional aerosol module salsa
741    LOGICAL ::  scalar_rayleigh_damping = .TRUE.                 !< namelist parameter
742    LOGICAL ::  sloping_surface = .FALSE.                        !< use sloped surface? (namelist parameter alpha_surface)
743    LOGICAL ::  spinup = .FALSE.                                 !< perform model spinup without atmosphere code?
744    LOGICAL ::  surface_output = .FALSE.                         !< output of surface data
745    LOGICAL ::  stop_dt = .FALSE.                                !< internal switch to stop the time stepping
746    LOGICAL ::  synchronous_exchange = .FALSE.                   !< namelist parameter
747    LOGICAL ::  syn_turb_gen = .FALSE.                           !< flag for synthetic turbulence generator module
748    LOGICAL ::  terminate_run = .FALSE.                          !< terminate run (cpu-time limit, restarts)?
749    LOGICAL ::  topo_no_distinct = .FALSE.                       !< flag controlling classification of topography surfaces
750    LOGICAL ::  transpose_compute_overlap = .FALSE.              !< namelist parameter
751    LOGICAL ::  turbulent_inflow = .FALSE.                       !< namelist parameter
752    LOGICAL ::  turbulent_outflow = .FALSE.                      !< namelist parameter
753    LOGICAL ::  urban_surface = .FALSE.                          !< use urban surface model?
754    LOGICAL ::  use_cmax = .TRUE.                                !< namelist parameter
755    LOGICAL ::  use_free_convection_scaling = .FALSE.            !< namelist parameter to switch on free convection velocity scale in calculation of horizontal wind speed (surface_layer_fluxes)
756    LOGICAL ::  use_initial_profile_as_reference = .FALSE.       !< use of initial profiles as reference state?
757    LOGICAL ::  use_prescribed_profile_data = .FALSE.            !< use of prescribed wind profiles?
758                                                                 !< (namelist parameters u_profile, v_profile)
759    LOGICAL ::  use_single_reference_value = .FALSE.             !< use of single value as reference state?
760    LOGICAL ::  use_subsidence_tendencies = .FALSE.              !< namelist parameter
761    LOGICAL ::  use_surface_fluxes = .FALSE.                     !< namelist parameter
762    LOGICAL ::  use_top_fluxes = .FALSE.                         !< namelist parameter
763    LOGICAL ::  use_ug_for_galilei_tr = .TRUE.                   !< namelist parameter
764    LOGICAL ::  use_upstream_for_tke = .FALSE.                   !< namelist parameter
765    LOGICAL ::  vdi_checks = .FALSE.                             !< do internal controls after VDI 3783 Part 9
766    LOGICAL ::  virtual_flight = .FALSE.                         !< use virtual flight model
767    LOGICAL ::  virtual_measurement = .FALSE.                    !< control parameter to switch-on virtual measurements
768    LOGICAL ::  wall_adjustment = .TRUE.                         !< namelist parameter
769    LOGICAL ::  wind_turbine = .FALSE.                           !< flag for use of wind turbine model
770    LOGICAL ::  write_binary = .FALSE.                           !< ENVPAR namelist parameter to steer restart I/O (ENVPAR is provided by palmrun)
771    LOGICAL ::  write_svf = .FALSE.                              !< ENVPAR namelist parameter to steer output of svf (ENVPAR is provided by palmrun)
772    LOGICAL ::  ws_scheme_sca = .FALSE.                          !< use Wicker-Skamarock scheme (scalar advection)?
773    LOGICAL ::  ws_scheme_mom = .FALSE.                          !< use Wicker-Skamarock scheme (momentum advection)?
774
775    LOGICAL ::  data_output_xy(0:1) = .FALSE.                !< output of xy cross-section data?
776    LOGICAL ::  data_output_xz(0:1) = .FALSE.                !< output of xz cross-section data?
777    LOGICAL ::  data_output_yz(0:1) = .FALSE.                !< output of yz cross-section data?
778
779    LOGICAL, DIMENSION(max_masks) ::  mask_surface = .FALSE.   !< flag for surface-following masked output
780
781    REAL(wp) ::  advected_distance_x = 0.0_wp                  !< advected distance of model domain along x
782                                                               !< (galilei transformation)
783    REAL(wp) ::  advected_distance_y = 0.0_wp                  !< advected distance of model domain along y
784                                                               !< (galilei transformation)
785    REAL(wp) ::  alpha_surface = 0.0_wp                        !< namelist parameter
786    REAL(wp) ::  atmos_ocean_sign = 1.0_wp                     !< vertical-grid conversion factor
787                                                               !< (=1.0 in atmosphere, =-1.0 in ocean)
788    REAL(wp) ::  averaging_interval = 0.0_wp                   !< namelist parameter
789    REAL(wp) ::  averaging_interval_pr = 9999999.9_wp          !< namelist parameter
790    REAL(wp) ::  bc_pt_t_val                                   !< vertical gradient of pt near domain top
791    REAL(wp) ::  bc_q_t_val                                    !< vertical gradient of humidity near domain top
792    REAL(wp) ::  bc_s_t_val                                    !< vertical gradient of passive scalar near domain top
793    REAL(wp) ::  bottom_salinityflux = 0.0_wp                  !< namelist parameter
794    REAL(wp) ::  building_height = 50.0_wp                     !< namelist parameter
795    REAL(wp) ::  building_length_x = 50.0_wp                   !< namelist parameter
796    REAL(wp) ::  building_length_y = 50.0_wp                   !< namelist parameter
797    REAL(wp) ::  building_wall_left = 9999999.9_wp             !< namelist parameter
798    REAL(wp) ::  building_wall_south = 9999999.9_wp            !< namelist parameter
799    REAL(wp) ::  canyon_height = 50.0_wp                       !< namelist parameter
800    REAL(wp) ::  canyon_width_x = 9999999.9_wp                 !< namelist parameter
801    REAL(wp) ::  canyon_width_y = 9999999.9_wp                 !< namelist parameter
802    REAL(wp) ::  canyon_wall_left = 9999999.9_wp               !< namelist parameter
803    REAL(wp) ::  canyon_wall_south = 9999999.9_wp              !< namelist parameter
804    REAL(wp) ::  cfl_factor = -1.0_wp                          !< namelist parameter
805    REAL(wp) ::  cos_alpha_surface                             !< cosine of alpha_surface
806    REAL(wp) ::  coupling_start_time = 0.0_wp                  !< namelist parameter
807    REAL(wp) ::  days_since_reference_point = 0.0_wp           !< days after atmosphere-ocean coupling has been activated,
808                                                               !< or after spinup phase of LSM has been finished
809    REAL(wp) ::  disturbance_amplitude = 0.25_wp               !< namelist parameter
810    REAL(wp) ::  disturbance_energy_limit = 0.01_wp            !< namelist parameter
811    REAL(wp) ::  disturbance_level_b = -9999999.9_wp           !< namelist parameter
812    REAL(wp) ::  disturbance_level_t = -9999999.9_wp           !< namelist parameter
813    REAL(wp) ::  dp_level_b = 0.0_wp                           !< namelist parameter
814    REAL(wp) ::  dt = -1.0_wp                                  !< namelist parameter
815    REAL(wp) ::  dt_averaging_input = 0.0_wp                   !< namelist parameter
816    REAL(wp) ::  dt_averaging_input_pr = 9999999.9_wp          !< namelist parameter
817    REAL(wp) ::  dt_coupling = 9999999.9_wp                    !< namelist parameter
818    REAL(wp) ::  dt_data_output = 9999999.9_wp                 !< namelist parameter
819    REAL(wp) ::  dt_data_output_av = 9999999.9_wp              !< namelist parameter
820    REAL(wp) ::  dt_disturb = 9999999.9_wp                     !< namelist parameter
821    REAL(wp) ::  dt_dopr = 9999999.9_wp                        !< namelist parameter
822    REAL(wp) ::  dt_dopr_listing = 9999999.9_wp                !< namelist parameter
823    REAL(wp) ::  dt_dopts = 9999999.9_wp                       !< namelist parameter
824    REAL(wp) ::  dt_dots = 9999999.9_wp                        !< namelist parameter
825    REAL(wp) ::  dt_do2d_xy = 9999999.9_wp                     !< namelist parameter
826    REAL(wp) ::  dt_do2d_xz = 9999999.9_wp                     !< namelist parameter
827    REAL(wp) ::  dt_do2d_yz = 9999999.9_wp                     !< namelist parameter
828    REAL(wp) ::  dt_do3d = 9999999.9_wp                        !< namelist parameter
829    REAL(wp) ::  dt_max = 20.0_wp                              !< namelist parameter
830    REAL(wp) ::  dt_restart = 9999999.9_wp                     !< namelist parameter
831    REAL(wp) ::  dt_run_control = 60.0_wp                      !< namelist parameter
832    REAL(wp) ::  dt_spinup = 60.0_wp                           !< namelist parameter
833    REAL(wp) ::  dt_write_agent_data = 9999999.9_wp            !< namelist parameter
834    REAL(wp) ::  dt_3d = 0.01_wp                               !< time step
835    REAL(wp) ::  dz_max = 999.0_wp                             !< namelist parameter
836    REAL(wp) ::  dz_stretch_factor = 1.08_wp                   !< namelist parameter
837    REAL(wp) ::  dz_stretch_level = -9999999.9_wp              !< namelist parameter
838    REAL(wp) ::  e_init = 0.0_wp                               !< namelist parameter
839    REAL(wp) ::  e_min = 0.0_wp                                !< namelist parameter
840    REAL(wp) ::  end_time = 0.0_wp                             !< namelist parameter
841    REAL(wp) ::  f = 0.0_wp                                    !< Coriolis parameter
842    REAL(wp) ::  fs = 0.0_wp                                   !< Coriolis parameter
843    REAL(wp) ::  inflow_damping_height = 9999999.9_wp          !< namelist parameter
844    REAL(wp) ::  inflow_damping_width = 9999999.9_wp           !< namelist parameter
845    REAL(wp) ::  km_constant = -1.0_wp                         !< namelist parameter
846    REAL(wp) ::  latitude = 55.0_wp                            !< namelist parameter
847    REAL(wp) ::  longitude = 0.0_wp                            !< namelist parameter
848    REAL(wp) ::  mask_scale_x = 1.0_wp                         !< namelist parameter
849    REAL(wp) ::  mask_scale_y = 1.0_wp                         !< namelist parameter
850    REAL(wp) ::  mask_scale_z = 1.0_wp                         !< namelist parameter
851    REAL(wp) ::  maximum_cpu_time_allowed = 0.0_wp             !< given wall time for run
852    REAL(wp) ::  molecular_viscosity = 1.461E-5_wp             !< molecular viscosity (used in lsm and lpm)
853    REAL(wp) ::  multi_agent_system_end   = 9999999.9_wp       !< namelist parameter (see documentation)
854    REAL(wp) ::  multi_agent_system_start = 0.0_wp             !< namelist parameter (see documentation)
855    REAL(wp) ::  omega = 7.29212E-5_wp                         !< namelist parameter
856    REAL(wp) ::  omega_sor = 1.8_wp                            !< namelist parameter
857    REAL(wp) ::  outflow_source_plane = -9999999.9_wp          !< namelist parameter
858    REAL(wp) ::  particle_maximum_age = 9999999.9_wp           !< namelist parameter
859    REAL(wp) ::  prandtl_number = 1.0_wp                       !< namelist parameter
860    REAL(wp) ::  pt_damping_factor = 0.0_wp                    !< namelist parameter
861    REAL(wp) ::  pt_damping_width = 0.0_wp                     !< namelist parameter
862    REAL(wp) ::  pt_reference = 9999999.9_wp                   !< namelist parameter
863    REAL(wp) ::  pt_slope_offset = 0.0_wp                      !< temperature difference between left and right
864                                                               !< boundary of total domain
865    REAL(wp) ::  pt_surface = 300.0_wp                         !< namelist parameter
866    REAL(wp) ::  pt_surface_initial_change = 0.0_wp            !< namelist parameter
867    REAL(wp) ::  q_surface = 0.0_wp                            !< namelist parameter
868    REAL(wp) ::  q_surface_initial_change = 0.0_wp             !< namelist parameter
869    REAL(wp) ::  rayleigh_damping_factor = -1.0_wp             !< namelist parameter
870    REAL(wp) ::  rayleigh_damping_height = -1.0_wp             !< namelist parameter
871    REAL(wp) ::  recycling_width = 9999999.9_wp                !< namelist parameter
872    REAL(wp) ::  residual_limit = 1.0E-4_wp                    !< namelist parameter
873    REAL(wp) ::  restart_time = 9999999.9_wp                   !< namelist parameter
874    REAL(wp) ::  rho_reference                                 !< reference state of density
875    REAL(wp) ::  rho_surface                                   !< surface value of density
876    REAL(wp) ::  rotation_angle = 0.0_wp                       !< angle between real North and model North (clockwise)
877    REAL(wp) ::  roughness_length = 0.1_wp                     !< namelist parameter
878    REAL(wp) ::  simulated_time = 0.0_wp                       !< elapsed simulated time
879    REAL(wp) ::  simulated_time_at_begin                       !< elapsed simulated time of previous run (job chain)
880    REAL(wp) ::  sin_alpha_surface                             !< sine of alpha_surface (sloped surface)
881    REAL(wp) ::  skip_time_data_output = 0.0_wp                !< namelist parameter
882    REAL(wp) ::  skip_time_data_output_av = 9999999.9_wp       !< namelist parameter
883    REAL(wp) ::  skip_time_dopr = 9999999.9_wp                 !< namelist parameter
884    REAL(wp) ::  skip_time_do2d_xy = 9999999.9_wp              !< namelist parameter
885    REAL(wp) ::  skip_time_do2d_xz = 9999999.9_wp              !< namelist parameter
886    REAL(wp) ::  skip_time_do2d_yz = 9999999.9_wp              !< namelist parameter
887    REAL(wp) ::  skip_time_do3d = 9999999.9_wp                 !< namelist parameter
888    REAL(wp) ::  spinup_pt_amplitude = 9999999.9_wp            !< namelist parameter
889    REAL(wp) ::  spinup_pt_mean = 9999999.9_wp                 !< namelist parameter
890    REAL(wp) ::  spinup_time = 0.0_wp                          !< namelist parameter
891    REAL(wp) ::  surface_heatflux = 9999999.9_wp               !< namelist parameter
892    REAL(wp) ::  surface_pressure = 1013.25_wp                 !< namelist parameter
893    REAL(wp) ::  surface_scalarflux = 9999999.9_wp             !< namelist parameter
894    REAL(wp) ::  surface_waterflux = 9999999.9_wp              !< namelist parameter
895    REAL(wp) ::  s_surface = 0.0_wp                            !< namelist parameter
896    REAL(wp) ::  s_surface_initial_change = 0.0_wp             !< namelist parameter
897    REAL(wp) ::  termination_time_needed = 35.0_wp             !< namelist parameter
898    REAL(wp) ::  time_coupling = 0.0_wp                        !< time since last coupling (surface_coupler)
899    REAL(wp) ::  time_disturb = 0.0_wp                         !< time since last flow disturbance
900    REAL(wp) ::  time_dopr = 0.0_wp                            !< time since last profile output
901    REAL(wp) ::  time_dopr_av = 0.0_wp                         !< time since last averaged profile output
902    REAL(wp) ::  time_dopr_listing = 0.0_wp                    !< time since last profile output (ASCII) on file
903    REAL(wp) ::  time_dopts = 0.0_wp                           !< time since last particle timeseries output
904    REAL(wp) ::  time_dosp = 0.0_wp                            !< time since last spectra output
905    REAL(wp) ::  time_dosp_av = 0.0_wp                         !< time since last averaged spectra output
906    REAL(wp) ::  time_dots = 0.0_wp                            !< time since last timeseries output
907    REAL(wp) ::  time_do2d_xy = 0.0_wp                         !< time since last xy cross-section output
908    REAL(wp) ::  time_do2d_xz = 0.0_wp                         !< time since last xz cross-section output
909    REAL(wp) ::  time_do2d_yz = 0.0_wp                         !< time since last yz cross-section output
910    REAL(wp) ::  time_do3d = 0.0_wp                            !< time since last 3d output
911    REAL(wp) ::  time_do_av = 0.0_wp                           !< time since last averaged-data output
912    REAL(wp) ::  time_do_sla = 0.0_wp                          !< time since last
913    REAL(wp) ::  time_restart = 9999999.9_wp                   !< time at which run shall be terminated and restarted
914    REAL(wp) ::  time_run_control = 0.0_wp                     !< time since last RUN_CONTROL output
915    REAL(wp) ::  time_since_reference_point = 0.0_wp           !< time after atmosphere-ocean coupling has been activated, or time after spinup phase of LSM has been finished
916    REAL(wp) ::  top_heatflux = 9999999.9_wp                   !< namelist parameter
917    REAL(wp) ::  top_momentumflux_u = 9999999.9_wp             !< namelist parameter
918    REAL(wp) ::  top_momentumflux_v = 9999999.9_wp             !< namelist parameter
919    REAL(wp) ::  top_salinityflux = 9999999.9_wp               !< namelist parameter
920    REAL(wp) ::  top_scalarflux = 9999999.9_wp                 !< namelist parameter
921    REAL(wp) ::  tunnel_height = 9999999.9_wp                  !< namelist parameter
922    REAL(wp) ::  tunnel_length = 9999999.9_wp                  !< namelist parameter
923    REAL(wp) ::  tunnel_width_x = 9999999.9_wp                 !< namelist parameter
924    REAL(wp) ::  tunnel_width_y = 9999999.9_wp                 !< namelist parameter
925    REAL(wp) ::  tunnel_wall_depth = 9999999.9_wp              !< namelist parameter
926    REAL(wp) ::  ug_surface = 0.0_wp                           !< namelist parameter
927    REAL(wp) ::  u_bulk = 0.0_wp                               !< namelist parameter
928    REAL(wp) ::  u_gtrans = 0.0_wp                             !< transformed wind component (galilei transformation)
929    REAL(wp) ::  vg_surface = 0.0_wp                           !< namelist parameter
930    REAL(wp) ::  vpt_reference = 9999999.9_wp                  !< reference state of virtual potential temperature
931    REAL(wp) ::  v_bulk = 0.0_wp                               !< namelist parameter
932    REAL(wp) ::  v_gtrans = 0.0_wp                             !< transformed wind component (galilei transformation)
933    REAL(wp) ::  wall_adjustment_factor = 1.8_wp               !< adjustment factor for mixing length l
934    REAL(wp) ::  zeta_max = 20.0_wp                            !< namelist parameter
935    REAL(wp) ::  zeta_min = -20.0_wp                           !< namelist parameter
936    REAL(wp) ::  z0h_factor = 1.0_wp                           !< namelist parameter
937
938    REAL(wp) ::  do2d_xy_last_time(0:1) = -1.0_wp                  !< time of previous xy output
939    REAL(wp) ::  do2d_xz_last_time(0:1) = -1.0_wp                  !< time of previous xz output
940    REAL(wp) ::  do2d_yz_last_time(0:1) = -1.0_wp                  !< time of previous yz output
941    REAL(wp) ::  dpdxy(1:2) = 0.0_wp                               !< namelist parameter
942    REAL(wp) ::  dt_domask(max_masks) = 9999999.9_wp               !< namelist parameter
943    REAL(wp) ::  dz(10) = -1.0_wp                                  !< namelist parameter
944    REAL(wp) ::  dz_stretch_level_start(9) = -9999999.9_wp         !< namelist parameter
945    REAL(wp) ::  dz_stretch_level_end(9) = 9999999.9_wp            !< namelist parameter
946    REAL(wp) ::  dz_stretch_factor_array(9) = 1.08_wp              !< namelist parameter
947    REAL(wp) ::  mask_scale(3)                                     !< collective array for mask_scale_x/y/z
948    REAL(wp) ::  pt_vertical_gradient(10) = 0.0_wp                 !< namelist parameter
949    REAL(wp) ::  pt_vertical_gradient_level(10) = -999999.9_wp   !< namelist parameter
950    REAL(wp) ::  q_vertical_gradient(10) = 0.0_wp                  !< namelist parameter
951    REAL(wp) ::  q_vertical_gradient_level(10) = -999999.9_wp    !< namelist parameter
952    REAL(wp) ::  s_vertical_gradient(10) = 0.0_wp                  !< namelist parameter
953    REAL(wp) ::  s_vertical_gradient_level(10) = -999999.9_wp    !< namelist parameter
954    REAL(wp) ::  skip_time_domask(max_masks) = 9999999.9_wp        !< namelist parameter
955    REAL(wp) ::  threshold(20) = 0.0_wp                            !< namelist parameter
956    REAL(wp) ::  time_domask(max_masks) = 0.0_wp                   !< namelist parameter
957    REAL(wp) ::  tsc(10) = (/ 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, &    !< array used for controlling time-integration at different substeps
958                 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp /)
959    REAL(wp) ::  u_profile(200) = 9999999.9_wp                     !< namelist parameter
960    REAL(wp) ::  uv_heights(200) = 9999999.9_wp                    !< namelist parameter
961    REAL(wp) ::  v_profile(200) = 9999999.9_wp                     !< namelist parameter
962    REAL(wp) ::  ug_vertical_gradient(10) = 0.0_wp                 !< namelist parameter
963    REAL(wp) ::  ug_vertical_gradient_level(10) = -9999999.9_wp    !< namelist parameter
964    REAL(wp) ::  vg_vertical_gradient(10) = 0.0_wp                 !< namelist parameter
965    REAL(wp) ::  vg_vertical_gradient_level(10) = -9999999.9_wp    !< namelist parameter
966    REAL(wp) ::  volume_flow(1:3) = 0.0_wp                         !< volume flow through 1:yz-plane, 2: xz-plane, 3: xy-plane (nest childs only)
967    REAL(wp) ::  volume_flow_area(1:3) = 0.0_wp                    !< area of the respective volume flow planes
968    REAL(wp) ::  volume_flow_initial(1:3) = 0.0_wp                 !< initial volume flow (t=0) through the respective volume flow planes
969    REAL(wp) ::  wall_heatflux(0:5) = 0.0_wp                       !< namelist parameter
970    REAL(wp) ::  wall_humidityflux(0:5) = 0.0_wp                   !< namelist parameter
971    REAL(wp) ::  wall_salinityflux(0:5) = 0.0_wp                   !< namelist parameter
972    REAL(wp) ::  wall_scalarflux(0:5) = 0.0_wp                     !< namelist parameter
973    REAL(wp) ::  subs_vertical_gradient(10) = 0.0_wp               !< namelist parameter
974    REAL(wp) ::  subs_vertical_gradient_level(10) = -9999999.9_wp  !< namelist parameter
975
976    REAL(wp), DIMENSION(:), ALLOCATABLE ::  dp_smooth_factor  !< smoothing factor for external pressure gradient forcing
977
978    REAL(wp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_x = -1.0_wp  !< namelist parameter
979    REAL(wp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_y = -1.0_wp  !< namelist parameter
980    REAL(wp), DIMENSION(max_masks,mask_xyz_dimension) ::  mask_z = -1.0_wp  !< namelist parameter
981   
982    REAL(wp), DIMENSION(max_masks,3) ::  mask_x_loop = -1.0_wp  !< namelist parameter
983    REAL(wp), DIMENSION(max_masks,3) ::  mask_y_loop = -1.0_wp  !< namelist parameter
984    REAL(wp), DIMENSION(max_masks,3) ::  mask_z_loop = -1.0_wp  !< namelist parameter
985   
986!
987!--    internal mask arrays ("mask,dimension,selection")
988       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  mask       !< collective array for mask_x/y/z
989       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  mask_loop  !< collective array for mask_x/y/z_loop
990
991    SAVE
992
993 END MODULE control_parameters
994
995
996!------------------------------------------------------------------------------!
997! Description:
998! ------------
999!> Definition of grid spacings.
1000!------------------------------------------------------------------------------!
1001 MODULE grid_variables
1002
1003    USE kinds
1004
1005    REAL(wp) ::  ddx          !< 1/dx
1006    REAL(wp) ::  ddx2         !< 1/dx2
1007    REAL(wp) ::  dx = 1.0_wp  !< horizontal grid size (along x-direction)
1008    REAL(wp) ::  dx2          !< dx*dx
1009    REAL(wp) ::  ddy          !< 1/dy
1010    REAL(wp) ::  ddy2         !< 1/dy2
1011    REAL(wp) ::  dy = 1.0_wp  !< horizontal grid size (along y-direction)
1012    REAL(wp) ::  dy2          !< dy*dy
1013
1014    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddx2_mg  !< 1/dx_l**2 (dx_l: grid spacing along x on different multigrid level)
1015    REAL(wp), DIMENSION(:), ALLOCATABLE ::  ddy2_mg  !< 1/dy_l**2 (dy_l: grid spacing along y on different multigrid level)
1016
1017    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  zu_s_inner  !< height of topography top on scalar grid
1018    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  zw_w_inner  !< height of topography top on w grid
1019                                             
1020    SAVE
1021
1022 END MODULE grid_variables
1023
1024
1025!------------------------------------------------------------------------------!
1026! Description:
1027! ------------
1028!> Definition of array bounds, number of gridpoints, and wall flag arrays.
1029!------------------------------------------------------------------------------!
1030 MODULE indices
1031
1032    USE kinds
1033
1034    INTEGER(iwp) ::  nbgp = 3       !< number of boundary ghost points
1035    INTEGER(iwp) ::  ngp_sums       !< number of vertical profile grid points time number of output profiles - used for allreduce statements in MPI calls
1036    INTEGER(iwp) ::  ngp_sums_ls    !< number of vertical profile grid points time number of large-scale forcing profiles - used for allreduce statements in MPI calls
1037    INTEGER(iwp) ::  nnx            !< number of subdomain grid points in x-direction
1038    INTEGER(iwp) ::  nx = 0         !< nx+1 = total number of grid points in x-direction
1039    INTEGER(iwp) ::  nx_a           !< in coupled atmosphere-ocean runs: total number of grid points along x (atmosphere)
1040    INTEGER(iwp) ::  nx_o           !< in coupled atmosphere-ocean runs: total number of grid points along x (ocean)
1041    INTEGER(iwp) ::  nxl            !< left-most grid index of subdomain (excluding ghost points)
1042    INTEGER(iwp) ::  nxlg           !< left-most grid index of subdomain (including ghost points)
1043    INTEGER(iwp) ::  nxlu           !< =nxl+1 (at left domain boundary with inflow from left), else =nxl (used for u-velocity component)
1044    INTEGER(iwp) ::  nxr            !< right-most grid index of subdomain (excluding ghost points)
1045    INTEGER(iwp) ::  nxrg           !< right-most grid index of subdomain (including ghost points)
1046    INTEGER(iwp) ::  nx_on_file     !< nx of previous run in job chain
1047    INTEGER(iwp) ::  nny            !< number of subdomain grid points in y-direction
1048    INTEGER(iwp) ::  ny = 0         !< ny+1 = total number of grid points in y-direction
1049    INTEGER(iwp) ::  ny_a           !< in coupled atmosphere-ocean runs: total number of grid points along y (atmosphere)
1050    INTEGER(iwp) ::  ny_o           !< in coupled atmosphere-ocean runs: total number of grid points along y (ocean)
1051    INTEGER(iwp) ::  nyn            !< north-most grid index of subdomain (excluding ghost points)
1052    INTEGER(iwp) ::  nyng           !< north-most grid index of subdomain (including ghost points)
1053    INTEGER(iwp) ::  nys            !< south-most grid index of subdomain (excluding ghost points)
1054    INTEGER(iwp) ::  nysg           !< south-most grid index of subdomain (including ghost points)
1055    INTEGER(iwp) ::  nysv           !< =nys+1 (at south domain boundary with inflow from south), else =nys (used for v-velocity component)
1056    INTEGER(iwp) ::  ny_on_file     !< ny of previous run in job chain
1057    INTEGER(iwp) ::  nnz            !< number of subdomain grid points in z-direction
1058    INTEGER(iwp) ::  nz = 0         !< total number of grid points in z-direction
1059    INTEGER(iwp) ::  nzb            !< bottom grid index of computational domain
1060    INTEGER(iwp) ::  nzb_diff       !< will be removed
1061    INTEGER(iwp) ::  nzb_max        !< vertical index of topography top
1062    INTEGER(iwp) ::  nzt            !< nzt+1 = top grid index of computational domain
1063    INTEGER(iwp) ::  topo_min_level !< minimum topography-top index (usually equal to nzb)
1064
1065    INTEGER(idp), DIMENSION(:), ALLOCATABLE ::  ngp_3d        !< number of grid points of the total domain
1066    INTEGER(idp), DIMENSION(:), ALLOCATABLE ::  ngp_3d_inner  !< ! need to have 64 bit for grids > 2E9
1067                   
1068    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_2dh  !< number of grid points of a horizontal cross section through the total domain
1069    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nxl_mg   !< left-most grid index of subdomain on different multigrid level
1070    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nxr_mg   !< right-most grid index of subdomain on different multigrid level
1071    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nyn_mg   !< north-most grid index of subdomain on different multigrid level
1072    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nys_mg   !< south-most grid index of subdomain on different multigrid level
1073    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  nzt_mg   !< top-most grid index of subdomain on different multigrid level
1074
1075
1076    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  ngp_2dh_outer     !< number of horizontal grid points which are non-topography and non-surface-bounded
1077    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  ngp_2dh_s_inner   !< number of horizontal grid points which are non-topography
1078    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mg_loc_ind        !< internal array to store index bounds of all PEs of that multigrid level where data is collected to PE0
1079    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_diff_s_inner  !< will be removed
1080    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_diff_s_outer  !< will be removed
1081    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_inner         !< will be removed
1082    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_outer         !< will be removed
1083    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_s_inner       !< will be removed
1084    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_s_outer       !< will be removed
1085    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_u_inner       !< will be removed
1086    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_u_outer       !< will be removed
1087    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_v_inner       !< will be removed
1088    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_v_outer       !< will be removed
1089    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_w_inner       !< will be removed
1090    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  nzb_w_outer       !< will be removed
1091
1092    INTEGER(iwp), DIMENSION(:,:,:), POINTER ::  flags  !< pointer to wall_flags_1-10
1093
1094    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_1   !< topograpyh masking flag on multigrid level 1
1095    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_2   !< topograpyh masking flag on multigrid level 2
1096    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_3   !< topograpyh masking flag on multigrid level 3
1097    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_4   !< topograpyh masking flag on multigrid level 4
1098    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_5   !< topograpyh masking flag on multigrid level 5
1099    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_6   !< topograpyh masking flag on multigrid level 6
1100    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_7   !< topograpyh masking flag on multigrid level 7
1101    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_8   !< topograpyh masking flag on multigrid level 8
1102    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_9   !< topograpyh masking flag on multigrid level 9
1103    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE,  TARGET ::  wall_flags_10  !< topograpyh masking flag on multigrid level 10
1104
1105    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  advc_flags_m            !< flags used to degrade order of advection scheme for momentum
1106    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  advc_flags_s            !< flags used to degrade order of advection scheme for scalar quantities
1107    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  topo_top_ind            !< precalculated topography top indices
1108    INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE ::  wall_flags_0            !< flags to mask topography and surface-bounded grid points
1109
1110    SAVE
1111
1112 END MODULE indices
1113
1114
1115!------------------------------------------------------------------------------!
1116! Description:
1117! ------------
1118!> Interfaces for special subroutines which use optional parameters.
1119!------------------------------------------------------------------------------!
1120 MODULE interfaces
1121
1122    INTERFACE
1123
1124!------------------------------------------------------------------------------!
1125! Description:
1126! ------------
1127!> @todo Missing subroutine description.
1128!------------------------------------------------------------------------------!
1129       SUBROUTINE global_min_max ( i1, i2, j1, j2, k1, k2, array, mode, offset, &
1130                                   result, result_ijk, result1, result1_ijk )
1131
1132          USE kinds
1133
1134          CHARACTER (LEN=*), INTENT(IN) ::  mode                      !< mode of global min/max function: can be 'min', 'max', 'minmax', 'abs', or 'absoff'
1135          INTEGER(iwp), INTENT(IN)      ::  i1                        !< internal index of min/max function
1136          INTEGER(iwp), INTENT(IN)      ::  i2                        !< internal index of min/max function
1137          INTEGER(iwp), INTENT(IN)      ::  j1                        !< internal index of min/max function
1138          INTEGER(iwp), INTENT(IN)      ::  j2                        !< internal index of min/max function
1139          INTEGER(iwp), INTENT(IN)      ::  k1                        !< internal index of min/max function
1140          INTEGER(iwp), INTENT(IN)      ::  k2                        !< internal index of min/max function
1141          INTEGER(iwp)                  ::  result_ijk(3)             !< grid index result of min/max function
1142          INTEGER(iwp), OPTIONAL        ::  result1_ijk(3)            !< optional grid index result of min/max function
1143          REAL(wp)                      ::  offset                    !< min/max function calculates absolute value with respect to an offset
1144          REAL(wp)                      ::  result                    !< result of min/max function
1145          REAL(wp), OPTIONAL            ::  result1                   !< optional result of min/max function
1146          REAL(wp), INTENT(IN)          ::  array(i1:i2,j1:j2,k1:k2)  !< input array of min/max function
1147
1148       END SUBROUTINE global_min_max
1149
1150    END INTERFACE
1151
1152    SAVE
1153
1154 END MODULE interfaces
1155
1156
1157!------------------------------------------------------------------------------!
1158! Description:
1159! ------------
1160!> Interfaces for subroutines with pointer arguments called in
1161!> prognostic_equations.
1162!------------------------------------------------------------------------------!
1163 MODULE pointer_interfaces
1164
1165    INTERFACE
1166
1167!------------------------------------------------------------------------------!
1168! Description:
1169! ------------
1170!> @todo Missing subroutine description.
1171!------------------------------------------------------------------------------!
1172       SUBROUTINE advec_s_bc( sk, sk_char )
1173
1174          USE kinds
1175
1176          CHARACTER (LEN=*), INTENT(IN) ::  sk_char  !< string for treated scalar in Bott-Chlond scheme
1177
1178          REAL(wp), DIMENSION(:,:,:), POINTER ::  sk  !< treated scalar array in Bott-Chlond scheme
1179
1180       END SUBROUTINE advec_s_bc
1181
1182    END INTERFACE
1183
1184    SAVE
1185
1186 END MODULE pointer_interfaces
1187
1188
1189!------------------------------------------------------------------------------!
1190! Description:
1191! ------------
1192!> Definition of variables which define processor topology and the exchange of
1193!> ghost point layers. This module must be placed in all routines containing
1194!> MPI-calls.
1195!------------------------------------------------------------------------------!
1196 MODULE pegrid
1197
1198    USE kinds
1199
1200#if defined( __parallel )
1201#if defined( __mpifh )
1202    INCLUDE "mpif.h"
1203#else
1204    USE MPI
1205#endif
1206#endif
1207    CHARACTER(LEN=2) ::  send_receive = 'al'     !<
1208    CHARACTER(LEN=7) ::  myid_char = ''          !< character string containing processor id number
1209   
1210    INTEGER(iwp) ::  comm1dx                     !< communicator for domain decomposition along x
1211    INTEGER(iwp) ::  comm1dy                     !< communicator for domain decomposition along y
1212    INTEGER(iwp) ::  comm2d                      !< standard 2d (xy) communicator used in PALM for the process group the PE belongs to
1213    INTEGER(iwp) ::  comm_inter                  !< intercommunicator that connects atmosphere/ocean process groups
1214    INTEGER(iwp) ::  comm_palm                   !< internal communicator used during the MPI setup at the beginning of a run
1215    INTEGER(iwp) ::  id_inflow = 0               !< myidx of procs at inflow (turbulent inflow method)
1216    INTEGER(iwp) ::  id_outflow = 0              !< myidx of procs at outflow (turbulent outflow method)
1217    INTEGER(iwp) ::  id_outflow_source = 0       !< myidx of procs including ouflow source plane (turbulent outflow method)
1218    INTEGER(iwp) ::  id_recycling = 0            !< myidx of procs containing the recycling plane (turbulence recycling method)
1219    INTEGER(iwp) ::  ierr                        !< standard error parameter in MPI calls
1220    INTEGER(iwp) ::  myid = 0                    !< id number of processor element
1221    INTEGER(iwp) ::  myidx = 0                   !< id number of processor elements with same position along x-direction
1222    INTEGER(iwp) ::  myidy = 0                   !< id number of processor elements with same position along y-direction
1223    INTEGER(iwp) ::  ndim = 2                    !< dimension of the virtual PE grid
1224    INTEGER(iwp) ::  ngp_a                       !< used in atmosphere/ocean coupling: total number of horizontal grid points (atmosphere)
1225    INTEGER(iwp) ::  ngp_o                       !< used in atmosphere/ocean coupling: total number of horizontal grid points (ocean)
1226    INTEGER(iwp) ::  ngp_xy                      !< used in atmosphere/ocean coupling: number of grid points of the subdomain
1227    INTEGER(iwp) ::  ngp_y                       !< number of subdomain grid points along y including ghost points
1228    INTEGER(iwp) ::  npex = -1                   !< number of processor elements in x-direction
1229    INTEGER(iwp) ::  npey = -1                   !< number of processor elements in y-direction
1230    INTEGER(iwp) ::  numprocs = 1                !< total number of appointed processor elements
1231    INTEGER(iwp) ::  numprocs_previous_run = -1  !< total number of appointed processor elements in previous run (job chain)
1232    INTEGER(iwp) ::  pleft                       !< MPI-address of the processor left of the current one
1233    INTEGER(iwp) ::  pnorth                      !< MPI-address of the processor north of the current one
1234    INTEGER(iwp) ::  pright                      !< MPI-address of the processor right of the current one
1235    INTEGER(iwp) ::  psouth                      !< MPI-address of the processor south of the current one
1236    INTEGER(iwp) ::  req_count = 0               !< MPI return variable - checks if Send-Receive operation is already finished
1237    INTEGER(iwp) ::  sendrecvcount_xy            !< number of subdomain gridpoints to be exchanged in direct transpositions (y --> x, or x --> y) or second (2d) transposition x --> y
1238    INTEGER(iwp) ::  sendrecvcount_yz            !< number of subdomain gridpoints to be exchanged in third (2d) transposition y --> z
1239    INTEGER(iwp) ::  sendrecvcount_zx            !< number of subdomain gridpoints to be exchanged in first (2d) transposition z --> x
1240    INTEGER(iwp) ::  sendrecvcount_zyd           !< number of subdomain gridpoints to be exchanged in direct transpositions z --> y (used for calculating spectra)
1241    INTEGER(iwp) ::  target_id                   !< in atmosphere/ocean coupling: id of the ocean/atmosphere counterpart PE with whom the atmosphere/ocean PE exchanges data
1242    INTEGER(iwp) ::  tasks_per_node = -9999      !< MPI tasks per compute node
1243    INTEGER(iwp) ::  threads_per_task = 1        !< number of OPENMP threads per MPI task
1244    INTEGER(iwp) ::  type_x                      !< derived MPI datatype for 2-D ghost-point exchange - north / south
1245    INTEGER(iwp) ::  type_xy                     !< derived MPI datatype for 2-D ghost-point exchange - north / south
1246    INTEGER(iwp) ::  type_y                      !< derived MPI datatype for 2-D exchange in atmosphere-ocean coupler
1247
1248    INTEGER(iwp) ::  pdims(2) = 1  !< number of processors along x-y dimension
1249    INTEGER(iwp) ::  req(100)      !< MPI return variable indicating if send-receive operation is finished
1250
1251    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  hor_index_bounds               !< horizontal index bounds
1252    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  hor_index_bounds_previous_run  !< horizontal index bounds of previous run
1253
1254    LOGICAL ::  collective_wait = .FALSE.          !< switch to set an explicit MPI barrier in front of all collective MPI calls
1255
1256#if defined( __parallel )
1257    INTEGER(iwp) ::  ibuf(12)                 !< internal buffer for calculating MPI settings
1258    INTEGER(iwp) ::  pcoord(2)                !< PE coordinates along x and y
1259    INTEGER(iwp) ::  status(MPI_STATUS_SIZE)  !< MPI status variable used in various MPI calls
1260   
1261    INTEGER(iwp), DIMENSION(MPI_STATUS_SIZE,100) ::  wait_stat  !< MPI status variable used in various MPI calls
1262   
1263    INTEGER(iwp) ::  type_x_byte !< derived MPI datatype for 2-D 8-bit integer ghost-point exchange - north / south
1264    INTEGER(iwp) ::  type_y_byte !< derived MPI datatype for 2-D integer ghost-point exchange - left / right
1265   
1266    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_xz      !< number of ghost points in xz-plane on different multigrid level
1267    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_xz_int  !< number of ghost points in xz-plane on different multigrid level
1268    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_yz      !< number of ghost points in yz-plane on different multigrid level
1269    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ngp_yz_int  !< number of ghost points in yz-plane on different multigrid level
1270    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_x_int  !< derived MPI datatype for 2-D integer ghost-point exchange - north / south
1271    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_xz     !< derived MPI datatype for 3-D integer ghost-point exchange - north / south
1272    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_xz_int !< derived MPI datatype for 3-D integer ghost-point exchange - north / south
1273    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_y_int  !< derived MPI datatype for 2-D integer ghost-point exchange - left / right
1274    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_yz     !< derived MPI datatype for 3-D integer ghost-point exchange - left / right
1275    INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  type_yz_int !< derived MPI datatype for 3-D integer ghost-point exchange - left / right
1276
1277    LOGICAL ::  left_border_pe  = .FALSE.  !< = .TRUE. if PE is on left border of computational domain
1278    LOGICAL ::  north_border_pe = .FALSE.  !< = .TRUE. if PE is on north border of computational domain
1279    LOGICAL ::  reorder = .TRUE.           !< switch to allow MPI the reorder of ranking (e.g. row-major or column-major)
1280    LOGICAL ::  right_border_pe = .FALSE.  !< = .TRUE. if PE is on right border of computational domain
1281    LOGICAL ::  south_border_pe = .FALSE.  !< = .TRUE. if PE is on south border of computational domain
1282
1283    LOGICAL, DIMENSION(2) ::  cyclic = (/ .TRUE. , .TRUE. /)  !< boundary conditions of the virtual PE grid
1284    LOGICAL, DIMENSION(2) ::  remain_dims                     !< internal array used to determine sub-topologies for transpositions
1285#endif
1286
1287    SAVE
1288
1289 END MODULE pegrid
1290
1291
1292!------------------------------------------------------------------------------!
1293! Description:
1294! ------------
1295!> Definition of variables which control PROFIL-output.
1296!------------------------------------------------------------------------------!
1297 MODULE profil_parameter
1298
1299    USE kinds
1300
1301    INTEGER(iwp), PARAMETER ::  crmax = 100  !< maximum number of coordinate systems for profile output
1302
1303    CHARACTER (LEN=27), DIMENSION(20) ::  cross_ts_profiles = &  !< time series to be plotted into one coordinate system, respectively
1304                           (/ ' E E*                      ', &
1305                              ' dt                        ', &
1306                              ' u* w*                     ', &
1307                              ' th*                       ', &
1308                              ' umax vmax wmax            ', &
1309                              ' div_old div_new           ', &
1310                              ' zi_wtheta zi_theta        ', &
1311                              ' w"theta"0 w"theta" wtheta ', &
1312                              ' theta(0) theta(zp)        ', &
1313                              ' splux spluy spluz         ', &
1314                              ' L                         ', &
1315                            ( '                           ', i9 = 1, 9 ) /)
1316
1317    CHARACTER (LEN=100), DIMENSION(crmax) ::  cross_profiles = &  !< quantities to be plotted into one coordinate system, respectively
1318                          (/ ' u v                                          ', &
1319                             ' pt                                           ', &
1320                             ' w"theta" w*theta* w*theta*BC wtheta wthetaBC ', &
1321                             ' w"u" w*u* wu w"v" w*v* wv                    ', &
1322                             ' km kh                                        ', &
1323                             ' l                                            ', &
1324             ( '                                              ', i9 = 1, 94 ) /)
1325
1326    INTEGER(iwp) ::  profile_columns = 2  !< number of coordinate systems on a profile plot per column
1327    INTEGER(iwp) ::  profile_rows = 3     !< number of coordinate systems on a profile plot per row
1328
1329    INTEGER(iwp) ::  dopr_index(300) = 0                !< index number of respective profile quantity
1330    INTEGER(iwp) ::  dopr_initial_index(300) = 0        !< index number of initial profiles to be output
1331               
1332    SAVE
1333
1334 END MODULE profil_parameter
1335
1336!------------------------------------------------------------------------------!
1337! Description:
1338! ------------
1339!> Definition of statistical quantities, e.g. global sums.
1340!------------------------------------------------------------------------------!
1341 MODULE statistics
1342
1343    USE kinds
1344
1345    CHARACTER (LEN=40) ::  region(0:9) =  &  !< label for statistic region
1346                           'total domain                            '
1347 
1348    INTEGER(iwp) ::  pr_palm = 200          !< maximum number of output profiles
1349    INTEGER(iwp) ::  statistic_regions = 0  !< identifier for statistic regions
1350
1351    INTEGER(iwp) ::  u_max_ijk(3) = -1  !< index values (i,j,k) of location where u_max occurs
1352    INTEGER(iwp) ::  v_max_ijk(3) = -1  !< index values (i,j,k) of location where v_max occurs
1353    INTEGER(iwp) ::  w_max_ijk(3) = -1  !< index values (i,j,k) of location where w_max occurs
1354   
1355    LOGICAL ::  flow_statistics_called = .FALSE.  !< flag that tells other routines if flow statistics was executed
1356                                                  !< (after each timestep)
1357   
1358    REAL(wp) ::  u_max = 0.0_wp  !< maximum of absolute u-veloctiy in entire domain
1359    REAL(wp) ::  v_max = 0.0_wp  !< maximum of absolute v-veloctiy in entire domain
1360    REAL(wp) ::  w_max = 0.0_wp  !< maximum of absolute w-veloctiy in entire domain
1361
1362    REAL(wp), DIMENSION(2) ::  z_i  !< inversion height
1363   
1364    REAL(wp), DIMENSION(:), ALLOCATABLE ::  mean_surface_level_height  !< mean surface level height for the different statistic regions
1365    REAL(wp), DIMENSION(:), ALLOCATABLE ::  sums_divnew_l              !< subdomain sum (_l) of divergence after pressure
1366                                                                       !< solver call (new)
1367    REAL(wp), DIMENSION(:), ALLOCATABLE ::  sums_divold_l              !< subdomain sum (_l) of divergence before pressure
1368                                                                       !< solver call (old)
1369    REAL(wp), DIMENSION(:), ALLOCATABLE ::  weight_substep             !< weighting factor for substeps in timestepping
1370    REAL(wp), DIMENSION(:), ALLOCATABLE ::  weight_pres                !< substep weighting factor for pressure solver
1371   
1372    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums             !< global sum array for the various output quantities
1373    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_salsa_ws_l  !< subdomain sum of vertical salsa flux w's' (5th-order advection scheme only)
1374    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsts_bc_l   !< subdomain sum of sensible heat flux in Bott-Chlond scheme
1375    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ts_value         !< timeseries output array for the various output quantities
1376    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsus_ws_l   !< subdomain sum of vertical momentum flux w'u' (5th-order advection scheme only)
1377    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsvs_ws_l   !< subdomain sum of vertical momentum flux w'v' (5th-order advection scheme only)
1378    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_us2_ws_l    !< subdomain sum of horizontal momentum flux u'u' (5th-order advection scheme only)
1379    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_vs2_ws_l    !< subdomain sum of horizontal momentum flux v'v' (5th-order advection scheme only)
1380    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_ws2_ws_l    !< subdomain sum of vertical momentum flux w'w' (5th-order advection scheme only)
1381    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsncs_ws_l  !< subdomain sum of vertical clouddrop-number concentration flux w'nc' (5th-order advection scheme only)
1382    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsnrs_ws_l  !< subdomain sum of vertical raindrop-number concentration flux w'nr' (5th-order advection scheme only)
1383    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wspts_ws_l  !< subdomain sum of vertical sensible heat flux w'pt' (5th-order advection scheme only)
1384    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsqs_ws_l   !< subdomain sum of vertical latent heat flux w'q' (5th-order advection scheme only)
1385    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsqcs_ws_l  !< subdomain sum of vertical cloudwater flux w'qc' (5th-order advection scheme only)
1386    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsqrs_ws_l  !< subdomain sum of vertical rainwater flux w'qr' (5th-order advection scheme only)
1387    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wssas_ws_l  !< subdomain sum of vertical salinity flux w'sa' (5th-order advection scheme only)
1388    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_wsss_ws_l   !< subdomain sum of vertical passive scalar flux w's' (5th-order advection scheme only)
1389    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  sums_ls_l        !< subdomain sum of large scale forcing and nudging tendencies
1390                                             
1391    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  hom_sum             !< sum array for horizontal mean
1392    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  rmask               !< REAL flag array (0.0 or 1.0) for statistic regions
1393    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  sums_l              !< subdomain sum (_l) gathered for various quantities
1394    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  sums_l_l            !< subdomain sum (_l) of mixing length from diffusivities
1395   
1396    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  hom  !< horizontal mean of various quantities (profiles/timeseries)
1397
1398    SAVE
1399
1400 END MODULE statistics
1401
1402
1403
1404!------------------------------------------------------------------------------!
1405! Description:
1406! ------------
1407!> Definition of indices for transposed arrays.
1408!------------------------------------------------------------------------------!
1409 MODULE transpose_indices
1410
1411    USE kinds
1412
1413    INTEGER(iwp) ::  nxl_y   !< internal index bound for transpositions
1414    INTEGER(iwp) ::  nxl_yd  !< internal index bound for transpositions
1415    INTEGER(iwp) ::  nxl_z   !< internal index bound for transpositions
1416    INTEGER(iwp) ::  nxr_y   !< internal index bound for transpositions
1417    INTEGER(iwp) ::  nxr_yd  !< internal index bound for transpositions
1418    INTEGER(iwp) ::  nxr_z   !< internal index bound for transpositions
1419    INTEGER(iwp) ::  nyn_x   !< internal index bound for transpositions
1420    INTEGER(iwp) ::  nyn_z   !< internal index bound for transpositions
1421    INTEGER(iwp) ::  nys_x   !< internal index bound for transpositions
1422    INTEGER(iwp) ::  nys_z   !< internal index bound for transpositions
1423    INTEGER(iwp) ::  nzb_x   !< internal index bound for transpositions
1424    INTEGER(iwp) ::  nzb_y   !< internal index bound for transpositions
1425    INTEGER(iwp) ::  nzb_yd  !< internal index bound for transpositions
1426    INTEGER(iwp) ::  nzt_x   !< internal index bound for transpositions
1427    INTEGER(iwp) ::  nzt_y   !< internal index bound for transpositions
1428    INTEGER(iwp) ::  nzt_yd  !< internal index bound for transpositions
1429               
1430    SAVE
1431
1432 END MODULE transpose_indices
Note: See TracBrowser for help on using the repository browser.