Skip to content

Timestepping Coordination

Ben Mackay edited this page Aug 16, 2021 · 1 revision

Timestepping Coordination

In addition to communicating fluxes between model components, the coupler is in charge of coordinating the execution sequence of these components. The coupler serves as an outer time loop for the collection of models.

Coupling Schemes

Leap-frog Coupling

Currently, we implement a sequential leap-frog coupling scheme (Fig 1). Component 'A' uses the state of component 'B' at time t to advance its state to t+1. The updated state of 'A' is then sent back to 'B' before 'B' updates to t+1.

leapfrog
Fig 1. An example leap-frog coupling scheme (source: ESMF)

Explicit Coupling

Alternatively, in an explicit coupling scheme each component has access to the updated state of the other at every step (Fig 2). This scheme naturally lends itself to parallelism, but is unstable.

explicit
Fig 2. An example explicit coupling scheme. (source: ESMF)

Parallelism

Some schemes, such as the explicit scheme introduced above, naturally lend themselves to parallelism - model components can be executed simultaneously according to a user-defined layout with lags. This is desirable from a performance perspective but one should be mindful of the stability of such schemes. Parallelism is preferable over sequential execution of models to achieve scaling performance.

Julia CPU-Multithreading

A toy parallel-explicit coupled time stepper has been implemented with Julia's CPU multithreading tools here.

MPI Capability

GPU Capability