Documentation of the Changes in the COSMO-Model
Version 5.09

25.02.2021

Contents:

  1. Implementation of a Tile-Approach for TERRA-URB
  2. Additional Greenhouse-Gas Emission Scenarios
  3. CPP DyCore: Support for tracers with lbc=0
  4. Changes in the I/O
  5. Fix for Running the SeaIce Scheme
  6. Technical Changes and Bug Fixes
  7. Changes to the Namelists
  8. Changes of Results


1. Implementation of a Tile-Approach for TERRA-URB

(by Ulrich Schättler)

To run the urban parameterization TERRA-URB in the COSMO-Model, a poor man's tile approach has been implemented. For that, several variables now have an additional dimension for the tiles. A new configuration variable ntiles has been introduced in module data_modelconfig.f90. Once TERRA-URB also has been implemented, ntiles can be chosen as "0" (no tile approach) or as "2" (a natural tile and an urban tile).

Allocation of variables for Tiles

To introduce the tiles, the following modules have been modified:

For example variable: T_SO

old: ijk: t_so(ie,je,0:ke_soil+1,nztlev)
 blocked:t_so_b(nproma,0:ke_soil+1)
   t_so_new_b(nproma,0:ke_soil+1)
new: ijk: t_so(ie,je,0:ke_soil+1,0:ntiles,nztlev)
 blocked:t_so_b(nproma,0:ke_soil+1,0:ntiles)
   t_so_new_b(nproma,0:ke_soil+1,0:ntiles)

For the ijk-variables, the tile-dimension is introduced before the time-level. This is necessary to handle the I/O in the same way as before, which makes it necessary to have the time dimension last.

For the blocked variables there is no time dimension, because there are different variables for the old and the new time step.

Exception: For the TKE, there is an internal time stepping, therefore also the variable tke_b has a time dimenion. But here now the tile dimension is last to enable a proper passing to subroutines turbtran and turbdiff in turb_interface:
tke_b (nproma,ke+1,SIZE(tke,5),0:ntiles))

Several changes in the rest of the model are now necessary to handle the additional tile dimension:

 

Usage of the tiles

The turbulent transfer scheme turbtran and the surface scheme TERRA are called for the different tiles. Several variables (fluxes, diagnostic variables) are then aggregated from the values of the different tiles and stored in tile 0. This tile 0 is used for all other computations then.

If the tile approach is not used at all (ntiles=0), only tile 0 is used throughout all computations.

 

Organization of I/O

By adding another dimension for the tiles, the rank for the corresponding variables is changing. Also, another rank 5 has to be added. This causes changes in the whole I/O process, where the rank is important. In the structure ar_des for the variable table, the rank 5 and another logical ltiles have been added. ltiles is TRUE for tile variables.

To identify the different tiles for a variable we use the additional element number (naee) in GRIB1 and in restart files. For NetCDF an additional dimension ID ntiles is defined. To write also all tiles of a variable to the output, a new entry lwrite_tiles has been introduced in the GRIBOUT structure pp_nl.

Regarding the ranks of variables, the following situations are now possible ("old" is for variables still without tiles, "new" is for variables now including tiles):

Ranknew/oldtype of variables Examples
5 new 3D + tiles + time dimensionT_SO, W_SO, W_SO_ICE, TKE
multi-layer snow variables
4 new 3D + tiles TKVM, TKVH, EDR
old 3D + + time dimensionU, V, W, P, etc.
new 2D + tiles + time dimensionT_S, T_SNOW, T_G, etc.
3 old 3D HHL, etc.
new 2D + tiles PLCOV, LAI, Z0, etc.
old 2D + time dimensionPS, etc.
2 old 2D HSURF, etc.

These modules have been modified for I/O:

 

Organization of copy-in/copy-out for the blocked data format

The additional dimension makes it necessary to introduce additional subroutines in the module src_block_fields.f90 to handle now 4D fields with and without time level:

Note: The additional dimension is between the spatial dimensions and the time level! Only for tke_b it is different: here the additional dimension is the last one. Otherwise, passing this field to turbtran or turbdiff in the form tke_b(:,:,itile,:) gives problems.

 

Implications to other parts of the COSMO-Model

There are other parts of the model, which have similar structures as in the I/O depending on the rank, but not all of them are affected:

 

Modifications to other Modules

The additional dimension for the tiles has to be added in all modules, where these variables are used. In most of these modules, only the tile 0 is used.

Only in the physics the loop over the tiles has been implemented in:

Back to Contents


2. Additional Greenhouse-Gas Emission Scenarios

(by Roman Brogli, ETHZ)

The climate scenarios for CMIP6 feature the so-called "Shared Socioeconomic Pathways" emission scenarios. To faciliate the downscaling of CMIP6 simulations, several of the corresponding greenhouse-gas concentrations can be choosen by setting the namelist parameter ico2_rad to values between 11 and 19. The following scenarios are available:

SSP1-1.9 ico2_rad = 11
SSP1-2.6 ico2_rad = 12
SSP2-4.5 ico2_rad = 13
SSP3-7.0 ico2_rad = 14
SSP3-7.0-lowNTCFico2_rad = 15
SSP4-3.4 ico2_rad = 16
SSP4-6.0 ico2_rad = 17
SSP5-3.4-over ico2_rad = 18
SSP5-8.5 ico2_rad = 19

