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

adc_cpp: include/pops/numerics/time/reference/amr_reflux.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_reflux.hpp File Reference

Reference conservation-critical brick (Fab2D, 1 component): 2-level reflux a la AMReX. More...

+ Include dependency graph for amr_reflux.hpp:

Go to the source code of this file.

Classes

struct  pops::detail::RusanovFaceXKernel< Model >
 Rusanov flux at the left face (x axis) of cell (i,j). More...
 
struct  pops::detail::RusanovFaceYKernel< Model >
 Rusanov flux at the bottom face (y axis) of cell (i,j). More...
 
struct  pops::detail::AdvanceFab1cKernel
 Explicit Euler, 1 component: U -= dt div(F) on cell (i,j). More...
 

Namespaces

namespace  pops
 
namespace  pops::detail
 

Functions

template<class Model >
void pops::compute_fluxes_1c (const Model &m, const Fab2D &U, const Fab2D &aux, Fab2D &fx, Fab2D &fy)
 
template<class Model >
void pops::advance_fab_1c (const Model &m, Fab2D &U, const Fab2D &aux, double dx, double dy, double dt, Fab2D &fx, Fab2D &fy)
 
void pops::fill_periodic_fab (Fab2D &U, const Box2D &dom)
 
void pops::fill_fine_ghosts_t (Fab2D &Uf, const Fab2D &Uco, const Fab2D &Ucn, double frac)
 
void pops::average_down_fab (const Fab2D &Uf, Fab2D &Uc, int CI0, int CI1, int CJ0, int CJ1)
 
template<class Model >
void pops::amr_step_2level (const Model &m, Fab2D &Uc, const Box2D &dom, double dxc, double dyc, Fab2D &Uf, int CI0, int CI1, int CJ0, int CJ1, const Fab2D &auxc, const Fab2D &auxf, double dt)
 

Detailed Description

Reference conservation-critical brick (Fab2D, 1 component): 2-level reflux a la AMReX.

Provides the 1-component Rusanov fluxes (compute_fluxes_1c), the explicit Euler advance (advance_fab_1c), the periodic ghosts (fill_periodic_fab) and coarse-fine space-time ghosts (fill_fine_ghosts_t), average_down_fab, and the amr_step_2level step.

Layer: include/pops/numerics/time. Role: minimal and testable version of the AMR reflux. The numerical flux at the coarse-fine interface is inconsistent between the coarse and fine grids; the reflux corrects the adjacent coarse cells (FluxRegister) to restore exact conservation. This is the mono-box ground-truth of the Fab2D -> MF -> MP parity chain.

Invariants:

  • minimal case: 1 component, explicit Euler, ratio 2, Berger-Oliger subcycling (r=2 substeps of dt/2, fine ghosts interpolated in time), one rectangular fine box strictly interior to the periodic coarse domain;
  • the composite Poisson coupling (FAC) is handled elsewhere (elliptic/composite_fac_poisson);
  • device kernels = NAMED functors (RusanovFaceXKernel, AdvanceFab1cKernel, ...) and not POPS_HD lambdas: first instantiation from an external loader TU would trip nvcc; body strictly identical to the previous lambdas -> bit-identical CPU and device.