30 const unsigned int degree,
31 const unsigned int n_dofs)
43 support_points.size() == this->n(),
45 "The number of DoFs must be equal to the number of support points."));
48 const unsigned int n = support_points.size();
51 for (
unsigned i = 0; i < n; ++i)
52 for (
unsigned j = 0; j < n; ++j)
53 VDM[i][j] = evaluate_orthogonal_basis_function(i, support_points[j]);
63 for (
unsigned int j = 0; j < n; ++j)
72 for (
unsigned int i = 0; i < n; ++i)
77 vandermonde_matrix_inverse = VDM;
80 for (
unsigned int i = 0; i < n; ++i)
81 for (
unsigned int j = 0; j < n; ++j)
82 if (
std::abs(vandermonde_matrix_inverse[i][j]) < 1e-14)
83 vandermonde_matrix_inverse[i][j] = 0.;
96 for (
unsigned int j = 0; j < vandermonde_matrix_inverse.n(); ++j)
97 result += vandermonde_matrix_inverse[i][j] *
98 evaluate_orthogonal_basis_function(j, p);
100 if (std::fabs(result) < 1e-14)
118 for (
unsigned int j = 0; j < vandermonde_matrix_inverse.n(); ++j)
119 grad += vandermonde_matrix_inverse[i][j] *
120 evaluate_orthogonal_basis_derivative(j, p);
122 if constexpr (dim > 0)
123 for (
unsigned int d = 0; d < dim; ++d)
124 if (std::fabs(grad[d]) < 1e-14)
135 const unsigned int i,
143 for (
unsigned int j = 0; j < vandermonde_matrix_inverse.n(); ++j)
144 grad_grad += vandermonde_matrix_inverse[i][j] *
145 evaluate_orthogonal_basis_2nd_derivative(j, p);
147 if constexpr (dim > 0)
148 for (
unsigned int d = 0; d < dim; ++d)
149 for (
unsigned int e = 0; e < dim; ++e)
150 if (std::fabs(grad_grad[d][e]) < 1e-14)
151 grad_grad[d][e] = 0.0;
162 std::vector<double> &values,
169 (void)third_derivatives;
170 (void)fourth_derivatives;
172 if (values.size() == this->n())
173 for (
unsigned int i = 0; i < this->n(); ++i)
174 values[i] = compute_value(i, unit_point);
176 if (grads.size() == this->n())
177 for (
unsigned int i = 0; i < this->n(); ++i)
178 grads[i] = compute_grad(i, unit_point);
186 const unsigned int i,
189 return compute_grad(i, p);
197 const unsigned int i,
200 return compute_grad_grad(i, p);
208 const unsigned int i,
224 const unsigned int i,
241 const unsigned int j,
242 const unsigned int k,
260 const unsigned int i,
number2 least_squares(Vector< number2 > &dst, const Vector< number2 > &src) const
Tensor< 2, dim > compute_2nd_derivative(const unsigned int i, const Point< dim > &p) const override
Tensor< 1, dim > compute_1st_derivative(const unsigned int i, const Point< dim > &p) const override
virtual Tensor< 2, dim > evaluate_orthogonal_basis_2nd_derivative_by_degree(const unsigned int i, const unsigned int j, const unsigned int k, const Point< dim > &p) const
void evaluate(const Point< dim > &unit_point, std::vector< double > &values, std::vector< Tensor< 1, dim > > &grads, std::vector< Tensor< 2, dim > > &grad_grads, std::vector< Tensor< 3, dim > > &third_derivatives, std::vector< Tensor< 4, dim > > &fourth_derivatives) const override
virtual Tensor< 2, dim > evaluate_orthogonal_basis_2nd_derivative(const unsigned int i, const Point< dim > &p) const
void reinit(const std::vector< Point< dim > > &support_points)
Tensor< 4, dim > compute_4th_derivative(const unsigned int i, const Point< dim > &p) const override
Tensor< 2, dim > compute_grad_grad(const unsigned int i, const Point< dim > &p) const override
ScalarPolynomialsVandermondeBase(const unsigned int degree, const unsigned int n_dofs)
Tensor< 1, dim > compute_grad(const unsigned int i, const Point< dim > &p) const override
Tensor< 3, dim > compute_3rd_derivative(const unsigned int i, const Point< dim > &p) const override
double compute_value(const unsigned int i, const Point< dim > &p) const override
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_NOT_IMPLEMENTED()
static ::ExceptionBase & ExcNotImplemented()
#define AssertIndexRange(index, range)
#define AssertThrow(cond, exc)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)