46template <
int dim,
int spacedim>
67template <
int dim,
int spacedim>
75 this->update_each = update_flags;
77 const unsigned int n_q_points = q.
size();
87 if (this->update_each &
89 compute_manifold_quadrature_weights(q);
92 covariant.resize(n_q_points);
95 contravariant.resize(n_q_points);
98 volume_elements.resize(n_q_points);
103template <
int dim,
int spacedim>
108 const unsigned int n_original_q_points)
110 reinit(update_flags, q);
115 covariant.resize(n_original_q_points);
118 contravariant.resize(n_original_q_points);
121 volume_elements.resize(n_original_q_points);
133 unit_tangentials[i].resize(n_original_q_points);
134 std::fill(unit_tangentials[i].begin(),
135 unit_tangentials[i].end(),
140 .resize(n_original_q_points);
155template <
int dim,
int spacedim>
168template <
int dim,
int spacedim>
173 cell_manifold_quadrature_weights.resize(
175 for (
unsigned int q = 0; q < quad.
size(); ++q)
179 cell_manifold_quadrature_weights[q][i] =
187template <
int dim,
int spacedim>
194template <
int dim,
int spacedim>
195std::unique_ptr<Mapping<dim, spacedim>>
198 return std::make_unique<MappingManifold<dim, spacedim>>(*this);
203template <
int dim,
int spacedim>
215template <
int dim,
int spacedim>
222 std::array<double, GeometryInfo<dim>::vertices_per_cell> weights;
229 return cell->get_manifold().get_new_point(
249template <
int dim,
int spacedim>
261 for (
unsigned int i = 0; i < 5; ++i)
311template <
int dim,
int spacedim>
312std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
316 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase> data_ptr =
317 std::make_unique<InternalData>();
325template <
int dim,
int spacedim>
326std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
333 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase> data_ptr =
334 std::make_unique<InternalData>();
339 quadrature[0].size());
346template <
int dim,
int spacedim>
347std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
352 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase> data_ptr =
353 std::make_unique<InternalData>();
367 namespace MappingManifoldImplementation
377 template <
int dim,
int spacedim>
379 maybe_compute_q_points(
381 const typename ::MappingManifold<dim, spacedim>::InternalData
392 for (
unsigned int point = 0; point < quadrature_points.size();
395 quadrature_points[point] = data.manifold->get_new_point(
398 data.cell_manifold_quadrature_weights[point + data_set]));
411 template <
int dim,
int spacedim>
413 maybe_update_Jacobians(
414 const typename ::QProjector<dim>::DataSetDescriptor data_set,
415 const typename ::MappingManifold<dim, spacedim>::InternalData
422 const unsigned int n_q_points = data.contravariant.size();
424 std::fill(data.contravariant.begin(),
425 data.contravariant.end(),
429 data.vertices.size());
430 for (
unsigned int point = 0; point < n_q_points; ++point)
434 const Point<dim> &p = data.quad.point(point + data_set);
440 data.cell_manifold_quadrature_weights[point + data_set]));
449 for (
unsigned int i = 0; i < dim; ++i)
452 const double pi = p[i];
453 Assert(pi >= 0 && pi <= 1.0,
455 "Was expecting a quadrature point "
456 "inside the unit reference element."));
460 const double L = pi > .5 ? -pi : 1 - pi;
465 for (
const unsigned int j :
467 data.vertex_weights[j] =
475 data.manifold->get_tangent_vector(P, NP);
477 for (
unsigned int d = 0; d < spacedim; ++d)
478 data.contravariant[point][d][i] = T[d] / L;
484 const unsigned int n_q_points = data.contravariant.size();
485 for (
unsigned int point = 0; point < n_q_points; ++point)
487 data.covariant[point] =
488 (data.contravariant[point]).covariant_form();
494 const unsigned int n_q_points = data.contravariant.size();
495 for (
unsigned int point = 0; point < n_q_points; ++point)
496 data.volume_elements[point] =
497 data.contravariant[point].determinant();
507template <
int dim,
int spacedim>
522 const unsigned int n_q_points = quadrature.
size();
525 data.
manifold = &(cell->get_manifold());
527 internal::MappingManifoldImplementation::maybe_compute_q_points<dim,
533 internal::MappingManifoldImplementation::maybe_update_Jacobians<dim,
538 const std::vector<double> &weights = quadrature.
get_weights();
553 for (
unsigned int point = 0; point < n_q_points; ++point)
565 cell->diameter() /
std::sqrt(
double(dim))),
567 cell->center(), det, point)));
569 output_data.
JxW_values[point] = weights[point] * det;
577 for (
unsigned int i = 0; i < spacedim; ++i)
578 for (
unsigned int j = 0; j < dim; ++j)
582 for (
unsigned int i = 0; i < dim; ++i)
583 for (
unsigned int j = 0; j < dim; ++j)
584 G[i][j] = DX_t[i] * DX_t[j];
591 Assert(spacedim == dim + 1,
593 "There is no (unique) cell normal for " +
595 "-dimensional cells in " +
597 "-dimensional space. This only works if the "
598 "space dimension is one greater than the "
599 "dimensionality of the mesh cells."));
603 cross_product_2d(-DX_t[0]);
606 cross_product_3d(DX_t[0], DX_t[1]);
611 if (cell->direction_flag() ==
false)
624 for (
unsigned int point = 0; point < n_q_points; ++point)
632 for (
unsigned int point = 0; point < n_q_points; ++point)
644 namespace MappingManifoldImplementation
657 template <
int dim,
int spacedim>
659 maybe_compute_face_data(
660 const ::MappingManifold<dim, spacedim> &mapping,
661 const typename ::Triangulation<dim, spacedim>::cell_iterator
663 const unsigned int face_no,
664 const unsigned int subface_no,
665 const unsigned int n_q_points,
666 const std::vector<double> &weights,
667 const typename ::MappingManifold<dim, spacedim>::InternalData
685 for (
unsigned int d = 0; d != dim - 1; ++d)
688 data.unit_tangentials.size(),
691 data.aux[d].size() <=
693 .unit_tangentials[face_no +
701 .unit_tangentials[face_no +
712 for (
unsigned int i = 0; i < n_q_points; ++i)
721 (face_no == 0 ? -1 : +1);
725 cross_product_2d(data.aux[0][i]);
729 cross_product_3d(data.aux[0][i], data.aux[1][i]);
745 for (
unsigned int point = 0;
point < n_q_points; ++
point)
753 data.contravariant[
point].transpose()[0];
755 (face_no == 0 ? -1. : +1.) *
767 cross_product_3d(DX_t[0], DX_t[1]);
768 cell_normal /= cell_normal.
norm();
773 cross_product_3d(data.aux[0][point], cell_normal);
795 const double area_ratio =
797 cell->subface_case(face_no), subface_no);
809 for (
unsigned int point = 0;
point < n_q_points; ++
point)
810 output_data.
jacobians[point] = data.contravariant[point];
813 for (
unsigned int point = 0;
point < n_q_points; ++
point)
815 data.covariant[point].transpose();
826 template <
int dim,
int spacedim>
829 const ::MappingManifold<dim, spacedim> &mapping,
830 const typename ::Triangulation<dim, spacedim>::cell_iterator
832 const unsigned int face_no,
833 const unsigned int subface_no,
836 const typename ::MappingManifold<dim, spacedim>::InternalData
841 data.store_vertices(cell);
843 data.manifold = &cell->face(face_no)->get_manifold();
845 maybe_compute_q_points<dim, spacedim>(data_set,
848 maybe_update_Jacobians<dim, spacedim>(data_set, data);
860 template <
int dim,
int spacedim,
int rank>
869 Assert((
dynamic_cast<const typename ::
870 MappingManifold<dim, spacedim>::InternalData *
>(
871 &mapping_data) !=
nullptr),
873 const typename ::MappingManifold<dim, spacedim>::InternalData
875 static_cast<const typename ::MappingManifold<dim, spacedim>::
876 InternalData &
>(mapping_data);
878 switch (mapping_kind)
885 "update_contravariant_transformation"));
887 for (
unsigned int i = 0; i < output.size(); ++i)
899 "update_contravariant_transformation"));
903 "update_volume_elements"));
908 for (
unsigned int i = 0; i < output.size(); ++i)
912 output[i] /= data.volume_elements[i];
924 "update_covariant_transformation"));
926 for (
unsigned int i = 0; i < output.size(); ++i)
938 template <
int dim,
int spacedim,
int rank>
947 Assert((
dynamic_cast<const typename ::
948 MappingManifold<dim, spacedim>::InternalData *
>(
949 &mapping_data) !=
nullptr),
951 const typename ::MappingManifold<dim, spacedim>::InternalData
953 static_cast<const typename ::MappingManifold<dim, spacedim>::
954 InternalData &
>(mapping_data);
956 switch (mapping_kind)
963 "update_covariant_transformation"));
967 "update_contravariant_transformation"));
970 for (
unsigned int i = 0; i < output.size(); ++i)
987 "update_covariant_transformation"));
990 for (
unsigned int i = 0; i < output.size(); ++i)
1007 "update_covariant_transformation"));
1011 "update_contravariant_transformation"));
1015 "update_volume_elements"));
1018 for (
unsigned int i = 0; i < output.size(); ++i)
1027 output[i] /= data.volume_elements[i];
1040 template <
int dim,
int spacedim>
1049 Assert((
dynamic_cast<const typename ::
1050 MappingManifold<dim, spacedim>::InternalData *
>(
1051 &mapping_data) !=
nullptr),
1053 const typename ::MappingManifold<dim, spacedim>::InternalData
1055 static_cast<const typename ::MappingManifold<dim, spacedim>::
1056 InternalData &
>(mapping_data);
1058 switch (mapping_kind)
1065 "update_covariant_transformation"));
1069 "update_contravariant_transformation"));
1071 for (
unsigned int q = 0; q < output.size(); ++q)
1072 for (
unsigned int i = 0; i < spacedim; ++i)
1074 double tmp1[dim][dim];
1075 for (
unsigned int J = 0; J < dim; ++J)
1076 for (
unsigned int K = 0;
K < dim; ++
K)
1079 data.contravariant[q][i][0] * input[q][0][J][
K];
1080 for (
unsigned int I = 1; I < dim; ++I)
1082 data.contravariant[q][i][I] * input[q][I][J][K];
1084 for (
unsigned int j = 0; j < spacedim; ++j)
1087 for (
unsigned int K = 0;
K < dim; ++
K)
1089 tmp2[
K] = data.covariant[q][j][0] * tmp1[0][
K];
1090 for (
unsigned int J = 1; J < dim; ++J)
1091 tmp2[K] += data.covariant[q][j][J] * tmp1[J][K];
1093 for (
unsigned int k = 0; k < spacedim; ++k)
1095 output[q][i][j][k] =
1096 data.covariant[q][k][0] * tmp2[0];
1097 for (
unsigned int K = 1;
K < dim; ++
K)
1098 output[q][i][j][k] +=
1099 data.covariant[q][k][K] * tmp2[K];
1111 "update_covariant_transformation"));
1113 for (
unsigned int q = 0; q < output.size(); ++q)
1114 for (
unsigned int i = 0; i < spacedim; ++i)
1116 double tmp1[dim][dim];
1117 for (
unsigned int J = 0; J < dim; ++J)
1118 for (
unsigned int K = 0;
K < dim; ++
K)
1121 data.covariant[q][i][0] * input[q][0][J][
K];
1122 for (
unsigned int I = 1; I < dim; ++I)
1124 data.covariant[q][i][I] * input[q][I][J][K];
1126 for (
unsigned int j = 0; j < spacedim; ++j)
1129 for (
unsigned int K = 0;
K < dim; ++
K)
1131 tmp2[
K] = data.covariant[q][j][0] * tmp1[0][
K];
1132 for (
unsigned int J = 1; J < dim; ++J)
1133 tmp2[K] += data.covariant[q][j][J] * tmp1[J][K];
1135 for (
unsigned int k = 0; k < spacedim; ++k)
1137 output[q][i][j][k] =
1138 data.covariant[q][k][0] * tmp2[0];
1139 for (
unsigned int K = 1;
K < dim; ++
K)
1140 output[q][i][j][k] +=
1141 data.covariant[q][k][K] * tmp2[K];
1154 "update_covariant_transformation"));
1158 "update_contravariant_transformation"));
1162 "update_volume_elements"));
1164 for (
unsigned int q = 0; q < output.size(); ++q)
1165 for (
unsigned int i = 0; i < spacedim; ++i)
1168 for (
unsigned int I = 0; I < dim; ++I)
1170 data.contravariant[q][i][I] / data.volume_elements[q];
1171 double tmp1[dim][dim];
1172 for (
unsigned int J = 0; J < dim; ++J)
1173 for (
unsigned int K = 0;
K < dim; ++
K)
1175 tmp1[J][
K] = factor[0] * input[q][0][J][
K];
1176 for (
unsigned int I = 1; I < dim; ++I)
1177 tmp1[J][K] += factor[I] * input[q][I][J][K];
1179 for (
unsigned int j = 0; j < spacedim; ++j)
1182 for (
unsigned int K = 0;
K < dim; ++
K)
1184 tmp2[
K] = data.covariant[q][j][0] * tmp1[0][
K];
1185 for (
unsigned int J = 1; J < dim; ++J)
1186 tmp2[K] += data.covariant[q][j][J] * tmp1[J][K];
1188 for (
unsigned int k = 0; k < spacedim; ++k)
1190 output[q][i][j][k] =
1191 data.covariant[q][k][0] * tmp2[0];
1192 for (
unsigned int K = 1;
K < dim; ++
K)
1193 output[q][i][j][k] +=
1194 data.covariant[q][k][K] * tmp2[K];
1209 template <
int dim,
int spacedim,
int rank>
1218 Assert((
dynamic_cast<const typename ::
1219 MappingManifold<dim, spacedim>::InternalData *
>(
1220 &mapping_data) !=
nullptr),
1222 const typename ::MappingManifold<dim, spacedim>::InternalData
1224 static_cast<const typename ::MappingManifold<dim, spacedim>::
1225 InternalData &
>(mapping_data);
1227 switch (mapping_kind)
1234 "update_covariant_transformation"));
1236 for (
unsigned int i = 0; i < output.size(); ++i)
1251template <
int dim,
int spacedim>
1255 const unsigned int face_no,
1268 internal::MappingManifoldImplementation::do_fill_fe_face_values(
1276 cell->combined_face_orientation(face_no),
1277 quadrature[0].
size()),
1285template <
int dim,
int spacedim>
1289 const unsigned int face_no,
1290 const unsigned int subface_no,
1301 internal::MappingManifoldImplementation::do_fill_fe_face_values(
1310 cell->combined_face_orientation(face_no),
1312 cell->subface_case(face_no)),
1320template <
int dim,
int spacedim>
1328 internal::MappingManifoldImplementation::transform_fields(input,
1336template <
int dim,
int spacedim>
1344 internal::MappingManifoldImplementation::transform_differential_forms(
1345 input, mapping_kind, mapping_data, output);
1350template <
int dim,
int spacedim>
1358 switch (mapping_kind)
1361 internal::MappingManifoldImplementation::transform_fields(input,
1370 internal::MappingManifoldImplementation::transform_gradients(
1371 input, mapping_kind, mapping_data, output);
1380template <
int dim,
int spacedim>
1393 switch (mapping_kind)
1399 "update_covariant_transformation"));
1401 for (
unsigned int q = 0; q < output.size(); ++q)
1402 for (
unsigned int i = 0; i < spacedim; ++i)
1403 for (
unsigned int j = 0; j < spacedim; ++j)
1406 for (
unsigned int K = 0; K < dim; ++K)
1408 tmp[K] = data.
covariant[q][j][0] * input[q][i][0][K];
1409 for (
unsigned int J = 1; J < dim; ++J)
1410 tmp[K] += data.
covariant[q][j][J] * input[q][i][J][K];
1412 for (
unsigned int k = 0; k < spacedim; ++k)
1414 output[q][i][j][k] = data.
covariant[q][k][0] * tmp[0];
1415 for (
unsigned int K = 1; K < dim; ++K)
1416 output[q][i][j][k] += data.
covariant[q][k][K] * tmp[K];
1429template <
int dim,
int spacedim>
1437 switch (mapping_kind)
1442 internal::MappingManifoldImplementation::transform_hessians(
1443 input, mapping_kind, mapping_data, output);
1451#include "mapping_manifold.inst"
ArrayView< std::remove_reference_t< typename std::iterator_traits< Iterator >::reference >, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
void store_vertices(const typename Triangulation< dim, spacedim >::cell_iterator &cell) const
std::vector< double > volume_elements
std::array< std::vector< Tensor< 1, dim > >, GeometryInfo< dim >::faces_per_cell *(dim - 1)> unit_tangentials
std::vector< DerivativeForm< 1, dim, spacedim > > contravariant
SmartPointer< const Manifold< dim, spacedim > > manifold
std::vector< std::vector< Tensor< 1, spacedim > > > aux
virtual std::size_t memory_consumption() const override
std::vector< std::vector< double > > cell_manifold_quadrature_weights
void initialize_face(const UpdateFlags update_flags, const Quadrature< dim > &quadrature, const unsigned int n_original_q_points)
virtual void reinit(const UpdateFlags update_flags, const Quadrature< dim > &quadrature) override
std::vector< Point< spacedim > > vertices
std::vector< double > vertex_weights
void compute_manifold_quadrature_weights(const Quadrature< dim > &quadrature)
std::vector< DerivativeForm< 1, dim, spacedim > > covariant
Triangulation< dim, spacedim >::cell_iterator cell
virtual Point< spacedim > transform_unit_to_real_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< dim > &p) const override
MappingManifold()=default
virtual Point< dim > transform_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p) const override
virtual void transform(const ArrayView< const Tensor< 1, dim > > &input, const MappingKind kind, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 1, spacedim > > &output) const override
virtual void fill_fe_subface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const Quadrature< dim - 1 > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
virtual void fill_fe_face_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const hp::QCollection< dim - 1 > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags, const Quadrature< dim > &quadrature) const override
virtual std::unique_ptr< Mapping< dim, spacedim > > clone() const override
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_face_data(const UpdateFlags flags, const hp::QCollection< dim - 1 > &quadrature) const override
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags flags, const Quadrature< dim - 1 > &quadrature) const override
virtual CellSimilarity::Similarity fill_fe_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
Abstract base class for mapping classes.
static constexpr Point< dim, Number > unit_vector(const unsigned int i)
static DataSetDescriptor cell()
const Point< dim > & point(const unsigned int i) const
const std::vector< double > & get_weights() const
const std::vector< Point< dim > > & get_points() const
unsigned int size() const
numbers::NumberTraits< Number >::real_type norm() const
unsigned int size() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
@ update_jacobian_pushed_forward_2nd_derivatives
@ update_volume_elements
Determinant of the Jacobian.
@ update_contravariant_transformation
Contravariant transformation.
@ update_jacobian_pushed_forward_grads
@ update_jacobian_grads
Gradient of volume element.
@ update_normal_vectors
Normal vectors.
@ update_JxW_values
Transformed quadrature weights.
@ update_covariant_transformation
Covariant transformation.
@ update_jacobians
Volume element.
@ update_inverse_jacobians
Volume element.
@ update_quadrature_points
Transformed quadrature points.
@ update_jacobian_pushed_forward_3rd_derivatives
@ update_boundary_forms
Outer normal vector, not normalized.
@ mapping_covariant_gradient
@ mapping_contravariant_hessian
@ mapping_covariant_hessian
@ mapping_contravariant_gradient
#define DEAL_II_NOT_IMPLEMENTED()
CGAL::Exact_predicates_exact_constructions_kernel_with_sqrt K
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
Point< spacedim > point(const gp_Pnt &p, const double tolerance=1e-10)
constexpr const ReferenceCell & get_hypercube()
constexpr T fixed_power(const T t)
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
void transform_differential_forms(const ArrayView< const DerivativeForm< rank, dim, spacedim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank+1, spacedim > > &output)
void do_fill_fe_face_values(const ::MappingQ< dim, spacedim > &mapping, const typename ::Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const typename QProjector< dim >::DataSetDescriptor data_set, const Quadrature< dim - 1 > &quadrature, const typename ::MappingQ< dim, spacedim >::InternalData &data, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data)
void transform_fields(const ArrayView< const Tensor< rank, dim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank, spacedim > > &output)
void transform_gradients(const ArrayView< const Tensor< rank, dim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank, spacedim > > &output)
void transform_hessians(const ArrayView< const Tensor< 3, dim > > &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< 3, spacedim > > &output)
void maybe_compute_face_data(const ::MappingQ< dim, spacedim > &mapping, const typename ::Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const unsigned int n_q_points, const std::vector< double > &weights, const typename ::MappingQ< dim, spacedim >::InternalData &data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data)
static const unsigned int invalid_unsigned_int
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > face_indices()
static double subface_ratio(const internal::SubfaceCase< dim > &subface_case, const unsigned int subface_no)
static double d_linear_shape_function(const Point< dim > &xi, const unsigned int i)
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > vertex_indices()
DEAL_II_HOST constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)