include/pops/numerics/time/amr/levels/amr_patch_range.hpp File ReferenceΒΆ

adc_cpp: include/pops/numerics/time/amr/levels/amr_patch_range.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_patch_range.hpp File Reference

Named types of the multi-patch coarse-fine interface: PatchRange (coarse footprint of a fine patch), FluxRegister (GLOBAL-indexed coarse buffer + all_reduce), CoverageMask (cells shadowed by a patch), SubcyclingSchedule (Berger-Oliger cadence) and CoarseFineInterface (coverage + reflux routing), with the multi-box fill/avgdown helpers (mf_fill_fine_ghosts_multi, mf_average_down_multi, fill_periodic_local). More...

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

Go to the source code of this file.

Classes

struct  pops::PatchRange
 
struct  pops::detail::AvgDownMultiKernel
 
struct  pops::FluxRegister
 
struct  pops::CoverageMask
 
struct  pops::SubcyclingSchedule
 
struct  pops::CoarseFineInterface
 

Namespaces

namespace  pops
 
namespace  pops::detail
 

Functions

void pops::mf_fill_fine_ghosts_multi (MultiFab &Uf, const MultiFab &Uc_old, const MultiFab &Uc_new, Real frac)
 
void pops::mf_average_down_multi (const MultiFab &Uf, MultiFab &Uc)
 
void pops::fill_periodic_local (MultiFab &mf, const Box2D &dom)
 

Detailed Description

Named types of the multi-patch coarse-fine interface: PatchRange (coarse footprint of a fine patch), FluxRegister (GLOBAL-indexed coarse buffer + all_reduce), CoverageMask (cells shadowed by a patch), SubcyclingSchedule (Berger-Oliger cadence) and CoarseFineInterface (coverage + reflux routing), with the multi-box fill/avgdown helpers (mf_fill_fine_ghosts_multi, mf_average_down_multi, fill_periodic_local).

Layer: include/pops/numerics/time. Role: promote to TYPES the roles previously inlined/duplicated in the multi-patch subcycling (amr_subcycling.hpp). Centralization with strictly preserved arithmetic.

Invariants:

  • PatchRange uses the historical upper bound (hi-1)/2 (NOT Box2D::coarsen, floor of both bounds) -> bit-identical to the original inline footprints;
  • FluxRegister / CoverageMask are built on the GLOBAL box_array (known to all ranks): MPI-safe. Each rank fills its LOCAL contributions (0 elsewhere), gather() sums them via all_reduce_sum_inplace; in serial all_reduce is the identity -> bit-for-bit identical;
  • CoverageMask prevents double-reflux of a fine-fine joint (only true fine-coarse interfaces are corrected);
  • AvgDownMultiKernel / route_reflux are NAMED functors/functions (no generic lambda) -> safe under nvcc;
  • fill_periodic_local serves the REPLICATED coarse (per-rank dmap): purely local folding without an MPI plan, reads valid / writes ghost (no race).