53 zero_indices(
unsigned int (&indices)[dim])
55 for (
unsigned int d = 0; d < dim; ++d)
66 increment_indices(
unsigned int (&indices)[dim],
const unsigned int dofs1d)
69 for (
unsigned int d = 0; d < dim - 1; ++d)
70 if (indices[d] == dofs1d)
86template <
int xdim,
int xspacedim>
93 template <
int spacedim>
102 template <
int spacedim>
107 const unsigned int dim = 2;
109 unsigned int q_deg = fe.
degree;
157 std::vector<
Point<dim - 1>> constraint_points;
159 constraint_points.emplace_back(0.5);
162 for (
unsigned int i = 1; i < q_deg; ++i)
163 constraint_points.push_back(
167 for (
unsigned int i = 1; i < q_deg; ++i)
168 constraint_points.push_back(
180 const std::vector<unsigned int> &index_map_inverse =
182 const std::vector<unsigned int> face_index_map =
189 for (
unsigned int i = 0; i < constraint_points.size(); ++i)
190 for (
unsigned int j = 0; j < q_deg + 1; ++j)
193 p[0] = constraint_points[i][0];
195 fe.
poly_space->compute_value(index_map_inverse[j], p);
207 template <
int spacedim>
212 const unsigned int dim = 3;
214 unsigned int q_deg = fe.
degree;
234 std::vector<
Point<dim - 1>> constraint_points;
237 constraint_points.emplace_back(0.5, 0.5);
240 constraint_points.emplace_back(0, 0.5);
241 constraint_points.emplace_back(1, 0.5);
242 constraint_points.emplace_back(0.5, 0);
243 constraint_points.emplace_back(0.5, 1);
247 const unsigned int n = q_deg - 1;
248 const double step = 1. / q_deg;
249 std::vector<Point<1>> line_support_points(n);
250 for (
unsigned int i = 0; i < n; ++i)
251 line_support_points[i][0] = (i + 1) * step;
255 auto get_points = [&](
const unsigned int face_no,
256 const unsigned int subface_no) {
258 ReferenceCells::get_hypercube<2>(),
281 for (
unsigned int face = 0;
284 for (
unsigned int subface = 0;
288 const auto p_line = get_points(face, subface);
289 constraint_points.insert(constraint_points.end(),
295 std::vector<
Point<dim - 1>> inner_points(n * n);
296 for (
unsigned int i = 0, iy = 1; iy <= n; ++iy)
297 for (
unsigned int ix = 1; ix <= n; ++ix)
301 for (
unsigned int child = 0;
304 for (
const auto &inner_point : inner_points)
305 constraint_points.push_back(
312 const unsigned int pnts = (q_deg + 1) * (q_deg + 1);
316 const std::vector<unsigned int> &index_map_inverse =
318 const std::vector<unsigned int> face_index_map =
328 for (
unsigned int i = 0; i < constraint_points.size(); ++i)
330 const double interval =
static_cast<double>(q_deg * 2);
331 bool mirror[dim - 1];
343 for (
unsigned int k = 0; k < dim - 1; ++k)
345 const int coord_int =
346 static_cast<int>(constraint_points[i][k] * interval + 0.25);
347 constraint_point[k] = 1. * coord_int / interval;
369 mirror[k] = (constraint_point[k] > 0.5);
371 constraint_point[k] = 1.0 - constraint_point[k];
374 for (
unsigned int j = 0; j < pnts; ++j)
376 unsigned int indices[2] = {j % (q_deg + 1), j / (q_deg + 1)};
378 for (
unsigned int k = 0; k < 2; ++k)
380 indices[k] = q_deg - indices[k];
382 const unsigned int new_index =
383 indices[1] * (q_deg + 1) + indices[0];
386 fe.
poly_space->compute_value(index_map_inverse[new_index],
403template <
int dim,
int spacedim>
407 const std::vector<bool> &restriction_is_additive_flags)
411 restriction_is_additive_flags,
414 &poly_space) != nullptr ?
421template <
int dim,
int spacedim>
426 ExcMessage(
"The first support point has to be zero."));
427 Assert(points.back()[0] == 1,
428 ExcMessage(
"The last support point has to be one."));
433 const unsigned int q_dofs_per_cell =
434 Utilities::fixed_power<dim>(
q_degree + 1);
440 [
this, q_dofs_per_cell]() {
441 std::vector<unsigned int> renumber =
442 FETools::hierarchic_to_lexicographic_numbering<dim>(
q_degree);
443 for (
unsigned int i = q_dofs_per_cell; i < this->
n_dofs_per_cell(); ++i)
444 renumber.push_back(i);
445 auto *tensor_poly_space_ptr =
447 if (tensor_poly_space_ptr !=
nullptr)
452 auto *tensor_piecewise_poly_space_ptr =
dynamic_cast<
455 if (tensor_piecewise_poly_space_ptr !=
nullptr)
460 auto *tensor_bubbles_poly_space_ptr =
463 if (tensor_bubbles_poly_space_ptr !=
nullptr)
468 auto *tensor_const_poly_space_ptr =
471 if (tensor_const_poly_space_ptr !=
nullptr)
497template <
int dim,
int spacedim>
508 Assert(interpolation_matrix.
m() == this->n_dofs_per_cell(),
510 this->n_dofs_per_cell()));
516 const unsigned int q_dofs_per_cell =
517 Utilities::fixed_power<dim>(
q_degree + 1);
518 const unsigned int source_q_dofs_per_cell =
519 Utilities::fixed_power<dim>(source_fe->degree + 1);
525 for (
unsigned int j = 0; j < q_dofs_per_cell; ++j)
535 for (
unsigned int i = 0; i < source_q_dofs_per_cell; ++i)
536 interpolation_matrix(j, i) =
537 source_fe->poly_space->compute_value(i, p);
544 source_fe->n_dofs_per_cell());
545 for (
unsigned int i = 0; i < source_q_dofs_per_cell; ++i)
546 interpolation_matrix(q_dofs_per_cell, i) = 0.;
547 for (
unsigned int j = 0; j < q_dofs_per_cell; ++j)
548 interpolation_matrix(j, source_q_dofs_per_cell) = 0.;
549 interpolation_matrix(q_dofs_per_cell, source_q_dofs_per_cell) = 1.;
555 for (
unsigned int j = 0; j < source_fe->n_dofs_per_cell(); ++j)
556 if (std::fabs(interpolation_matrix(i, j)) <
eps)
557 interpolation_matrix(i, j) = 0.;
566 for (
unsigned int j = 0; j < source_fe->n_dofs_per_cell(); ++j)
567 sum += interpolation_matrix(i, j);
598template <
int dim,
int spacedim>
603 const unsigned int face_no)
const
607 interpolation_matrix,
613template <
int dim,
int spacedim>
617 const unsigned int subface,
619 const unsigned int face_no)
const
633 Assert(interpolation_matrix.
n() == this->n_dofs_per_face(face_no),
635 this->n_dofs_per_face(face_no)));
681 double matrix_entry =
687 if (std::fabs(matrix_entry - 1.0) < eps)
689 if (std::fabs(matrix_entry) < eps)
692 interpolation_matrix(i, j) = matrix_entry;
705 sum += interpolation_matrix(j, i);
724template <
int dim,
int spacedim>
733template <
int dim,
int spacedim>
734std::vector<std::pair<unsigned int, unsigned int>>
790template <
int dim,
int spacedim>
791std::vector<std::pair<unsigned int, unsigned int>>
808 const unsigned int p = this->
degree;
809 const unsigned int q = fe_q_other->degree;
811 std::vector<std::pair<unsigned int, unsigned int>> identities;
813 const std::vector<unsigned int> &index_map_inverse =
815 const std::vector<unsigned int> &index_map_inverse_other =
816 fe_q_other->get_poly_space_numbering_inverse();
818 for (
unsigned int i = 0; i < p - 1; ++i)
819 for (
unsigned int j = 0; j < q - 1; ++j)
822 fe_q_other->unit_support_points[index_map_inverse_other[j + 1]]
824 identities.emplace_back(i, j);
832 std::vector<std::pair<unsigned int, unsigned int>> identities;
836 const auto &face_support_points_other =
845 const unsigned int offset =
846 dim == 2 ? this->
reference_cell().face_reference_cell(0).n_vertices() :
850 const unsigned int offset_other =
857 for (
unsigned int i = 0; i < this->
degree - 1; ++i)
858 for (
unsigned int j = 0; j < fe_other.
degree - 1; ++j)
859 if (face_support_points[i + offset].distance(
860 face_support_points_other[j + offset_other]) < 1e-14)
861 identities.emplace_back(i, j);
891template <
int dim,
int spacedim>
892std::vector<std::pair<unsigned int, unsigned int>>
895 const unsigned int)
const
907 const unsigned int p = this->
degree;
908 const unsigned int q = fe_q_other->degree;
910 std::vector<std::pair<unsigned int, unsigned int>> identities;
912 const std::vector<unsigned int> &index_map_inverse =
914 const std::vector<unsigned int> &index_map_inverse_other =
915 fe_q_other->get_poly_space_numbering_inverse();
917 for (
unsigned int i1 = 0; i1 < p - 1; ++i1)
918 for (
unsigned int i2 = 0; i2 < p - 1; ++i2)
919 for (
unsigned int j1 = 0; j1 < q - 1; ++j1)
920 for (
unsigned int j2 = 0; j2 < q - 1; ++j2)
931 identities.emplace_back(i1 * (p - 1) + i2, j1 * (q - 1) + j2);
938 const unsigned int face_no_neighbor =
941 std::vector<std::pair<unsigned int, unsigned int>> identities;
945 const auto &face_support_points_other =
949 const auto face_reference_cell =
951 Assert(face_reference_cell ==
956 face_reference_cell.n_vertices() +
959 const auto offset_other =
960 face_reference_cell.n_vertices() +
965 for (
unsigned int j = 0; j < fe_other.
n_dofs_per_quad(face_no_neighbor);
967 if (face_support_points[i + offset].distance(
968 face_support_points_other[j + offset_other]) < 1
e-14)
969 identities.emplace_back(i, j);
976 return std::vector<std::pair<unsigned int, unsigned int>>();
987 return std::vector<std::pair<unsigned int, unsigned int>>();
992 return std::vector<std::pair<unsigned int, unsigned int>>();
1004template <
int dim,
int spacedim>
1007 const std::vector<
Point<1>> &points)
1009 const std::vector<unsigned int> &index_map_inverse =
1022 for (
unsigned int k = 0; k < support_quadrature.size(); ++k)
1024 support_quadrature.point(k);
1029template <
int dim,
int spacedim>
1032 const std::vector<
Point<1>> &points)
1037 const unsigned int face_no = 0;
1040 Utilities::fixed_power<dim - 1>(
q_degree + 1));
1048 const std::vector<unsigned int> face_index_map =
1056 const Quadrature<dim - 1> support_quadrature(support_1d);
1061 for (
unsigned int k = 0; k < support_quadrature.size(); ++k)
1063 support_quadrature.point(k);
1068template <
int dim,
int spacedim>
1084 const unsigned int face_no = 0;
1092 const unsigned int n =
q_degree - 1;
1113 for (
unsigned int local = 0; local < this->
n_dofs_per_quad(face_no); ++local)
1117 unsigned int i = local % n, j = local / n;
1126 i + (n - 1 - j) * n - local;
1130 (n - 1 - j) + (n - 1 - i) * n - local;
1134 (n - 1 - i) + j * n - local;
1141 j + (n - 1 - i) * n - local;
1145 (n - 1 - i) + (n - 1 - j) * n - local;
1149 (n - 1 - j) + i * n - local;
1155template <
int dim,
int spacedim>
1158 const unsigned int face_index,
1159 const unsigned int face,
1165 combined_orientation);
1170template <
int dim,
int spacedim>
1171std::vector<unsigned int>
1176 std::vector<unsigned int> dpo(dim + 1, 1U);
1177 for (
unsigned int i = 1; i < dpo.size(); ++i)
1178 dpo[i] = dpo[i - 1] * (
degree - 1);
1184template <
int dim,
int spacedim>
1187 const std::vector<
Point<1>> &points)
1194template <
int dim,
int spacedim>
1197 const unsigned int child,
1204 "Prolongation matrices are only available for refined cells!"));
1208 if (this->
prolongation[refinement_case - 1][child].n() == 0)
1213 if (this->
prolongation[refinement_case - 1][child].n() ==
1218 const unsigned int q_dofs_per_cell =
1219 Utilities::fixed_power<dim>(
q_degree + 1);
1233 for (
unsigned int i = 0; i < q_dofs_per_cell; ++i)
1236 i, this->unit_support_points[i])) < eps,
1238 "The Lagrange polynomial does not evaluate "
1239 "to one or zero in a nodal point. "
1240 "This typically indicates that the "
1241 "polynomial interpolation is "
1242 "ill-conditioned such that round-off "
1243 "prevents the sum to be one."));
1244 for (
unsigned int j = 0; j < q_dofs_per_cell; ++j)
1247 i, this->unit_support_points[j])) < eps,
1249 "The Lagrange polynomial does not evaluate "
1250 "to one or zero in a nodal point. "
1251 "This typically indicates that the "
1252 "polynomial interpolation is "
1253 "ill-conditioned such that round-off "
1254 "prevents the sum to be one."));
1262 const unsigned int dofs1d =
q_degree + 1;
1263 std::vector<Table<2, double>> subcell_evaluations(
1266 const std::vector<unsigned int> &index_map_inverse =
1271 unsigned int step_size_diag = 0;
1273 unsigned int factor = 1;
1274 for (
unsigned int d = 0;
d < dim; ++
d)
1276 step_size_diag += factor;
1286 for (
unsigned int j = 0; j < dofs1d; ++j)
1288 const unsigned int diag_comp = index_map_inverse[j * step_size_diag];
1294 for (
unsigned int i = 0; i < dofs1d; ++i)
1295 for (
unsigned int d = 0;
d < dim; ++
d)
1300 const double cell_value =
1301 this->
poly_space->compute_value(index_map_inverse[i], point);
1320 if (std::fabs(cell_value) < eps)
1321 subcell_evaluations[
d](j, i) = 0;
1323 subcell_evaluations[
d](j, i) = cell_value;
1329 unsigned int j_indices[dim];
1330 internal::FE_Q_Base::zero_indices<dim>(j_indices);
1331 for (
unsigned int j = 0; j < q_dofs_per_cell; j += dofs1d)
1333 unsigned int i_indices[dim];
1334 internal::FE_Q_Base::zero_indices<dim>(i_indices);
1335 for (
unsigned int i = 0; i < q_dofs_per_cell; i += dofs1d)
1337 double val_extra_dim = 1.;
1338 for (
unsigned int d = 1;
d < dim; ++
d)
1340 subcell_evaluations[d](j_indices[d - 1], i_indices[d - 1]);
1344 for (
unsigned int jj = 0; jj < dofs1d; ++jj)
1346 const unsigned int j_ind = index_map_inverse[j + jj];
1347 for (
unsigned int ii = 0; ii < dofs1d; ++ii)
1348 prolongate(j_ind, index_map_inverse[i + ii]) =
1349 val_extra_dim * subcell_evaluations[0](jj, ii);
1354 internal::FE_Q_Base::increment_indices<dim>(i_indices, dofs1d);
1357 internal::FE_Q_Base::increment_indices<dim>(j_indices, dofs1d);
1363 prolongate(q_dofs_per_cell, q_dofs_per_cell) = 1.;
1373 sum += prolongate(row, col);
1374 Assert(std::fabs(sum - 1.) <
1378 "prolongation matrix do not add to one. "
1379 "This typically indicates that the "
1380 "polynomial interpolation is "
1381 "ill-conditioned such that round-off "
1382 "prevents the sum to be one."));
1388 this->
prolongation[refinement_case - 1][child]) = std::move(prolongate);
1397template <
int dim,
int spacedim>
1400 const unsigned int child,
1407 "Restriction matrices are only available for refined cells!"));
1411 if (this->
restriction[refinement_case - 1][child].n() == 0)
1416 if (this->
restriction[refinement_case - 1][child].n() ==
1418 return this->
restriction[refinement_case - 1][child];
1423 const unsigned int q_dofs_per_cell =
1424 Utilities::fixed_power<dim>(
q_degree + 1);
1445 const std::vector<unsigned int> &index_map_inverse =
1448 const unsigned int dofs1d =
q_degree + 1;
1449 std::vector<Tensor<1, dim>> evaluations1d(dofs1d);
1453 for (
unsigned int i = 0; i < q_dofs_per_cell; ++i)
1455 unsigned int mother_dof = index_map_inverse[i];
1470 for (
unsigned int j = 0; j < dofs1d; ++j)
1471 for (
unsigned int d = 0;
d < dim; ++
d)
1475 evaluations1d[j][
d] =
1476 this->
poly_space->compute_value(index_map_inverse[j],
1479 unsigned int j_indices[dim];
1480 internal::FE_Q_Base::zero_indices<dim>(j_indices);
1481 double sum_check = 0;
1482 for (
unsigned int j = 0; j < q_dofs_per_cell; j += dofs1d)
1484 double val_extra_dim = 1.;
1485 for (
unsigned int d = 1;
d < dim; ++
d)
1486 val_extra_dim *= evaluations1d[j_indices[d - 1]][d];
1487 for (
unsigned int jj = 0; jj < dofs1d; ++jj)
1495 const double val = val_extra_dim * evaluations1d[jj][0];
1496 const unsigned int child_dof = index_map_inverse[j + jj];
1497 if (std::fabs(val - 1.) < eps)
1498 my_restriction(mother_dof, child_dof) = 1.;
1499 else if (std::fabs(val) > eps)
1500 my_restriction(mother_dof, child_dof) = val;
1503 internal::FE_Q_Base::increment_indices<dim>(j_indices,
1507 Assert(std::fabs(sum_check - 1.0) <
1511 "restriction matrix do not add to one. "
1512 "This typically indicates that the "
1513 "polynomial interpolation is "
1514 "ill-conditioned such that round-off "
1515 "prevents the sum to be one."));
1529 std::move(my_restriction);
1532 return this->
restriction[refinement_case - 1][child];
1542template <
int dim,
int spacedim>
1545 const unsigned int shape_index,
1546 const unsigned int face_index)
const
1555 return (((shape_index == 0) && (face_index == 0)) ||
1556 ((shape_index == 1) && (face_index == 1)));
1571 const unsigned int vertex_no = shape_index;
1575 for (
unsigned int v = 0; v < GeometryInfo<dim>::vertices_per_face; ++v)
1585 const unsigned int line_index =
1591 if constexpr (dim == 2)
1592 return (line_index == face_index);
1593 else if constexpr (dim == 3)
1596 for (
unsigned int l = 0; l < GeometryInfo<3>::lines_per_face; ++
l)
1609 const unsigned int quad_index =
1620 return (quad_index == face_index);
1639template <
int dim,
int spacedim>
1640std::pair<Table<2, bool>, std::vector<unsigned int>>
1648 for (
unsigned int i = 0; i < Utilities::fixed_power<dim>(
q_degree + 1); ++i)
1649 constant_modes(0, i) =
true;
1650 return std::pair<Table<2, bool>, std::vector<unsigned int>>(
1651 constant_modes, std::vector<unsigned int>(1, 0));
1657#include "fe/fe_q_base.inst"
std::vector< unsigned int > get_poly_space_numbering_inverse() const
const ScalarPolynomialsBase< dim > & get_poly_space() const
virtual double shape_value(const unsigned int i, const Point< dim > &p) const override
const std::unique_ptr< ScalarPolynomialsBase< dim > > poly_space
Threads::Mutex prolongation_matrix_mutex
void initialize_unit_face_support_points(const std::vector< Point< 1 > > &points)
virtual bool hp_constraints_are_implemented() const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
Threads::Mutex restriction_matrix_mutex
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim, spacedim > &fe_other, const unsigned int face_no=0) const override
const unsigned int q_degree
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
void initialize(const std::vector< Point< 1 > > &support_points_1d)
void initialize_unit_support_points(const std::vector< Point< 1 > > &points)
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const override
static std::vector< unsigned int > get_dpo_vector(const unsigned int degree)
void initialize_constraints(const std::vector< Point< 1 > > &points)
void initialize_dof_index_permutations()
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
virtual unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const types::geometric_orientation combined_orientation=numbers::default_geometric_orientation) const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
FE_Q_Base(const ScalarPolynomialsBase< dim > &poly_space, const FiniteElementData< dim > &fe_data, const std::vector< bool > &restriction_is_additive_flags)
unsigned int get_first_line_index() const
const unsigned int degree
unsigned int n_dofs_per_cell() const
unsigned int n_dofs_per_line() const
unsigned int get_first_quad_index(const unsigned int quad_no=0) const
unsigned int n_dofs_per_face(unsigned int face_no=0, unsigned int child=0) const
unsigned int n_components() const
unsigned int n_unique_faces() const
unsigned int n_dofs_per_quad(unsigned int face_no=0) const
ReferenceCell< dim > reference_cell() const
unsigned int get_first_hex_index() const
std::vector< std::vector< Point< dim - 1 > > > unit_face_support_points
bool has_face_support_points(const unsigned int face_no=0) const
std::vector< std::vector< FullMatrix< double > > > restriction
std::vector< Table< 2, int > > adjust_quad_dof_index_for_face_orientation_table
const std::vector< Point< dim - 1 > > & get_unit_face_support_points(const unsigned int face_no=0) const
std::vector< int > adjust_line_dof_index_for_line_orientation_table
TableIndices< 2 > interface_constraints_size() const
std::vector< Point< dim > > unit_support_points
FullMatrix< double > interface_constraints
std::vector< std::vector< FullMatrix< double > > > prolongation
Class which transforms dim - 1-dimensional quadrature rules to dim-dimensional face quadratures.
static Quadrature< dim > project_to_face(const ReferenceCell< dim > &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const types::geometric_orientation combined_orientation)
static Quadrature< dim > project_to_subface(const ReferenceCell< dim > &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const unsigned int subface_no, const types::geometric_orientation combined_orientation, const RefinementCase< dim - 1 > &ref_case)
const Point< dim > & point(const unsigned int i) const
void set_numbering(const std::vector< unsigned int > &renumber)
void set_numbering(const std::vector< unsigned int > &renumber)
void set_numbering(const std::vector< unsigned int > &renumber)
#define DEAL_II_NAMESPACE_OPEN
constexpr bool running_in_debug_mode()
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ASSERT_UNREACHABLE()
#define DEAL_II_NOT_IMPLEMENTED()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcInterpolationNotImplemented()
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
Task< RT > new_task(const std::function< RT()> &function)
Point< spacedim > point(const gp_Pnt &p, const double tolerance=1e-10)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
T sum(const T &t, const MPI_Comm mpi_communicator)
types::geometric_orientation combined_face_orientation(const bool face_orientation, const bool face_rotation, const bool face_flip)
constexpr unsigned int invalid_unsigned_int
constexpr types::geometric_orientation default_geometric_orientation
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
std::uint8_t geometric_orientation
static void initialize_constraints(const std::vector< Point< 1 > > &, FE_Q_Base< 3, spacedim > &fe)
static void initialize_constraints(const std::vector< Point< 1 > > &, FE_Q_Base< 1, spacedim > &)
static void initialize_constraints(const std::vector< Point< 1 > > &, FE_Q_Base< 2, spacedim > &fe)
static Point< dim > cell_to_child_coordinates(const Point< dim > &p, const unsigned int child_index, const RefinementCase< dim > refine_case=RefinementCase< dim >::isotropic_refinement)
static Point< dim > child_to_cell_coordinates(const Point< dim > &p, const unsigned int child_index, const RefinementCase< dim > refine_case=RefinementCase< dim >::isotropic_refinement)