23.02.2018
After implementing several development versions 5.04a-h, the new version
COSMO-Model 5.05 is finally available. There have been some more modifications
compared to 5.04h, which are documented below.
Now all physical parameterizations are in blocked data format and most packages
are shared with the global model ICON. However, tests at DWD to use the ICON
settings also for COSMO have not been successful. Therefore, DWD now uses a
model configuration which reproduces the settings of the old ijk physics
as close as possible. But of course it is also possible to run and test the
new ICON-like setup for the physics. How to choose these setups is
described in an extra documentation Different
Configurations for the COSMO-ICON Physics.
Together with the COSMO-ICON Physics (but also due to other developments)
several changes to the Namelist variables have been introduced. We summarize
the most important changes in
Summary of Namelist Changes.
- Latest Modifications (on 25.05.18)
- Porting Additional COSMO Parts to GPU
- GCL Communication Library for GPU Communication
- Update STELLA and Serialbox Version
- Optimization of Global Communication in Latent Heat Nudging
- New Output Variables for Maximum Echotops between Output Steps
- New Output Variables for Low-Level Moisture Convergence
- Using src_lbc in lmorg (SR initialize_loop)
- Radar Forward Operator
- New Option for Targeted Cold Pool Diffusion
- Modifications to the Turbulence Scheme
- Technical Changes and Bug Fixes
- Changes to the Namelists
- Changes of Results
Some problems could still be identified when running the Technical Test Suite
and also when running in single precision.
These modifications came to late for the release at DWD, therefore at DWD
they are implemented in a version 5.05_1, while for the public release they
are contained in Version 5.05.
Problems in the Single Precision Version
- gscp_cloudice.f90, gscp_graupel.f90:
Set precipitation fluxes at the ground to zero, if they are less than zqmin (1.0E-15).
These changes would affect the results also in double precision, therefore the
modifications are encapsulated in ifdef SINGLEPRECISION at the moment.
- turb_transfer.f90:
Is now fixed with patch 5.05_1.
Allocation of working arrays in Nudging
- src_obs_use_org.f90:
Subroutine organize_nudging in module src_obs_use_org.f90 has been modified:
Conditions for setting of lfirst=.FALSE. have been modified, so that the
call to local_info_aux, which allocates some working arrays, is only done once.
(PGI compiler in debug mode detected the double allocation in STEP 1).
Deactivating SPPT for GPU runs
- src_setup.f90:
Have to de-activate SPPT (temporarily) for GPU runs because of a problem.
Back to Contents
(by Xavier Lapillonne and the MCH GPU Team: Katherine Silverthorne-Osterried,
Stephanie Westerhuis, Daniel Regenass, Pascal Spoerri, Valentin Clement,
Hannes Vogt, Carlos Osuna, Oliver Fuhrer, et al.)
Now nearly all physical parameterizations (with the exception of the seaice scheme),
the nudging and the latent heat nudging have been ported to GPU. Additional
modifications to organize_physics.f90 and the interface routines for the parameterizations
were necessary to run all parameterizations on the GPU without GPU-CPU synchronization.
Special work packages are:
- Microphysics:
Also added serialization statements.
- FLake: (by Carlos Osuna and Xavier Lapillonne)
Added OpenACC directives to Flake. In order for the code to work
correctly with OpenACC all the local parameters need to be passed
as arguments to subroutine used as acc routine. The argument list
of internal subroutine have been changed accordingly.
- TERRA-init:
- src_lbc.f90 and parts of lmorg.f90: (by Oliver fuhrer and Valentin Clement)
Added OpenACC directives to src_lbc.f90 as well as nullify_tracers,
set_trcr_special_bc and exchange routines in lmorg.f90.
- organize_physics.f90:
- Ported several parts of organize_physics.f90 to GPU;
- Removed acc updates inside all ported parameterization;
- Reduce number of CPU-GPU data synchronization;
- Added serialization;
- Nudging and latent heat nudging:
Back to Contents
(by Pascal Spoerri and Valentin Clement, MCH)
Introduce calls in the Fortran part of COSMO to the GPU-GPU
communication library GCL which is part of the STELLA library.
This allows for direct communication between GPUs without requiring
to copy data back to the host.
Back to Contents
(by Hannes Vogt and Xavier Lapillonne, MCH)
- Default STELLA version upgraded to 1.05.00 for the C++ dynamical core.
- Now using serialbox2 library for serialization.
- Added new serialization statment for the physics.
Back to Contents
(by Ulrich Schättler, DWD)
If requested (with lhn_search=.TRUE.) the latent heat nudging searches for
a grid point with a suitable precipitation rate in the vicinity of a given
grid point. The vicinity is determined by a "radius" around the considered
grid point (rlhn_search: number of grid points for search radius, usually
about 10). This radius usually is larger than the number of grid points used
for nearest neighbour exchange, so a special communication is necessary to
pass values of all necessary grid points to a subdomain.
Up to now a global communication is done to gather three global fields
(orography, precipitation rate, precipipation corresponding to climatological
heating profile) onto all PEs in every time step. But if using many cores,
this global communication destroys scalability, therefore an alternative
communication method has been implemented that only passes necessary values
by point-to-point communication.
A new module lhn_utilities.f90 has been implemented with methods to organize
this special point-to-point communication (to gather a "pseudo-total" field):
- gather_pseudotot_init:
- allocate necessary data structures:
recv_lhn_buf, send_lhn_buf |
buffers for sending / receiving |
send_lhn_idx |
to store indices of grid points to send |
recv_lhn_req, send_lhn_req |
handles for send / receive requests |
- Fill organizational data structures.
- Global communication to gather orography only once and keep it
in memory until latent heat nudging is over.
- gather_pseudotot_send_recv:
fill send buffers and init non-blocking receives and send.
- gather_pseudotot_getdata:
WAIT for all communication and fill data structures.
- gather_pseudotot_cleanup:
Deallocate memory again.
Back to Contents
(by Ulrich Blahak, DWD)
The new variables can be accessed with the new shortnames:
- ECHOTOPinM (shortName in yvarml:
Maximum height in meters at which a certain reflectivity threshold in dBZ exists,
taken from the last output timestep of this quantity to the actual time. The height
is linearily interpolated to the exact threshold between neighbouring model levels.
- ECHOTOP (shortName in yvarml:
Similar to ECHOTOPinM, but here the minimum pressure in Pa instead of maximum
height is given. Here the pressure is interpolated from the pressure values
of neighbouring model levels.
If these variables appear in different GRIBOUT namelists, the result will always be
the maximum respectively minimum since the last output time step, regardless in which
GRIBOUT namelist it appeared, similar to other existing "cell track" variables
(UH_MAX, W_CTMAX, LPI_MAX, DBZ_CTMAX, etc.)
It is possible to specify several different dBZ-thresholds for each of the two
variables via the new namelist parameter dbzthresh_echotop" (namelist IOCTL).
dbzthresh_echotop is a list of integers (at most 10) in dBZ and is used equally
for both parameters. If this list contains N thresholds, ECHOTOPinM and ECHOTOP
will have N different "levels" of the new leveltype echoTopInDBZ. In grib2 the
corresponding level value is stored in the key scaledValueOfFirstFixedSurface
in units of dBZ. Note that to output ECHOTOPinM and ECHOTOP in grib2 using
grib_api, the newest local definitions from DWD (> 1.23.1) are needed.
Group |
Name |
Meaning |
Default |
/IOCTL/ |
dbzthresh_echotop |
NEW |
(Vector of at most 10 integers)
Threshold(s) for which to compute ECHOTOPinM and ECHOTOP
if one or both are specified in the list of model level output
variables (yvarml in GRIBOUT).
|
18,-1000,...,-1000 |
Back to Contents
(by Ulrich Blahak, DWD)
The new variables can be accessed with the new shortnames:
- MCONV:
Instantaneous value of the low level moisture convergence in units of m/s.
MCONV is the vertical integral of the horizontal water vapor mixing ratio flux
convergence, taken over the lowermost terrain-following 1000 m of the atmosphere.
Positive values denote convergence, negative values divergence. The convergence
is computed from its flux-form representation -DIV(qv*v_H) , approximated for
flat terrain.
- MCNV_CTMAX:
is the maximum amplitude value (positive or negative) of MCONV since the last
output time step, similar to ECHOTOP, UH_MAX etc. To output MCNV_CTMAX in grib2
using grib_api, the newest local definitions from DWD (> 1.23.1) are needed.
Back to Contents
(by Katherine Osterried, Ulrich Schättler, DWD)
For setting the boundaries for the atmospheric fields, the routine
lbc_interpolate from module src_lbc is used now. This subroutine only sets
the boundaries, and not the full fields, as was done before. Therefore
the subroutine calps cannot be called anymore, but this is also not necessary
at this place.
The implementation has been taken from a work done by Katherine Osterried
in 2016. But only the "atmospheric part" is taken. The corresponding work
for setting the boundaries of several surface fields has not been taken,
because for special runs (artificial test cases without physics or at
least without TERRA) we need to set the full fields, not only the boundaries.
These would lead to a mixture of different calls (init_copy, lbc_interpolate)
and would make the code even more difficult to read as it is now.
Back to Contents
(by Ulrich Blahak, DWD)
The interfaces to the radar forward operator have been adapted to the new
version. Note that the radar forward operator itself is not yet part of the
COSMO-Model.
Back to Contents
(by Guy De Morsier, MCH)
Implemented a switch (in /DYNCTL/) for a new scheme for cold pool diffusion:
l_diff_cold_pools_uv (Default: .FALSE.)
- For the new scheme, the threshold (10K) is computed over the 8 neighboring
grid points instead of only 4 to detect a cold pool.
- A box-filter is applied on the detected thresholds. This increases the
application domain for a detected cold pool from 1 to 9 grid points.
- The cold pool diffusion uses the laplacian [1 1 1; 1 -8 1; 1 1 1] with
strength 0.125 which is both stable and monotonous for wavelengths 2 to 10
relative to the grid.
Note that both namelist variables concerned with cold pool diffusion have to
be set to .TRUE., to activate the new method:
l_diff_cold_pools = .TRUE. and
l_diff_cold_pools_uv = .TRUE.
If only l_diff_cold_pools = .TRUE. and l_diff_cold_pools_uv = .FALSE.,
then the old method is used.
If l_diff_cold_pools = .FALSE., no cold pool diffusion is run at all, no matter
how l_diff_cold_pools_uv is set.
Back to Contents
(by Ulrich Schättler, DWD)
The sources from the turbulence scheme have been ported back to ICON. Some latest
ICON developments have been implemented with ifdefs at the moment:
- Different settings of defaults in turb_data.
- New (still internal) switch imode_tkesso (to replace ltkesso).
- New (optional) argument innertrop_mask for subroutine turbdiff.
Back to Contents
- acc_global_data.f90:
Added variable tke to an ACC_LIST.
- io_metadata.f90: by Lucio Torrisi
Fix for grib_api and GRIB1: setting of GRIB 2 keys (indicatorOfUnitForTimeIncrement,
timeIncrement) only for api2.
- mo_fdbk_cosmo.f90: by Christop Schraff
Use header% i_body instead of offset for feedback file entry i_body.
- src_input.f90: by Uli Schaettler
Added ldebug_io to avoid some debug prints, if it is not desired.
- src_obs_proc_cdf.f90: by Christoph Schraff
Bug fix at temporal condition for deleting old reports
(fixing a bug which occurred with COSMO-D2 with 20s time stepping).
- src_obs_cdfout_feedobs.f90: by Christop Schraff
Definition of i_body in feedback file revised according to (previous
modification in) DACE (LETKF, MEC): index of first observation of current
report in observation body, instead of offset (i.e. '+1' is added).
- src_calc_tracks.f90: by Ulrich Blahak
Corrected the computations of the output variables UH_MAX (updraft helicity)
and VORW_CTMAX (low level rotation). Both variables involve the vorticity in
integrals over vertical height ranges. VORW_CTMAX is a direct integral and
UH_MAX is an integral over vertical velocity times vorticity. In these
integration procedures, the vorticity field was used with the wrong vertical
grid index ordering, so that VORW_CTMAX was erroneously computed for the
uppermost 3 km layer instead of the lowermost, and UH_MAX used a wrong
vorticity multiplied by the correct vertical velocity. This has been corrected.
Back to Contents
Group |
Name |
Meaning |
Default |
/DYNCTL/ |
l_diff_cold_pools_uv |
NEW |
To choose new option for cold pool diffusion.
To activate this options, set both variables l_diff_cold_pools
and l_diff_cold_pools_uv to .TRUE.. |
.FALSE. |
/IOCTL/ |
dbzthresh_echotop |
NEW |
(Vector of at most 10 integers)
Threshold(s) for which to compute ECHOTOPinM and ECHOTOP
if one or both are specified in the list of model level output
variables (yvarml in GRIBOUT).
|
18,-1000,...,-1000 |
Back to Contents
- All modifications are only technical and do not change the results.
- If activating the new cold pool diffusion, results can be changed, of course.
Back to Contents