Line data Source code
1 : #ifndef NUMERIC_FUNCTION_H
2 : #define NUMERIC_FUNCTION_H
3 :
4 :
5 : namespace Numeric
6 : {
7 : namespace Function
8 : {
9 :
10 : template<int d> class Polynomial;
11 :
12 : template<>
13 : class Polynomial<3>
14 : {
15 : public:
16 69892 : Polynomial(Set::Scalar a0, Set::Scalar a1, Set::Scalar a2, Set::Scalar a3)
17 69892 : {
18 69892 : a[0] = a0; a[1] = a1; a[2] = a2; a[3] = a3;
19 69892 : }
20 : AMREX_FORCE_INLINE
21 : Set::Scalar operator() (const Set::Scalar x) const
22 : {
23 107645136 : return a[0] + x * (a[1] + x * (a[2] + x * a[3]));
24 : }
25 : private:
26 : std::array<Set::Scalar, 4> a;
27 : };
28 :
29 : template<>
30 : class Polynomial<4>
31 : {
32 : public:
33 69892 : Polynomial(Set::Scalar a0, Set::Scalar a1, Set::Scalar a2, Set::Scalar a3, Set::Scalar a4)
34 69892 : {
35 69892 : a[0] = a0; a[1] = a1; a[2] = a2; a[3] = a3; a[4] = a4;
36 69892 : }
37 : AMREX_FORCE_INLINE
38 : Set::Scalar operator() (const Set::Scalar x) const
39 : {
40 : return a[0] + x * (a[1] + x * (a[2] + x * (a[3] + x * a[4])));
41 : }
42 69892 : Polynomial<3> D() const
43 : {
44 69892 : return Polynomial<3>(a[1], 2. * a[2], 3 * a[3], 4 * a[4]);
45 : }
46 : private:
47 : std::array<Set::Scalar, 5> a;
48 : };
49 :
50 : }
51 : }
52 :
53 :
54 :
55 :
56 :
57 :
58 : #endif
|