-
Notifications
You must be signed in to change notification settings - Fork 5
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.
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
.
Fig 1. An example leap-frog coupling scheme (source: ESMF) |
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.
Fig 2. An example explicit coupling scheme. (source: ESMF) |
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.
A toy parallel-explicit coupled time stepper has been implemented with Julia's CPU multithreading tools here.