34#include <boost/container/small_vector.hpp>
47template <
int dim,
int spacedim>
59template <
int dim,
int spacedim>
71template <
int dim,
int spacedim>
89template <
int dim,
int spacedim>
110 if constexpr (dim > 1)
116 const std::array<Quadrature<1>, dim> &quad_array =
118 for (
unsigned int i = 1; i < dim && tensor_product_quadrature; ++i)
120 if (quad_array[i - 1].size() != quad_array[i].size())
122 tensor_product_quadrature =
false;
127 const std::vector<Point<1>> &points_1 =
128 quad_array[i - 1].get_points();
129 const std::vector<Point<1>> &points_2 =
130 quad_array[i].get_points();
131 const std::vector<double> &weights_1 =
132 quad_array[i - 1].get_weights();
133 const std::vector<double> &weights_2 =
134 quad_array[i].get_weights();
135 for (
unsigned int j = 0; j < quad_array[i].size(); ++j)
137 if (
std::abs(points_1[j][0] - points_2[j][0]) > 1.e-10 ||
138 std::abs(weights_1[j] - weights_2[j]) > 1.e-10)
140 tensor_product_quadrature =
false;
147 if (tensor_product_quadrature)
153 shape_info.lexicographic_numbering =
157 shape_info.dofs_per_component_on_cell =
166template <
int dim,
int spacedim>
169 const UpdateFlags update_flags,
171 const unsigned int n_original_q_points)
173 reinit(update_flags, quadrature);
179 constexpr unsigned int facedim = dim - 1;
184 shape_info.n_q_points = n_original_q_points;
185 shape_info.dofs_per_component_on_cell =
189 if constexpr (dim > 1)
191 if (this->update_each &
195 aux[0].resize(n_original_q_points);
196 if constexpr (dim > 2)
197 aux[1].resize(n_original_q_points);
202 unit_tangentials[i].resize(n_original_q_points);
203 std::fill(unit_tangentials[i].
begin(),
204 unit_tangentials[i].
end(),
206 if constexpr (dim > 2)
209 .resize(n_original_q_points);
224template <
int dim,
int spacedim>
231 FETools::lexicographic_to_hierarchic_numbering<dim>(p))
233 internal::MappingQImplementation::unit_support_points<dim>(
238 compute_support_point_weights_perimeter_to_interior(
242 internal::MappingQImplementation::compute_support_point_weights_cell<dim>(
246 ExcMessage(
"It only makes sense to create polynomial mappings "
247 "with a polynomial degree greater or equal to one."));
252template <
int dim,
int spacedim>
267template <
int dim,
int spacedim>
268std::unique_ptr<Mapping<dim, spacedim>>
271 return std::make_unique<MappingQ<dim, spacedim>>(*this);
276template <
int dim,
int spacedim>
285template <
int dim,
int spacedim>
299 boost::container::small_vector<Point<spacedim>, 200> points;
330template <
int dim,
int spacedim>
349 const Point<1> &initial_p_unit)
const
364 boost::container::small_vector<Point<1>, 200> points;
383 const Point<2> &initial_p_unit)
const
398 boost::container::small_vector<Point<2>, 200> points;
417 const Point<3> &initial_p_unit)
const
432 boost::container::small_vector<Point<3>, 200> points;
451 const Point<1> &initial_p_unit)
const
454 const int spacedim = 2;
459 if constexpr (spacedim > dim)
464 boost::container::small_vector<Point<2>, 200> points;
466 mdata->mapping_support_points.assign(points.begin(), points.end());
486 const Point<2> &initial_p_unit)
const
489 const int spacedim = 3;
494 if constexpr (spacedim > dim)
497 get_data(update_flags, point_quadrature));
499 boost::container::small_vector<Point<spacedim>, 200> points;
501 mdata->mapping_support_points.assign(points.begin(), points.end());
529template <
int dim,
int spacedim>
538 ((dim == 1) || ((dim == 2) && (dim == spacedim))))
565 for (
unsigned int i = 0; i < vertices.size(); ++i)
566 vertices[i] = vertices_[i];
575 if constexpr (spacedim == 1)
591 const double eps = 1e-15;
592 if (-eps <= point[1] && point[1] <= 1 + eps &&
593 -eps <= point[0] && point[0] <= 1 + eps)
625 if (this->preserves_vertex_locations())
629 if (dim == 1 && polynomial_degree == 1)
630 return initial_p_unit;
635 for (
unsigned int d = 0;
d < dim; ++
d)
636 initial_p_unit[d] = 0.5;
643 AssertThrow(p_unit[0] != std::numeric_limits<double>::lowest(),
650template <
int dim,
int spacedim>
668 boost::container::small_vector<Point<spacedim>, 200>
669 support_points_higher_order;
670 boost::container::small_vector<Point<spacedim>,
684 support_points_higher_order.data(),
692 const unsigned int n_points = real_points.size();
697 for (
unsigned int i = 0; i < n_points; i += n_lanes)
698 if (n_points - i > 1)
701 for (
unsigned int j = 0; j < n_lanes; ++j)
702 if (i + j < n_points)
703 for (
unsigned int d = 0; d < spacedim; ++d)
704 p_vec[d][j] = real_points[i + j][d];
706 for (
unsigned int d = 0; d < spacedim; ++d)
707 p_vec[d][j] = real_points[i][d];
713 inverse_approximation.
compute(p_vec),
723 for (
unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
724 if (unit_point[0][j] != std::numeric_limits<double>::lowest())
725 for (
unsigned int d = 0; d < dim; ++d)
726 unit_points[i + j][d] = unit_point[d][j];
731 inverse_approximation.
compute(real_points[i + j]),
740 inverse_approximation.
compute(real_points[i]),
748template <
int dim,
int spacedim>
758 UpdateFlags out = in;
759 for (
unsigned int i = 0; i < 5; ++i)
804template <
int dim,
int spacedim>
805std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
809 auto data_ptr = std::make_unique<InternalData>(
fe_dgq_1d);
810 data_ptr->reinit(update_flags, q);
816template <
int dim,
int spacedim>
817std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
819 const UpdateFlags update_flags,
824 auto data_ptr = std::make_unique<InternalData>(
fe_dgq_1d);
829 quadrature[0].size());
836template <
int dim,
int spacedim>
837std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
839 const UpdateFlags update_flags,
842 auto data_ptr = std::make_unique<InternalData>(
fe_dgq_1d);
854template <
int dim,
int spacedim>
886 for (
unsigned int i = 0; i < GeometryInfo<dim>::vertices_per_cell; ++i)
891 boost::container::small_vector<Point<spacedim>, 200> points;
909 computed_cell_similarity,
919 computed_cell_similarity,
930 computed_cell_similarity,
940 spacedim>(computed_cell_similarity,
949 spacedim>(computed_cell_similarity,
958 computed_cell_similarity,
967 spacedim>(computed_cell_similarity,
976 computed_cell_similarity,
984 const std::vector<double> &weights = quadrature.
get_weights();
1002 for (
unsigned int point = 0; point <
n_q_points; ++point)
1004 if constexpr (dim == spacedim)
1017 cell->
center(), det, point)));
1019 output_data.
JxW_values[point] = weights[point] * det;
1027 for (
unsigned int i = 0; i < spacedim; ++i)
1028 for (
unsigned int j = 0; j < dim; ++j)
1029 DX_t[j][i] = output_data.
jacobians[point][i][j];
1032 for (
unsigned int i = 0; i < dim; ++i)
1033 for (
unsigned int j = 0; j < dim; ++j)
1034 G[i][j] = DX_t[i] * DX_t[j];
1040 if (computed_cell_similarity ==
1051 Assert(spacedim == dim + 1,
1053 "There is no (unique) cell normal for " +
1055 "-dimensional cells in " +
1057 "-dimensional space. This only works if the "
1058 "space dimension is one greater than the "
1059 "dimensionality of the mesh cells."));
1061 if constexpr (dim == 1)
1079 return computed_cell_similarity;
1084template <
int dim,
int spacedim>
1088 const unsigned int face_no,
1107 for (
unsigned int i = 0; i < GeometryInfo<dim>::vertices_per_cell; ++i)
1112 boost::container::small_vector<Point<spacedim>, 200> points;
1126 quadrature[0].
size()),
1136template <
int dim,
int spacedim>
1140 const unsigned int face_no,
1141 const unsigned int subface_no,
1158 for (
unsigned int i = 0; i < GeometryInfo<dim>::vertices_per_cell; ++i)
1163 boost::container::small_vector<Point<spacedim>, 200> points;
1189template <
int dim,
int spacedim>
1206 const unsigned int n_q_points = quadrature.size();
1212 for (
unsigned int i = 0; i < GeometryInfo<dim>::vertices_per_cell; ++i)
1217 boost::container::small_vector<Point<spacedim>, 200> points;
1286 const UpdateFlags update_flags = data.
update_each;
1287 const std::vector<double> &weights = quadrature.get_weights();
1299 for (
unsigned int point = 0; point <
n_q_points; ++point)
1311 cell->
center(), det, point)));
1315 for (
unsigned int d = 0; d < spacedim; d++)
1319 output_data.
JxW_values[point] = weights[point] * det * normal.
norm();
1323 normal /= normal.
norm();
1332template <
int dim,
int spacedim>
1337 const UpdateFlags update_flags,
1349 output_data.
initialize(unit_points.size(), update_flags);
1351 auto internal_data =
1354 unit_points.end())));
1361 for (
unsigned int i = 0; i < GeometryInfo<dim>::vertices_per_cell; ++i)
1366 boost::container::small_vector<Point<spacedim>, 200> points;
1384template <
int dim,
int spacedim>
1388 const unsigned int face_no,
1406 for (
unsigned int i = 0; i < GeometryInfo<dim>::vertices_per_cell; ++i)
1411 boost::container::small_vector<Point<spacedim>, 200> points;
1433template <
int dim,
int spacedim>
1437 const MappingKind mapping_kind,
1449template <
int dim,
int spacedim>
1453 const MappingKind mapping_kind,
1465template <
int dim,
int spacedim>
1469 const MappingKind mapping_kind,
1473 switch (mapping_kind)
1497template <
int dim,
int spacedim>
1501 const MappingKind mapping_kind,
1509 &data = *
static_cast<const InternalData &
>(mapping_data).output_data;
1511 switch (mapping_kind)
1517 "update_covariant_transformation"));
1519 for (
unsigned int q = 0; q < output.size(); ++q)
1536template <
int dim,
int spacedim>
1540 const MappingKind mapping_kind,
1544 switch (mapping_kind)
1561template <
int dim,
int spacedim>
1570 for (
unsigned int line_no = 0;
1571 line_no < GeometryInfo<dim>::lines_per_cell;
1578 cell->
line(line_no));
1592 for (
unsigned int line_no = 0;
1593 line_no < GeometryInfo<dim>::lines_per_cell;
1600 cell->
line(line_no));
1609 const std::array<Point<spacedim>, 2> vertices{
1610 {cell->
vertex(reference_cell.line_to_cell_vertices(line_no, 0)),
1611 cell->
vertex(reference_cell.line_to_cell_vertices(line_no, 1))}};
1613 const std::size_t n_rows =
1615 a.resize(a.size() + n_rows);
1631 boost::container::small_vector<
Point<3>, 200> &a)
const
1636 for (
unsigned int face_no = 0; face_no <
faces_per_cell; ++face_no)
1651 Assert(face->vertex_index(i) ==
1653 face_no, i, face_orientation, face_flip, face_rotation)),
1661 face_no, i, face_orientation, face_flip, face_rotation)),
1667 boost::container::small_vector<Point<3>, 200> tmp_points(
1673 for (
unsigned int line = 0; line < GeometryInfo<2>::lines_per_cell;
1682 const std::size_t n_rows =
1684 a.resize(a.size() + n_rows);
1686 face->get_manifold().get_new_points(
1699 boost::container::small_vector<
Point<3>, 200> &a)
const
1703 vertices[i] = cell->
vertex(i);
1707 const std::vector<Point<1>> &line_support_points =
1712 const Point<2> point(line_support_points[q1 + 1][0],
1713 line_support_points[q2 + 1][0]);
1718 const std::size_t n_rows = weights.size(0);
1719 a.resize(a.size() + n_rows);
1727template <
int dim,
int spacedim>
1738template <
int dim,
int spacedim>
1757 bool all_manifold_ids_are_equal = (dim == spacedim);
1758 if (all_manifold_ids_are_equal &&
1764 all_manifold_ids_are_equal =
false;
1766 if constexpr (dim == 3)
1767 for (
unsigned int l = 0; l < GeometryInfo<dim>::lines_per_cell; ++l)
1769 all_manifold_ids_are_equal =
false;
1772 if (all_manifold_ids_are_equal)
1775 a.resize(a.size() + n_rows);
1794 if (dim != spacedim)
1798 const std::size_t n_rows =
1800 a.resize(a.size() + n_rows);
1816 const std::size_t n_rows =
1818 a.resize(a.size() + n_rows);
1836template <
int dim,
int spacedim>
1843 "You are trying to call a MappingQ function with a cell of type " +
1845 " but MappingQ only works for hypercube cells."));
1847 boost::container::small_vector<Point<spacedim>, 200> points;
1854template <
int dim,
int spacedim>
1859 Assert(dim == reference_cell.get_dimension(),
1860 ExcMessage(
"The dimension of your mapping (" +
1862 ") and the reference cell cell_type (" +
1864 " ) do not agree."));
1866 return reference_cell.is_hyper_cube();
1872#include "fe/mapping_q.inst"
auto make_const_array_view(const Container &container) -> decltype(make_array_view(container))
ArrayView< std::remove_reference_t< typename std::iterator_traits< Iterator >::reference >, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
internal::SubfaceCase< dim > subface_case(const unsigned int face_no) const
double diameter(const Mapping< dim, spacedim > &mapping) const
TriaIterator< TriaAccessor< dim - 1, dim, spacedim > > face(const unsigned int i) const
bool direction_flag() const
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const
virtual void get_new_points(const ArrayView< const Point< spacedim > > &surrounding_points, const Table< 2, double > &weights, ArrayView< Point< spacedim > > new_points) const
virtual std::size_t memory_consumption() const override
const std::shared_ptr< const FE_DGQ< 1, 1 > > fe_dgq_1d
std::vector< Point< spacedim > > mapping_support_points
const unsigned int polynomial_degree
std::array< std::vector< Tensor< 1, dim > >, GeometryInfo< dim >::faces_per_cell *(dim - 1)> unit_tangentials
bool tensor_product_quadrature
internal::MatrixFreeFunctions::ShapeInfo< double > shape_info
virtual void reinit(const UpdateFlags update_flags, const Quadrature< dim > &quadrature) override
internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > * output_data
std::vector< AlignedVector< Tensor< 1, spacedim > > > aux
void initialize_face(const UpdateFlags update_flags, const Quadrature< dim > &quadrature, const unsigned int n_original_q_points)
InternalData(const unsigned int polynomial_degree)
AlignedVector< double > volume_elements
std::vector< Point< dim > > quadrature_points
const unsigned int n_shape_functions
const std::vector< unsigned int > renumber_lexicographic_to_hierarchic
const Table< 2, double > support_point_weights_cell
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags, const Quadrature< dim > &quadrature) const override
void fill_mapping_data_for_face_quadrature(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_number, const Quadrature< dim - 1 > &face_quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const
virtual BoundingBox< spacedim > get_bounding_box(const typename Triangulation< dim, spacedim >::cell_iterator &cell) 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 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 std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags, const Quadrature< dim - 1 > &quadrature) const override
virtual void add_line_support_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell, boost::container::small_vector< Point< spacedim >, 200 > &points) const
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
virtual bool is_compatible_with(const ReferenceCell< dim > &reference_cell) const override
virtual void fill_fe_immersed_surface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const NonMatching::ImmersedSurfaceQuadrature< dim > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
const unsigned int polynomial_degree
virtual bool preserves_vertex_locations() const override
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_face_data(const UpdateFlags, const hp::QCollection< dim - 1 > &quadrature) const override
virtual void transform_points_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< const Point< spacedim > > &real_points, const ArrayView< Point< dim > > &unit_points) const override
Point< dim > transform_real_to_unit_cell_internal(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p, const Point< dim > &initial_p_unit) const
virtual void add_quad_support_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell, boost::container::small_vector< Point< spacedim >, 200 > &points) const
const std::vector< Table< 2, double > > support_point_weights_perimeter_to_interior
void fill_mapping_data_for_generic_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< const Point< dim > > &unit_points, const UpdateFlags update_flags, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const
Point< 1 > transform_real_to_unit_cell_internal(const Triangulation< 1, 1 >::cell_iterator &cell, const Point< 1 > &p, const Point< 1 > &initial_p_unit) const
virtual void compute_mapping_support_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell, boost::container::small_vector< Point< spacedim >, 200 > &points) const
virtual Point< spacedim > transform_unit_to_real_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< dim > &p) const override
const std::vector< Polynomials::Polynomial< double > > polynomials_1d
virtual std::unique_ptr< Mapping< dim, spacedim > > clone() const override
const std::vector< Point< dim > > unit_cell_support_points
virtual Point< dim > transform_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p) const override
MappingQ(const unsigned int polynomial_degree)
const std::shared_ptr< const FE_DGQ< 1, 1 > > fe_dgq_1d
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) 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
unsigned int get_degree() const
virtual std::size_t memory_consumption() const
virtual void transform_points_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< const Point< spacedim > > &real_points, const ArrayView< Point< dim > > &unit_points) const
virtual boost::container::small_vector< Point< spacedim >, ReferenceCells::max_n_vertices< dim >() > get_vertices(const typename Triangulation< dim, spacedim >::cell_iterator &cell) const
const Tensor< 1, spacedim > & normal_vector(const unsigned int i) const
static DataSetDescriptor cell()
static DataSetDescriptor subface(const ReferenceCell< dim > &reference_cell, const unsigned int face_no, const unsigned int subface_no, const bool face_orientation, const bool face_flip, const bool face_rotation, const unsigned int n_quadrature_points, const internal::SubfaceCase< dim > ref_case=internal::SubfaceCase< dim >::case_isotropic)
static DataSetDescriptor face(const ReferenceCell< dim > &reference_cell, const unsigned int face_no, const bool face_orientation, const bool face_flip, const bool face_rotation, const unsigned int n_quadrature_points)
static Quadrature< dim > project_to_all_faces(const ReferenceCell< dim > &reference_cell, const hp::QCollection< dim - 1 > &quadrature)
static Quadrature< dim > project_to_all_subfaces(const ReferenceCell< dim > &reference_cell, const SubQuadrature &quadrature)
bool is_tensor_product() const
const std::vector< double > & get_weights() const
const std::array< Quadrature< 1 >, dim > & get_tensor_basis() const
const std::vector< Point< dim > > & get_points() const
unsigned int size() const
numbers::NumberTraits< Number >::real_type norm() const
Point< structdim > real_to_unit_cell_affine_approximation(const Point< spacedim > &point) const
const Manifold< dim, spacedim > & get_manifold() const
unsigned int n_vertices() const
unsigned int vertex_index(const unsigned int i) const
Point< spacedim > center(const bool respect_manifold=false, const bool interpolate_from_surrounding=false) const
ReferenceCell< structdim > reference_cell() const
Point< spacedim > & vertex(const unsigned int i) const
typename::internal::TriangulationImplementation::Iterators< dim, spacedim >::line_iterator line(const unsigned int i) const
static constexpr std::size_t size()
unsigned int size() const
Point< dim, Number > compute(const Point< spacedim, Number > &p) const
#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()
constexpr unsigned int GeometryInfo< dim >::faces_per_cell
constexpr unsigned int GeometryInfo< dim >::vertices_per_face
constexpr unsigned int GeometryInfo< dim >::lines_per_face
static ::ExceptionBase & ExcAccessToUninitializedField(std::string arg1)
static ::ExceptionBase & ExcDistortedMappedCell(Point< spacedim > arg1, double arg2, int arg3)
static ::ExceptionBase & ExcTransformationFailed()
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
typename IteratorSelector::line_iterator line_iterator
TriaIterator< TriaAccessor< dim - 1, dim, spacedim > > face_iterator
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
@ 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_default
No update.
@ update_jacobian_pushed_forward_3rd_derivatives
@ update_boundary_forms
Outer normal vector, not normalized.
const Manifold< dim, spacedim > & get_manifold(const types::manifold_id number) const
@ mapping_covariant_gradient
@ mapping_contravariant_hessian
@ mapping_covariant_hessian
@ mapping_contravariant_gradient
bool face_rotation(const unsigned int face) const
bool face_orientation(const unsigned int face) const
types::geometric_orientation combined_face_orientation(const unsigned int face) const
bool face_flip(const unsigned int face) const
MappingQ< dim, spacedim > StaticMappingQ1< dim, spacedim >::mapping
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
constexpr unsigned int max_n_vertices()
constexpr const ReferenceCell< dim > & get_hypercube()
std::unique_ptr< To > dynamic_unique_cast(std::unique_ptr< From > &&p)
constexpr T fixed_power(const T t)
std::string to_string(const number value, const unsigned int digits=numbers::invalid_unsigned_int)
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
constexpr T pow(const T base, const int iexp)
Point< 1 > transform_real_to_unit_cell(const std::array< Point< spacedim >, GeometryInfo< 1 >::vertices_per_cell > &vertices, const Point< spacedim > &p)
void maybe_update_jacobian_pushed_forward_2nd_derivatives(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Tensor< 4, spacedim > > &jacobian_pushed_forward_2nd_derivatives)
Point< dim, Number > do_transform_real_to_unit_cell_internal(const Point< spacedim, Number > &p, const Point< dim, Number > &initial_p_unit, const ArrayView< const Point< spacedim > > &points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber, const bool print_iterations_to_deallog=false)
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 maybe_update_jacobian_grads(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< DerivativeForm< 2, dim, spacedim > > &jacobian_grads)
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 maybe_update_jacobian_3rd_derivatives(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< DerivativeForm< 4, dim, spacedim > > &jacobian_3rd_derivatives)
void maybe_update_jacobian_pushed_forward_grads(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Tensor< 3, spacedim > > &jacobian_pushed_forward_grads)
void maybe_update_q_points_Jacobians_generic(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Point< spacedim > > &quadrature_points, std::vector< DerivativeForm< 1, dim, spacedim > > &jacobians, std::vector< DerivativeForm< 1, spacedim, dim > > &inverse_jacobians)
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 maybe_update_q_points_Jacobians_and_grads_tensor(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, std::vector< Point< spacedim > > &quadrature_points, std::vector< DerivativeForm< 1, dim, spacedim > > &jacobians, std::vector< DerivativeForm< 1, spacedim, dim > > &inverse_jacobians, std::vector< DerivativeForm< 2, dim, spacedim > > &jacobian_grads)
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_update_jacobian_pushed_forward_3rd_derivatives(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< Tensor< 5, spacedim > > &jacobian_pushed_forward_3rd_derivatives)
Point< dim > do_transform_real_to_unit_cell_internal_codim1(const Point< dim+1 > &p, const Point< dim > &initial_p_unit, const ArrayView< const Point< dim+1 > > &points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber)
void maybe_update_jacobian_2nd_derivatives(const CellSimilarity::Similarity cell_similarity, const typename ::MappingQ< dim, spacedim >::InternalData &data, const ArrayView< const Point< dim > > &unit_points, const std::vector< Polynomials::Polynomial< double > > &polynomials_1d, const std::vector< unsigned int > &renumber_lexicographic_to_hierarchic, std::vector< DerivativeForm< 3, dim, spacedim > > &jacobian_2nd_derivatives)
Tensor< 3, spacedim, Number > apply_covariant_gradient(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 2, dim, spacedim, Number > &input)
ProductTypeNoPoint< Number, Number2 >::type evaluate_tensor_product_value_linear(const Number *values, const Point< dim, Number2 > &p)
ProductTypeNoPoint< Number, Number2 >::type evaluate_tensor_product_value(const std::vector< Polynomials::Polynomial< double > > &poly, const ArrayView< const Number > &values, const Point< dim, Number2 > &p, const bool d_linear=false, const std::vector< unsigned int > &renumber={})
constexpr unsigned int invalid_unsigned_int
constexpr types::manifold_id flat_manifold_id
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
* const unsigned int n_q_points
static constexpr ndarray< Tensor< 1, dim >, faces_per_cell, dim - 1 > unit_tangential_vectors
static unsigned int face_to_cell_vertices(const unsigned int face, const unsigned int vertex, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static constexpr unsigned int vertices_per_cell
static constexpr unsigned int lines_per_cell
static constexpr unsigned int faces_per_cell
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > face_indices()
static double d_linear_shape_function(const Point< dim > &xi, const unsigned int i)
static constexpr unsigned int vertices_per_face
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > vertex_indices()
static unsigned int face_to_cell_lines(const unsigned int face, const unsigned int line, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static constexpr unsigned int lines_per_face
constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)
constexpr Tensor< 1, dim, Number > cross_product_2d(const Tensor< 1, dim, Number > &src)
constexpr Tensor< 1, dim, typename ProductType< Number1, Number2 >::type > cross_product_3d(const Tensor< 1, dim, Number1 > &src1, const Tensor< 1, dim, Number2 > &src2)