31 , polynomial_space(create_polynomials(k))
35 std::vector<std::vector<Polynomials::Polynomial<double>>>
38 std::vector<std::vector<Polynomials::Polynomial<double>>> pols(dim);
42 for (
unsigned int i = 1; i < dim; ++i)
64 Assert(grads.size() == this->n() || grads.empty(),
66 Assert(grad_grads.size() == this->n() || grad_grads.empty(),
68 Assert(third_derivatives.size() == this->n() || third_derivatives.empty(),
70 Assert(fourth_derivatives.size() == this->n() || fourth_derivatives.empty(),
74 (void)third_derivatives;
76 (void)fourth_derivatives;
83 const unsigned int n_basis = polynomial_space.n();
84 const unsigned int my_degree = this->degree();
85 std::vector<double> unit_point_values((
values.empty()) ? 0 : n_basis);
86 std::vector<Tensor<1, dim>> unit_point_grads((grads.empty()) ? 0 : n_basis);
87 std::vector<Tensor<2, dim>> unit_point_grad_grads(
88 (grad_grads.empty()) ? 0 : n_basis);
89 std::vector<Tensor<3, dim>> empty_vector_of_3rd_order_tensors;
90 std::vector<Tensor<4, dim>> empty_vector_of_4th_order_tensors;
96 polynomial_space.evaluate(unit_point,
99 unit_point_grad_grads,
100 empty_vector_of_3rd_order_tensors,
101 empty_vector_of_4th_order_tensors);
106 for (
unsigned int i = 0; i < unit_point_values.size(); ++i)
107 values[i][0] = unit_point_values[i];
109 if (grads.size() > 0)
110 for (
unsigned int i = 0; i < unit_point_grads.size(); ++i)
111 grads[i][0][0] = unit_point_grads[i][0];
113 if (grad_grads.size() > 0)
114 for (
unsigned int i = 0; i < unit_point_grad_grads.size(); ++i)
115 grad_grads[i][0][0][0] = unit_point_grad_grads[i][0][0];
122 polynomial_space.evaluate(unit_point,
125 unit_point_grad_grads,
126 empty_vector_of_3rd_order_tensors,
127 empty_vector_of_4th_order_tensors);
136 p(0) = unit_point(1);
137 p(1) = unit_point(0);
139 std::vector<double> p_values((
values.empty()) ? 0 : n_basis);
140 std::vector<Tensor<1, dim>> p_grads((grads.empty()) ? 0 : n_basis);
141 std::vector<Tensor<2, dim>> p_grad_grads(
142 (grad_grads.empty()) ? 0 : n_basis);
144 polynomial_space.evaluate(p,
148 empty_vector_of_3rd_order_tensors,
149 empty_vector_of_4th_order_tensors);
155 for (
unsigned int i = 0; i <= my_degree; ++i)
156 for (
unsigned int j = 0; j < 2; ++j)
158 values[i + j * (my_degree + 1)][0] = 0.0;
159 values[i + j * (my_degree + 1)][1] =
160 p_values[i + j * (my_degree + 1)];
161 values[i + (j + 2) * (my_degree + 1)][0] =
162 unit_point_values[i + j * (my_degree + 1)];
163 values[i + (j + 2) * (my_degree + 1)][1] = 0.0;
167 for (
unsigned int i = 0; i <= my_degree; ++i)
168 for (
unsigned int j = 0; j < my_degree; ++j)
173 unit_point_values[i + (j + 2) * (my_degree + 1)];
177 values[i + (j + my_degree +
179 (my_degree + 1)][0] = 0.0;
180 values[i + (j + my_degree +
182 (my_degree + 1)][1] =
183 p_values[i + (j + 2) * (my_degree + 1)];
187 if (grads.size() > 0)
189 for (
unsigned int i = 0; i <= my_degree; ++i)
190 for (
unsigned int j = 0; j < 2; ++j)
192 for (
unsigned int k = 0; k < dim; ++k)
194 grads[i + j * (my_degree + 1)][0][k] = 0.0;
195 grads[i + (j + 2) * (my_degree + 1)][0][k] =
196 unit_point_grads[i + j * (my_degree + 1)][k];
197 grads[i + (j + 2) * (my_degree + 1)][1][k] = 0.0;
200 grads[i + j * (my_degree + 1)][1][0] =
201 p_grads[i + j * (my_degree + 1)][1];
202 grads[i + j * (my_degree + 1)][1][1] =
203 p_grads[i + j * (my_degree + 1)][0];
207 for (
unsigned int i = 0; i <= my_degree; ++i)
208 for (
unsigned int j = 0; j < my_degree; ++j)
210 for (
unsigned int k = 0; k < dim; ++k)
215 unit_point_grads[i + (j + 2) * (my_degree + 1)][k];
220 grads[i + (j + my_degree +
222 (my_degree + 1)][0][k] = 0.0;
225 grads[i + (j + my_degree +
227 (my_degree + 1)][1][0] =
228 p_grads[i + (j + 2) * (my_degree + 1)][1];
229 grads[i + (j + my_degree +
231 (my_degree + 1)][1][1] =
232 p_grads[i + (j + 2) * (my_degree + 1)][0];
236 if (grad_grads.size() > 0)
238 for (
unsigned int i = 0; i <= my_degree; ++i)
239 for (
unsigned int j = 0; j < 2; ++j)
241 for (
unsigned int k = 0; k < dim; ++k)
242 for (
unsigned int l = 0;
l < dim; ++
l)
244 grad_grads[i + j * (my_degree + 1)][0][k][
l] = 0.0;
245 grad_grads[i + (j + 2) * (my_degree + 1)][0][k][
l] =
246 unit_point_grad_grads[i + j * (my_degree + 1)][k]
248 grad_grads[i + (j + 2) * (my_degree + 1)][1][k][
l] =
252 grad_grads[i + j * (my_degree + 1)][1][0][0] =
253 p_grad_grads[i + j * (my_degree + 1)][1][1];
254 grad_grads[i + j * (my_degree + 1)][1][0][1] =
255 p_grad_grads[i + j * (my_degree + 1)][1][0];
256 grad_grads[i + j * (my_degree + 1)][1][1][0] =
257 p_grad_grads[i + j * (my_degree + 1)][0][1];
258 grad_grads[i + j * (my_degree + 1)][1][1][1] =
259 p_grad_grads[i + j * (my_degree + 1)][0][0];
263 for (
unsigned int i = 0; i <= my_degree; ++i)
264 for (
unsigned int j = 0; j < my_degree; ++j)
266 for (
unsigned int k = 0; k < dim; ++k)
267 for (
unsigned int l = 0;
l < dim; ++
l)
272 [k][
l] = unit_point_grad_grads
273 [i + (j + 2) * (my_degree + 1)][k][
l];
278 grad_grads[i + (j + my_degree +
280 (my_degree + 1)][0][k][
l] = 0.0;
283 grad_grads[i + (j + my_degree +
285 (my_degree + 1)][1][0][0] =
286 p_grad_grads[i + (j + 2) * (my_degree + 1)][1][1];
287 grad_grads[i + (j + my_degree +
289 (my_degree + 1)][1][0][1] =
290 p_grad_grads[i + (j + 2) * (my_degree + 1)][1][0];
291 grad_grads[i + (j + my_degree +
293 (my_degree + 1)][1][1][0] =
294 p_grad_grads[i + (j + 2) * (my_degree + 1)][0][1];
295 grad_grads[i + (j + my_degree +
297 (my_degree + 1)][1][1][1] =
298 p_grad_grads[i + (j + 2) * (my_degree + 1)][0][0];
307 polynomial_space.evaluate(unit_point,
310 unit_point_grad_grads,
311 empty_vector_of_3rd_order_tensors,
312 empty_vector_of_4th_order_tensors);
321 std::vector<double> p1_values((
values.empty()) ? 0 : n_basis);
322 std::vector<Tensor<1, dim>> p1_grads((grads.empty()) ? 0 : n_basis);
323 std::vector<Tensor<2, dim>> p1_grad_grads(
324 (grad_grads.empty()) ? 0 : n_basis);
325 std::vector<double> p2_values((
values.empty()) ? 0 : n_basis);
326 std::vector<Tensor<1, dim>> p2_grads((grads.empty()) ? 0 : n_basis);
327 std::vector<Tensor<2, dim>> p2_grad_grads(
328 (grad_grads.empty()) ? 0 : n_basis);
330 p1(0) = unit_point(1);
331 p1(1) = unit_point(2);
332 p1(2) = unit_point(0);
333 polynomial_space.evaluate(p1,
337 empty_vector_of_3rd_order_tensors,
338 empty_vector_of_4th_order_tensors);
339 p2(0) = unit_point(2);
340 p2(1) = unit_point(0);
341 p2(2) = unit_point(1);
342 polynomial_space.evaluate(p2,
346 empty_vector_of_3rd_order_tensors,
347 empty_vector_of_4th_order_tensors);
353 for (
unsigned int i = 0; i <= my_degree; ++i)
355 for (
unsigned int j = 0; j < 2; ++j)
357 for (
unsigned int k = 0; k < 2; ++k)
359 for (
unsigned int l = 0;
l < 2; ++
l)
361 values[i + (j + 4 * k) * (my_degree + 1)][2 *
l] =
363 values[i + (j + 4 * k + 2) * (my_degree + 1)]
365 values[i + (j + 2 * (k + 4)) * (my_degree + 1)]
369 values[i + (j + 4 * k + 2) * (my_degree + 1)][0] =
370 unit_point_values[i + (j + k * (my_degree + 2)) *
372 values[i + (j + 2 * (k + 4)) * (my_degree + 1)][2] =
373 p2_values[i + (j + k * (my_degree + 2)) *
377 values[i + j * (my_degree + 1)][1] =
378 p1_values[i + j * (my_degree + 1) * (my_degree + 2)];
381 values[i + 4 * (my_degree + 1)][1] =
382 p1_values[i + my_degree + 1];
383 values[i + 5 * (my_degree + 1)][1] =
384 p1_values[i + (my_degree + 1) * (my_degree + 3)];
388 for (
unsigned int i = 0; i <= my_degree; ++i)
389 for (
unsigned int j = 0; j < my_degree; ++j)
391 for (
unsigned int k = 0; k < my_degree; ++k)
393 for (
unsigned int l = 0;
l < 2; ++
l)
419 (my_degree + 1)][
l] = 0.0;
428 unit_point_values[i +
429 (j + (k + 2) * (my_degree + 2) +
439 p1_values[i + ((j + 2) * (my_degree + 2) + k + 2) *
447 (my_degree + 1)][2] =
448 p2_values[i + (j + (k + 2) * (my_degree + 2) + 2) *
452 for (
unsigned int k = 0; k < 2; ++k)
454 for (
unsigned int l = 0;
l < 2; ++
l)
456 for (
unsigned int m = 0; m < 2; ++m)
460 (2 * (k + 2 *
l) + 1) * my_degree +
462 (my_degree + 1)][m +
l] = 0.0;
464 2 * (k + 2 * (
l + 1)) *
472 values[(i + 2 * k * (my_degree + 1) +
477 values[i + (j + (2 * k + 9) * my_degree +
479 (my_degree + 1)][2 *
l] = 0.0;
482 values[(i + 2 * k * (my_degree + 1) +
486 p1_values[i + (j + k * (my_degree + 2) + 2) *
488 values[i + (j + (2 * k + 1) * my_degree +
490 (my_degree + 1)][2] =
491 p2_values[i + ((j + 2) * (my_degree + 2) + k) *
493 values[(i + 2 * (k + 2) * (my_degree + 1) +
497 p2_values[i + (j + k * (my_degree + 2) + 2) *
499 values[i + (j + (2 * k + 5) * my_degree +
501 (my_degree + 1)][0] =
502 unit_point_values[i +
503 ((j + 2) * (my_degree + 2) + k) *
505 values[(i + 2 * (k + 4) * (my_degree + 1) +
509 unit_point_values[i +
510 (j + k * (my_degree + 2) + 2) *
512 values[i + (j + (2 * k + 9) * my_degree +
514 (my_degree + 1)][1] =
515 p1_values[i + ((j + 2) * (my_degree + 2) + k) *
521 if (grads.size() > 0)
523 for (
unsigned int i = 0; i <= my_degree; ++i)
525 for (
unsigned int j = 0; j < 2; ++j)
527 for (
unsigned int k = 0; k < 2; ++k)
529 for (
unsigned int l = 0;
l < 2; ++
l)
530 for (
unsigned int m = 0; m < dim; ++m)
532 grads[i + (j + 4 * k) * (my_degree + 1)][2 *
l]
534 grads[i + (j + 4 * k + 2) * (my_degree + 1)]
536 grads[i + (j + 2 * (k + 4)) * (my_degree + 1)]
540 for (
unsigned int l = 0;
l < dim; ++
l)
541 grads[i + (j + 4 * k + 2) * (my_degree + 1)][0][
l] =
542 unit_point_grads[i + (j + k * (my_degree + 2)) *
545 grads[i + (j + 2 * (k + 4)) * (my_degree + 1)][2][0] =
546 p2_grads[i + (j + k * (my_degree + 2)) *
548 grads[i + (j + 2 * (k + 4)) * (my_degree + 1)][2][1] =
549 p2_grads[i + (j + k * (my_degree + 2)) *
551 grads[i + (j + 2 * (k + 4)) * (my_degree + 1)][2][2] =
552 p2_grads[i + (j + k * (my_degree + 2)) *
556 grads[i + j * (my_degree + 1)][1][0] =
557 p1_grads[i + j * (my_degree + 1) * (my_degree + 2)][2];
558 grads[i + j * (my_degree + 1)][1][1] =
559 p1_grads[i + j * (my_degree + 1) * (my_degree + 2)][0];
560 grads[i + j * (my_degree + 1)][1][2] =
561 p1_grads[i + j * (my_degree + 1) * (my_degree + 2)][1];
564 grads[i + 4 * (my_degree + 1)][1][0] =
565 p1_grads[i + my_degree + 1][2];
566 grads[i + 4 * (my_degree + 1)][1][1] =
567 p1_grads[i + my_degree + 1][0];
568 grads[i + 4 * (my_degree + 1)][1][2] =
569 p1_grads[i + my_degree + 1][1];
570 grads[i + 5 * (my_degree + 1)][1][0] =
571 p1_grads[i + (my_degree + 1) * (my_degree + 3)][2];
572 grads[i + 5 * (my_degree + 1)][1][1] =
573 p1_grads[i + (my_degree + 1) * (my_degree + 3)][0];
574 grads[i + 5 * (my_degree + 1)][1][2] =
575 p1_grads[i + (my_degree + 1) * (my_degree + 3)][1];
579 for (
unsigned int i = 0; i <= my_degree; ++i)
580 for (
unsigned int j = 0; j < my_degree; ++j)
582 for (
unsigned int k = 0; k < my_degree; ++k)
584 for (
unsigned int l = 0;
l < dim; ++
l)
586 for (
unsigned int m = 0; m < 2; ++m)
615 (my_degree + 1)][m][
l] = 0.0;
625 [
l] = unit_point_grads
626 [i + (j + (k + 2) * (my_degree + 2) + 2) *
637 p1_grads[i + ((j + 2) * (my_degree + 2) + k + 2) *
646 p1_grads[i + ((j + 2) * (my_degree + 2) + k + 2) *
655 p1_grads[i + ((j + 2) * (my_degree + 2) + k + 2) *
663 (my_degree + 1)][2][0] =
664 p2_grads[i + (j + (k + 2) * (my_degree + 2) + 2) *
672 (my_degree + 1)][2][1] =
673 p2_grads[i + (j + (k + 2) * (my_degree + 2) + 2) *
681 (my_degree + 1)][2][2] =
682 p2_grads[i + (j + (k + 2) * (my_degree + 2) + 2) *
686 for (
unsigned int k = 0; k < 2; ++k)
688 for (
unsigned int l = 0;
l < 2; ++
l)
689 for (
unsigned int m = 0; m < dim; ++m)
691 for (
unsigned int n = 0; n < 2; ++n)
695 (2 * (k + 2 *
l) + 1) * my_degree +
697 (my_degree + 1)][n +
l][m] = 0.0;
699 2 * (k + 2 * (
l + 1)) *
707 grads[(i + 2 * k * (my_degree + 1) +
712 grads[i + (j + (2 * k + 9) * my_degree +
714 (my_degree + 1)][2 *
l][m] = 0.0;
717 for (
unsigned int l = 0;
l < dim; ++
l)
719 grads[i + (j + (2 * k + 5) * my_degree +
721 (my_degree + 1)][0][
l] =
723 ((j + 2) * (my_degree + 2) +
726 grads[(i + 2 * (k + 4) * (my_degree + 1) +
732 (j + k * (my_degree + 2) + 2) *
736 grads[(i + 2 * k * (my_degree + 1) +
740 p1_grads[i + (j + k * (my_degree + 2) + 2) *
742 grads[(i + 2 * k * (my_degree + 1) +
746 p1_grads[i + (j + k * (my_degree + 2) + 2) *
748 grads[(i + 2 * k * (my_degree + 1) +
752 p1_grads[i + (j + k * (my_degree + 2) + 2) *
754 grads[i + (j + (2 * k + 1) * my_degree +
756 (my_degree + 1)][2][0] =
757 p2_grads[i + ((j + 2) * (my_degree + 2) + k) *
759 grads[i + (j + (2 * k + 1) * my_degree +
761 (my_degree + 1)][2][1] =
762 p2_grads[i + ((j + 2) * (my_degree + 2) + k) *
764 grads[i + (j + (2 * k + 1) * my_degree +
766 (my_degree + 1)][2][2] =
767 p2_grads[i + ((j + 2) * (my_degree + 2) + k) *
769 grads[(i + 2 * (k + 2) * (my_degree + 1) +
773 p2_grads[i + (j + k * (my_degree + 2) + 2) *
775 grads[(i + 2 * (k + 2) * (my_degree + 1) +
779 p2_grads[i + (j + k * (my_degree + 2) + 2) *
781 grads[(i + 2 * (k + 2) * (my_degree + 1) +
785 p2_grads[i + (j + k * (my_degree + 2) + 2) *
787 grads[i + (j + (2 * k + 9) * my_degree +
789 (my_degree + 1)][1][0] =
790 p1_grads[i + ((j + 2) * (my_degree + 2) + k) *
792 grads[i + (j + (2 * k + 9) * my_degree +
794 (my_degree + 1)][1][1] =
795 p1_grads[i + ((j + 2) * (my_degree + 2) + k) *
797 grads[i + (j + (2 * k + 9) * my_degree +
799 (my_degree + 1)][1][2] =
800 p1_grads[i + ((j + 2) * (my_degree + 2) + k) *
806 if (grad_grads.size() > 0)
808 for (
unsigned int i = 0; i <= my_degree; ++i)
810 for (
unsigned int j = 0; j < 2; ++j)
812 for (
unsigned int k = 0; k < 2; ++k)
814 for (
unsigned int l = 0;
l < dim; ++
l)
815 for (
unsigned int m = 0; m < dim; ++m)
817 for (
unsigned int n = 0; n < 2; ++n)
820 (j + 4 * k) * (my_degree + 1)]
822 grad_grads[i + (j + 4 * k + 2) *
823 (my_degree + 1)][n + 1][
l]
825 grad_grads[i + (j + 2 * (k + 4)) *
826 (my_degree + 1)][n][
l][m] =
830 grad_grads[i + (j + 4 * k + 2) *
831 (my_degree + 1)][0][
l][m] =
832 unit_point_grad_grads
833 [i + (j + k * (my_degree + 2)) *
834 (my_degree + 1)][
l][m];
837 grad_grads[i + (j + 2 * (k + 4)) *
838 (my_degree + 1)][2][0][0] =
839 p2_grad_grads[i + (j + k * (my_degree + 2)) *
840 (my_degree + 1)][1][1];
841 grad_grads[i + (j + 2 * (k + 4)) *
842 (my_degree + 1)][2][0][1] =
843 p2_grad_grads[i + (j + k * (my_degree + 2)) *
844 (my_degree + 1)][1][2];
845 grad_grads[i + (j + 2 * (k + 4)) *
846 (my_degree + 1)][2][0][2] =
847 p2_grad_grads[i + (j + k * (my_degree + 2)) *
848 (my_degree + 1)][1][0];
849 grad_grads[i + (j + 2 * (k + 4)) *
850 (my_degree + 1)][2][1][0] =
851 p2_grad_grads[i + (j + k * (my_degree + 2)) *
852 (my_degree + 1)][2][1];
853 grad_grads[i + (j + 2 * (k + 4)) *
854 (my_degree + 1)][2][1][1] =
855 p2_grad_grads[i + (j + k * (my_degree + 2)) *
856 (my_degree + 1)][2][2];
857 grad_grads[i + (j + 2 * (k + 4)) *
858 (my_degree + 1)][2][1][2] =
859 p2_grad_grads[i + (j + k * (my_degree + 2)) *
860 (my_degree + 1)][2][0];
861 grad_grads[i + (j + 2 * (k + 4)) *
862 (my_degree + 1)][2][2][0] =
863 p2_grad_grads[i + (j + k * (my_degree + 2)) *
864 (my_degree + 1)][0][1];
865 grad_grads[i + (j + 2 * (k + 4)) *
866 (my_degree + 1)][2][2][1] =
867 p2_grad_grads[i + (j + k * (my_degree + 2)) *
868 (my_degree + 1)][0][2];
869 grad_grads[i + (j + 2 * (k + 4)) *
870 (my_degree + 1)][2][2][2] =
871 p2_grad_grads[i + (j + k * (my_degree + 2)) *
872 (my_degree + 1)][0][0];
875 grad_grads[i + j * (my_degree + 1)][1][0][0] =
876 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
878 grad_grads[i + j * (my_degree + 1)][1][0][1] =
879 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
881 grad_grads[i + j * (my_degree + 1)][1][0][2] =
882 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
884 grad_grads[i + j * (my_degree + 1)][1][1][0] =
885 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
887 grad_grads[i + j * (my_degree + 1)][1][1][1] =
888 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
890 grad_grads[i + j * (my_degree + 1)][1][1][2] =
891 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
893 grad_grads[i + j * (my_degree + 1)][1][2][0] =
894 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
896 grad_grads[i + j * (my_degree + 1)][1][2][1] =
897 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
899 grad_grads[i + j * (my_degree + 1)][1][2][2] =
900 p1_grad_grads[i + j * (my_degree + 1) * (my_degree + 2)]
904 grad_grads[i + 4 * (my_degree + 1)][1][0][0] =
905 p1_grad_grads[i + my_degree + 1][2][2];
906 grad_grads[i + 4 * (my_degree + 1)][1][0][1] =
907 p1_grad_grads[i + my_degree + 1][2][0];
908 grad_grads[i + 4 * (my_degree + 1)][1][0][2] =
909 p1_grad_grads[i + my_degree + 1][2][1];
910 grad_grads[i + 4 * (my_degree + 1)][1][1][0] =
911 p1_grad_grads[i + my_degree + 1][0][2];
912 grad_grads[i + 4 * (my_degree + 1)][1][1][1] =
913 p1_grad_grads[i + my_degree + 1][0][0];
914 grad_grads[i + 4 * (my_degree + 1)][1][1][2] =
915 p1_grad_grads[i + my_degree + 1][0][1];
916 grad_grads[i + 4 * (my_degree + 1)][1][2][0] =
917 p1_grad_grads[i + my_degree + 1][1][2];
918 grad_grads[i + 4 * (my_degree + 1)][1][2][1] =
919 p1_grad_grads[i + my_degree + 1][1][0];
920 grad_grads[i + 4 * (my_degree + 1)][1][2][2] =
921 p1_grad_grads[i + my_degree + 1][1][1];
922 grad_grads[i + 5 * (my_degree + 1)][1][0][0] =
923 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][2][2];
924 grad_grads[i + 5 * (my_degree + 1)][1][0][1] =
925 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][2][0];
926 grad_grads[i + 5 * (my_degree + 1)][1][0][2] =
927 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][2][1];
928 grad_grads[i + 5 * (my_degree + 1)][1][1][0] =
929 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][0][2];
930 grad_grads[i + 5 * (my_degree + 1)][1][1][1] =
931 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][0][0];
932 grad_grads[i + 5 * (my_degree + 1)][1][1][2] =
933 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][0][1];
934 grad_grads[i + 5 * (my_degree + 1)][1][2][0] =
935 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][1][2];
936 grad_grads[i + 5 * (my_degree + 1)][1][2][1] =
937 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][1][0];
938 grad_grads[i + 5 * (my_degree + 1)][1][2][2] =
939 p1_grad_grads[i + (my_degree + 1) * (my_degree + 3)][1][1];
943 for (
unsigned int i = 0; i <= my_degree; ++i)
944 for (
unsigned int j = 0; j < my_degree; ++j)
946 for (
unsigned int k = 0; k < my_degree; ++k)
948 for (
unsigned int l = 0;
l < dim; ++
l)
949 for (
unsigned int m = 0; m < dim; ++m)
951 for (
unsigned int n = 0; n < 2; ++n)
976 dim>::faces_per_cell +
980 (my_degree + 1)][n][
l][m] = 0.0;
991 [m] = unit_point_grad_grads
992 [i + (j + (k + 2) * (my_degree + 2) + 2) *
993 (my_degree + 1)][
l][m];
1004 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1006 (my_degree + 1)][2][2];
1015 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1017 (my_degree + 1)][2][0];
1026 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1028 (my_degree + 1)][2][1];
1037 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1039 (my_degree + 1)][0][2];
1048 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1050 (my_degree + 1)][0][0];
1059 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1061 (my_degree + 1)][0][1];
1070 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1072 (my_degree + 1)][1][2];
1081 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1083 (my_degree + 1)][1][0];
1092 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k +
1094 (my_degree + 1)][1][1];
1102 (my_degree + 1)][2][0][0] =
1104 (j + (k + 2) * (my_degree + 2) + 2) *
1105 (my_degree + 1)][1][1];
1113 (my_degree + 1)][2][0][1] =
1115 (j + (k + 2) * (my_degree + 2) + 2) *
1116 (my_degree + 1)][1][2];
1124 (my_degree + 1)][2][0][2] =
1126 (j + (k + 2) * (my_degree + 2) + 2) *
1127 (my_degree + 1)][1][0];
1135 (my_degree + 1)][2][1][0] =
1137 (j + (k + 2) * (my_degree + 2) + 2) *
1138 (my_degree + 1)][2][1];
1146 (my_degree + 1)][2][1][1] =
1148 (j + (k + 2) * (my_degree + 2) + 2) *
1149 (my_degree + 1)][2][2];
1157 (my_degree + 1)][2][1][2] =
1159 (j + (k + 2) * (my_degree + 2) + 2) *
1160 (my_degree + 1)][2][0];
1168 (my_degree + 1)][2][2][0] =
1170 (j + (k + 2) * (my_degree + 2) + 2) *
1171 (my_degree + 1)][0][1];
1179 (my_degree + 1)][2][2][1] =
1181 (j + (k + 2) * (my_degree + 2) + 2) *
1182 (my_degree + 1)][0][2];
1190 (my_degree + 1)][2][2][2] =
1192 (j + (k + 2) * (my_degree + 2) + 2) *
1193 (my_degree + 1)][0][0];
1196 for (
unsigned int k = 0; k < 2; ++k)
1198 for (
unsigned int l = 0;
l < dim; ++
l)
1199 for (
unsigned int m = 0; m < dim; ++m)
1201 for (
unsigned int n = 0; n < 2; ++n)
1203 for (
unsigned int o = 0; o < 2; ++o)
1208 (2 * (k + 2 * n) + 1) * my_degree +
1210 (my_degree + 1)][o + n][
l][m] =
1214 2 * (k + 2 * (n + 1)) *
1220 [o + k][
l][m] = 0.0;
1224 [(i + 2 * k * (my_degree + 1) +
1228 [2 * n][
l][m] = 0.0;
1230 [i + (j + (2 * k + 9) * my_degree +
1232 (my_degree + 1)][2 * n][
l][m] =
1237 (j + (2 * k + 5) * my_degree +
1239 (my_degree + 1)][0][
l][m] =
1240 unit_point_grad_grads
1241 [i + ((j + 2) * (my_degree + 2) + k) *
1242 (my_degree + 1)][
l][m];
1243 grad_grads[(i + 2 * (k + 4) * (my_degree + 1) +
1248 [
l][m] = unit_point_grad_grads
1249 [i + (j + k * (my_degree + 2) + 2) *
1250 (my_degree + 1)][
l][m];
1254 [(i + 2 * k * (my_degree + 1) +
1258 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1259 (my_degree + 1)][2][2];
1261 [(i + 2 * k * (my_degree + 1) +
1265 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1266 (my_degree + 1)][2][0];
1268 [(i + 2 * k * (my_degree + 1) +
1272 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1273 (my_degree + 1)][2][1];
1275 [(i + 2 * k * (my_degree + 1) +
1279 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1280 (my_degree + 1)][0][2];
1282 [(i + 2 * k * (my_degree + 1) +
1286 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1287 (my_degree + 1)][0][0];
1289 [(i + 2 * k * (my_degree + 1) +
1293 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1294 (my_degree + 1)][0][1];
1296 [(i + 2 * k * (my_degree + 1) +
1300 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1301 (my_degree + 1)][1][2];
1303 [(i + 2 * k * (my_degree + 1) +
1307 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1308 (my_degree + 1)][1][0];
1310 [(i + 2 * k * (my_degree + 1) +
1314 p1_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1315 (my_degree + 1)][1][1];
1316 grad_grads[i + (j + (2 * k + 1) * my_degree +
1318 (my_degree + 1)][2][0][0] =
1319 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1320 (my_degree + 1)][1][1];
1321 grad_grads[i + (j + (2 * k + 1) * my_degree +
1323 (my_degree + 1)][2][0][1] =
1324 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1325 (my_degree + 1)][1][2];
1326 grad_grads[i + (j + (2 * k + 1) * my_degree +
1328 (my_degree + 1)][2][0][2] =
1329 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1330 (my_degree + 1)][1][0];
1331 grad_grads[i + (j + (2 * k + 1) * my_degree +
1333 (my_degree + 1)][2][1][0] =
1334 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1335 (my_degree + 1)][2][1];
1336 grad_grads[i + (j + (2 * k + 1) * my_degree +
1338 (my_degree + 1)][2][1][1] =
1339 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1340 (my_degree + 1)][2][2];
1341 grad_grads[i + (j + (2 * k + 1) * my_degree +
1343 (my_degree + 1)][2][1][2] =
1344 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1345 (my_degree + 1)][2][0];
1346 grad_grads[i + (j + (2 * k + 1) * my_degree +
1348 (my_degree + 1)][2][2][0] =
1349 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1350 (my_degree + 1)][0][1];
1351 grad_grads[i + (j + (2 * k + 1) * my_degree +
1353 (my_degree + 1)][2][2][1] =
1354 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1355 (my_degree + 1)][0][2];
1356 grad_grads[i + (j + (2 * k + 1) * my_degree +
1358 (my_degree + 1)][2][2][2] =
1359 p2_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1360 (my_degree + 1)][0][0];
1362 [(i + 2 * (k + 2) * (my_degree + 1) +
1366 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1367 (my_degree + 1)][1][1];
1369 [(i + 2 * (k + 2) * (my_degree + 1) +
1373 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1374 (my_degree + 1)][1][2];
1376 [(i + 2 * (k + 2) * (my_degree + 1) +
1380 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1381 (my_degree + 1)][1][0];
1383 [(i + 2 * (k + 2) * (my_degree + 1) +
1387 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1388 (my_degree + 1)][2][1];
1390 [(i + 2 * (k + 2) * (my_degree + 1) +
1394 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1395 (my_degree + 1)][2][2];
1397 [(i + 2 * (k + 2) * (my_degree + 1) +
1401 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1402 (my_degree + 1)][2][0];
1404 [(i + 2 * (k + 2) * (my_degree + 1) +
1408 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1409 (my_degree + 1)][0][1];
1411 [(i + 2 * (k + 2) * (my_degree + 1) +
1415 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1416 (my_degree + 1)][0][2];
1418 [(i + 2 * (k + 2) * (my_degree + 1) +
1422 p2_grad_grads[i + (j + k * (my_degree + 2) + 2) *
1423 (my_degree + 1)][0][0];
1424 grad_grads[i + (j + (2 * k + 9) * my_degree +
1426 (my_degree + 1)][1][0][0] =
1427 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1428 (my_degree + 1)][2][2];
1429 grad_grads[i + (j + (2 * k + 9) * my_degree +
1431 (my_degree + 1)][1][0][1] =
1432 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1433 (my_degree + 1)][2][0];
1434 grad_grads[i + (j + (2 * k + 9) * my_degree +
1436 (my_degree + 1)][1][0][2] =
1437 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1438 (my_degree + 1)][2][1];
1439 grad_grads[i + (j + (2 * k + 9) * my_degree +
1441 (my_degree + 1)][1][1][0] =
1442 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1443 (my_degree + 1)][0][2];
1444 grad_grads[i + (j + (2 * k + 9) * my_degree +
1446 (my_degree + 1)][1][1][1] =
1447 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1448 (my_degree + 1)][0][0];
1449 grad_grads[i + (j + (2 * k + 9) * my_degree +
1451 (my_degree + 1)][1][1][2] =
1452 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1453 (my_degree + 1)][0][1];
1454 grad_grads[i + (j + (2 * k + 9) * my_degree +
1456 (my_degree + 1)][1][2][0] =
1457 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1458 (my_degree + 1)][1][2];
1459 grad_grads[i + (j + (2 * k + 9) * my_degree +
1461 (my_degree + 1)][1][2][1] =
1462 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1463 (my_degree + 1)][1][0];
1464 grad_grads[i + (j + (2 * k + 9) * my_degree +
1466 (my_degree + 1)][1][2][2] =
1467 p1_grad_grads[i + ((j + 2) * (my_degree + 2) + k) *
1468 (my_degree + 1)][1][1];
1492 return 2 * (k + 1) * (k + 2);
1495 return 3 * (k + 1) * (k + 2) * (k + 2);
1507 std::unique_ptr<TensorPolynomialsBase<dim>>
1510 return std::make_unique<PolynomialsNedelec<dim>>(*this);
virtual std::unique_ptr< TensorPolynomialsBase< dim > > clone() const override
PolynomialsNedelec(const unsigned int k)
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
static std::vector< std::vector< Polynomials::Polynomial< double > > > create_polynomials(const unsigned int k)
static unsigned int n_polynomials(const unsigned int degree)
static std::vector< Polynomial< double > > generate_complete_basis(const unsigned int degree)
static std::vector< Polynomial< double > > generate_complete_basis(const unsigned int p)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotImplemented()
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)