ADVANCES the system: carries the schedule (per-species subcycling, adaptive multirate, implicit/IMEX delegated) and calls a TimeStepper.
More...
#include <system_coupler.hpp>
|
| | SystemDriver (System system, const Geometry &geom, const BoxArray &ba, const BCRec &bcPhi, RhsAssembler rhs_assembler, std::function< bool(Real, Real)> active={}, std::function< Real(Real, Real)> bz={}) |
| | Builds the driver (which builds the underlying assembler).
|
| |
| System & | system () |
| |
| const System & | system () const |
| |
| MultiFab & | phi () |
| |
| const MultiFab & | aux () const |
| |
| void | solve_fields () |
| |
| SystemAssembler< System, RhsAssembler, Elliptic > & | assembler () |
| |
| template<class ImplicitAdvance > |
| void | step (Real dt, ImplicitAdvance &&implicit_advance) |
| | Advances the blocks by a macro-step dt per their TimePolicy: explicit ones via TimeStepper, implicit/IMEX delegated to implicit_advance (block, h, s, n).
|
| |
| template<class ImplicitAdvance > |
| Real | step_adaptive (Real cfl, ImplicitAdvance &&implicit_advance) |
| | FULLY ADAPTIVE multirate: macro-step fixed by the fastest species (CFL cfl), stride of each species derived at RUNTIME from the wave-speed ratio (slow species advanced less often, larger step).
|
| |
| Real | step_adaptive (Real cfl) |
| |
| void | step (Real dt) |
| |
| Real | cfl_dt (Real cfl) |
| | Macro-step chosen by multi-species CFL: dt = cfl * min(dx, dy) / w_max (w_max = largest wave speed over ALL species).
|
| |
| template<class ImplicitAdvance > |
| Real | step_cfl (Real cfl, ImplicitAdvance &&implicit_advance) |
| |
| Real | step_cfl (Real cfl) |
| |
| template<class CoupledSource > |
| void | coupled_source_step (CoupledSource &&src, Real dt) |
| | Applies an inter-species COUPLING source (forward-Euler splitting): refreshes phi (aux) then calls src.apply(system, aux, dt).
|
| |
template<CoupledSystemLike System, class RhsAssembler, class Elliptic = GeometricMG>
class pops::SystemDriver< System, RhsAssembler, Elliptic >
ADVANCES the system: carries the schedule (per-species subcycling, adaptive multirate, implicit/IMEX delegated) and calls a TimeStepper.
OWNS a SystemAssembler and delegates the fields to it. Same template parameters as SystemAssembler.
◆ SystemDriver()
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
| pops::SystemDriver< System, RhsAssembler, Elliptic >::SystemDriver |
( |
System |
system, |
|
|
const Geometry & |
geom, |
|
|
const BoxArray & |
ba, |
|
|
const BCRec & |
bcPhi, |
|
|
RhsAssembler |
rhs_assembler, |
|
|
std::function< bool(Real, Real)> |
active = {}, |
|
|
std::function< Real(Real, Real)> |
bz = {} |
|
) |
| |
|
inline |
Builds the driver (which builds the underlying assembler).
active: optional wall predicate passed to the MG; bz: optional B_z(x, y) field shared by the blocks.
◆ assembler()
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ aux()
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ cfl_dt()
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
Macro-step chosen by multi-species CFL: dt = cfl * min(dx, dy) / w_max (w_max = largest wave speed over ALL species).
Refreshes aux before the measurement.
◆ coupled_source_step()
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
template<class CoupledSource >
Applies an inter-species COUPLING source (forward-Euler splitting): refreshes phi (aux) then calls src.apply(system, aux, dt).
Distinct from model.source (block-local).
◆ phi()
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ solve_fields()
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ step() [1/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ step() [2/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
template<class ImplicitAdvance >
Advances the blocks by a macro-step dt per their TimePolicy: explicit ones via TimeStepper, implicit/IMEX delegated to implicit_advance (block, h, s, n).
Per-block stride cadence.
◆ step_adaptive() [1/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ step_adaptive() [2/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
template<class ImplicitAdvance >
FULLY ADAPTIVE multirate: macro-step fixed by the fastest species (CFL cfl), stride of each species derived at RUNTIME from the wave-speed ratio (slow species advanced less often, larger step).
Returns the macro-step. implicit_advance handles implicit/IMEX blocks.
◆ step_cfl() [1/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ step_cfl() [2/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
template<class ImplicitAdvance >
◆ system() [1/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
◆ system() [2/2]
template<CoupledSystemLike System, class RhsAssembler , class Elliptic = GeometricMG>
The documentation for this class was generated from the following file: