Overview
What the configuration files are for
The configurations have much in common. Here we provide a quick overview of the common features, using examples from the dev-MC_100km_jra_ryf branch. This is a MOM6-CICE6 coupled configuration without waves or biogeochemistry, at a nominal 100 km (1°) horizontal resolution, under repeat-year forcing.
config.yaml: used bypayufor model setup and run (YAML format)datm_in: sets stream-independent data atmosphere parameters (in Fortran namelist format)datm.streams.xml: sets input files and other stream-dependent input data for data atmosphere in this XML formatdiag_table: MOM6 diagnostics in this format; may be generated from adiag_table_source.yamlYAML file bymake_diag_table.pydrof_in: sets stream-independent data runoff parameters (in Fortran namelist format)drof.streams.xml: sets input files and other stream-dependent input data for data runoff in this XML formatdrv_in: NUOPC parameters for the driver (in Fortran namelist format)fd.yaml: NUOPC field dictionary (YAML format) read by the NUOPC driver; defines standard metadata for fields that may be available for import and/or export from model components;standard_names are used for field pairing during initialisationice_in: CICE6 parameters (in Fortran namelist format)input.nml: a few MOM6 parameters (in Fortran namelist format)MOM_input: most of the MOM6 parameters, in this formatMOM_override: more MOM6 parameters in this format, overriding things inMOM_inputnuopc.runconfig: read by NUOPC driver; supplies driver-related parameters for model components; parameters documented here; the file is a mix of Resource File and Fortran namelist formatsnuopc.runseq: read by NUOPC driver; defines model component run sequence using this syntax
Where to set parameters
Model exectuable version
modules: load:inconfig.yaml. This sets the released version if using a pre-built executable. If using a prerelease build, setmodules: useto/g/data/vk83/prerelease/modulesandmodules: loadto the prerelease version (e.g.access-om3/pr999-9).
Coupling
active model components
component_listand entries inALLCOMP_attributessection innuopc.runconfig, e.g.component_list: MED ATM ICE OCN ROF ALLCOMP_attributes:: ATM_model = datm # data atmosphere GLC_model = sglc # no glaciers/land ice (stub) ICE_model = cice # active sea ice (cice) LND_model = slnd # no land model (stub) MED_model = cesm # mediator OCN_model = mom # active ocean model (mom6) ROF_model = drof # data runoff WAV_model = swav # no wave model (stub) ...
components and fields to couple
- See the coupling architecture here
- Coupling is negotiated between model components during initialization of a model run. See here: "CMEPS advertises all possible fields that can be imported to and exported by the mediator for the target coupled system. Not all of these fields will be connected to the various components. The connections will be determined by what the components advertise in their respective advertise phase."
fd.yaml: NUOPC field dictionary defines standard metadata for fields that may be available for import and/or export from model components; standard_names are used for field pairing during initialisation- the fields available to be imported/exported for coupling are determined by the NUOPC cap code for MOM6, CICE6, WW3, DATM and DROF and recorded in the mediator log output file:
grep Advert archive/output000/log/med.log - whether those fields are actually coupled is determined by the CMEPS mediator at run time (see here).
- the coupling between components is recorded in the mediator log output file:
grep -A 9 "Active coupling flags" archive/output000/log/med.log - the mediator log output file also lists the individual fields that are coupled and where the coupled fluxes are calculated:
grep '^ mapping' archive/output000/log/med.log; see here for how to decode this
- the coupling between components is recorded in the mediator log output file:
- also see
wav_coupling_to_ciceinnuopc.runconfig
remapping/redistribution method for coupled fields
- The remapping method used for each field is recorded in the mediator log output file:
grep '^ mapping' archive/output000/log/med.log; see here for how to decode this datm.streams.xmlanddrof.streams.xmlspecify<mapalgo>bilinear</mapalgo>but there are better options - see here and hererof2ocn_ice_rmapnameandrof2ocn_liq_rmapnameinMED_attributesinnuopc.runconfig*map*inMED_attributesinnuopc.runconfigremapMethodinnuopc.runseq; options areredist,bilinear(the default),patch,nearest_stod,nearest_dtos,conserve. For strict bit-for-bit reproducibilitysrcTermProcessing=1andtermOrder=srcseqare also required. See details here and here and this detailed explanation.
time interpolation of coupled fields
- specified via
tintalgoindatm.streams.xmlanddrof.streams.xml- see here for options
Processor layout - see here
- entries in
PELAYOUT_attributessection innuopc.runconfig - may need to adjust
max_blocksinice_in - may need a
mem: 192GBentry inconfig.yamlif you are using less than a full node
IO layout
- entries in
*_modeliosections innuopc.runconfig - for
pio_typename.- Use
netcdf4pfor parallel IO. Don't usenetcdf4c(deprecated) orpnetcdf(not included in dependencies). netcdfonly uses one PE (pio_root) for IO
- Use
- MOM6 uses FMS for IO and doesn't use the settings in the
OCN_modeliosection. Instead, IO settings can be configured in thefms2_io_nmlnamelist group ininput.nml
case name
case_nameinALLCOMP_attributesinnuopc.runconfig
grids
mesh_atm,mesh_ice,mesh_ocninALLCOMP_attributesinnuopc.runconfigmesh_rofinROF_attributesinnuopc.runconfig- grid dimensions
*_nx,*_nyinMED_attributesinnuopc.runconfig
coupling diagnostics
*budget*inMED_attributesinnuopc.runconfighist*inMED_attributesinnuopc.runconfighistaux_*_fldsis either a colon-delimited list of fields to output, orallto output everything; see CMEPS field naming convention to decode thesegrep hist archive/output000/log/med.logwill show you when data was written
verbosity in NUOPC log files (archive/output*/log/*.log)
Verbosityin attributes for model components innuopc.runconfig; can beoff,low,high,max- see here - but doesn't seems to make any difference, perhaps due to this issue.
calendar
calendarinCLOCK_attributesinnuopc.runconfig; can be eitherNO_LEAPorGREGORIAN- also set
use_leap_years = .true.inice_infor Gregorian calendar
start date
start_ymdinCLOCK_attributesinnuopc.runconfig
run length
stop_nandstop_optioninCLOCK_attributesinnuopc.runconfig; available units forstop_optionare listed here
run sequence
- The order which components are run is specified in
nuopc.runseq. The order also impacts whether components run sequentially or in parallel. Normally we specify CICE and MOM to run in subsequent lines innuopc.runseq, and as long as they are on different processors, they run in parallel as these steps do not depend on each other. - To run MOM before CICE, specify all OCN related steps in the nuopc.runseq before all ICE related steps (see example here). This will be very slow and resource inefficient and is for testing / debugging only. It does reduce the coupling related lag in stress between the sea-ice and ocean (see Morrison 2024 slides
restart frequency
restart_nandrestart_optioninCLOCK_attributesinnuopc.runconfig; available units forrestart_optionare listed here
timesteps
- there is a complex set of interrelated timesteps - see here and here to understand how they interact
- coupling and driver timesteps - see here
*_cpl_dtinCLOCK_attributesinnuopc.runconfignuopc.runseq
- MOM6 timestepping - see here
- CICE6 timestepping - see here
- There are 3 timesteps. From shortest to longest they are elastic, dynamic and thermodynamic - see here
- The thermodynamic timestep is determined by the coupling (and driver) timestep (so
dtshould not be explicitly set inice_in- see here) ndtdinice_insets the number of dynamic timesteps in each thermodynamic timestep; increasing this can resolve "bad departure points" CFL errorsndteinice_insets the number of elastic timesteps in each dynamic timestep if the classic EVP or EAP method is used (kdyn= 1 or 2,revised_evp= false)
walltime limit
walltimeinconfig.yaml
number of ensemble members
ninstinPELAYOUT_attributesinnuopc.runconfig
forcing data
- see the Forcing page
- atmospheric forcing
datm.streams.xmlsets individual file paths relative to this entry in theinputsection ofconfig.yaml; see DATM and streams docs
- runoff
drof.streams.xmlsets individual file paths relative to this entry in theinputsection ofconfig.yaml; see DROF and streams docs