Alamo
Limiter.H
Go to the documentation of this file.
1#ifndef NUMERIC_ADVECT_LIMITER_LIMITER_H
2#define NUMERIC_ADVECT_LIMITER_LIMITER_H
3
4
5#include <tuple>
6#include "Set/Set.H"
7#include "IO/ParmParse.H"
8
9namespace Numeric
10{
11namespace Advect
12{
13namespace Limiter
14{
15template<typename... OBJ>
17{
18private:
19 friend IO::ParmParse;
20 std::tuple<OBJ...> obj;
21 static constexpr const char* names[] = { OBJ::name... };
22 int selected = -1;
23
24public:
25 template<int I = 0>
26 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
28 {
29 if constexpr (I < sizeof...(OBJ))
30 {
31 if (selected == I)
32 return std::get<I>(obj)(lo, mid, hi);
33 else
34 return this->operator ()<I + 1>(lo, mid, hi);
35 }
36 else
37 {
39 return NAN;
40 }
41 }
42
43};
44}
45}
46}
47
48
49
50#endif
#define INFO
Definition Util.H:24
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar operator()(Set::Scalar lo, Set::Scalar mid, Set::Scalar hi) const
Definition Limiter.H:27
static constexpr const char * names[]
Definition Limiter.H:21
std::tuple< OBJ... > obj
Definition Limiter.H:20
This namespace contains some numerical tools.
Definition Advect.H:14
amrex::Real Scalar
Definition Base.H:19
void Abort(const char *msg)
Definition Util.cpp:269