|
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 the vorticity, divergence, ln(Ps) (contains the geopotential of the free surface) and orography.
The Euler advection scheme can only be run on a regular Gaussian grid however (see below for example).
A test for the shallow-water model at spectral horizontal resolution T255 is available from the OpenIFS ftp site to try.
This example comes with initial files, namelist and job. The namelist is configured to run the semi-Lagrangian advection. |
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.
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 the initial gridpoint file. |
If you have access to the MARS archive at ECMWF then an example of how to retrieve single level fields is:
The following MARS request will retrieve ERA-Interim 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.
|
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 is free to alter some parameters such as the timestep, filtering etc.
The examples below show the variables to change from normal forecast settings.
code |
! ! Shallow-water model with Euler stepping ! &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 / &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 / &NAEPHY LEPHYS=false, ! turn off ECMWF Physics package (master switch) LERADI=false, ! turn off radiation scheme / &NAMDYNA LGRADSP=.false., ! disable de-aliasing the pressure gradient term / &NAMDIM NUNDEFLD=0, ! make sure uninitialised variables are all set to zero / |
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). |
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. |
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:
|
data is spectral
Other switches are used internally:
! LR2D : 2D shallow water or vorticity model
! LRSHW : 2D shallow water model
The IFS starts with a huge amount of setup. The setup are mainly done under the routines called su0yoma and su0yomb (all setup routines starts by 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 this:
the spectral fields (which are at time t) are transformed to GP space (Legendre inv. followed by Fourier inv.). 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 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..... At the beginning of next time step, the new spectral fields will be the new fields for the new time t...
In the current suspecb, you can chose between idealized cases or read one level of a grib flie (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
with thanks to Nils Wedi and Sylvie Malardel, ECMWF. |