23#include <Kokkos_Macros.hpp>
37 template <
typename number>
42 const bool spans_next_interval)
55 template <
typename number>
58 const unsigned int index)
68 for (
unsigned int i = 0; i <
points.size(); ++i)
72 for (
unsigned int i = 0; i <
points.size() - 1; ++i)
79 template <
typename number>
82 std::vector<number> &values)
const
86 value(x, values.size() - 1, values.data());
91 template <
typename number>
94 const unsigned int n_derivatives,
110 if (n_derivatives >= 1)
121 for (
unsigned int i = 2; i <= n_derivatives; ++i)
129 double derivative_change_sign = 1.;
136 const double offset = step *
interval;
137 if (x < offset || x > offset + step + step)
139 for (
unsigned int k = 0; k <= n_derivatives; ++k)
143 else if (x < offset + step)
147 derivative_change_sign = -1.;
148 y = offset + step + step - x;
153 const double offset = step *
interval;
159 for (
unsigned int k = 0; k <= n_derivatives; ++k)
163 else if (x > offset + step)
165 for (
unsigned int k = 0; k <= n_derivatives; ++k)
176 (
interval > 0 || derivative_change_sign == -1.)) ||
180 values[0] =
value(x);
181 for (
unsigned int d = 1; d <= n_derivatives; ++d)
190 for (
unsigned int j = 1; j <= n_derivatives; j += 2)
191 values[j] *= derivative_change_sign;
196 template <
typename number>
210 std::vector<PiecewisePolynomial<double>>
212 const unsigned int n_subdivisions,
213 const unsigned int base_degree)
215 std::vector<Polynomial<double>> p_base =
217 for (
auto &polynomial : p_base)
218 polynomial.scale(n_subdivisions);
220 std::vector<PiecewisePolynomial<double>> p;
221 p.reserve(n_subdivisions * base_degree + 1);
223 p.emplace_back(p_base[0], n_subdivisions, 0,
false);
224 for (
unsigned int s = 0; s < n_subdivisions; ++s)
225 for (
unsigned int i = 0; i < base_degree; ++i)
226 p.emplace_back(p_base[i + 1],
229 i == (base_degree - 1) && s < n_subdivisions - 1);
235 std::vector<PiecewisePolynomial<double>>
237 const std::vector<
Point<1>> &points)
239 std::vector<PiecewisePolynomial<double>> p;
240 p.reserve(points.size());
242 for (
unsigned int s = 0; s < points.size(); ++s)
243 p.emplace_back(points, s);
static std::vector< Polynomial< double > > generate_complete_basis(const unsigned int degree)
Polynomial< number > polynomial
PiecewisePolynomial(const Polynomial< number > &coefficients_on_interval, const unsigned int n_intervals, const unsigned int interval, const bool spans_next_interval)
std::vector< number > one_over_lengths
number value(const number x) const
virtual std::size_t memory_consumption() const
std::vector< number > points
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcZero()
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcMessage(std::string arg1)
const bool IsBlockVector< VectorType >::value
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
std::vector< PiecewisePolynomial< double > > generate_complete_linear_basis_on_subdivisions(const std::vector< Point< 1 > > &points)
std::vector< PiecewisePolynomial< double > > generate_complete_Lagrange_basis_on_subdivisions(const unsigned int n_subdivisions, const unsigned int base_degree)
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)