include/pops/numerics/time/reference/amr_level.hpp File ReferenceΒΆ

adc_cpp: include/pops/numerics/time/reference/amr_level.hpp File Reference
adc_cpp 0.3.0
Model-free C++23 core for coupled hyperbolic-elliptic systems on adaptive (AMR) meshes, with MPI and GPU (Kokkos) backends
amr_level.hpp File Reference

Single-box MultiFab AMR stack: struct detail::AmrLevelMF and the recursive engine (amr_step_2level_mf, subcycle_level_mf, amr_step_multilevel_mf). More...

+ Include dependency graph for amr_level.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  pops::detail::AmrLevelMF
 

Namespaces

namespace  pops
 
namespace  pops::detail
 

Functions

template<class Limiter = NoSlope, class NumericalFlux = RusanovFlux, class Model >
void pops::detail::amr_step_2level_mf (const Model &m, MultiFab &Uc, const Box2D &dom, Real dxc, Real dyc, MultiFab &Uf, int CI0, int CI1, int CJ0, int CJ1, const MultiFab &auxc, const MultiFab &auxf, Real dt)
 
template<class Limiter = NoSlope, class NumericalFlux = RusanovFlux, class Model >
void pops::detail::subcycle_level_mf (const Model &m, std::vector< AmrLevelMF > &L, int lev, Real dt, const Box2D &dom, const MultiFab *pOld, const MultiFab *pNew, Real frac, std::vector< Real > *pregL, std::vector< Real > *pregR, std::vector< Real > *pregB, std::vector< Real > *pregT)
 
template<class Limiter = NoSlope, class NumericalFlux = RusanovFlux, class Model >
void pops::detail::amr_step_multilevel_mf (const Model &m, std::vector< AmrLevelMF > &L, const Box2D &dom, Real dt)
 

Detailed Description

Single-box MultiFab AMR stack: struct detail::AmrLevelMF and the recursive engine (amr_step_2level_mf, subcycle_level_mf, amr_step_multilevel_mf).

TEST ORACLE, out of production.

Layer: include/pops/numerics/time. Role: original SINGLE-BOX AMR engine, kept in detail:: as a validation oracle. Intermediate link of the Fab2D (amr_reflux.hpp) -> MF (here) -> MP (amr_subcycling.hpp) parity chain, which proves the multi-patch engine bit-identical to the single-box one up to N levels (which the Fab2D 2-level/1-comp/Rusanov-only test does not cover). Contract: one conservative step with Berger-Oliger subcycling (ratio 2, dt/2 per substep) with reflux at each coarse-fine interface; periodic BCs at level 0.

Invariants:

  • no longer called in production (AmrCoupler goes through advance_amr);
  • parity guards: test_amr_reflux_mf (vs Fab2D), test_amr_multilevel_mf, test_amr_multilevel_multipatch guard 1 (MP vs MF, max|dUc| == 0);
  • aux held elsewhere (pointer); rC* = region (coords of THIS level) refined by the child, valid only if has_fine.