-
Notifications
You must be signed in to change notification settings - Fork 7
NUOPC driver
We have adopted the NUOPC driver from CESM.
Model component initialisation strategy is specified through a combination of flags set in the nuopc.runconfig
configuration file and the input parameter files for each component.
The start_type
parameter in the ALLCOMP_attributes
section of nuopc.runconfig
can be set to one of three values (note that the access-om3
Payu driver automatically sets this parameter depending on whether the run is an initial or restart run):
-
"startup"
specifying an initial run, -
"continue"
specifying a run starting from restart files, -
"branch"
specifying a run starting from restart files in which properties of the output history files may be changed - not used here.
These have the following effects on each ACCESS-OM3 component’s parameters settings:
See MOM6 NUOPC cap for details.
start_type |
Interaction with model parameters (from input.nml ) |
---|---|
"startup" |
Sets parameter restartfiles = "n" . |
"continue" / "branch"
|
Hardcoded to use restart file specified in a local file rpointer.ocn . |
Note, users should let NUOPC set the restartfiles
parameter. It should not be specified in input.nml
.
See CICE6 NUOPC cap for details.
start_type |
Interaction with model parameters (from ice_in ) |
---|---|
"startup" |
Sets parameter runtype = "initial" . The type of CICE startup can be further configured using the ice_ic parameter in ice_in - see here. |
"continue" / "branch"
|
Sets parameters restart = .true. , runtype = "continue" and use_restart_time = .true. so uses restart specified in file specified in parameter pointer_file . |
Note, users should let NUOPC set the restart
, runtype
and use_restart_time
parameters. They should not be specified in ice_in
.
See e.g. the atm NUOPC cap and patch, and here for details.
start_type |
Interaction with model parameters (from d{model_name}_in ) |
---|---|
"startup" |
Does not attempt to read any restarts regardless of parameter values. |
"continue" / "branch"
|
If parameter skip_restart_read = .false. , then reads restart specified in file rpointer.{model_name} or reads restart specified in parameter restfilm if it isn't set to "null" - see here. |
Note, restarts are used for the CDEPS components in ACCESS-OM3 only for performance reasons. They’re not needed to restart exactly, but they reduce startup cost associated with reading the input dataset time axis information - see here for more detail.
Also see timestepping section here.
There's an overview of the NUOPC timekeeping design here.
The nuopc.runseq
file specifies the run sequence of the configuration. The run sequence for current ACCESS-OM3 configurations comprises a single loop, with the coupling time-step specified at the start of the loop (this is the “timeStep” of the loop in NUOPC-speak).
Note, that there are parameters {model_name}_cpl_dt
set in the CLOCK_attributes
section of nuopc.runconfig
. The only place these are used in CMEPS is to set the driver time-step as the minimum of these values. However from the NUOPC documentation and CMEPS codebase:
Each time loop has its own associated clock object. NUOPC manages these clock objects, i.e. their creation and destruction, as well as startTime, endTime, timeStep adjustments during the execution. The outer most time loop of the run sequence is a special case. It uses the driver clock itself. If a single outer most loop is defined in the run sequence provided by freeFormat, this loop becomes the driver loop level directly. Therefore, setting the timeStep or runDuration for the outer most time loop results modifying the driver clock itself. However, for cases with concatenated loops on the upper level of the run sequence in freeFormat, a single outer loop is added automatically during ingestion, and the driver clock is used for this loop instead.
So I think in our case, {model_name}_cpl_dt
are unused and the driver time-step equals the coupling time-step set in nuopc.runseq
. Certainly, changing these values seems to have no effect. However, I would feel more comfortable if I understood why {model_name}_cpl_dt
are ever needed...
The CICE thermodynamics time-step (dt
) is set in the CICE NUOPC cap to match the driver time-step, which equals the coupling time-step. Note that this is done before the CICE namelist file (ice_in
) is read. Thus issues will occur if dt
is set in ice_in
but does not match the coupling time-step. It's therefore probably safest not to set dt
in ice_in
, although other time-step related parameters can be set here. Setting ndtd
within ice_in
allows for sub-cycling of the sea-ice dynamics to ensure numerical stability and may need to be increased during initial model spin up (the thermodynamics should be numerically stable for any time-step).
MOM6 has 4 timesteps - see here and here and here. From shortest to longest they are: barotropic, baroclinic (Lagrangian), tracer, and vertical remapping. Of these, it is common to set at least these 3 timesteps in the MOM_input
file:
-
Barotropic time-step (
DTBT
) for integration of sea surface and depth-averaged horizontal velocity. If set negative (e.g.DTBT = -0.95
), the magnitude ofDTBT
is interpreted a fraction of the stability limit, so can be set independently of the model configuration (e.g. resolution).DTBT_RESET_PERIOD
controls how often the stability limit is recalculated. -
Baroclinic time-step (
DT
) for Lagrangian stacked shallow-water equations; often called "the" model timestep; needs to be short enough to resolve internal gravity waves, inertial oscillations and advection on the horizontal grid (i.e. this is resolution-dependent). -
Tracer/thermodynamics time-step (
DT_THERM
), which can be set to resolve the relevant physics (e.g. an hour or so to capture the diurnal cycle), independent of the horizontal grid resolution. It is possible to setDT_THERM
longer than the coupling time-step, but not withDIABATIC_FIRST = True
, which is the case for the current ACCESS-OM3 configurations. SoDT_THERM
should be set equal to, or less than, the coupling time-step.