Alamo
src
Numeric
Advect
Limiter
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
9
namespace
Numeric
10
{
11
namespace
Advect
12
{
13
namespace
Limiter
14
{
15
template
<
typename
... OBJ>
16
class
Limiter
17
{
18
private
:
19
friend
IO::ParmParse
;
20
std::tuple<OBJ...>
obj
;
21
static
constexpr
const
char
*
names
[] = { OBJ::name... };
22
int
selected
= -1;
23
24
public
:
25
template
<
int
I = 0>
26
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
27
Set::Scalar
operator()
(
Set::Scalar
lo,
Set::Scalar
mid,
Set::Scalar
hi)
const
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
{
38
Util::Abort
(
INFO
,
selected
);
39
return
NAN;
40
}
41
}
42
43
};
44
}
45
}
46
}
47
48
49
50
#endif
ParmParse.H
Set.H
INFO
#define INFO
Definition
Util.H:24
IO::ParmParse
Definition
ParmParse.H:116
Numeric::Advect::Limiter::Limiter
Definition
Limiter.H:17
Numeric::Advect::Limiter::Limiter::selected
int selected
Definition
Limiter.H:22
Numeric::Advect::Limiter::Limiter::operator()
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar operator()(Set::Scalar lo, Set::Scalar mid, Set::Scalar hi) const
Definition
Limiter.H:27
Numeric::Advect::Limiter::Limiter::names
static constexpr const char * names[]
Definition
Limiter.H:21
Numeric::Advect::Limiter::Limiter::obj
std::tuple< OBJ... > obj
Definition
Limiter.H:20
Numeric
This namespace contains some numerical tools.
Definition
Advect.H:14
Set::Scalar
amrex::Real Scalar
Definition
Base.H:19
Util::Abort
void Abort(const char *msg)
Definition
Util.cpp:269
Generated by
1.9.8