Model Configuration (Config)

Model configuration refers to all of the necessary variables to configure and run the model. It contains all the input parameters, choices of methods, physical coefficients for parameterizations and various options for I/O. Typically, this is read as a single input file that can serve as a description of the configuration for provenance as well.

In Omega, the input configuration file is in YAML format and must be a file named omega.yml in the same directory as the executable. However, Unix soft links can be used to point a link with that name to a specific configuration file stored elsewhere. In YAML format, most of the configuration variables are typically represented as key-value pairs called maps, where the name and the value are separated by a colon. However, lists of variables (eg contents of an IO stream) can be used and are called sequences. Sequences can be in the form of a list with an entry on each line starting with a dash and space. They can also be formatted as a vector with a comma-delimited list within square brackets. Each of these can be nested to build up the full configuration with indentation used to separate the nests. Each map or sequence is called a node in YAML. A typical omega configration file will start with the main omega map node with sub-maps associated with various modules in omega. For example, a file might look like this:

omega:
   TimeManagement:
      RestartOn: false
      RestartTimestampName: restartTimestamp
      StartTime: 0001-01-01_00:00:00
      StopTime: none
      RunDuration: 0010_00:00:00
      CalendarType: noleap

   [Other config options in a similar way]

   Hmix:
      HmixScaleWithMesh: false
      MaxMeshDensity: -1.0
      HmixUseRefWidth: false
      HmixRefWidth: 30.0e3

   [more config options]

   MyVector: [1, 2, 3, 4, 5]

   Streams:

      Mesh:
         Type: input
         FilenameTemplate: mesh.nc
         InputInterval: initial_only

      Output:
         Type: output
         FilenameTemplate: output/output.$Y-$M-$D_$h.$m.$s.nc
         FilenameInterval: 01-00-00_00:00:00
         ReferenceTime: 0001-01-01_00:00:00
         Precision: single
         OutputInterval: 0001_00:00:00
         Contents:
         - tracers
         - layerThickness
         - ssh
         - kineticEnergyCell
         - relativeVorticityCell
         - [other fields]

      [other streams in similar form]

The variable names in the example above may not be actual omega variables and are shown only as an example. We intend to create a script that will generate a default input file that users can modify for standalone ocean experiments but this capability is not currently available. Similarly, standard configurations for E3SM compsets will be provided as part of E3SM releases. The configuration supports all Omega data types (bool, string, I4, I8, R4, R8). Because YAML internally represents all data as strings, configuration variables are converted by omega into the correct type and this conversion may slightly change floating point results in the last digits, but in a consistent manner based on C++ coercion rules. This can be minimized by supplying all digits for the precision desired.

Users will configure the model primarily by editing or modifying this input YAML-formatted file. Details of the implementation within omega can be found in the Developer’s Guide and the actual interfaces for extracting configuration variables into the modules that own them are described there as well.