BlockRhsEval< Limiter, Flux, Model > Struct Template ReferenceΒΆ

adc_cpp: pops::detail::BlockRhsEval< Limiter, Flux, Model > Struct Template 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
pops::detail::BlockRhsEval< Limiter, Flux, Model > Struct Template Reference

Residual functor -div F + S (fill_ghosts then assemble_rhs), passed TO THE TimeStepper as RhsEval. More...

#include <block_builder.hpp>

+ Collaboration diagram for pops::detail::BlockRhsEval< Limiter, Flux, Model >:

Public Member Functions

void operator() (MultiFab &U, MultiFab &R) const
 

Public Attributes

Model model
 
const GridContextctx
 
bool recon_prim
 
Real pos_floor = Real(0)
 Zhang-Shu positivity limiter (<= 0: inactive, bit-identical)
 
std::shared_ptr< MultiFabws_cache
 Per-cell wave speed scratch (HLL cache, opt-in).
 

Detailed Description

template<class Limiter, class Flux, class Model>
struct pops::detail::BlockRhsEval< Limiter, Flux, Model >

Residual functor -div F + S (fill_ghosts then assemble_rhs), passed TO THE TimeStepper as RhsEval.

NAMED FUNCTOR (not a lambda): this is what take_step receives and what triggers the instantiation of assemble_rhs<Limiter, Flux> (and its device AssembleRhsKernel). First-instantiated from an EXTERNAL TU (add_compiled_model), a lambda here makes nvcc choke on emitting the nested device kernel (Heisenbug: OK Serial + compute-sanitizer, segfault at Cuda run time). A class has a stable instantiation context -> robust device codegen. Body identical to the former lambda -> residual bit-identical to add_block on CPU (and, intended, on device).

Member Function Documentation

◆ operator()()

template<class Limiter , class Flux , class Model >
void pops::detail::BlockRhsEval< Limiter, Flux, Model >::operator() ( MultiFab U,
MultiFab R 
) const
inline
+ Here is the call graph for this function:

Member Data Documentation

◆ ctx

template<class Limiter , class Flux , class Model >
const GridContext* pops::detail::BlockRhsEval< Limiter, Flux, Model >::ctx

◆ model

template<class Limiter , class Flux , class Model >
Model pops::detail::BlockRhsEval< Limiter, Flux, Model >::model

◆ pos_floor

template<class Limiter , class Flux , class Model >
Real pops::detail::BlockRhsEval< Limiter, Flux, Model >::pos_floor = Real(0)

Zhang-Shu positivity limiter (<= 0: inactive, bit-identical)

◆ recon_prim

template<class Limiter , class Flux , class Model >
bool pops::detail::BlockRhsEval< Limiter, Flux, Model >::recon_prim

◆ ws_cache

template<class Limiter , class Flux , class Model >
std::shared_ptr<MultiFab> pops::detail::BlockRhsEval< Limiter, Flux, Model >::ws_cache

Per-cell wave speed scratch (HLL cache, opt-in).

nullptr (default) -> per-face path strictly unchanged. Non-null ONLY for the HLL flux (cf. build_block): the cached branch is instantiated only for Flux == HLLFlux, so model.wave_speeds is always present there.


The documentation for this struct was generated from the following file: