|
| | AmrCouplerMP (const Model &model, const Geometry &geom, const BoxArray &ba_coarse, const BCRec &bc, std::vector< AmrLevelMP > levels, std::function< bool(Real, Real)> active={}, bool replicated_coarse=true) |
| |
| std::vector< AmrLevelMP > & | levels () |
| |
| MultiFab & | coarse () |
| |
| const MultiFab & | coarse () const |
| |
| MultiFab & | aux0 () |
| |
| const MultiFab & | aux0 () const |
| |
| void | set_named_aux (int comp, std::vector< Real > field) |
| | Registers a model-NAMED aux field (ADC-291) at shared-channel component comp (>= kAuxNamedBase), as a coarse base-level field field (n*n row-major, global cell index j*nx+i).
|
| |
| void | set_named_aux_bc (int comp, AuxHaloPolicy policy) |
| | Registers a per-field aux HALO policy (ADC-369) for the named component comp.
|
| |
| const Box2D & | domain () const |
| |
| int | nlev () const |
| |
| std::vector< double > | level_state (int k) |
| |
| void | set_level_state (int k, const std::vector< double > &s) |
| |
| std::vector< double > | level_potential (int k) |
| |
| void | set_level_potential (int k, const std::vector< double > &p) |
| |
| std::vector< double > | level_state_global (int k) |
| |
| std::vector< double > | level_potential_global (int k) |
| |
| void | set_hierarchy (const std::vector< Box2D > &fine_boxes) |
| |
| void | sync_down () |
| |
| void | set_composite_poisson (bool v) |
| | OPT-IN: replaces the Option A AMR Poisson (coarse solve + piecewise-constant gradient injection) with a COMPOSITE FAC elliptic solve (the fine patch REFINES the elliptic).
|
| |
| bool | composite_poisson () const |
| |
| void | compute_aux () |
| |
| void | update () |
| | Updates the hierarchy before a step: sync_down (fine -> coarse) then compute_aux (coarse Poisson + grad phi + injection to the fine levels).
|
| |
| template<class Disc = FirstOrder> |
| void | step (Real dt, bool recon_prim=false, bool imex=false, const NewtonOptions &nopts={}, AmrTimeMethod tmethod=AmrTimeMethod::kEuler, Real pos_floor=Real(0)) |
| | Advances the hierarchy by one step dt: update() then advance_amr (Berger-Oliger subcycling + reflux + conservative average_down).
|
| |
| template<class Disc = FirstOrder> |
| void | advance_transport (Real dt, bool recon_prim=false, Real pos_floor=Real(0)) |
| | TRANSPORT-ONLY ADVANCE (hyperbolic), WITHOUT update() or source.
|
| |
| template<class Crit > |
| void | regrid (Crit crit, int grow=2, int margin=2) |
| |
| Real | mass () const |
| |
| Real | max_drift_speed () const |
| |
| Real | max_wave_speed () |
| | Max wave speed on the coarse level via model.max_wave_speed.
|
| |
template<class Model, class Elliptic = GeometricMG>
class pops::AmrCouplerMP< Model, Elliptic >
Multi-patch E x B AMR coupler.
- Template Parameters
-
| Model | PhysicalModel (flux, source, elliptic_rhs, max_wave_speed). |
| Elliptic | elliptic backend (EllipticSolver concept, default GeometricMG). ORCHESTRATES only: the hierarchy lives in an AmrLevelStack<AmrLevelMP>, the Poisson solve in mg_, the regrid in amr_regrid_finest. Reduces bit for bit to AmrCoupler in mono-box per level. |
template<class Model , class Elliptic = GeometricMG>
template<class Disc = FirstOrder>
TRANSPORT-ONLY ADVANCE (hyperbolic), WITHOUT update() or source.
Counterpart of step() stripped of its field solve and with imex==false: this is the PURE HYPERBOLIC advance (-div F) of the amr-schur path, where the field is solved separately (update()) and the source is played by the global condensed stage (AmrCondensedSchurSourceStepper), exactly like the uniform path interleaving solve_fields / transport (s.advance) / source stage (run_source_stage). The model must be SOURCE-FREE (NoSource source brick) so that the source is not counted twice (once here in forward Euler, once by the Schur stage): this is the contract of the amr-schur path, mirror of the uniform time=Strang(Explicit, CondensedSchur) where the block is added with its transport only.
template<class Model , class Elliptic = GeometricMG>
Max wave speed on the coarse level via model.max_wave_speed.
Model-generic CFL speed (any PhysicalModel), unlike max_drift_speed which is specific to the E x B drift (model.B0). For a pure E x B transport, it equals the drift speed.
- Returns
- the max over the coarse cells and the two directions, reduced over the ranks.
- Note
update() must have run so that aux(0) carries the current grad phi.
template<class Model , class Elliptic = GeometricMG>
OPT-IN: replaces the Option A AMR Poisson (coarse solve + piecewise-constant gradient injection) with a COMPOSITE FAC elliptic solve (the fine patch REFINES the elliptic).
Cf. CompositeFacPoisson. Phase 2 scope: 2 levels, ONE interior mono-box fine patch, replicated coarse (single-rank). Outside this scope, compute_aux falls back to Option A (bit-identical).
template<class Model , class Elliptic = GeometricMG>
Registers a model-NAMED aux field (ADC-291) at shared-channel component comp (>= kAuxNamedBase), as a coarse base-level field field (n*n row-major, global cell index j*nx+i).
STATIC user field re-applied by compute_aux every update (so it persists across regrid) and injected coarse->fine. Single-block AMR counterpart of System::set_aux_field_component. The facade validates comp/size and resolves the name. No-op default (no named field -> empty map -> bit-identical).