23#ifndef CPU_SLOPE_LIMITERS_H
24#define CPU_SLOPE_LIMITERS_H
30static inline Vec
minmod(
const Vec &slope1,
const Vec &slope2)
32 const Vec veczero(0.0);
33 const Vec slope =
select(
abs(slope1) <
abs(slope2), slope1, slope2);
34 return select(slope1 * slope2 <= 0, veczero, slope);
36static inline Vec
maxmod(
const Vec &slope1,
const Vec &slope2)
38 const Vec veczero(0.0);
39 const Vec slope =
select(
abs(slope1) >
abs(slope2), slope1, slope2);
40 return select(slope1 * slope2 <= 0, veczero, slope);
51 const Vec slope1 =
minmod(a, 2*b);
52 const Vec slope2 =
minmod(2*a, b);
53 return maxmod(slope1, slope2);
74 const Vec veczero(0.0);
75 const Vec vectwo(2.0);
76 const Vec vechalf(0.5);
80 Vec minval=
min(vectwo*
abs(a),vectwo*
abs(b));
81 minval=
min(minval,vechalf*
abs(a+b));
84 const Vec output =
select(a*b < 0,veczero,minval);
86 return select(a + b < 0,-output,output);
94 return min(f/(1+a),(Vec(1.)-f)/(1+b))*2*J;
97static inline Vec
slope_limiter(
const Vec &l,
const Vec &m,
const Vec &r)
107static inline Vec
slope_limiter_amr(
const Vec& l,
const Vec& m,
const Vec& r,
const Vec& dx_left,
const Vec& dx_rght)
113static inline void slope_limiter(
const Vec& l,
const Vec& m,
const Vec& r, Vec& slope_abs, Vec& slope_sign)
116 slope_abs =
abs(slope);
117 slope_sign =
select(slope > 0, Vec(1.0), Vec(-1.0));
An interface to a type with floating point values.
static ARCH_HOSTDEV VecSimple< T > min(VecSimple< T > const &l, VecSimple< T > const &r)
static ARCH_HOSTDEV VecSimple< T > select(VecSimple< bool > const &a, VecSimple< T > const &b, VecSimple< T > const &c)
static ARCH_HOSTDEV VecSimple< T > abs(const VecSimple< T > &l)
static Vec minmod(const Vec &slope1, const Vec &slope2)
static Vec slope_limiter_minmod(const Vec &l, const Vec &m, const Vec &r)
static Vec slope_limiter_mc(const Vec &l, const Vec &m, const Vec &r)
static Vec slope_limiter_amr(const Vec &l, const Vec &m, const Vec &r, const Vec &dx_left, const Vec &dx_rght)
static Vec slope_limiter(const Vec &l, const Vec &m, const Vec &r)
static Vec maxmod(const Vec &slope1, const Vec &slope2)
static Vec slope_limiter_minmod_amr(const Vec &l, const Vec &m, const Vec &r, const Vec &a, const Vec &b)
static Vec slope_limiter_sb(const Vec &l, const Vec &m, const Vec &r)