Vlasiator ebf0dd394 on dev (v5.4.0 + 1054 commits)
Loading...
Searching...
No Matches
cpu_slope_limiters.hpp
Go to the documentation of this file.
1/*
2This file is part of Vlasiator.
3Copyright 2013, 2014 Finnish Meteorological Institute
4
5*/
6
7#ifndef CPU_SLOPE_LIMITERS_H
8#define CPU_SLOPE_LIMITERS_H
9
10using namespace std;
11
15
16inline Real slope_limiter(const Real& l,const Real& m, const Real& r) {
17 Real sign;
18 Real a=r-m;
19 Real b=m-l;
20 Real minval=min(2.0 * abs(a), 2.0 * abs(b));
21 minval=min(minval, (Real)(0.5 * abs(a+b)));
22
23 //check for extrema
24 Real output = a*b < 0 ? 0.0 : minval;
25 //set sign
26 return a + b < 0 ? -output : output;
27}
28
32void slope_limiter(const Real& l,const Real& m, const Real& r, Real& slope_abs, Real& slope_sign) {
33 Real sign;
34 Real a=r-m;
35 Real b=m-l;
36 Real minval=min(2.0 * abs(a),2.0 * abs(b));
37 minval=min(minval, (Real)(0.5 * abs(a+b)));
38
39 //check for extrema, set absolute value
40 slope_abs = a*b < 0 ? 0.0: minval;
41 slope_sign = a + b < 0 ? -1.0 : 1.0;
42
43}
44
45#endif
int sign(const T &value)
Definition common.h:528
float Real
Definition definitions.h:41
Real slope_limiter(const Real &l, const Real &m, const Real &r)
static ARCH_HOSTDEV VecSimple< T > min(VecSimple< T > const &l, VecSimple< T > const &r)
static ARCH_HOSTDEV VecSimple< T > abs(const VecSimple< T > &l)