Documentation of the Changes in the COSMO-Model
Version 5.3

05.08.2015

Version 5.3 is the next version, which should become a COSMO release.

Contents:

  1. Changed Calling Sequence of Assimilation and Relaxation
  2. Technical Changes in the Assimilation
  3. Redesign of the 3D diffusion to improve stability
  4. Implemented interface to C++ dynamical core and serialization
  5. Further Changes in the Dynamics
  6. COSMO-ICON Physics
  7. Technical Changes
  8. Further Bug Fixes
  9. Changes to the Namelists
  10. Changes of Results


1. Changed Calling Sequence of Assimilation and Relaxation

(by O.Fuhrer, POMPA)

The new C++ dynamical core treats the dynamics and the relaxation. In the Fortran code the assimilation is done in between the dynamics and the relaxation. The reason for this is historical, since the Asselin time filtering - which is only used for the Leapfrog dynamical core - is done in the same subroutine sardass as the relaxation.

To call the relaxation before the assimilation, the two tasks of subroutine sardass in module src_relaxation.f90 have been splitted to the new subroutine relaxation (only doing the relaxation) and the new subroutine timefilter (doing the Asselin time filter), which has to be called in any case after the assimilation.

It is not expected that switching the assimilation and relaxation leads to huge differences in the results, since both are simply relaxing the fields against a reference on each timestep and switching the order of operations is only a second order effect. The version with switched assimilation and relaxation is being used for the regular COSMO-1 runs at MeteoSwiss.

There is an important change regarding the latent heat nudging: the resetting of tt_lheat to 0.0 must not be done in the relaxation any more, but has been moved to the end of the latent heat nudging module src_lheat_nudge.

Back to Contents


2. Technical Changes in the Assimilation

(by C. Schraff)

The following technical changes have been implemented:

Back to Contents


3. Redesign of the 3D diffusion to improve stability

(by M. Baldauf)

Now all the terms of the 3D-diffusion, which can be treated with a tridiagonal solver, are indead handled so. This strongly improves stability in steep terrain. In fact, the 3D diffusion alone now shouldn't become unstable at all.

To this purpose, the subroutine explicit_horizontal_diffusion has been completely rewritten and a suitable subroutine complete_tendencies_uvwt_3D has been added (complete_tendencies_trcr and complete_tendencies_tke have been adapted, too).

Note:

Back to Contents


4. Implemented interface to C++ dynamical core and serialization

(by P. Spoerri, MCH colleagues)

The calls to the C++ dynamical core have been implemented in this version of the COSMO-Model using the pragma CPP_DYCORE. In the main program, the initialization of this dynamical core is called, while the core itself is called from organize_dynamics. A new module src_cpp_dycore.f90 has been implemented, which is the interface between the Fortran code and the C++ dynamical core. Also, the module time_utilities.f90 has been adapted, to measure the wrapper routines for the C++ core.

The C++ dynamical core can be activated with the new namelist switch lcpp_dycore (default: .FALSE.)

Together with the C++ dynamical core, also the serialization has been implemented. Serialization is a method to dump certain fields from the Fortran dycore to disk, to compare the results of the C++ core with these fields for unit testing. It is implemented using the construct "!$ser", which appears in the Fortran code as a comment.

Back to Contents


5. Further Changes in the Dynamics

(by M. Baldauf)

Implemented possibility to switch on/off the Euler dynamics

A new Namelist-Parameter l_euler_dynamics allows to switch off/on the Euler dynamical core, i.e. advection, pressure gradient, divergence and buoyancy-terms for the u, v, w, T and p-equation.

This switch does not affect tracers or Coriolis force, i.e. even if l_euler_dynamics=.FALSE., tracer advection and diffusion can take place and (if lcori=.TRUE.) Coriolis force can act. (However, there is an exception for the leapfrog or semi-implicit dynamical cores: if l_euler_dynamics=.FALSE. then vertical advection of the dynamical variables still is active).

Implemented possibility to switch off the tracer advection

The namelist variable y_scalar_advect now accepts the value NONE, to switch off all tracer advection.

Bug Fixes in the Dynamics

Back to Contents


6. COSMO-ICON Physics

Microphysics

The possibility to run the microphysics before all other parameterizations has been introduced. A new switch lgsp_first has been introduced for that. The default setting is .FALSE., and the microphysics are still computed after the dynamical time stepping.

Radiation

A blocked version of the Ritter-Geleyn (RG) radiation (in module radiation_rg.f90) and the corresponding interface (radiation_interface.f90) has been implemented. The RG radiation scheme needs special input variables (similar to other radiation schemes as RRTM), which are computed in the interface. The different computations are grouped in subroutines, which have been put to a new module (radiation_utilities.f90).

This version also supports the possibility to work on a coarser grid, and because of that we need a special data structure for the variables in the interface, which is for the example of a variable xvar:

xvar (nproma*nradcoarse, nradcoarse)

where nradcoarse is the number of grid points to group together in i- and in j-direction for one coarse grid point. Note that for the full COSMO grid (nradcoarse=1) this is just the usual blocked data structure, just with an additional dimension 1. For this data structure we need two fields mind_ilon_rad, mind_jlat_rad (similar to mind_ilon, mind_jlat), which give the correspondance between indices (i,j) of the full COSMO grid to this data structure. The fields mind_ilon_rad, mind_jlat_rad have the dimension

