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 54060 : Polynomial(Set::Scalar a0, Set::Scalar a1, Set::Scalar a2, Set::Scalar a3) 17 54060 : { 18 54060 : a[0] = a0; a[1] = a1; a[2] = a2; a[3] = a3; 19 54060 : } 20 : AMREX_FORCE_INLINE 21 : Set::Scalar operator() (const Set::Scalar x) const 22 : { 23 97451800 : 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 54060 : Polynomial(Set::Scalar a0, Set::Scalar a1, Set::Scalar a2, Set::Scalar a3, Set::Scalar a4) 34 54060 : { 35 54060 : a[0] = a0; a[1] = a1; a[2] = a2; a[3] = a3; a[4] = a4; 36 54060 : } 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 54060 : Polynomial<3> D() const 43 : { 44 54060 : 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