...
Section | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Getting data
The SW model still needs the ICMSH (spectral fields) and ICMGG (gridpoint) files to correctly start. In the idealized case, these are read solely to set the model's spectral and gridpoint resolution and the model will overwrite the initial state read from file (see the code in suspecb.F90).
The model will require requires the vorticity, divergence, ln(Ps) (contains the geopotential of the free surface) and orography when starting from real fields.
The Euler advection scheme can only be run on a regular Gaussian grid however (see below for example) .whereas the semi-Lagrangian advection is normally run on the reduced Gaussian grid.
Panelpanel | ||||||
---|---|---|---|---|---|---|
| ||||||
A test for the shallow-water model at spectral horizontal resolution T255 is available from the OpenIFS ftp site to try. Note: Only licensed institutes are provided with the userid/password to access the OpenIFS ftp site.
This example comes with initial files, namelist and job script. The namelist is configured to run the semi-Lagrangian advection. A few lines in the job script may need altering for your local setup. |
Panel | |||||||
---|---|---|---|---|---|---|---|
| |||||||
The GRIB files from an existing experiment can also be used to create initial files for the shallow-water model. In the following example, the initial files from the T21 test case distributed with the OpenIFS tarfile are used.
For idealized configurations the field in the initial data file is used correctly set the grid. The actual values are overwritten by the model code to set the idealized start. Hence Note that the initial fields themselves are not used with the idealized configurations. The initial files are there to correctly set the grid, hence stl1 is used in this example to get for the initial gridpoint file because its values will be overwritten and not used to initialize the model fields. |
If you have access to the MARS archive at ECMWF then an example of how to retrieve single level fields for use with the SW model is:
Panel | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
The following MARS request will retrieve ERA-Interim (T255) vorticity, divergence and geopotential fields together with a gridpoint field that can be used to create the initial ICMSH and ICMGG files in a similar way to the above method. Change the model level if required.
and then set the appropriate ICMSH and ICMGG file names and experiment number as shown in the previous example. |
Namelists
It is extremely important to correctly set the NAMELIST to configure the shallow-water model correctly.
Two examples are given here, one for semi-Lagrangian advection, the other for Euler advection. Euler advection must use a regular gaussian grid. It will not work with a reduced grid. The users user is free to alter some parameters such as the timestep, filtering etc.
The examples below show the variables to change from normal forecast settings.
Warning | ||||
---|---|---|---|---|
If using the Euler method, make sure a smaller suitable choice of timestep compared to the semi-Lagrangian setup is used. Also, ensure the Asselin time-filter is on. | ||||
Code Block | ||||
| ||||
code |
Code Block | ||||
---|---|---|---|---|
| ||||
! ! Shallow-water model with Euler steppingsemi-Lagrangian advection. ! &NAMDYN TSTEP=300.0, The variables below must be set in order to correctly configure ! reduce timestepthe for Euler stepping REPS1=0.01, ! turn on Asselin time-filtering coefficient REPS2=0.01, LHDIFFM=.false., shallow-water model. ! Other variables (if present) can be left as-is. For namelist : NAMDYN HDIRVOR=1.e15, ! horizontal diffusion on / offparameters LSETTLSHDIRDIV=1.false.e15, ! see code !for extrapolations in SL schemefurther description LSETTLSTHDIRSP=.false., 1.e15, LHDIFFM=true, NDIFFACT=6, LSETTLS=true, ! ditto / &NAMCT0 NCONF=201 ensure SL scheme is enabled LSETTLST=true, SITR=350., ! reference temperature REFGEO=78452.0, ! model configuration: 201 = ! reference geopotential for shallow-water (see yomct0.F90) LSLAG=.false. model For namelist: NAMCT0 NFPOS=0, ! turndisable offfullpos semipost-lagrangian schemeprocessing LTWOTLN2DINI=.false.1, ! disable two-time-level SL scheme. LRFRIC=.false.2D initialisation switch LTWOTL=true, ! enable !two-time turnlevel offSL Rayleigh frictionscheme LSLPHY=.false., ! turn off splitSl time-stepphysics physicsoption LVERTFELSPRT=.false., ! turn off 'virtual verticaltemperature' finiteas elementspectral schemevariable N2DININFRHIS=110, ! frequency of results output NUNDEFLD=0, ! initialise 1 = Haurwitz wave, 2 = real fields LSPRT=.false., ! if T temperature is 'virtual temperature' LFPOS=false ! make sure uninitialised variables are all set to zero For namelist: NAMARG NCONF=201, ! select shallow-water ! turn off fullpos diagnostics, does not work with SW N3DINI=0, configuration LSLAG=true, ! enable SL scheme UTSTEP=1800.0, ! model timestep ! no 3D initialisation NSTOP=600(resolution dependent) For namelist: NAMPAR0 NPROC=1, ! only use !1 no.MPI of steps to run / &process in 2-D. NPRGPEW=1, ! required for 2-D configurations For namelist: NAEPHY LEPHYS=false, ! turn off ECMWF Physics package (master switch) LERADI=false, ! turn off radiation scheme / &For namelist: NAMDYNA LGRADSP=.false., ! disable de-aliasing the pressure gradient term / &NAMDIM NUNDEFLDLRFRIC=0false, ! turn off Rayleigh friction |
Code Block | ||||
---|---|---|---|---|
| ||||
! make sure uninitialised variables are all set to zero
/ |
Gotchas
Info | ||
---|---|---|
| ||
The model will fail unless the environment variable:
is set in the job script. This is because the shallow-water code does not go through the usual code path (if NCONF=1) and uses a older code to output. Otherwise the model will crash at the first output attempt. Users will usually see a failure from the grib_api library (typically grib_set_real8_array). |
Info | ||
---|---|---|
| ||
Related to the above, the shallow-water model does not use the FULLPOS part of the model for output (namelist NAMFPC) normally used when NCONF=1 (3D primitive equation model). Make sure FULLPOS is off by setting:
in the fort.4 namelist file. |
Info | ||
---|---|---|
| ||
Make sure that all variables in the model are initialized to zero. The SW model can output fields that are not used. To do this set the namelist variable:
|
Plotting
data is spectral
Code notes
Other switches are used internally:
! LR2D : 2D shallow water or vorticity model
Shallow-water model with semi-Lagrangian advection.
! The variables below must be set in order to correctly configure
! the shallow-water model.
! Other variables (if present) can be left as-is.
For namelist : NAMDYN
HDIRVOR=1.e15, ! horizontal diffusion parameters
HDIRDIV=1.e15, ! see code for further description
HDIRSP=1.e15,
LHDIFFM=true,
NDIFFACT=6,
TSTEP=1800.0, ! model timestep (resolution dependent)
LSETTLS=true, ! ensure SL scheme is enabled
LSETTLST=true,
SITR=350., ! reference temperature
REFGEO=78452.0, ! reference geopotential for SW model
For namelist: NAMCT0
LRFRIC=false, ! turn of Rayleigh friction
LFPOS=false, ! disable fullpos post-processing
N2DINI=1, ! 2D initialisation switch
NCONF=201, ! select shallow-water configuration
LTWOTL=true, ! enable two-time level SL scheme
LSLAG=true, ! enable SL scheme
LSLPHY=false, ! turn off Sl physics option
LSPRT=false, ! turn off 'virtual temperature' as spectral variable
NFRHIS=10, ! frequency of results output
For namelist: NAEPHY
LEPHYS=false, ! turn off ECMWF Physics package (master switch)
LERADI=false, ! turn off radiation scheme
For namelist: NAMDYNA
LGRADSP=.false., ! disable de-aliasing the pressure gradient term
For namelist: NAMDIM
NUNDEFLD=0, ! make sure uninitialised variables are all set to zero
|
Code Block | ||||
---|---|---|---|---|
| ||||
! Shallow-water model with Euler advection.
! The variables below must be set in order to correctly configure
! the shallow-water model.
! Other variables (if present) can be left as-is.
For namelist: NAMDYN
TSTEP=300.0, ! reduce timestep for Euler stepping
REPS1=0.01, ! turn on Asselin time-filtering coefficient
REPS2=0.01,
LHDIFFM=.false., ! horizontal diffusion on / off
LSETTLS=.false., ! extrapolations in SL scheme
LSETTLST=.false., ! ditto
For namelist: NAMCT0
NCONF=201, ! model configuration: 201 = shallow-water (see yomct0.F90)
LSLAG=.false., ! turn off semi-lagrangian scheme
LTWOTL=.false., ! disable two-time-level SL scheme.
LRFRIC=.false., ! turn off Rayleigh friction
LSLPHY=.false., ! turn off split time-step physics
LVERTFE=.false., ! turn off vertical finite element scheme
N2DINI=1, ! initialise 1 = Haurwitz wave, 2 = real fields
LSPRT=.false., ! if T temperature is 'virtual temperature'
LFPOS=false, ! turn off fullpos diagnostics, does not work with SW
N3DINI=0, ! no 3D initialisation
NSTOP=600, ! no. of steps to run
NFRHIS=10, ! frequency of results output
For namelist: NAEPHY
LEPHYS=false, ! turn off ECMWF Physics package (master switch)
LERADI=false, ! turn off radiation scheme
For namelist: NAMDYNA
LGRADSP=.false., ! disable de-aliasing the pressure gradient term
For namelist: NAMDIM
NUNDEFLD=0, ! make sure uninitialised variables are all set to zero
|
Also, add a blank namelist to fort.4
for the idealized cases. Some configurations selected using N2DINI
will expect to find a namelist NAMSWE
.
Code Block |
---|
&NAMSWE
/ |
Gotchas
There are a number of issues that can cause the model to fail. Please make sure:
Info | ||
---|---|---|
| ||
The model will fail unless the environment variable:
is set in the job script. This is because the shallow-water code uses a different set of subroutines for output and does not go through the usual code path for 3D forecasts (if NCONF=1). Otherwise the model will crash at the first output attempt. Users will usually see a failure from the grib_api library (typically grib_set_real8_array). |
Info | ||
---|---|---|
| ||
Related to the above, the shallow-water model does not use the FULLPOS part of the model for output (namelist NAMFPC) normally used when NCONF=1 (3D primitive equation model). Make sure FULLPOS is off by setting:
in the fort.4 namelist file. |
Info | ||
---|---|---|
| ||
Make sure that all variables in the model are initialized to zero. The SW model can output fields that are not used. To do this set the namelist variable:
|
Plotting
The shallow-water model outputs fields only in spectral space, only ICMSH output files are generated. To plot the fields they will first need converting to gridpoint form.
The figure at the top of this page was generated using 'Metview'. The 'GRIB Filter' icon was used:
Code Block | ||
---|---|---|
| ||
READ,
DATA = 'ICMSHepc9+000594',
INTERPOLATION = LINEAR FIT,
GRID = 5/5,
GAUSSIAN = REGULAR |
For more information about Metview please see Using Metview with OpenIFS or contact openifs-support@ecmwf.int.
Anchor | ||||
---|---|---|---|---|
|
Warning |
---|
if running OpenIFS 38r1 (all versions), code changes are required before using the shallow water option initialized with real fields (N2DINI=3 & NCONF=201). Changes are required because the shallow-water code uses older code for reading GRIB data that was omitted from OpenIFS before the shallow-water option was made available. |
Required steps to enable shallow-water code option
- Download the OpenIFS 38r1 shallow-water replacement source tarball: openifs38r1_sw_newsrc.tgz
(this file is also available on the OpenIFS ftp site) Make a backup copy of the OpenIFS source code in the directory where the OpenIFS model files were unpacked:
Code Block cp -r src src.orig
Delete some files that will be replaced:
Code Block rm src/openifs/dummy/decops2.f90 rm src/openifs/dummy/gribex.f90 rm src/openifs/emos/pbio/emosnum.F rm src/openifs/emos/pbio/fortint.h rm -r src/openifs/emos/gribex # delete entire 'gribex' director
Unpack the tarfile downloaded above. This will create a new directory '
src/openifs/emos/gribex
'.
Make sure the tarfile is in the top level directory that contains 'src
':Code Block # Make sure openifs38r1_sw_newsrc.tgz is in the directory that contains 'src. tar xzvf openifs38r1_sw_newsrc.tgz
Verify that '
src/openifs/emos/gribex
' exists and contains source code.To compile the code if using GNU/gfortran, it may be necessary to enable the use of cray pointers.
Edit 'make/oifs.cfg
' and change:Code Block oifs.prop{fc} = $OIFS_FC
to:
Code Block oifs.prop{fc} = $OIFS_FC -fcray-pointer
Code notes
Other switches related to the shallow-water model setup are used internally: LR2D & LRSHW.! LRSHW : 2D shallow water model
The IFS starts with a huge amount of setup. The setup setups are mainly done under the routines called su0yoma and su0yomb (all setup routines starts by start with 'su'). They are themselves called by the first layer of the model cnt0. Then, the following layers cnt1, cnt2, cnt3 are called (forget about them for now) and finally, we reach cnt4 which contains the time loop. The routine which does one time step is called stepo (there are many different way of calling it as you could see in the "jungle" routine cnt4).
A time step starts in spectral space (all prognostic fields are in spectral space).
A standard time step (corresponding to time t) goes like thisas: the spectral fields (which are at time t) are transformed to GP space (Legendre invinverse transform. followed by Fourier invinverse transform.). Then the grid point computations start. At the end of the GP computation, the prognostic fields for next time step t+dt contain the explicit guess + half of the semi-implicit (SI) correction. This guess is transformed back to spectral space where we solve the SI problem to compute the other half of the SI correction. End of time step ....is reached. At the beginning of next time step, the new spectral fields will then be the new fields for the new time t...
In the current routine suspecb, you can chose choose between idealized cases or read one level of a grib flie file (N2DINI is the key for this choice). suspecb is called at cnt3 level . - the first part of the GP computations are done from a routine called CPG2 which is a very simplified version of the 3D GP computation, the other (lagged, mostly SL computation) are done in CPG2_LAG Both cpg2 and cpg2_lag are called by the driver routine gp_model which is also the driver routine of the 3D GP computation. - the spectral computation are done under spc2 spc with the 2D configurations calling spc2.
Info |
---|
with thanks to Nils Wedi and Sylvie Malardel, ECMWF. |
Excerpt Include | ||||||
---|---|---|---|---|---|---|
|