12.12.2016
Version 5.4d (and some fixes in 5.4d1, 5.4d2, 5.4d3) is the next development version
on the way to 5.5.
- Changes in the Data Assimilation
- Incremental Analysis Update (IAU)
- Changes in the Treatment of the Lateral Boundary Conditions
- New GNSS STD Operator
- Changes in the Blocked Turbulence Scheme
- C++ Dynamical Core
- Technical Changes and Bug Fixes
- Changes to the Namelists
- Changes of Results
(by Christoph Schraff)
- For Mode-S data (for which the data with the same 'station id' are not
usually produced by one flight), the determination of the flight phase(s),
the flight track check, the production of multi-level reports, and the
thinning are skipped. (A simple thinning can be done in the LETKF itself
for KENDA).
- 'Bug' fix to enable the processing of the relative humidity variable MUUU
coded erroneously as FLOAT in aircraft Mode-S cdfin_modes observation input
files.
- A workaround (by a compiler directive) to a bug of the CRAY compiler (V 8.4.1)
in the processing of GPS data (in the mapping of igpscen onto gpc).
- Observation increments of IWV (integrated water vapour) are now computed and
can be used in the nudging if ZTD (zenith total delay) is missing and only
IWV is reported.
Reports for which both ZTD and IWV are missing are discarded completely now.
- Reading and processing is introduced for DWD national surface reports from
file cdfin_nat_dwd. In contrast to the regular Synop reports over Germany,
these national reports contain 1-hourly precipitation and wind gusts,
which are required for MEC and verification.
- Fix of a minor lethal bug at printout with itype_tran=1.
- Bug fix: analysis increment (*ANAI) fields are (temporarily) removed from
the list of Grib output fields if grib_api is used (yform_write(1:3)=='api'),
because these fields are not yet defined in the grib_api.
New namelist variable:
Group |
Name |
Meaning |
Default |
/NUDGING/ |
zlimv10(1:3) |
NEW |
additional limits for the use of 10-m wind observations:
- 1,2: positive resp. negative scaled Laplacian of orography [m];
- 3: surface roughness length [m].
|
400.0,800.0,5.1 |
Back to Contents
(by Christoph Schraff)
Description:
For IAU, the model run is started from the first guess (a forecast with lead
time given by namelist variable nsec_fg) instead of the analysis, and the
analysis increments are added to the model fields incrementally at each time
step during the model integration over a certain period (given by namelist
variable peri_iau).
Further details:
- The IAU updates the sum of water vapour and cloud water. After this,
the water vapour and cloud water are balanced without applying any latent
heating because the IAU updates reflect corrections due to observations
and not due to simulated physical processes.
- Clipping is performed for all the other variables with zero lower bound
(except for those related to temperature).
- In the case of the two-moment microphysics, the number concentrations of
the hydrometeors are adjusted in order to preserve the particle size
distributions. For zero prior hydrometeor contents and hence undefined
prior number concentrations, the new concentrations are set consistent
with assumptions in the Seifert/Beheng two-moment scheme.
- The IAU is not applied to the variables related to the snow cover and sea
ice analyses for two reasons. Firstly, they have only an indirect influence
on the atmospheric balance via the surface fluxes. Secondly, the analysis
values and increments of ice and snow temperature and snow densitiy are not
well defined in case of missing ice / snow in the analysis or first guess.
Back to Contents
(by Christoph Schraff)
- Option to use the initial conditions for the lateral BC at the initial time,
with linearly decreasing weight during a pre-specified period (given by the
namelist variable sic2bc).
- Option to discard boundary fields valid later than a certain lead time
(given by namelist variable hlastbc). Boundary conditions after the
last processed boundary field are obtained by linear extrapolation of
the two last boundary fields.
- A non-negative check is introduced for tracers to allow for the linear
extrapolation of boundary fields at the end of the model integration.
This allows for a proper treatment of the lateral BC at the last timestep
also in the standard configuration of the model and avoids the jump in the
surface pressure tendency at the last timestep seen e.g. in the operational
runs.
Note: |
This changes the model results very slightly.
Only the last output step is affected. |
- Bug fixes for the determination of nlastbound (and hence for the use of
the lateral BC), if the interval of boundary data is not hourly or if the
the first lateral boundary data are older than the model initial time.
New Namelist Variables for the changes for IAU and LBC:
Group |
Name |
Meaning |
Default |
/RUNCTL/ |
itype_iau |
NEW |
type of incremental analysis update (IAU)
- no IAU (default)
- IAU for all variables (except rel. to snow cover, sea ice)
- IAU except for QR, QS, QI, QG, snow cover, sea ice
|
0 |
peri_iau |
NEW |
period [s] over which IAU is applied |
3600.0 |
/GRIBIN/ |
nsec_fg |
NEW |
lead time (in [s], as integer) of first guess file for IAU. |
3600 |
lic2bc |
NEW |
use initial conditions as boundary data at timestep 0 |
.FALSE. |
sic2bc |
NEW |
period (in [s]) in which the initial conditions are additionally
used for the lateral BC (with weight 1 at time 0 decreasing
linearly to zero at time sic2bc) |
hincbound_d*3600.0 |
hlastbc |
NEW |
boundary fields valid later than this lead time [hour] are not
read (boundary conditions beyond that time limit are obtained
by linear extrapolation of boundary fields). |
hstop + 100.0 |
Back to Contents
(by Michael Bender)
GNSS - Global Navigation Satellite System
A new GNSS STD observation operator for assimilating GNSS STD and ZTD data was implemented.
The STD operator computes GNSS signal delays due to the neutral atmosphere, i.e. due to the
temperature, pressure and humidity field along the signal path. Slant total delays
(STDs) describe the signal delay between the GNSS satellite and the ground receiver along the
curved signal path. Zenith total delays (ZTDs) are hypothetical delays along the vertical axis.
The STD operator is able to process BUFR/netCDF ZTD data provided by E-GVAP and
SINEX-like ASCII STD data provided by the GFZ in Potsdam, Germany. The ZTD data set covers
Europe and Northern America while the STD data set is currently limited to Germany and
parts of France.
No COSMO fields are modified by the STD operator. The operator output is written to a separate
feedobs file fof_gnssgb_*.nc which can be used by the LETKF or for verification.
Two external files are required to run the STD operator. One file provides the geoid undulation
which is required to transform heights above sea level (COSMO) to heights above geoid (GPS).
The other file is necessary until a STD observation BUFR format is defined. It provides the
GNSS station coordinates required tp process the STD observations. Both files are required only if
the namelist parameter lgnssstd of the /NUDGING/ namelist is .true.
The internal parameter of the STD operator are set in a new namelist group /STD_OBS/.
The /STD_OBS/ namelist parameter are described in the latest version of the User's Guide.
A new namelist variable in the group /NUDGING/ can be used to enable/disable
the STD operator:
Group |
Name |
Meaning |
Default |
/NUDGING/ |
lgnssstd |
NEW |
To switch on / off the GNSS STD operator. |
.FALSE. |
External files required to run the STD operator:
- Geoid file with the geoid undulation, path to file needs to be set
in the /STD_OBS/ namelist:
GeoidFile = '.../eigen-6c3stat.nc' (see User's Guide)
- List of GNSS stations which provide STD observations, path to file
needs to be set in the /STD_OBS/ namelist:
HORIFile = '.../stako_gps_SNX_G_14_HORI'
This file is required as long as STD observations are not available
in BUFR format.
Back to Contents
(by Matthias Raschendorfer, edited by Ulrich Schättler)
- Implemented the option that the vertical diffusion can be called at the
end of the physics section and that it can be called for staggered horizontal
wind components. Vertical diffusion is also calculated on the blocked data,
therefore two additional CopyLists have been introduced:
- difTendCopyList: for the variables on the mass grid points
- difMomCopyList: for the variables on the staggered grid points
- Adaptations related to the initialization and tke time stepping.
- Renamed turb_param to turb_setup and included some
initializations for turbtran and turbdiff.
- Enabling the calculation of surface stress by the blocked vertical diffusion.
- Deactivating any consideration of ice processes for the calculation of lhfl_s
as a function of the water vapor flux qvsflx, since it is dependent on the
frozen surface fraction, which is a special property of the underlaying surface
model TERRA (and it's snow-fraction), FLake or the sea
surface treatment) and is not well defined at this place.
Back to Contents
(by Pascal Spoerri)
- Fixed a bug with irunge_kutta = 2.
- Creation of a testlist that tests the C++ Dynamical Core against
the Fortran dynamical core.
- Implemented a new configuration interface that allows specifying supported
parameters. With this feature it is now easy to see which features are
supported by the C++ Dynamical Core. See dycore/src/dycore/DycoreConfiguration.cpp
for the list of allowed parameters. For example:
The variable irk_order supports integer values of 1, 2 and 3: |
DycoreOption("irk_order", 3)
<< 1 << 2 << 3 |
With itheta_adv, only integer value 0 is supported: |
DycoreOption("itheta_adv", 0) << 0 |
For y_scalar_advect, the values "BOTT2",
"BOTT2_STRANG" and "SL3_SC" are supported: |
DycoreOption("y_scalar_advect", "BOTT2_STRANG") << "BOTT2"
<< "BOTT2_STRANG"
<< "SL3_SC" |
Some variables are hardcoded, such as the betagw,
because they are defined as a C++ #define and directly integrated
into the binary. We integrated them to avoid user error when using the Dycore: |
DycoreOption("betagw", BETA_GW) << BETA_GW, |
When no specialization is provided, such as in the
divdamp_slope example then the Dycore assumes that all values
are allowed. |
DycoreOption("divdamp_slope", (Real)1.0), |
The reason for this is to avoid duplicate checks in the
Fortran and C++ part. |
|
- Integrated error handling in the Dycore Wrapper and the Dycore. Exceptions
thrown in the Dycore are now caught by the Wrapper and stored.
A check function that reports the number of caught errors and a print function
are exposed to the Dycore wrapper. This allows to respond with an extensive
set of error messages.
DycoreConfigurationException:
The selected value 1 is not supported with iadv_order. |
Available options: [ 3, 5 ] |
DycoreConfigurationException:
The selected value true is not supported with l_satad_dyn_iter. |
Available options: [ false ] |
DycoreConfigurationException:
The selected value SL3_MF is not supported with y_scalar_advect. |
Available options: [ BOTT2, BOTT2_STRANG, SL3_SC ] |
DycoreConfigurationException:
The selected value 0.7 is not supported with betasw. |
Available options: [ 0.4 ] |
- Cleanup of the internal variables used in the DycoreConfiguration.
Changes in organize_dynamics.f90 and src_cpp_dycore.f90
- Moved variable checks into C++ Dynamical Core.
- Improved error reporting of the C++ Dynamical Core by using the Dycore error
handler interface. This interface will return an error count and allows
printing of the error messages.
- Calling model_abort from the C++ Dynamical Core when an error has occurred.
Back to Contents
Some of these fixes have been introduced in sub-versions 5.04d1, 5.04d2 and 5.04d3.
- turb_vertdiff.f90: (by Ulrich Schaettler)
Renamed variable aux to zaux when using from turb_data.
- conv_interface.f90: (by Ulrich Schaettler)
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]
- src_output.f90: (by Davide Cesari)
Corrected writing of a subdomain with grib_api: had to insert the correct field
dimension to the grib_set-call for the values.
- src_cpp_dycore.f90: (by Pascal Spoerri)
Integrated lic2bc also for the C++ dycore.
- 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_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.
- 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. |
- src_obs_cdfout_feedobs.f90: (by Christoph Schraff)
The writing of reports without observations is avoided now.
Back to Contents
Group |
Name |
Meaning |
Default |
/NUDGING/ |
zlimv10(1:3) |
NEW |
additional limits for the use of 10-m wind observations:
- 1,2: positive resp. negative scaled Laplacian of orography [m];
- 3: surface roughness length [m].
|
400.0,800.0,5.1 |
lgnssstd |
NEW |
To switch on / off the GNSS STD operator. |
.FALSE. |
/RUNCTL/ |
itype_iau |
NEW |
type of incremental analysis update (IAU)
- no IAU (default)
- IAU for all variables (except rel. to snow cover, sea ice)
- IAU except for QR, QS, QI, QG, snow cover, sea ice
|
0 |
peri_iau |
NEW |
period [s] over which IAU is applied |
3600.0 |
/GRIBIN/ |
nsec_fg |
NEW |
lead time (in [s], as integer) of first guess file for IAU. |
3600 |
lic2bc |
NEW |
use initial conditions as boundary data at timestep 0 |
.FALSE. |
sic2bc |
NEW |
period (in [s]) in which the initial conditions are additionally
used for the lateral BC (with weight 1 at time 0 decreasing
linearly to zero at time sic2bc) |
hincbound_d*3600.0 |
hlastbc |
NEW |
boundary fields valid later than this lead time [hour] are not
read (boundary conditions beyond that time limit are obtained
by linear extrapolation of boundary fields). |
hstop + 100.0 |
Back to Contents
- There are numerical changes to the results just by the fact that a PARAMETER variable
in conv_data.f90 has been changed to a usual variable. Some compilers seem to choose
different optimizations then (Cray, GNU).
- The treatment of lateral boundaries and doing the relaxation in the last step changes
the results in the last step.
- Several bug fixes in the data assimilation do also influence the results.
Back to Contents