HyperbolicPhysicalModel Concept ReferenceΒΆ

adc_cpp: pops::HyperbolicPhysicalModel Concept 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::HyperbolicPhysicalModel Concept Reference

Hyperbolic brick of a model: flux + wave speed + variables + cons<->prim conversions. More...

#include <physical_model.hpp>

Concept definition

template<class M>
requires(const M m, const typename M::State u, const typename M::Prim p, const Aux a, int dir) {
typename M::State;
typename M::Prim;
{ M::n_vars } -> std::convertible_to<int>;
{ m.flux(u, a, dir) } -> std::same_as<typename M::State>;
{ m.max_wave_speed(u, a, dir) } -> std::convertible_to<Real>;
{ m.to_primitive(u) } -> std::same_as<typename M::Prim>;
{ m.to_conservative(p) } -> std::same_as<typename M::State>;
{ M::conservative_vars() } -> std::same_as<VariableSet>;
{ M::primitive_vars() } -> std::same_as<VariableSet>;
}
Hyperbolic brick of a model: flux + wave speed + variables + cons<->prim conversions.
Definition physical_model.hpp:181

Detailed Description

Hyperbolic brick of a model: flux + wave speed + variables + cons<->prim conversions.

Variables, conversions and flux are physically LINKED (a flux is written for a given layout of variables): they form a single brick distinct from the source and the elliptic. conservative_vars() and primitive_vars() are MANDATORY (not an optional extra). No source nor elliptic RHS here: those are other bricks of CompositeModel.