mind_ilon_rad, mind_jlat_rad (nproma*nradcoarse, nradcoarse, nblock_rad)

where nblock_rad is the number of blocks for radiation (is different between using the full grid or a coarse grid).

The interface module computes all input variables for the radiation scheme on this new data structure. If a coarse grid is used, an additional subroutine (average_to_coarse_grid) is called, which computes the averaging of nradcoarse*nradcoarse to one coarse grid point. The results of these averaging are given to the driving routine fesft of the RG radiation.

The decision that we want to support the coarse grid for the radiation and also the fact that the input variables for the radiation scheme are different ones than for all other parameterizations lead to the decision, that we do not use the "copy-in/copy-out" that we use for the other blocked versions of the physics, but the method described above for the computations.

A more detailed documentation of the "Radiation in blocked data structure" is in preparation.

Modifications for running Radiation on GPUs
(by Ulrich Schaettler)

The code has been modified in a way that the radiation can now run on GPUs, if it is compiled with -D_OPENACC. The changes are:

Turbulence

A first version of the COSMO-ICON physics version of the turbulence code has been implemented, but is not activated yet. There are 2 new modules:

All routines are using already the data structure (nproma,ke), but the input data is just taken out of the COSMO ijk-structure and not yet in blocked format. Also, there still is a consolidation process between this current COSMO version and the ICON version. For this consolidation, much more tests have to be performed with the COSMO-Model, before the version can be taken as official version.

The interface routine (turbulence_organize) for the COSMO-ICON physics version has been implemented in the existing module turbulence_interface.f90. The calls to this routine (and some initialization routines) are already implemented in organize_physics, but commented. To activate them, the comments have to be deleted, and the calls to the turbulence scheme in ijk-data format have to be commented out.

2-Moment Scheme

3D Mixing has been switched off for NCCLOUD and NCICE, which caused a crash when testing with the new 3D turbulence (l3dturb=.TRUE.)

Back to Contents


7. Technical Changes

Modification of grib_api implementation for centers /= DWD

(by D. Liermann; all changes in io_metadata.f90)

With the earlier implementation of grib_api (use of local shortname concept, local use sections) it was not possible for other centers than DWD (WMO Code 78) to use GRIB2. Modifications have been implemented, which now allow all centers to run with grib_api (in io_metadata.f90):

Also there have been changes to the grib2 definition files that have to be used together with grib_api. These changes are first implemented for the DWD definition files (definitions.edzw) of grib_api-1.13.1.

Some of these definition files are especially written for center=78 (DWD), e.g. local.78.def or grib2LocalSectionNumber.78.table. For other centers we provide a script, which creates links with the centers WMO number to the DWD files, e.g. for the center COSMO=250:

grib2LocalSectionNumber.250.table → grib2LocalSectionNumber.78.table
local.250.def → local.78.def

In this way all centers can use INT2LM (and COSMO-Model) together with grib_api and the DWD definition files.

Computation of pure diabatic temperature tendencies

(by U. Blahak)

A new output variable TTENS_DIAB has been added.

The variable tinc_lh does not contain the correct temperature increment due to latent heating. First, it misses the main contribution due to the saturation adjustment after the dynamics (RK and leapfrog), and second, for the leapfrog dynamics it is not correctly reset and initialized in each timestep.

Therefore, a new output variable TTENS_DIAB has been introduced, which is coupled to the new internal model field ttens_diab and contains all pure diabatic tendencies of the model:

Computation of Lightning Potential Index (LPI) after Lynn et al. (2010)

(by U. Blahak)

The LPI is based on the coexistence of updrafts, supercooled water, graupel/hail and other ice species (cloud ice, snow) in the same grid box in a temperature range of 0 to -20 deg C. It is basically an integral over the square of the grid scale vertical speed over the height interval between 0 to -20 deg C, weighted by a function depending on the coexistence of graupel/hail with other ice species.

We have added two additional filter steps to

  1. eliminate spurious signals in the vicinity of updraft cores (inactive regions of convective clouds) and
  2. in graupel regions of intense orographic wave related clouds:

NOTE:

There are new subroutines in pp_utilities.f90 that are called from src_output.f90, if LPI is added to yvarml:

Back to Contents


8. Further Bug Fixes

Back to Contents


9. Changes to the Namelists

Group Name Meaning Default
/DYNCTL/ lcpp_dycore NEW to activate the C++ dynamical core, if the model has been compiled with -D CPP_DYCORE .FALSE.
l_euler_dynamics NEW to switch on/off Euler-solver; however, the Coriolis force and tracer advection may be performed. .FALSE.
y_scalar_advect additional value to switch off tracer advection, the value NONE is now accepted for y_scalar_advect. BOTT2_STRANG
/PHYCTL/ lgsp_first NEW to run grid scale precipitation at the beginning of time loop .FALSE.
l3dturb_metr changed default default value has been changed to .FALSE. .FALSE.

Back to Contents


10. Changes of Results

The following changes do have an influence on the results:

Back to Contents