Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Component Model/Simulation Abstraction #12

Closed
jb-mackay opened this issue Aug 4, 2021 · 1 comment · Fixed by #16
Closed

Component Model/Simulation Abstraction #12

jb-mackay opened this issue Aug 4, 2021 · 1 comment · Fixed by #16

Comments

@jb-mackay
Copy link
Contributor

A coupled model/simulation contains a group of model components that need to adopt a shared interface to be executed by a coupled timestepping scheme. Major pieces of information that these components must provide the coupler include (but are perhaps not limited to):

  • model setup
  • choice of solver
  • callbacks

so that it can execute a sequence of component models each coupling period. It may also explicitly need knowledge of a component's grid & boundary to facilitate the flux exchange, but perhaps there is a clever way to hide this from a user. Furthermore, a coupled model (one that contains the sub-models) should also adopt this interface, giving us composability/nestability as well as a single framework for building and executing models/simulations.

At the moment, we have several implementations of something like this:

DifferentialEquations.jl uses DEIntegrators in a similar manner, and we are interested in mirroring/extending its interface with the coupled timstepper (e.g. solve! and step! functions).

It would be helpful to reconcile these variations in a unified interface (ultimately Aleph?) to minimize user and developer confusion. This issue is meant to prompt conversation about what a model/simulation abstraction should contain and move towards a single solution. @christophernhill @simonbyrne @glwagner @bischtob @sandreza @LenkaNovak

@jb-mackay jb-mackay added this to To do in Coupler Plans Aug 26, 2021
@jb-mackay jb-mackay linked a pull request Sep 2, 2021 that will close this issue
5 tasks
@jb-mackay
Copy link
Contributor Author

The need for a coupled component model abstraction is not necessary. An implementation of the abstract type CoupledSimulation will contain the component models; for example, an atmos-ocean-land coupled simulation will have fields for each model. These model's will need to define their own step! functions that dispatch accordingly to advance a model in time. In these custom step! calls (part of the coupling adapter code for a given model), it is specified how a particular component model advances. There will still need to be some kind of standardization relating to these component model simulations (so that we can have a single run! interface, e.g.), but this does not need to be specified by the coupler.

@jb-mackay jb-mackay moved this from To do to In progress in Coupler Plans Sep 14, 2021
@jb-mackay jb-mackay moved this from In progress to Done in Coupler Plans Sep 15, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
No open projects
Development

Successfully merging a pull request may close this issue.

1 participant