MAIA bb96820c
Multiphysics at AIA
|
One of the central building blocks of our framework is the solver. Each solver represents one specific solution method, e.g. Discontinuous Galerkin, Finite Volume or Lattice Boltzmann, which can be used to solve a variety of partial differential equations. The solver holds the solution state as well as auxiliary variables for each cell, which is typically organized in the corresponding collector. Following functionalities have to be provided by the solver:
A key concept for m-AIA is the joint grid for potentially multiple solvers. Thus, the solver itself does no hold any grid information, but a reference to the joint grid. To be more specific, each solver owns a grid proxy which provides only the relevant information for the specific solver. To learn more about the grid proxy concept, read here.
For some solvers you can chose between multiple system of PDEs. This is implemented via meta programming, i.e. these solvers have an additional template parameter which has to provide the equation specific parts. This allows for compile-time optimization of the solution algorithm itself while maintaining the flexibility of choosing different systems of PDEs.
Multiple solvers can be coupled to solve a system of PDEs. This can be in the form of volume or surface coupling and is implemented via the coupler concept. Note, that solvers can't access each others variables directly, this is only done by the coupler, which can read/write from/to its participating solvers.
To support more advanced features like adaptive mesh refinement and dynamic load balancing, the solver needs to provide additional functionalities:
AMR:
DLB: