52 Assert(values.size() ==
this->n() || values.size() == 0,
70 const unsigned int n_sub = raviart_thomas_space.n();
71 const unsigned int my_degree = this->degree();
77 static std::mutex mutex;
78 std::lock_guard<std::mutex> lock(mutex);
80 static std::vector<Tensor<1, dim>> p_values;
81 static std::vector<Tensor<2, dim>> p_grads;
82 static std::vector<Tensor<3, dim>> p_grad_grads;
83 static std::vector<Tensor<4, dim>> p_third_derivatives;
84 static std::vector<Tensor<5, dim>> p_fourth_derivatives;
86 p_values.resize((values.size() == 0) ? 0 :
n_sub);
91 raviart_thomas_space.evaluate(unit_point,
96 p_fourth_derivatives);
97 for (
unsigned int i = 0; i < p_values.size(); ++i)
98 values[i] = p_values[i];
99 for (
unsigned int i = 0; i < p_grads.size(); ++i)
100 grads[i] = p_grads[i];
101 for (
unsigned int i = 0; i < p_grad_grads.size(); ++i)
118 unsigned int start =
n_sub;
129 for (
unsigned int d = 0; d < dim; ++d)
130 monomials[
my_degree + 1].value(unit_point(d),
134 for (
unsigned int i = 0; i <=
my_degree; ++i, ++start)
136 for (
unsigned int d = 0; d < dim; ++d)
139 if (values.size() != 0)
218 for (
unsigned int d = 0; d < dim; ++d)
220 monomials[
my_degree + 1].value(unit_point(d),
228 for (
unsigned int i = 0; i <=
my_degree; ++i)
230 for (
unsigned int d = 0; d < dim; ++d)
235 for (
unsigned int d = 0; d < dim; ++d)
237 monomials[
j].value(unit_point(d),
240 monomials[
j + 1].value(unit_point(d),
245 if (values.size() != 0)
263 values[start + 2 *
n_curls][0] =
265 values[start + 2 *
n_curls][1] =
267 values[start + 2 *
n_curls][2] =
275 values[start + 1][0] =
278 values[start + 1][1] =
280 values[start + 1][2] =
283 values[start +
n_curls + 1][0] =
285 values[start +
n_curls + 1][1] =
288 values[start +
n_curls + 1][2] =
291 values[start + 2 *
n_curls + 1][0] =
293 values[start + 2 *
n_curls + 1][1] =
295 values[start + 2 *
n_curls + 1][2] =
371 grads[start + 1][0][0] =
374 grads[start + 1][0][1] =
377 grads[start + 1][0][2] =
380 grads[start + 1][1][0] =
382 grads[start + 1][1][1] =
384 grads[start + 1][1][2] =
386 grads[start + 1][2][0] =
388 grads[start + 1][2][1] =
390 grads[start + 1][2][2] =
void evaluate(const Point< dim > &unit_point, std::vector< Tensor< 1, dim > > &values, std::vector< Tensor< 2, dim > > &grads, std::vector< Tensor< 3, dim > > &grad_grads, std::vector< Tensor< 4, dim > > &third_derivatives, std::vector< Tensor< 5, dim > > &fourth_derivatives) const override