34 template <
int dim,
int spacedim>
36 compute_linear_transformation(
40 for (
unsigned int j = 0; j < spacedim; ++j)
41 for (
unsigned int i = 1; i < dim + 1; ++i)
42 result[j][i - 1] = cell->
vertex(i)[j] - cell->
vertex(0)[j];
49template <
int dim,
int spacedim>
58template <
int dim,
int spacedim>
66template <
int dim,
int spacedim>
69 const UpdateFlags update_flags,
78template <
int dim,
int spacedim>
92template <
int dim,
int spacedim>
101template <
int dim,
int spacedim>
106 return reference_cell.is_simplex();
111template <
int dim,
int spacedim>
117 UpdateFlags out = in;
126template <
int dim,
int spacedim>
127std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
131 auto data_ptr = std::make_unique<InternalData>(quadrature);
148template <
int dim,
int spacedim>
149std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
151 const UpdateFlags update_flags,
154 auto data_ptr = std::make_unique<InternalData>(
165 data_ptr->update_each = update_flags;
172template <
int dim,
int spacedim>
173std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
175 const UpdateFlags update_flags,
178 auto data_ptr = std::make_unique<InternalData>(
189 data_ptr->update_each = update_flags;
196template <
int dim,
int spacedim>
203 data.
contravariant = compute_linear_transformation<dim, spacedim>(cell);
210template <
int dim,
int spacedim>
219 for (
unsigned int i = 0; i < quadrature_points.size(); ++i)
220 quadrature_points[i] =
228template <
int dim,
int spacedim>
231 const unsigned int face_no,
239 normal_vector /= normal_vector.
norm();
241 std::fill(normal_vectors.begin(), normal_vectors.end(), normal_vector);
246template <
int dim,
int spacedim>
291template <
int dim,
int spacedim>
310template <
int dim,
int spacedim>
330template <
int dim,
int spacedim>
356 for (
unsigned int i = 0; i < output_data.
JxW_values.size(); ++i)
367 Assert(spacedim == dim + 1,
368 ExcMessage(
"There is no (unique) cell normal for " +
370 "-dimensional cells in " +
372 "-dimensional space. This only works if the "
373 "space dimension is one greater than the "
374 "dimensionality of the mesh cells."));
378 if constexpr (dim == 1 && spacedim == 2)
380 else if constexpr (dim == 2 && spacedim == 3)
387 normal /= normal.
norm();
397 return cell_similarity;
402template <
int dim,
int spacedim>
407 const UpdateFlags update_flags,
419 output_data.
initialize(unit_points.size(), update_flags);
437template <
int dim,
int spacedim>
441 const unsigned int face_no,
457 quadrature_collection);
471 const double J = cell->
face(face_no)->measure() /
474 for (
unsigned int i = 0; i < output_data.
JxW_values.size(); ++i)
478 for (
unsigned int i = 0; i < output_data.
boundary_forms.size(); ++i)
489template <
int dim,
int spacedim>
493 const unsigned int face_no,
494 const unsigned int subface_no,
525 cell->
face(face_no)->measure() /
526 cell->
face(face_no)->reference_cell().volume() /
531 for (
unsigned int i = 0; i < output_data.
JxW_values.size(); ++i)
535 for (
unsigned int i = 0; i < output_data.
boundary_forms.size(); ++i)
546template <
int dim,
int spacedim>
550 const MappingKind mapping_kind,
559 switch (mapping_kind)
563 for (
unsigned int i = 0; i < output.size(); ++i)
570 for (
unsigned int i = 0; i < output.size(); ++i)
578 for (
unsigned int d = 0; d < spacedim; ++d)
580 for (
unsigned int i = 0; i < output.size(); ++i)
591template <
int dim,
int spacedim>
595 const MappingKind mapping_kind,
604 switch (mapping_kind)
608 for (
unsigned int i = 0; i < output.size(); ++i)
620template <
int dim,
int spacedim>
624 const MappingKind mapping_kind,
633 switch (mapping_kind)
639 "update_covariant_transformation"));
641 for (
unsigned int i = 0; i < output.size(); ++i)
650 "update_contravariant_transformation"));
652 for (
unsigned int i = 0; i < output.size(); ++i)
661 "update_covariant_transformation"));
663 for (
unsigned int i = 0; i < output.size(); ++i)
676 "update_covariant_transformation"));
678 for (
unsigned int i = 0; i < output.size(); ++i)
692 "update_contravariant_transformation"));
694 for (
unsigned int i = 0; i < output.size(); ++i)
711template <
int dim,
int spacedim>
715 const MappingKind mapping_kind,
724 switch (mapping_kind)
730 "update_covariant_transformation"));
732 for (
unsigned int i = 0; i < output.size(); ++i)
745template <
int dim,
int spacedim>
749 const MappingKind mapping_kind,
758 switch (mapping_kind)
764 "update_covariant_transformation"));
767 "update_contravariant_transformation"));
769 for (
unsigned int i = 0; i < output.size(); ++i)
782 "update_covariant_transformation"));
784 for (
unsigned int i = 0; i < output.size(); ++i)
795 "update_covariant_transformation"));
798 "update_contravariant_transformation"));
800 for (
unsigned int i = 0; i < output.size(); ++i)
816template <
int dim,
int spacedim>
823 compute_linear_transformation<dim, spacedim>(cell);
825 return cell->
vertex(0) + sheared;
830template <
int dim,
int spacedim>
837 compute_linear_transformation<dim, spacedim>(cell)
846template <
int dim,
int spacedim>
854 compute_linear_transformation<dim, spacedim>(cell)
858 for (
unsigned int i = 0; i < real_points.size(); ++i)
865template <
int dim,
int spacedim>
866std::unique_ptr<Mapping<dim, spacedim>>
869 return std::make_unique<MappingP1<dim, spacedim>>(*this);
875#include "fe/mapping_p1.inst"
internal::SubfaceCase< dim > subface_case(const unsigned int face_no) const
TriaIterator< TriaAccessor< dim - 1, dim, spacedim > > face(const unsigned int i) const
bool direction_flag() const
DerivativeForm< 1, dim, spacedim > covariant
virtual void reinit(const UpdateFlags update_flags, const Quadrature< dim > &quadrature) override
DerivativeForm< 1, dim, spacedim > contravariant
Tensor< 1, spacedim > affine_component
Quadrature< dim > quadrature
InternalData(const ArrayView< const Point< dim > > &quadrature_points)
virtual std::size_t memory_consumption() const override
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags, const Quadrature< dim > &quadrature) const override
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) 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_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 bool is_compatible_with(const ReferenceCell< dim > &reference_cell) const override
void transform_quadrature_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const InternalData &data, const typename QProjector< dim >::DataSetDescriptor &offset, std::vector< Point< spacedim > > &quadrature_points) const
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags flags, const Quadrature< dim - 1 > &quadrature) const override
virtual bool preserves_vertex_locations() 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
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
virtual Point< spacedim > transform_unit_to_real_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< dim > &p) const override
void update_transformation(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const InternalData &data) const
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< Mapping< dim, spacedim > > clone() const override
void maybe_update_inverse_jacobians(const InternalData &data, const CellSimilarity::Similarity cell_similarity, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const
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
void maybe_update_jacobian_derivatives(const InternalData &data, const CellSimilarity::Similarity cell_similarity, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const
virtual Point< dim > transform_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p) const override
void maybe_update_normal_vectors(const unsigned int face_no, const InternalData &data, std::vector< Tensor< 1, spacedim > > &normal_vectors) const
void maybe_update_jacobians(const InternalData &data, const CellSimilarity::Similarity cell_similarity, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const
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 std::size_t memory_consumption() const
Class storing the offset index into a Quadrature rule created by project_to_all_faces() or project_to...
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)
double weight(const unsigned int i) const
unsigned int size() const
numbers::NumberTraits< Number >::real_type norm() const
ReferenceCell< structdim > reference_cell() const
Point< spacedim > & vertex(const unsigned int i) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ASSERT_UNREACHABLE()
#define DEAL_II_NOT_IMPLEMENTED()
static ::ExceptionBase & ExcAccessToUninitializedField(std::string arg1)
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDivideByZero()
static ::ExceptionBase & ExcMessage(std::string arg1)
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
@ update_jacobian_pushed_forward_2nd_derivatives
@ update_contravariant_transformation
Contravariant transformation.
@ update_jacobian_pushed_forward_grads
@ update_jacobian_3rd_derivatives
@ 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.
@ update_jacobian_2nd_derivatives
@ mapping_covariant_gradient
@ mapping_contravariant_hessian
@ mapping_covariant_hessian
@ mapping_contravariant_gradient
types::geometric_orientation combined_face_orientation(const unsigned int face) const
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
constexpr const ReferenceCell< dim > & get_simplex()
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
Tensor< 3, spacedim, Number > apply_contravariant_hessian(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 1, dim, spacedim, Number > &contravariant, const Tensor< 3, dim, Number > &input)
Tensor< 3, spacedim, Number > apply_piola_hessian(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 1, dim, spacedim, Number > &contravariant, const Number &volume_element, const Tensor< 3, dim, Number > &input)
Tensor< 2, spacedim, Number > apply_piola_gradient(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 1, dim, spacedim, Number > &contravariant, const Number &volume_element, const Tensor< 2, dim, Number > &input)
Tensor< 3, spacedim, Number > apply_covariant_gradient(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const DerivativeForm< 2, dim, spacedim, Number > &input)
Tensor< 3, spacedim, Number > apply_covariant_hessian(const DerivativeForm< 1, dim, spacedim, Number > &covariant, const Tensor< 3, dim, Number > &input)
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)