41 return (0.75 - 2.5 * p[0] + 1.5 * p[1] +
42 1.5 * (p[0] * p[0] - p[1] * p[1]));
46 return (-0.25 - 0.5 * p[0] + 1.5 * p[1] +
47 1.5 * (p[0] * p[0] - p[1] * p[1]));
51 return (0.75 + 1.5 * p[0] - 2.5 * p[1] -
52 1.5 * (p[0] * p[0] - p[1] * p[1]));
56 return (-0.25 + 1.5 * p[0] - 0.5 * p[1] -
57 1.5 * (p[0] * p[0] - p[1] * p[1]));
71 if constexpr (dim == 2)
76 grad[0] = -2.5 + 3 * p[0];
77 grad[1] = 1.5 - 3 * p[1];
81 grad[0] = -0.5 + 3.0 * p[0];
82 grad[1] = 1.5 - 3.0 * p[1];
86 grad[0] = 1.5 - 3.0 * p[0];
87 grad[1] = -2.5 + 3.0 * p[1];
91 grad[0] = 1.5 - 3.0 * p[0];
92 grad[1] = -0.5 + 3.0 * p[1];
114 const unsigned int i,
117 if constexpr (dim == 2)
125 grad_grad[1][1] = -3;
132 grad_grad[1][1] = -3;
136 grad_grad[0][0] = -3;
143 grad_grad[0][0] = -3;
164 std::vector<double> &values,
170 const unsigned int n_pols = this->
n();
175 Assert(grad_grads.size() ==
n_pols || grad_grads.empty(),
177 Assert(third_derivatives.size() ==
n_pols || third_derivatives.empty(),
179 Assert(fourth_derivatives.size() ==
n_pols || fourth_derivatives.empty(),
182 for (
unsigned int i = 0; i <
n_pols; ++i)
184 if (values.size() != 0)
188 if (grads.size() != 0)
192 if (grad_grads.size() != 0)
196 if (third_derivatives.size() != 0)
200 if (fourth_derivatives.size() != 0)
210std::unique_ptr<ScalarPolynomialsBase<dim>>
213 return std::make_unique<PolynomialsRannacherTurek<dim>>(*this);
218#include "polynomials_rannacher_turek.inst"
virtual std::unique_ptr< ScalarPolynomialsBase< dim > > clone() const override
Tensor< order, dim > compute_derivative(const unsigned int i, 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
Tensor< 2, dim > compute_grad_grad(const unsigned int i, const Point< dim > &p) const override
Tensor< 1, dim > compute_grad(const unsigned int i, const Point< dim > &p) const override
PolynomialsRannacherTurek()
double compute_value(const unsigned int i, const Point< dim > &p) const override
const unsigned int n_pols
ScalarPolynomialsBase(const unsigned int deg, const unsigned int n_polynomials)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
constexpr unsigned int GeometryInfo< dim >::faces_per_cell
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
#define DEAL_II_NOT_IMPLEMENTED()