23.03.2017
Version 5.4e now contains all physical parameterizations in blocked format.
New are the ICON versions of the surface schemes (TERRA, FLake, SeaIce) and
the blocked version of the SSO scheme. All old schemes in ijk-data format have
been eliminated.
- Blocked Turbulence Scheme
- Implementation of Surface Schemes in Blocked Data Format
- Blocked Version of the SSO Scheme
- Handling of Arbitrary Number of Tracers in the Blocked Physics
- Elimination of Old Parameterization Schemes
- Changes in the Data Assimilation
- Technical Changes and Adaptations for TWOMOM_SB and COSMOART
- Technical Changes and Bug Fixes
- Changes to the Namelists
- Changes of Results
(by Matthias Raschendorfer, Ulrich Schättler)
The blocked turbulence scheme already has been implemented in Version 5.04a as
an option and in a modified version in 5.04d, where also the possibility to run
vertical diffusion at the end of the physics and on the staggered grid for u
and v has been added. This version now is the default. Therefore the defaults
for several namelist variables have been changed (to unify with ICON):
Group |
Name |
Old Value and Range |
New Value and Range |
/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 |
[0.0..5.0] |
1.0 |
[0.0..5.0] |
/PHYCTL/ |
itype_vdif |
-2 |
[-2..1] |
1 |
[-1..1] |
ltkesso |
.FALSE. |
n.a. |
.TRUE. |
n.a. |
itype_sher |
1 |
[1..3] |
0 |
[0..2] |
imode_tran |
1 |
[1..2] |
0 |
[0..2] |
imode_turb |
1 |
[0..4] |
1 |
[0..2] |
icldm_tran |
0 |
[0..2] |
2 |
[-1..2] |
Notes:
- It is still recommended to use imode_tran=1 (and not the new default 0).
- This new version of the turbulence scheme needs an additional external parameter,
the field SSO_STDH. To provide that field it is recommended to run
INT2LM always with the setting lsso=.TRUE., even if COSMO is run
without SSO scheme.
Back to Contents
(by Jürgen Helmert, Günther Zängl, Dmitrii Mironov, Ulrich Schättler)
The surface schemes (TERRA, SEAICE, FLAKE) and new interfaces for the
COSMO-Model have been implemented in blocked data format.
The following new source modules are now available:
- sfc_interface.f90:
Contains subroutines for initializing and organizing the schemes.
- sfc_flake_data.f90:
Contains common definitions, variables and constants of the lake
parameterization scheme FLake.
- sfc_flake.f90:
Main program unit of the lake parameterization scheme FLake.
- sfc_seaice.f90:
Main program unit of the sea-ice parameterization scheme for NWP.
- sfc_terra_data.f90:
Declares and initializes all parametric scalar and array data which
are used in the soil model.
- sfc_terra.f90:
Soil Vegetation Atmosphere Transfer (SVAT) scheme TERRA
(Nihil in TERRA sine causa fit. - Cicero)
- sfc_terra_init.f90:
Initialization routine for multi-layer soil model:
It contains the preparations that have to be done in time step 0.
Different modes are possible for this routine, choosen by input parameter
init_mode:
- full coldstart is executed (necessary for COSMO)
- warmstart with full fields for h_snow from snow analysis
- warmstart (within assimilation cycle) with analysis increments for h_snow
- sfc_utilities.f90:
Utility routines related to the surface schemes
- diag_snowfrac_tg: diagnosis of snow fraction and computation of t_g
- diag_lh_surfflux: calculates the latent heat flux at the surface from
the water vapour surface flux
Special changes to the implementation used up to now in the COSMO-Model
Differences between the ICON and the COSMO version of TERRA
COSMO now uses the land-surface model TERRA based on the ICON version 2.0.18 with
improvements in the soil heat transfer, in the water budget, and for snow and
vegetation.
- The impact of the vegetation biomass on the transport of heat and
moisture in the soil root zone is now considered.
- The treatment of intercepted water was modified.
(new namelist variable cwimax_ml)
cwimax_ml is used as a scaling parameter for maximum interception
storage. Turned of by default (cwimax_ml=1.E-6).
The configuration for ICON 2.0.18 is cwimax_ml=1.E-4.
- An additional bare soil evaporation scheme was implemented
(itype_evsl=4).
The developments implemented in ICON since the initial TERRA version taken from
COSMO V4_13 have been merged with the COSMO modifications from V4_13 to V5_4d
in this new version.
Only working on special grid points
Up to now the surface schemes were working on the full COSMO fields and used
IF-constructs to work only on the necessary grid points, as e.g. IF (llandmask(i,j))
in TERRA. Now only the necessary grid points are given to the surface schemes,
which makes an additional copy necessary before calling the schemes.
The additional copies are done in the subroutine sfc_organize (in sfc_interface).
Special snow fraction diagnosis and computation of t_g
The diagnosis of the snow fraction and the computation of t_g have been extracted
from TERRA and a new subroutine diag_snowfrac_tg has been implemented, which is
called after terra_init and after terra.
For the diagnosis of the snow fraction several options have been implemented,
but in this version only the old COSMO option is activated.
Another namelist variable has to be implemented to also have
the possibility of choosing other options.
Other technical changes related to the introduction of the blocked surface schemes
- Use of new data modules sfc_terra_data and sfc_flake_data:
Many modules were using the old data modules data_soil and data_flake.
The names have been updated in these modules:
- acc_global_data.f90
- dfi_initialization.f90
- lmorg.f90
- radiation_interface.f90
- radiation_utilities.f90
- slow_tendencies.f90
- src_artifdata.f90
- src_gridpoints.f90
- src_input.f90
- src_setup.f90
- turb_diffusion.f90
- turb_transfer.f90
- turbulence_diff.f90
- turbulence_tran.f90
- Changes in data_constants.f90:
Now all variables in data_constants are really set as PARAMETERs and are
set at compile time. The subroutine set_constants has been eliminated.
Note, that because of this the results are changed by GNU and by Cray compilers
(perhaps also other compilers).
Variables, which are no PARAMETERs, are moved to other modules.
And, subsequently, the USE of these variables has to be modified accordingly
in other modules
- qc0, qi0 to gscp_data.f90:
affects also all gscp_* modules and src_setup.f90
- aks2, aks4 to organize_dynamics.f90
affects also: dfi_initialization.f90, src_advection_rk.f90,
src_leapfrog.f90, src_runge_kutta.f90
Back to Contents
(by Katherine Osterried)
A blocked version of the SSO scheme, which is also able to run on GPUs has been
implemented. In principle this version is bit-reproducible to the former COSMO
version and also to the ICON version of this scheme.
But the results of a COSMO simulation using the SSO scheme will be changed,
because in the blocked version, the scheme is now running on the full model domain,
while in the ijk-version it was only running in the interior of the domain.
Back to Contents
(by Xavier Lapillonne)
In order to be able to handle an arbitrary number of tracers in the automatic
copy to block infrastructure (src_block_field module) some functionality was
moved in the tracer module.
New data structures now hold all the block tracers and their tendencies.
The allocation and correspondence between block field and ijk field is done
automatically.
The user still has to specify which tracers are to be copied back and forth
for each parameterization, a new function register_copy_tracer is provided
to make this easier. Tracer tendencies are handled in a similar way.
Further details
- Data storage trcr_data_b and trcr_data_tens_b in
data_tracer.
- Tracer and tracer tendency pointers can be obtained via trcr_get.
Note: |
For tracers in block format there is no time swapping, this is however
hidden to the user. Tracers are obtained with nnow or
nnew, which are then internally mapped to the corresponding
static indices.
|
- Tracers are automatically registered in register_block_field_all_tracer
in src_block_fields_org.f90.
- Helper functions register_copy_tracer and register_copy_tracer_tens in
src_block_fields_org.f90 are provided to register the tracers copy:
Example 1: |
The following call registers timelevel nnow for the tracer with
index idt_no in the copy-list for parameterization par.
Copying is from ijk to block-structure: |
|
CALL register_copy_tracer (idt_no, nnow, parCopyList, copyToBlockF) |
Example 2: |
The following call registers the tendency for the tracer with
index idt_no in the copy-list for parameterization par.
Copying is from block to ijk-structure:
|
|
CALL register_copy_tracer_tens (idt_no, parCopyList, copyFromBlockF) |
The Tiedtke convection scheme has been modified accordingly:
- Two lists are created:
- conv_trcr_tran: a list of tracers that should undergo convective transport
- conv_trcr_tend: a list of their tendencies
- All pointers in these lists are treated by the automatic copy-in/copy-out by
applying the register_copy_tracer and register_copy_tracer_tens, resp.
Back to Contents
The module organize_physics has been adapted to use now only the new blocked
version of all parameterization schemes.
The following old schemes in ijk-format, which were still in the code,
have now been eliminated:
- src_gscp.f90, data_gscp.f90
- src_radiation.f90, data_radiation.f90
- src_sso.f90
- turbulence_interface.f90, turbulence_utilities.f90, turbulence_tran.f90
turbulence_diff.f90
- src_soil_multlay.f90, src_soil.f90, data_soil.f90
- src_flake.f90, src_flake_sfcflx.f90, data_flake.f90
- src_seaice.f90
- src_conv_tiedtke.f90, src_conv_shallow.f90, data_convection.f90
Back to Contents
(by Christoph Schraff)
- Bug fix in the conditions when to write observations to the feedback file.
- Without active nudging (e.g. for KENDA), dtqc is now set equal to tconbox
to make sure that all observations are written to a feedback file in a data
assimilation cycle. If dtqc > tconbox in the namelist settings of the user,
this modification also has the effect that the observation operator is
in general applied closer to the observation time.
This modification also leads to a slightly (!) increased computation time.
The modifications which should be regarded as bug fixes will change the results
in data assimmilation mode slightly (or more strongly, if some observations
have been missed for assimilation by KENDA in the old version).
Back to Contents
(by KIT, Ulrich Blahak, Ulrich Schättler)
There have been changes by KIT on cloud radiation coupling and to calculate optical
properties of hydrometeors based on the 2-moment scheme. This work can only be
used when both, the 2-moment scheme (-DTWOMOM_SB) and the COSMO-ART (-DCOSMOART)
are activated during compiling and linking. Corresponding parts in the code
are now encapsulated with
#if defined TWOMOM_SB && defined COSMOART
Modifications to the COSMO code are implemented in this version.
Additional source code is necessary to use the cloud radiation coupling.
This code is located in ./LOCAL/TWOMOM and must be copied to the src-directory
before compiling and linking:
- data_cloud_opt.f90
- reff_calc_utilities.f90
- src_cloud_opt_reff.f90
- src_reff_calc.f90
There are also additional files in ./LOCAL/TWOMOM
- ObjDependencies.cloud_opt
- ObjFiles.cloud_opt
which must be used when compiling the code. The corresponding Files
- ObjDependencies.twomom
- ObjFiles.twomom
have been updated, because some of the code was located in TWOMOM- and/or ART-routines
before.
Also, the vertical diffusion of additional tracers has been activated in the
new module turb_vertdiff.f90 using the tracer handling in the blocked version.
Back to Contents
Bug Fixes from sub-versions 5.04d1, 5.04d2 and 5.04d3:
- conv_interface.f90: (by Ulrich Schättler)
Bug fixes for Tiedtke-Bechtold convection (itype_conv=2):
- computing mean approximate model resolution (wrong brackets setting)
- allocation / deallocation of ktype_b in conv_in_wkarr_[alloc|dealloc]
- hori_diffusion.f90: (by Oliver Fuhrer)
Bug fix in targeted cold pool diffusion in case of nboundlines = 2:
In subroutine targeted_diffusion_cold_pools the start indices for treating
the [western|eastern|northern|southern]_boundaries had to be adapted.
- io_metadata.f90: (by Dörte Liermann, Jean-Marie Bettems)
Bug fix for writing lengthOfTimeRange in GRIB2:
When writing statistically processed products in GRIB2 with a frequency
less than an hour, the lengthOfTimeRange has been (implicitely by grib_api)
set to a value corresponding to the units hour, but the model then
uses the unit minute. The following 2 measures avoid this:
- set indicatorOfUnitForTimeRange before setting endStep
- also set lengthOfTimeRange explicitely
Every measure would solve the problem by itself!
- organize_data.f90: (by Ulrich Schättler, Xavier Lapillonne)
Bug fix for checking _ANAI-string: use MAX(1,LEN_TRIM(yvarml(ii))-3)
as first character in the string that is compared.
For GRIB2 output, the ANAI-fields cannot be written at the moment,
because the shortNames are not yet defined. Therefore a check is done
and ANAI-fields are removed from the list of output variables.
But in the check (LEN_TRIM(yvarml(ii))-3) was used, which is < 0
for several variables, where the shortName is shorter than 4. This causes
array bound checking to stop the program. A save way has been implemented now.
- src_cpp_dycore.f90: (by Pascal Spoerri)
Integrated lic2bc also for the C++ dycore.
- src_obs_cdfout_feedobs.f90: (by Christoph Schraff)
The writing of reports without observations is avoided now.
- src_output.f90: (by Ulrich Blahak)
- Bug fix for allocation of array int_cmpr_tot in computation of LPI:
The array int_cmpr_tot was only allocated in the MPI task that has to write
the results to disk, but all MPI tasks pass it to the subroutine
gather_fields: This causes array bound checking to stop the program
Therefore it is now allocated in all tasks.
- Bug fix for writing DBZ in case of RADARFWO:
Before doing z- or p-interpolation, values of DBZ have to be scaled to
linear ones. This had been forgotten.
- turb_vertdiff.f90: (by Ulrich Schaettler)
Renamed variable aux to zaux when using from turb_data.
- utilities.f90: (by Oliver Fuhrer, Ulrich Schättler)
Implemented PURE functions is_nan and is_inf to check for
nan and inf-values.
Neither the explicit check (x/=x) nor the non-standard function isnan
works for all compilers. In addition, also infinity values have to be
checked (occur through a division by zero). Therefore, 2 functions
is_nan and is_inf have been implemented, which either do checks using
the ieee_arithmetic module (Fortran 2003) or the explicit checks
(x/=x for NaN, ABS(x) > HUGE(x) for Inf).
Some Notes:
- the ieee_arithmetic module for GNU is only available with version 5
or higher.
- the explicit check x/=x for NaN does not work with Cray cce compiler
- the explicit check x/=x for NaN works with the PGI compiler only,
if utilities.f90 is compiled with the option -Kieee
To activate the ieee_arithmetic module, utilities.f90 has to be compiled
with the pragma IEEE_INTR. Otherwise the explicit checks will be done.
Note: |
The pragma IEEE_INTR replaces the pragme ISNAN, which
was used in version 5.04c. |
Speciality in utilities.f90:
Checking for NaN- or INF-values can now be done in two different ways:
- Using a Fortran2003 module ieee_arithmetic (routines ieee_is_nan, ieee_is_finite):
To activate these modules, utilities.f90 has to be compiled with the new
pragma -DIEEE_INTR.
- This Fortran2003 module is not available for all compilers (e.g. GNU below
version 5.0). For that, extra PURE functions have been implemented, which
check
- for NaN by comparing (x /= x): this should give .TRUE. for a NaN.
- for INF by comparing (ABS(x) > HUGE(x)):
which should give .TRUE. for a INF.
- Note, that these comparisons are not working on Cray Compiling Environment (cce).
For Cray machines it is recommended to compile with -DIEEE_INTR.
- Note that these checks in the model are only done for idbg_level >= 3.
Further Technical Changes:
- pp_utilities.f90: (by Ulrich Blahak)
Declared function gamma_fct as PURE.
- conv_tiedtke.f90: (by Lucio Torrisi)
Replaced thick_dc at one place in the code with the fixed value of 200hPa
again, which gives an improvement in upper level field.
This will change results, if the namelist switch thick_dc is not set to
the default of 200.0 hPa.
Back to Contents
There are two new namelist variables:
Group |
Name |
Meaning |
Default |
/RUNCTL/ |
ldebug_sso |
NEW |
if .TRUE., debug output for SSO scheme is activated. |
.FALSE. |
/PHYCTL/ |
cwimax_ml |
NEW |
maximum interception water content:
cwimax_ml is used as a scaling parameter for maximum
interception storage. Turned off by default (cwimax_ml=1.0E-6).
The configuration for ICON 2.0.18 is cwimax_ml=1.0E-4. |
1.0E-6 |
For the new version of the prognostic TKE turbulence scheme, default values
(and allowable range) for some namelist variables have been changed:
Group |
Name |
Old Value and Range |
New Value and Range |
/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 |
[0.0..5.0] |
1.0 |
[0.0..5.0] |
/PHYCTL/ |
itype_vdif |
-2 |
[-2..1] |
1 |
[-1..1] |
ltkesso |
.FALSE. |
n.a. |
.TRUE. |
n.a. |
itype_sher |
1 |
[1..3] |
0 |
[0..2] |
imode_tran |
1 |
[1..2] |
0 |
[0..2] |
imode_turb |
1 |
[0..4] |
1 |
[0..2] |
icldm_tran |
0 |
[0..2] |
2 |
[-1..2] |
Back to Contents
The new versions of the surface schemes and the prognostic TKE turbulence scheme do
change the results.
The blocked version of the SSO scheme in principle is bit reproducible to the scheme
used in the COSMO-Model up to now, but as it is now used also at the boundaries, the
overall results of a simulation do change.
Back to Contents