Driver

The Omega Driver consists of methods to run the Omega ocean model in either standalone mode or as a component of E3SM. In both cases, the execution of Omega is divided into three phases, carried out by the ocnInit, ocnRun, and ocnFinalize methods. An interface layer to translate data types of the parent model to and from internal Omega data types will also be needed for running Omega as a component. For standalone mode, a main function is defined to serve as the top-level driver. The driver methods will evolve as more modules are developed and as Omega is integrated with E3SM.

ocnInit

The ocnInit method initializes everything needed to run the Omega ocean model, and has the following interface:

int ocnInit(MPI_Comm Comm, Calendar &OmegaCal, TimeInstant &StartTime, Alarm &EndAlarm);

It requires an MPI communicator as input, as well as a yaml configuration file named omega.yml in the directory Omega is launched from. Default configuration files are currently kept in the configs directory, eventually an automated tool will extract default configuration options from module header files and build the default config file. The ocnInit method will read the configuration options into the static ConfigAll object. The time management options that determine the duration of the simulation are read from the Config object and stored in OmegaCal, StartTime, and EndAlarm, which are output by the method. The init() methods for each Omega module necessary to run the ocean model are called. An integer error code is returned.

ocnRun

The ocnRun method advances the model over the interval defined by time management options, integrating from the start time until the EndAlarm is ringing. The interface is:

int ocnRun(TimeInstant &CurrTime, Alarm &EndAlarm);

The TimeStep is retrieved from the default TimeStepper object initialized during ocnInit and used with the value of CurrTime on input to construct a Clock object which manages the time loop. The EndAlarm is attached to the Clock to signal the end of the time loop. Eventually, there will be periodic alarms also attached to the Clock to trigger forcings, writing output, restarts, etc. As the time loop advances, the doStep method of the TimeStepper object is called to update the ocean model until the EndAlarm is triggered. The updated CurrTime and status of EndAlarm are returned, along with an integer error code.

ocnFinalize

The ocnFinalize method is needed to clean up all the objects allocated by the model. The interface is:

int ocnFinalize(TimeInstant &CurrTime);

The CurrTime is input in case a restart file needs to be written. An integer error code is returned.