137 typename ::FiniteElement<dim, spacedim>::InternalDataBase>
138 data_ptr = std::make_unique<InternalData>();
140 data.update_each = requires_update_flags(update_flags);
143 const unsigned int degree(this->degree - 1);
149 const unsigned int n_line_dofs = this->n_dofs_per_line() * lines_per_cell;
152 const unsigned int n_face_dofs = this->n_dofs_per_quad(0) * faces_per_cell;
155 const unsigned int n_q_points = quadrature.
size();
158 data.sigma_imj_values.resize(
160 std::vector<std::vector<double>>(vertices_per_cell,
161 std::vector<double>(vertices_per_cell)));
163 data.sigma_imj_grads.resize(vertices_per_cell,
164 std::vector<std::vector<double>>(
165 vertices_per_cell, std::vector<double>(dim)));
170 data.shape_values.resize(this->n_dofs_per_cell(),
176 data.shape_grads.resize(this->n_dofs_per_cell(),
183 data.shape_hessians.resize(this->n_dofs_per_cell(),
188 std::vector<Point<dim>>
p_list(n_q_points);
189 p_list = quadrature.get_points();
198 std::vector<std::vector<double>>
sigma(
199 n_q_points, std::vector<double>(lines_per_cell));
200 std::vector<std::vector<double>> lambda(
201 n_q_points, std::vector<double>(lines_per_cell));
203 for (
unsigned int q = 0;
q < n_q_points; ++
q)
214 for (
unsigned int i = 0; i < vertices_per_cell; ++i)
216 for (
unsigned int j = 0;
j < vertices_per_cell; ++
j)
218 data.sigma_imj_values[
q][i][
j] =
232 {-1, -1}, {1, -1}, {-1, 1}, {1, 1}};
237 for (
unsigned int i = 0; i < vertices_per_cell; ++i)
239 for (
unsigned int j = 0;
j < vertices_per_cell; ++
j)
252 for (
unsigned int d = 0; d < dim; ++d)
276 data.edge_sigma_values.resize(lines_per_cell);
277 data.edge_sigma_grads.resize(lines_per_cell);
278 for (
unsigned int m = 0; m < lines_per_cell; ++m)
280 data.edge_sigma_values[m].resize(n_q_points);
283 data.edge_sigma_grads[m].resize(dim);
293 data.edge_lambda_values.resize(lines_per_cell,
294 std::vector<double>(n_q_points));
295 data.edge_lambda_grads_2d.resize(lines_per_cell,
296 std::vector<double>(dim));
297 for (
unsigned int m = 0; m < lines_per_cell; ++m)
302 const unsigned int e1(
304 const unsigned int e2(
306 for (
unsigned int q = 0;
q < n_q_points; ++
q)
308 data.edge_sigma_values[m][
q] =
310 data.edge_lambda_values[m][
q] = lambda[
q][
e1] + lambda[
q][
e2];
315 data.edge_lambda_grads_2d[0] = {-1.0, 0.0};
316 data.edge_lambda_grads_2d[1] = {1.0, 0.0};
317 data.edge_lambda_grads_2d[2] = {0.0, -1.0};
318 data.edge_lambda_grads_2d[3] = {0.0, 1.0};
410 for (
unsigned int q = 0;
q < n_q_points; ++
q)
412 for (
unsigned int d = 0; d < dim; ++d)
419 for (
unsigned int q = 0;
q < n_q_points; ++
q)
436 std::vector<std::vector<double>>
polyx(
438 std::vector<std::vector<double>>
polyy(
440 for (
unsigned int i = 0; i < degree; ++i)
445 IntegratedLegendrePolynomials[i + 2].value(
447 IntegratedLegendrePolynomials[i + 2].value(
453 for (
unsigned int j = 0;
j < degree; ++
j)
455 const unsigned int shift_j(
j * degree);
456 for (
unsigned int i = 0; i < degree; ++i)
490 for (
unsigned int j = 0;
j < degree; ++
j)
492 const unsigned int shift_j(
j * degree);
493 for (
unsigned int i = 0; i < degree; ++i)
541 for (
unsigned int j = 0;
j < degree; ++
j)
543 const unsigned int shift_j(
j * degree);
544 for (
unsigned int i = 0; i < degree; ++i)
576 for (
unsigned int d = 0; d < dim; ++d)
624 std::vector<std::vector<double>>
sigma(
625 n_q_points, std::vector<double>(lines_per_cell));
626 std::vector<std::vector<double>> lambda(
627 n_q_points, std::vector<double>(lines_per_cell));
628 for (
unsigned int q = 0;
q < n_q_points; ++
q)
658 for (
unsigned int i = 0; i < vertices_per_cell; ++i)
660 for (
unsigned int j = 0;
j < vertices_per_cell; ++
j)
662 data.sigma_imj_values[
q][i][
j] =
700 for (
unsigned int i = 0; i < vertices_per_cell; ++i)
702 for (
unsigned int j = 0;
j < vertices_per_cell; ++
j)
715 for (
unsigned int d = 0; d < dim; ++d)
738 data.edge_sigma_values.resize(lines_per_cell);
739 data.edge_lambda_values.resize(lines_per_cell);
740 data.edge_sigma_grads.resize(lines_per_cell);
741 data.edge_lambda_grads_3d.resize(lines_per_cell);
742 data.edge_lambda_gradgrads_3d.resize(lines_per_cell);
743 for (
unsigned int m = 0; m < lines_per_cell; ++m)
745 data.edge_sigma_values[m].resize(n_q_points);
746 data.edge_lambda_values[m].resize(n_q_points);
749 data.edge_sigma_grads[m].resize(dim);
751 data.edge_lambda_grads_3d[m].resize(n_q_points);
752 for (
unsigned int q = 0;
q < n_q_points; ++
q)
754 data.edge_lambda_grads_3d[m][
q].resize(dim);
758 data.edge_lambda_gradgrads_3d[m].resize(dim);
759 for (
unsigned int d = 0; d < dim; ++d)
761 data.edge_lambda_gradgrads_3d[m][d].resize(dim);
768 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2};
770 for (
unsigned int m = 0; m < lines_per_cell; ++m)
775 const unsigned int e1(
777 const unsigned int e2(
780 for (
unsigned int q = 0;
q < n_q_points; ++
q)
782 data.edge_sigma_values[m][
q] =
784 data.edge_lambda_values[m][
q] = lambda[
q][
e1] + lambda[
q][
e2];
790 for (
unsigned int q = 0;
q < n_q_points; ++
q)
795 data.edge_lambda_grads_3d[0][
q] = {z - 1.0, 0.0,
x - 1.0};
796 data.edge_lambda_grads_3d[1][
q] = {1.0 - z, 0.0, -
x};
797 data.edge_lambda_grads_3d[2][
q] = {0.0, z - 1.0,
y - 1.0};
798 data.edge_lambda_grads_3d[3][
q] = {0.0, 1.0 - z, -
y};
799 data.edge_lambda_grads_3d[4][
q] = {-z, 0.0, 1.0 -
x};
800 data.edge_lambda_grads_3d[5][
q] = {z, 0.0,
x};
801 data.edge_lambda_grads_3d[6][
q] = {0.0, -z, 1.0 -
y};
802 data.edge_lambda_grads_3d[7][
q] = {0.0, z,
y};
803 data.edge_lambda_grads_3d[8][
q] = {
y - 1.0,
x - 1.0, 0.0};
804 data.edge_lambda_grads_3d[9][
q] = {1.0 -
y, -
x, 0.0};
805 data.edge_lambda_grads_3d[10][
q] = {-
y, 1.0 -
x, 0.0};
806 data.edge_lambda_grads_3d[11][
q] = {
y,
x, 0.0};
836 for (
unsigned int m = 0; m < lines_per_cell; ++m)
850 data.face_lambda_values.resize(faces_per_cell);
851 data.face_lambda_grads.resize(faces_per_cell);
853 for (
unsigned int m = 0; m < faces_per_cell; ++m)
855 data.face_lambda_values[m].resize(n_q_points);
856 data.face_lambda_grads[m].resize(3);
859 for (
unsigned int q = 0;
q < n_q_points; ++
q)
864 data.face_lambda_values[0][
q] = 1.0 -
x;
865 data.face_lambda_values[1][
q] =
x;
866 data.face_lambda_values[2][
q] = 1.0 -
y;
867 data.face_lambda_values[3][
q] =
y;
868 data.face_lambda_values[4][
q] = 1.0 - z;
869 data.face_lambda_values[5][
q] = z;
872 data.face_lambda_grads[0] = {-1.0, 0.0, 0.0};
873 data.face_lambda_grads[1] = {1.0, 0.0, 0.0};
874 data.face_lambda_grads[2] = {0.0, -1.0, 0.0};
875 data.face_lambda_grads[3] = {0.0, 1.0, 0.0};
876 data.face_lambda_grads[4] = {0.0, 0.0, -1.0};
877 data.face_lambda_grads[5] = {0.0, 0.0, 1.0};
925 for (
unsigned int q = 0;
q < n_q_points; ++
q)
927 for (
unsigned int d = 0; d < dim; ++d)
943 for (
unsigned int q = 0;
q < n_q_points; ++
q)
951 std::vector<std::vector<double>>
polyx(
953 std::vector<std::vector<double>>
polyy(
955 std::vector<std::vector<double>>
polyz(
957 for (
unsigned int i = 0; i < degree; ++i)
960 IntegratedLegendrePolynomials[i + 2].value(
962 IntegratedLegendrePolynomials[i + 2].value(
964 IntegratedLegendrePolynomials[i + 2].value(
970 for (
unsigned int k = 0;
k < degree; ++
k)
972 const unsigned int shift_k(
k * degree * degree);
976 for (
unsigned int j = 0;
j < degree; ++
j)
980 for (
unsigned int i = 0; i < degree; ++i)
1053 for (
unsigned int k = 0;
k < degree; ++
k)
1055 const unsigned int shift_k(
k * degree * degree);
1059 for (
unsigned int j = 0;
j < degree; ++
j)
1061 const unsigned int shift_jk(
j * degree +
1063 for (
unsigned int i = 0; i < degree; ++i)
1105 for (
unsigned int d = 0; d < dim; ++d)
1148 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1150 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1179 for (
unsigned int k = 0;
k < degree; ++
k)
1181 const unsigned int shift_k(
k * degree * degree);
1186 for (
unsigned int j = 0;
j < degree; ++
j)
1188 const unsigned int shift_jk(
j * degree +
1190 for (
unsigned int i = 0; i < degree; ++i)
1325 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1327 for (
unsigned int d2 = 0;
d2 < dim;
1384 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1386 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1388 for (
unsigned int d3 = 0;
d3 < dim;
1491 const unsigned int n_q_points = quadrature.
size();
1496 this->n_dofs_per_cell()));
1502 const unsigned int degree(
1511 std::vector<std::vector<unsigned int>>
edge_order(
1524 std::vector<int>
edge_sign(lines_per_cell);
1525 for (
unsigned int m = 0; m < lines_per_cell; ++m)
1581 std::vector<std::vector<double>> edge_sigma_values(
1583 std::vector<std::vector<double>> edge_sigma_grads(
1586 std::vector<std::vector<double>> edge_lambda_values(
1592 for (
unsigned int m = 0; m < lines_per_cell; ++m)
1594 std::transform(edge_sigma_values[m].
begin(),
1595 edge_sigma_values[m].
end(),
1596 edge_sigma_values[m].
begin(),
1601 std::transform(edge_sigma_grads[m].
begin(),
1602 edge_sigma_grads[m].
end(),
1603 edge_sigma_grads[m].
begin(),
1618 for (
unsigned int m = 0; m < lines_per_cell; ++m)
1620 const unsigned int shift_m(m * this->n_dofs_per_line());
1621 for (
unsigned int q = 0;
q < n_q_points; ++
q)
1624 std::vector<std::vector<double>> poly(
1626 for (
unsigned int i = 1; i < degree + 1; ++i)
1631 IntegratedLegendrePolynomials[i + 1].value(
1632 edge_sigma_values[m][
q], poly[i - 1]);
1637 for (
unsigned int d = 0; d < dim; ++d)
1640 0.5 * edge_sigma_grads[m][d] *
1641 edge_lambda_values[m][
q];
1644 for (
unsigned int i = 1; i < degree + 1; ++i)
1647 const unsigned int dof_index(i +
shift_m);
1648 for (
unsigned int d = 0; d < dim; ++d)
1651 edge_sigma_grads[m][d] *
1653 edge_lambda_values[m][
q] +
1662 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1664 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1669 0.5 * edge_sigma_grads[m][
d1] *
1674 for (
unsigned int i = 1; i < degree + 1; ++i)
1677 const unsigned int dof_index(i +
shift_m);
1680 edge_sigma_grads[m][0] *
1681 edge_sigma_grads[m][0] *
1685 (edge_sigma_grads[m][0] *
1687 edge_sigma_grads[m][1] *
1695 edge_sigma_grads[m][1] *
1696 edge_sigma_grads[m][1] *
1703 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1705 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1707 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
1716 for (
unsigned int i = 0; i < degree; ++i)
1718 const unsigned int dof_index(i + 1 +
shift_m);
1720 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1722 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1724 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
1728 edge_sigma_grads[m][
d1] *
1729 edge_sigma_grads[m][
d2] *
1730 edge_sigma_grads[m][
d3] *
1732 edge_lambda_values[m][
q] +
1734 (edge_sigma_grads[m][
d1] *
1735 edge_sigma_grads[m][
d2] *
1737 edge_sigma_grads[m][
d3] *
1738 edge_sigma_grads[m][
d1] *
1740 edge_sigma_grads[m][
d3] *
1741 edge_sigma_grads[m][
d2] *
1760 std::vector<int>
edge_sign(lines_per_cell);
1761 for (
unsigned int m = 0; m < lines_per_cell; ++m)
1819 std::vector<std::vector<double>> edge_sigma_values(
1821 std::vector<std::vector<double>> edge_lambda_values(
1823 std::vector<std::vector<double>> edge_sigma_grads(
1827 std::vector<std::vector<std::vector<double>>>
1831 for (
unsigned int m = 0; m < lines_per_cell; ++m)
1833 std::transform(edge_sigma_values[m].
begin(),
1834 edge_sigma_values[m].
end(),
1835 edge_sigma_values[m].
begin(),
1839 std::transform(edge_sigma_grads[m].
begin(),
1840 edge_sigma_grads[m].
end(),
1841 edge_sigma_grads[m].
begin(),
1856 std::vector<std::vector<double>> poly(
1858 for (
unsigned int m = 0; m < lines_per_cell; ++m)
1860 const unsigned int shift_m(m * this->n_dofs_per_line());
1861 for (
unsigned int q = 0;
q < n_q_points; ++
q)
1867 for (
unsigned int i = 0; i < degree; ++i)
1869 IntegratedLegendrePolynomials[i + 2].value(
1870 edge_sigma_values[m][
q], poly[i]);
1876 for (
unsigned int d = 0; d < dim; ++d)
1879 0.5 * edge_sigma_grads[m][d] *
1880 edge_lambda_values[m][
q];
1885 for (
unsigned int i = 0; i < degree; ++i)
1887 const unsigned int dof_index(i + 1 +
shift_m);
1888 for (
unsigned int d = 0; d < dim; ++d)
1891 edge_sigma_grads[m][d] * poly[i][1] *
1892 edge_lambda_values[m][
q] +
1901 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1903 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1906 0.5 * edge_sigma_grads[m][
d1] *
1913 for (
unsigned int i = 0; i < degree; ++i)
1915 const unsigned int dof_index(i + 1 +
shift_m);
1917 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1919 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1923 edge_sigma_grads[m][
d1] *
1924 edge_sigma_grads[m][
d2] *
1926 edge_lambda_values[m][
q] +
1927 (edge_sigma_grads[m][
d1] *
1929 edge_sigma_grads[m][
d2] *
1932 edge_lambda_gradgrads_3d[m][
d1]
1943 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1945 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1947 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
1951 0.5 * edge_sigma_grads[m][
d1] *
1952 edge_lambda_gradgrads_3d[m][
d3][
d2];
1960 for (
unsigned int i = 0; i < degree; ++i)
1962 const unsigned int dof_index(i + 1 +
shift_m);
1964 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
1966 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
1968 for (
unsigned int d3 = 0;
d3 < dim;
1974 edge_sigma_grads[m][
d1] *
1975 edge_sigma_grads[m][
d2] *
1976 edge_sigma_grads[m][
d3] *
1978 edge_lambda_values[m][
q] +
1980 (edge_sigma_grads[m][
d1] *
1981 edge_sigma_grads[m][
d2] *
1984 edge_sigma_grads[m][
d3] *
1985 edge_sigma_grads[m][
d1] *
1988 edge_sigma_grads[m][
d3] *
1989 edge_sigma_grads[m][
d2] *
1993 (edge_sigma_grads[m][
d1] *
1994 edge_lambda_gradgrads_3d
1996 edge_sigma_grads[m][
d2] *
1997 edge_lambda_gradgrads_3d
1999 edge_sigma_grads[m][
d3] *
2000 edge_lambda_gradgrads_3d
2042 const unsigned int degree(
2053 const unsigned int n_q_points = quadrature.
size();
2058 this->n_dofs_per_cell()));
2065 const unsigned int vertices_per_face(
2074 std::vector<std::vector<unsigned int>> face_orientation(
2075 faces_per_cell, std::vector<unsigned int>(vertices_per_face));
2085 {1, 2}, {0, 3}, {0, 3}, {1, 2}};
2087 for (
unsigned int m = 0; m < faces_per_cell; ++m)
2094 for (
unsigned int v = 1; v < vertices_per_face; ++v)
2105 face_orientation[m][0] =
2119 face_orientation[m][1] =
2122 face_orientation[m][3] =
2128 face_orientation[m][1] =
2131 face_orientation[m][3] =
2140 faces_per_cell, std::vector<double>(n_q_points));
2142 faces_per_cell, std::vector<double>(dim));
2144 faces_per_cell, std::vector<double>(n_q_points));
2146 faces_per_cell, std::vector<double>(dim));
2148 std::vector<std::vector<double>> face_lambda_values(
2149 faces_per_cell, std::vector<double>(n_q_points));
2150 std::vector<std::vector<double>> face_lambda_grads(
2151 faces_per_cell, std::vector<double>(dim));
2152 for (
unsigned int m = 0; m < faces_per_cell; ++m)
2154 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2158 [face_orientation[m][1]];
2161 [face_orientation[m][3]];
2164 for (
unsigned int d = 0; d < dim; ++d)
2168 [face_orientation[m][1]][d];
2171 [face_orientation[m][3]][d];
2182 std::vector<std::vector<double>>
polyxi(
2184 std::vector<std::vector<double>>
polyeta(
2188 for (
unsigned int m = 0; m < faces_per_cell; ++m)
2191 const unsigned int shift_m(m * this->n_dofs_per_quad(0));
2227 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2236 for (
unsigned int i = 0; i < degree; ++i)
2239 IntegratedLegendrePolynomials[i + 2].value(
2241 IntegratedLegendrePolynomials[i + 2].value(
2247 for (
unsigned int j = 0;
j < degree; ++
j)
2249 const unsigned int shift_j(
j * degree);
2250 for (
unsigned int i = 0; i < degree; ++i)
2256 for (
unsigned int d = 0; d < dim; ++d)
2263 face_lambda_values[m][
q] +
2264 face_lambda_grads[m][d] *
polyxi[i][0] *
2270 for (
unsigned int d = 0; d < dim; ++d)
2277 face_lambda_values[m][
q];
2285 for (
unsigned int d = 0; d < dim; ++d)
2289 face_lambda_values[m][
q];
2293 face_lambda_values[m][
q];
2299 for (
unsigned int j = 0;
j < degree; ++
j)
2301 const unsigned int shift_j(
j * degree);
2302 for (
unsigned int i = 0; i < degree; ++i)
2308 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2310 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2325 face_lambda_values[m][
q] +
2330 face_lambda_grads[m][
d1] +
2335 face_lambda_grads[m][
d2];
2341 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2343 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2358 face_lambda_values[m][
q] +
2363 face_lambda_grads[m][
d2];
2372 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2374 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2379 face_lambda_values[m][
q] +
2385 face_lambda_values[m][
q] +
2386 face_lambda_grads[m][
d2] *
polyxi[
j][0]);
2393 for (
unsigned int j = 0;
j < degree; ++
j)
2395 const unsigned int shift_j(
j * degree);
2396 for (
unsigned int i = 0; i < degree; ++i)
2403 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2405 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2407 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
2416 face_lambda_values[m][
q] +
2418 face_lambda_grads[m][
d2]) +
2421 face_lambda_grads[m][
d1]) +
2427 face_lambda_values[m][
q] +
2431 face_lambda_grads[m][
d3] +
2434 face_lambda_grads[m]
2444 face_lambda_grads[m][
d2] +
2446 face_lambda_grads[m][
d1]) +
2447 face_lambda_grads[m][
d3] *
2456 face_lambda_values[m][
q] *
2483 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2485 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2487 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
2494 face_lambda_grads[m][
d3] +
2496 face_lambda_grads[m][
d2]) +
2499 face_lambda_grads[m][
d3] +
2501 face_lambda_grads[m][
d2]) +
2502 face_lambda_values[m][
q] *
2522 face_lambda_values[m][
q] +
2524 face_lambda_grads[m][
d3]) +
2527 face_lambda_grads[m][
d2]) -
2533 face_lambda_values[m][
q] +
2535 face_lambda_grads[m][
d2]) +
2540 face_lambda_values[m]
2543 face_lambda_grads[m]
2547 face_lambda_values[m][
q]));
2557 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2559 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2561 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
2569 face_lambda_values[m][
q] +
2571 face_lambda_grads[m][
d3]) +
2572 face_lambda_grads[m][
d2] *
2582 face_lambda_values[m][
q] +
2584 face_lambda_grads[m][
d3]) +
2585 face_lambda_grads[m][
d2] *
2622 fill_edge_values(cell, quadrature, fe_data);
2623 if (dim == 3 && this->degree > 1)
2625 fill_face_values(cell, quadrature, fe_data);
2629 const unsigned int n_q_points = quadrature.
size();
2634 this->n_dofs_per_cell()));
2643 std::vector<Tensor<1, dim>> transformed_shape_values(n_q_points);
2644 for (
unsigned int dof = 0; dof < this->n_dofs_per_cell(); ++dof)
2646 const unsigned int first =
2647 data.shape_function_to_row_table[dof * this->n_components() +
2648 this->get_nonzero_components(dof)
2649 .first_selected_component()];
2655 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2657 for (
unsigned int d = 0; d < dim; ++d)
2660 transformed_shape_values[
q][d];
2670 std::vector<Tensor<2, dim>> input(n_q_points);
2671 std::vector<Tensor<2, dim>> transformed_shape_grads(n_q_points);
2672 for (
unsigned int dof = 0; dof < this->n_dofs_per_cell(); ++dof)
2674 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2683 const unsigned int first =
2684 data.shape_function_to_row_table[dof * this->n_components() +
2685 this->get_nonzero_components(dof)
2686 .first_selected_component()];
2688 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2690 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2692 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2694 transformed_shape_grads[
q][
d1] -=
2701 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2703 for (
unsigned int d = 0; d < dim; ++d)
2706 transformed_shape_grads[
q][d];
2716 std::vector<Tensor<3, dim>> input(n_q_points);
2717 std::vector<Tensor<3, dim>> transformed_shape_hessians(n_q_points);
2718 for (
unsigned int dof = 0; dof < this->n_dofs_per_cell(); ++dof)
2720 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2729 const unsigned int first =
2730 data.shape_function_to_row_table[dof * this->n_components() +
2731 this->get_nonzero_components(dof)
2732 .first_selected_component()];
2734 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2736 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2738 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2740 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
2742 for (
unsigned int d4 = 0;
d4 < dim; ++
d4)
2744 transformed_shape_hessians[
q][
d1][
d3][
d4] -=
2767 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2769 for (
unsigned int d = 0; d < dim; ++d)
2772 transformed_shape_hessians[
q][d];
2817 fill_edge_values(cell,
2821 if (dim == 3 && this->degree > 1)
2823 fill_face_values(cell,
2825 this->reference_cell(), quadrature[0]),
2830 const unsigned int n_q_points = quadrature[0].
size();
2834 cell->face_orientation(
face_no),
2843 std::vector<Tensor<1, dim>> transformed_shape_values(n_q_points);
2844 for (
unsigned int dof = 0; dof < this->n_dofs_per_cell(); ++dof)
2853 const unsigned int first =
2854 data.shape_function_to_row_table[dof * this->n_components() +
2855 this->get_nonzero_components(dof)
2856 .first_selected_component()];
2858 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2860 for (
unsigned int d = 0; d < dim; ++d)
2863 transformed_shape_values[
q][d];
2872 std::vector<Tensor<2, dim>> input(n_q_points);
2873 std::vector<Tensor<2, dim>> transformed_shape_grads(n_q_points);
2874 for (
unsigned int dof = 0; dof < this->n_dofs_per_cell(); ++dof)
2876 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2880 mapping.transform(input,
2885 const unsigned int first =
2886 data.shape_function_to_row_table[dof * this->n_components() +
2887 this->get_nonzero_components(dof)
2888 .first_selected_component()];
2890 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2892 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2894 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2896 transformed_shape_grads[
q][
d1] -=
2903 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2905 for (
unsigned int d = 0; d < dim; ++d)
2908 transformed_shape_grads[
q][d];
2917 std::vector<Tensor<3, dim>> input(n_q_points);
2918 std::vector<Tensor<3, dim>> transformed_shape_hessians(n_q_points);
2919 for (
unsigned int dof = 0; dof < this->n_dofs_per_cell(); ++dof)
2921 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2924 mapping.transform(input,
2929 const unsigned int first =
2930 data.shape_function_to_row_table[dof * this->n_components() +
2931 this->get_nonzero_components(dof)
2932 .first_selected_component()];
2934 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2936 for (
unsigned int d1 = 0;
d1 < dim; ++
d1)
2938 for (
unsigned int d2 = 0;
d2 < dim; ++
d2)
2940 for (
unsigned int d3 = 0;
d3 < dim; ++
d3)
2942 for (
unsigned int d4 = 0;
d4 < dim; ++
d4)
2944 transformed_shape_hessians[
q][
d1][
d3][
d4] -=
2967 for (
unsigned int q = 0;
q < n_q_points; ++
q)
2969 for (
unsigned int d = 0; d < dim; ++d)
2972 transformed_shape_hessians[
q][d];