The SSP scenarios stand for:

The second number behind the hyphen refers to the radiative forcing from greenhouse-gases by 2100 in W/m2, similar to the older RCP scenarios (e.g. SSP5-8.5 is very similar to RCP8.5).

Back to Contents


3. CPP DyCore: Support for tracers with lbc=0

Enabled a zero-value boundary condition for tracers in the Fortran Dycore (src_advection_rk.f90) and also support lbc==0 in the GT Dycore.

A second test has been added for the climate testcase in testlist_mch.xml and in testlist_gpu.xml.

Back to Contents


4. Changes in the I/O

Support for asynchronous NetCDF output on large computational domains
(by David Leutwyler)

When a large computational domain is employed, a crash occurend with asynchronous NetCDF output (num_asynio_comm > 0), because the MPI isend buffer was too small (10 MB). When using double precision, this happens once the domain exceeds about 1100x1100x60 grid points. To circumvent this, a new namelist entry (asynio_block_size) was added that allows for increasing the value of that buffer. Note that the maximum allocateable isend buffer (max_num_blocks) remains at 1 GB.

 

Support for NetCDF4 I/O
(by Stefan Ruedisuehli)

The classic NetCDF format (yform_write='ncdf') restricts the size of variables. For very large grids (e.g., 5001x3001x80), NetCDF output therefore fails. Low- level support for NetCDF4 has already been present in the respective modules, but the option was not implemented. By contrast, int2lm, which shares those modules, already provided the option yform_write='nc-4'. This option has now also been added to COSMO, along with yform_restart='nc-4' for restart files in the NetCDF4 format. NetCDF4 support has also been added for asynchronous NetCDF output. Note that for input, nothing changes as yform_read='ncdf' has already handled both classic NetCDF and NetCDF4 files automatically. Additionally, a check has been added for yform_restart with the possible values 'bina' (default), 'ncdf' and 'nc-4'.

 

Adaptations due to NetCDF Standards
(by Beate Geyer, Burkhardt Rockel, Ronny Petrik, Ulrich Schaettler)

In the module src_setup_vartab.f90, all standard and long names of the I/O variables have been checked and adapted according to NetCDF standards: If there is no NetCDF standard name, we set: '-'

 

Fix bug when waiting for input files
(by David Leutwyler, Ulrich Schaettler)

If input files are not present, when the COSMO-Model runs, and the DWD ready-file mechanism is not used to wait for these files, the model will crash, if the input files have the 14-digit file names including minutes and seconds, even if the llockfile mechanism (waiting for files) is used.

Reason for that is: If an input file with 14-digit file name does not exist, the subroutine create_file_name returns a 10-digit file name, and the model will then wait for such a file, even if an input file with a 14-digit file name is provided later on.

This has been fixed now in module src_input.f90 (Section 1.3): If no input file exists at all, create_file_name returns both file names, one with a 14- and another with a 10-digit file name (yname, yname2). The subroutine wait_for_file is called in any cases, and checks, which of the files really exists. In case nmaxwait > 0, it will wait up to nmaxwait seconds and periodically (nincwait) check the existence, before it aborts the program.

Back to Contents


5. Fix for Running the SeaIce Scheme

(by Dmitrii Mironov, Ulrich Schättler, DWD)

When running the seaice scheme in the COSMO-Model, existing sea ice can be melted. But the corresponding sea surface temperature t_s was not adapted and remained on a perhaps much too cold temperature.

While testing this behaviour, other issues have been detected and fixed:

Back to Contents


6. Technical Changes and Bug Fixes

Back to Contents


7. Changes to the Namelists

Group Name Meaning Default
/RUNCTL/ asynio_block_size NEW To determine size of send buffer in netcdf_io.f90 (value given in MByte). This send buffer depends on the size of the COSMO domain. The default of 10 MB suffices for domain sizes of about 1100x1100x60 grid points. For larger domains, the size can be adjusted with this variable. Note that the maximum allocatable isend buffer (max_num_blocks) remains at 1 GB. 10
/PHYCTL/ ico2_rad new options Extended the range of ico2_rad to 19. Additional scenarios are
SSP1-1.9 ico2_rad = 11
SSP1-2.6 ico2_rad = 12
SSP2-4.5 ico2_rad = 13
SSP3-7.0 ico2_rad = 14
SSP3-7.0-lowNTCFico2_rad = 15
SSP4-3.4 ico2_rad = 16
SSP4-6.0 ico2_rad = 17
SSP5-3.4-over ico2_rad = 18
SSP5-8.5 ico2_rad = 19
0
cimpl DELETED Has been removed, as it is now obsolete for the skin temperature formulation. ---
/GRIBOUT/ yform_write new option In addition to the classical NetCDF format (yform_write='ncdf'), now also NetCDF4 files can be written by setting: yform_write='nc-4' 0

Back to Contents


8. Changes of Results

If running with the seaice scheme, there might be changes to t_s and therefore also to the atmosphere, when ice is melting during the simulation period.

The values of the TKE on pressure levels is changing due to a bug fix.

Otherwise there are no changes to the results.

Back to Contents