12.05.2016
Version 5.4a is a development version, which will not be officially released.
The most significant change is the implementation of the blocked version of the
COSMO-ICON turbulence scheme, but per default, this is not activated yet.
- COSMO-ICON Version of Prognostic TKE Turbulence Scheme
- Additional Changes in the Physics
- Changes in the Dynamics
- Technical Changes and Bug Fixes
- Changes to the Namelists
- Changes of Results
(by M. Raschendorfer, U. Schättler)
Implemented latest ICON version to COSMO
In the last years the prognostic TKE scheme (TURBDIFF) has been further developed
in the frame of the global model ICON by Matthias Raschendorfer and partly by
Günther Zängl. This version is now implemented in the COSMO-Model including a
major reorganization of the code.
Changes to the scheme are (among others):
- Employment of common subroutines for solving the turbulent 2-nd order equations
and the related thermodynamics that are called also by the surface-to-atmosphere
transfer (SAT) scheme (in SR turbtran).
- Application of the full moist turbulence statistics applied also for the surface
layer, allowing for consistent interpolation of vertical profiles at the 2m-level
in terms of conserved variables.
- Reaching an easier formulation of resistances for surface-to-atmosphere transfer
by using the additional arrays tvm, tvh and tkm.
- Activating an optional stable branch (with an hyperbolic interpolation) for
evaluating the vertical integrals of transfer resistances.
- Using a modified definition of specific humidity at saturation, based on partial
pressure of dry air, which can be applied even at levels with very small pressure.
- Providing a new (optional) version of a positive definite prognostic TKE-equation.
- Providing less restrictive correction of potential singularies in the solution of
stability functions.
- Different treatment of numerical security limits that can be gradually decreased
with consequences mainly for the stable boundary layer. They have the form of some
smoothing routines or additional security factors and are related to the solution
of the TKE-equation, the treatment of the linear system of the stability functions,
the calculation of forcing terms and the finally derived variable tendencies.
- A new, more general, treatment of (semi-implicit) vertical diffusion is now included
in the package (in SR turbdiff) and can be called for arbitrary tracers and
also prognostic half-level variables (like TKE), as well as for non-gradient
diffusion (as applied e.g. for the non-turbulent near surface circulation term).
The new routine also allows for the treatment of explicit surface fluxes from a
data field and it provides an optional dynamical calculation of implicit weights
as well as the application of an optional preconditioning of the related
(tridiagonal) linear system.
- Some modification for TKE-initialization based on the usual model output (required
for restart with the ICON-model).
- Introduction of a Ri-dependent corrections for minimal diffusion coefficients,
for a minimal velocity scale of the transfer layer and for the length scale of
non-isotropic separated horizontal shear eddies (generating an additional TKE
production term).
- Introduction of a wind-dependent Charnock parameter for estimation of sea
surface roughness.
- Introduction of a SSO dependency for the so far constant pattern-length-scale
(used in the formulation of TKE-production by non-turbulent near surface
circulations).
- Allowing an optional free-slip condition for idealized test runs.
- Shifting of all horizontal operations (like the interpolation of wind components
to mass positions and the calculation of horizontal shear) from the blocked
routines towards an interface.
The new generalized subroutine for vertical diffusion is now part of the common
COSMO-ICON physics and it substitutes the diffusion routines (specific for each
quantitiy) in the dynamics. The organization of vertical diffusion in COSMO can
be chosen by the NAMELIST selectors itype_vdif and imode_mdif.
Most of the various modifications compared to the previous version can
be switched on or off, and even additional options can be selected by means of
the following switches, selectors or tuning variables, which are all contained
and explained in module turb_data, such as:
- lsflcnd, ldynimp, lprecnd, ltkeshs, loutshs, lfreeslip,
- imode_pat_len, imode_frcsmot, imode_shshear, imode_tkvmini, imode_rat_sea,
imode_vel_min, imode_charpar,
- imode_stbcorr, imode_syndiag, imode_qvsatur, imode_stadlim, itype_diag_t2m
imode_trancnf, imode_tkediff, imode_adshear, imode_tkemini, imode_lamdiff
- imode_tran, imode_turb, icldm_tran, icldm_turb, itype_sher
- ditsmot, tndsmot, frcsmot, tkesmot, stbsmot, frcsecu, tkesecu, stbsecu.
Only few of them are also contained in COSMO-namelists, the others are so
far fixed coded.
Code Structure of the New Scheme
There are 5 new modules in the COSMO-Model:
- turb_data.f90:
This module contains variables used in the turbulence scheme:
- physical parameters and constants
- variables to tune or control the scheme
- fields for local memory
Note that turb_data.f90 is now also used in the old version of
the prognostic TKE scheme, which is still available in the source code.
- turb_utilities.f90:
Includes utility functions and subroutines used in the scheme.
- turb_transfer.f90:
Module for computing the coefficients for turbulent transfer
of momentum, sensible and latent heat flux. Also, the values
for near-surface variables (2m and 10m) are calculated.
- turb_diffusion.f90:
Module for computing the diffusion coefficients.
- turb_interface.f90:
Interface module between the COSMO-Model and the turbulence scheme.
Changes to the Namelist Variables
There are four new Namelist variables. With itype_vdif the type of vertical
diffusion can be chosen. For the moment being also the old scheme can be chosen by
itype_vdif=-2 (which is the default value).
Group |
Name |
Meaning |
Default |
/PHYCTL/ |
itype_vdif |
NEW |
To choose the type of vertical diffusion calculation:
- Call the old non-blocked prognostic TKE scheme without vertical diffusion.
- Turbulent diffusion is calculated by the previous routines of the dynamics.
- Turbulent diffusion is computed just after the calculations
of the turbulence model by using the same routine as
in ICON from turb_utilities.f90 applied to vertical profiles
defined at (or interpolated to) horizontal mass positions.
- This option is not yet available, but will be added later:
Turbulent diffusion is computed at the end of the physics using collected
explicit tendencies (and also using the same routine as in ICON)
In this case the mode of momentum diffusion can be further controlled by
imode_mdif.
|
-2 |
imode_mdif |
NEW eliminated again in 5.04d |
To further control vertical diffusion of momentum:
- Same as "0", but using the explicit wind tendencies
already present at mass-positions (if requested).
- Diffusion of momentum (together with that of scalars)
on horizontal mass positions and never using any
explicit wind tendencies in implicit diffusion equation.
- Extra call for diffusion of each wind-component
applied to the staggered wind positions.
|
0 |
ltkeshs |
NEW |
Consider separated horizontal shear production for TKE. |
.TRUE. |
lsflcnd |
NEW |
Lower surface flux condition. |
.TRUE. |
Some variables will have a different default (and range of acceptable values) in the
old and the new version of the scheme. For the moment being all defaults are set as
before, because per default the old scheme is still running. If the new scheme is
activated (with itype_vdif = -1 / 0, it is recommended to set the "new" values
per namelist settings.
Group |
Name |
Old Value and Range |
New Value and Range |
/PHYCTL/ |
ltkesso |
.FALSE. |
n.a. |
.TRUE. |
n.a. |
itype_sher |
1 |
[1..3] |
0 |
[0..3] |
imode_tran |
1 |
[1..2] |
0 |
[-1..2] |
imode_turb |
1 |
[0..4] |
1 |
[-1..2] |
icldm_tran |
0 |
[0..2] |
2 |
[-1..2] |
/TUNING/ |
tkhmin |
0.4 |
[0.0..2.0] |
0.75 |
[0.0..2.0] |
tkmmin |
0.4 |
[0.0..2.0] |
0.75 |
[0.0..2.0] |
rat_sea |
20.0 |
[1.0..100.0] |
10.0 |
[1.0..100.0] |
pat_len |
500.0 |
[0.0..10000.0] |
100.0 |
[0.0..10000.0] |
a_hshr |
0.2 |
?? |
1.0 |
?? |
Old Scheme and how to Switch on the New Scheme
The old (non-blocked) version of the prognostic TKE scheme is still available in the
source code and can be activated by a namelist switch. The new namelist switch
itype_vdif has been chosen for this purpose:
Possible values for itype_vdif:
- =-2: Call the old scheme for the prognostic TKE:
This code will remain for some time in the model to allow all users a
smooth transition in the next months.
- >-2: Call the new COSMO-ICON blocked version for the prognostic TKE.
Note that the module names of the old scheme start with turbulence_xxx instead of
turb_xxx!
Influences to other Modules
The module turb_data.f90 replaces the existing data module turbulence_data.f90.
As some of the other COSMO modules need to use variables from this module, there are
also changes to these modules:
- lmorg.f90
- near_surface.f90
- radiation_utilities.f90
- slow_tendencies.f90
- src_artifdata.f90
- src_radiation.f90
- src_seaice.f90
- src_setup.f90
- src_sing_local.f90
- src_slow_tendencies_rk.f90
- src_turbulence.f90
- turbulence_diff.f90
- turbulence_tran.f90
- turbulence_interface.f90
- turbulence_utilities.f90
Implemented Blocking Version of this Scheme
(by U. Schättler)
The copy-in/copy-out mechanism has been implemented for the variables used in the
turbulence scheme. Also, all local memory used in the turbulence scheme is now
allocated / deallocated by routines turb_wkarr_alloc/_dealloc. All local memory is
declared in the module turb_data.f90 as THREADPRIVATE for usage in the hybrid
implementation of ICON.
Back to Contents
(by Xavier Lapillonne)
Changes to src_block_fields.f90
Adapted code to support INTEGER and LOGICAL fields.
This does not affect the user interface.
Internal type specific routines have been renamed with
real / int / logical
Back to Contents
Bugfix in the Slope-Dependent Divergence Damping Coefficient
(by Michael Baldauf)
A missing metric correction term in subroutine init_div_damping_coeff has
been inserted. The effect is an increase of the divergence damping coefficient
in the middle troposphere over steep terrain and a further reduction directly
over mountains. This Bugfix will improve numerical stability in steep terrain.
The model results will be slightly changed, but relevant influence to the
forecast quality is not expected.
Important: |
A change in the Namelist-group /DYNCTL/ is necessary:
For the variable divdamp_slope values of 20.0...100.0 have been recommended
up to now. Due to this change, divdamp_slope should now always be 1.0 for
all resolutions. See the new default value and acceptable range in the following
table.
|
Group |
Name |
Meaning |
Default |
/DYNCTL/ |
divdamp_slope |
changed default and range |
Exceed the theoretical slope stability
criterion of the divergence damping.
Range of acceptable values is 0.1 ... 3.0 |
1.0 |
Added Namelist Variable l_satad_dyn_iter
(by P. Spoerri)
The number of iterations for the saturation adjustment is determined dynamically
in the Runge-Kutta and in the Leapfrog dynamical cores. This number depends on the
maximal vertical velocity in the surrounding of a grid point. In order not to have
a different number of iterations for every grid point (which would disturb
vectorization) a single number is determined for all grid points in a subdomain
by computing the maximal vertical velocity in the subdomain. If reproducible
results are desired, a global communication is done to determine the maximal
vertical velocity over the full domain.
Because global communications are very expensive (at least when using a large
number of subdomains), a namelist variable has been introduced to switch off the
dynamical determination of the number of iterations. A fixed number of 3 iterations
is done then. This is the maximum number of iterations that can be done by the
dynamical determination of this number.
This flag is needed for the C++ dycore because global reductions are expensive
and not needed in most cases.
Group |
Name |
Meaning |
Default |
/DYNCTL/ |
l_satad_dyn_iter |
NEW |
If set to .FALSE., this disables the dynamical
number of iterations for the saturation adjustment in the runge kutta
dynamical core and a fixed number of 3 iterations is done then. |
.TRUE. |
The default setting does not change the behavior of the code.
Minor Changes to Dynamical Core for Serialization
(by P. Spoerri)
These changes were necessary for verifying the FastWavesSC Unit test
(with the exception of the Runge-Kutta solver and advection pd).
- fast_waves_sc:
Addition of u_compl, v_compl, w_compl, t_compl
and pp_compl to serialize data from correct time level when running
the FastWavesSCUnittest.
- src_cpp_dycore:
Replacement of t_s with t_g in the dycore wrapper interface.
Adapted the dycore_verify_pointers interface accordingly. Increasing
the dycoreInterfaceVersion to 11.
- src_tracer:
Integrated an optional argument in trcr_get_byindex to obtain
tracer boundary without time level (merged from pompa).
Back to Contents
- mo_fdbk_cosmo.f90:
Initialization of vector-buffers in subroutines write_report_radar_1 and
write_report_radar_2 within the loops and not outside.
- mo_fdbk.f90:
Added the RADAR optional flag to dlon and dlat to add_var (nc, ...)
to make dlat and dlon available for radar file bodies.
- src_obs_fdbk_in.f90:
wp was used from data_parameters and kind_parameters.
- src_input.f90:
Reading NetCDF Data without HHL: lzchecklist must not be set then.
Back to Contents
Group |
Name |
Meaning |
Default |
/DYNCTL/ |
divdamp_slope |
changed default and range |
Exceed the theoretical slope stability
criterion of the divergence damping.
Range of acceptable values is 0.1 ... 3.0 |
1.0 |
l_satad_dyn_iter |
NEW |
If set to .FALSE., this disables the dynamical
number of iterations for the saturation adjustment in the runge kutta
dynamical core and a fixed number of 3 iterations is done then. |
.TRUE. |
/PHYCTL/ |
itype_vdif |
NEW |
To choose the type of vertical diffusion calculation:
- Call the old non-blocked prognostic TKE scheme without vertical diffusion.
- Turbulent diffusion is calculated by the previous routines of the dynamics.
- Turbulent diffusion is computed just after the calculations
of the turbulence model by using the same routine as
in ICON from turb_utilities.f90 applied to vertical profiles
defined at (or interpolated to) horizontal mass positions.
- This option is not yet available, but will be added later:
Turbulent diffusion is computed at the end of the physics using collected
explicit tendencies (and also using the same routine as in ICON)
In this case the mode of momentum diffusion can be further controlled by
imode_mdif.
|
-2 |
imode_mdif |
NEW |
To further control vertical diffusion of momentum:
- Same as "0", but using the explicit wind tendencies
already present at mass-positions (if requested).
- Diffusion of momentum (together with that of scalars)
on horizontal mass positions and never using any
explicit wind tendencies in implicit diffusion equation.
- Extra call for diffusion of each wind-component
applied to the staggered wind positions.
|
0 |
ltkeshs |
NEW |
Consider separated horizontal shear production for TKE. |
.TRUE. |
lsflcnd |
NEW |
Lower surface flux condition. |
.TRUE. |
Back to Contents
The bug fix in fast_waves_sc for the slope-dependent divergence damping
coefficient changes the results.
If the new blocked version of the prognostic TKE turbulence scheme is used
(itype_vdif > -2), this will also change the results.
Back to Contents