5 #ifndef OPENFPM_PDATA_MONOMIALBASISELEMENT_H 6 #define OPENFPM_PDATA_MONOMIALBASISELEMENT_H 11 #include "Space/Shape/Point.hpp" 13 template<
unsigned int dim>
20 unsigned int scalar = 1;
29 explicit Monomial(
const unsigned int other[dim]);
37 unsigned int order()
const;
39 unsigned int getExponent(
unsigned int i)
const;
41 void setExponent(
unsigned int i,
unsigned int value);
47 T evaluate(
const T x[dim])
const;
51 template<
typename charT,
typename traits>
52 friend std::basic_ostream<charT, traits> &
53 operator<<(std::basic_ostream<charT, traits> &lhs,
Monomial<dim> const &rhs)
55 return lhs << rhs.scalar <<
" : " << rhs.exponents.
toString();
64 template<
unsigned int dim>
71 template<
unsigned int dim>
73 : exponents(other), scalar(scalar)
78 template<
unsigned int dim>
82 for (
size_t i = 0; i < other.
nvals; ++i)
89 template<
unsigned int dim>
93 template<
unsigned int dim>
95 : exponents(other.exponents),
97 scalar(other.scalar) {}
99 template<
unsigned int dim>
102 exponents = other.exponents;
104 scalar = other.scalar;
108 template<
unsigned int dim>
111 unsigned int partialSum = 0;
112 for (
unsigned int i = 0; i < dim; ++i)
114 partialSum += exponents.value(i);
119 template<
unsigned int dim>
125 template<
unsigned int dim>
128 return exponents.value(i);
131 template<
unsigned int dim>
134 exponents.get(i) = value;
138 template<
unsigned int dim>
142 return (exponents == other.exponents) && (scalar == other.scalar);
145 template<
unsigned int dim>
150 for (
unsigned int i = 0; i < dim; ++i)
152 res *= openfpm::math::intpowlog(x.value(i), getExponent(i));
157 template<
unsigned int dim>
160 unsigned int s = scalar;
162 for (
unsigned int i = 0; i < dim; ++i)
164 unsigned int origExp = e.value(i);
165 int targetExp = static_cast<int>(origExp) - static_cast<int>(differentialOrder.
value(i));
166 for (
int k = origExp; k > targetExp && k >= 0; --k)
170 e.get(i) = static_cast<unsigned int>(std::max(targetExp, 0));
175 template<
unsigned int dim>
183 #endif //OPENFPM_PDATA_MONOMIALBASISELEMENT_H
T & value(size_t i)
Return the reference to the value at coordinate i.
std::string toString() const
Return the string with the point coordinate.
__device__ __host__ const T & get(unsigned int i) const
Get coordinate.
KeyT const ValueT ValueT OffsetIteratorT OffsetIteratorT int
[in] The number of segments that comprise the sorting data
static const unsigned int nvals
expose the dimension with a different name
It model an expression expr1 + ... exprn.