36template <
int dim,
int spacedim>
38template <
int dim,
int spacedim>
40template <
int dim,
int spacedim>
42template <
int dim,
int spacedim>
47 class FEImmersedSurfaceValues;
49template <
int dim,
int spacedim>
651template <
int dim,
int spacedim = dim>
798 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
unsigned int>
812 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
865 const unsigned int component)
const;
900 const unsigned int component)
const;
935 const unsigned int component)
const;
971 const unsigned int component)
const;
1007 const unsigned int component)
const;
1020 const unsigned int face_index)
const;
1225 const ::internal::SubfaceCase<dim> &subface_case =
1290 const unsigned int face_no = 0)
const;
1306 const unsigned int subface,
1308 const unsigned int face_no = 0)
const;
1332 virtual std::vector<std::pair<unsigned int, unsigned int>>
1339 virtual std::vector<std::pair<unsigned int, unsigned int>>
1350 virtual std::vector<std::pair<unsigned int, unsigned int>>
1352 const unsigned int face_no = 0)
const;
1371 const unsigned int codim = 0)
const;
1450 std::pair<unsigned int, unsigned int>
1464 const unsigned int index)
const;
1475 std::pair<unsigned int, unsigned int>
1477 const unsigned int face_no = 0)
const;
1487 const unsigned int index,
1488 const unsigned int face_no,
1539 virtual unsigned int
1541 const unsigned int face,
1556 const unsigned int index,
1770 const unsigned int n_selected_components)
const;
1794 std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>
1805 std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>
1807 const unsigned int face_no = 0)
const;
1828 std::pair<unsigned int, unsigned int>
1836 std::pair<unsigned int, unsigned int>
1842 std::pair<unsigned int, types::global_dof_index>
1907 const unsigned int shape_function,
1923 const unsigned int shape_function,
2098 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
2138 const std::vector<Point<dim>> &
2211 const std::vector<
Point<dim - 1>> &
2232 virtual Point<dim - 1>
2234 const unsigned int face_no = 0)
const;
2263 const std::vector<Point<dim>> &
2412 std::vector<double> &nodal_values)
const;
2434 <<
"The shape function with index " << arg1
2435 <<
" is not primitive, i.e. it is vector-valued and "
2436 <<
"has more than one non-zero vector component. This "
2437 <<
"function cannot be called for these shape functions. "
2438 <<
"Maybe you want to use the same function with the "
2439 <<
"_component suffix?");
2453 "You are trying to access the values or derivatives of shape functions "
2454 "on the reference cell of an element that does not define its shape "
2455 "functions through mapping from the reference cell. Consequently, "
2456 "you cannot ask for shape function values or derivatives on the "
2466 "You are trying to access the support points of a finite "
2467 "element that either has no support points at all, or for "
2468 "which the corresponding tables have not been implemented.");
2477 "You are trying to access the matrices that describe how "
2478 "to embed a finite element function on one cell into the "
2479 "finite element space on one of its children (i.e., the "
2480 "'embedding' or 'prolongation' matrices). However, the "
2481 "current finite element can either not define this sort of "
2482 "operation, or it has not yet been implemented.");
2492 "You are trying to access the matrices that describe how "
2493 "to restrict a finite element function from the children "
2494 "of one cell to the finite element space defined on their "
2495 "parent (i.e., the 'restriction' or 'projection' matrices). "
2496 "However, the current finite element can either not define "
2497 "this sort of operation, or it has not yet been "
2507 <<
"The interface matrix has a size of " << arg1 <<
'x' << arg2
2508 <<
", which is not reasonable for the current element "
2509 "in the present dimension.");
2532 const bool isotropic_restriction_only =
false,
2533 const bool isotropic_prolongation_only =
false);
2650 std::vector<std::vector<std::pair<unsigned int, unsigned int>>>
2669 std::vector<std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>>
2676 std::vector<std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>>>
2705 std::vector<std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>>
2768 static std::vector<unsigned int>
2872 virtual std::unique_ptr<InternalDataBase>
2876 ::internal::FEValuesImplementation::
2877 FiniteElementRelatedData<dim, spacedim> &output_data) const = 0;
2921 virtual std::unique_ptr<InternalDataBase>
2925 ::internal::FEValuesImplementation::
2926 FiniteElementRelatedData<dim, spacedim> &output_data) const;
2931 virtual std::unique_ptr<InternalDataBase>
2937 &output_data)
const;
2982 virtual std::unique_ptr<InternalDataBase>
2989 &output_data)
const;
3083 &output_data)
const = 0;
3130 const unsigned int face_no,
3139 &output_data)
const;
3147 const unsigned int face_no,
3155 &output_data)
const;
3205 const unsigned int face_no,
3206 const unsigned int sub_no,
3215 &output_data)
const = 0;
3219 friend class FEValues<dim, spacedim>;
3223 friend class FESystem<dim, spacedim>;
3228 static_assert(dim <= spacedim,
3229 "The dimension <dim> of a FiniteElement must be less than or "
3230 "equal to the space dimension <spacedim> in which it lives.");
3238template <
int dim,
int spacedim>
3239inline std::pair<unsigned int, unsigned int>
3241 const unsigned int index)
const
3252template <
int dim,
int spacedim>
3261template <
int dim,
int spacedim>
3264 const unsigned int index)
const
3271template <
int dim,
int spacedim>
3274 const unsigned int component,
3275 const unsigned int index)
const
3278 const std::vector<std::pair<unsigned int, unsigned int>>::const_iterator it =
3281 std::pair<unsigned int, unsigned int>(component, index));
3284 ExcMessage(
"You are asking for the number of the shape function "
3285 "within a system element that corresponds to vector "
3288 " and within this to "
3292 "shape function exists."));
3298template <
int dim,
int spacedim>
3299inline std::pair<unsigned int, unsigned int>
3301 const unsigned int index,
3302 const unsigned int face_no)
const
3333template <
int dim,
int spacedim>
3336 const unsigned int index,
3344 Assert(adjust_line_dof_index_for_line_orientation_table.size() ==
3345 this->n_dofs_per_line(),
3355template <
int dim,
int spacedim>
3358 const unsigned int index,
3359 const unsigned int face,
3387 index, combined_orientation);
3392template <
int dim,
int spacedim>
3393inline std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>
3395 const unsigned int index)
const
3403template <
int dim,
int spacedim>
3404inline std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>
3406 const unsigned int index,
3407 const unsigned int face_no)
const
3419template <
int dim,
int spacedim>
3422 const unsigned int index)
const
3429template <
int dim,
int spacedim>
3430inline std::pair<unsigned int, unsigned int>
3432 const unsigned int index)
const
3441template <
int dim,
int spacedim>
3442inline std::pair<unsigned int, unsigned int>
3444 const unsigned int index)
const
3451template <
int dim,
int spacedim>
3452inline std::pair<unsigned int, types::global_dof_index>
3454 const unsigned int index)
const
3460 return std::pair<unsigned int, types::global_dof_index>(
3468template <
int dim,
int spacedim>
3471 const unsigned int shape_function,
3486template <
int dim,
int spacedim>
3489 const unsigned int shape_function,
3495 this->n_components() + 1);
3507 for (
unsigned int i =
components.first_vector_component;
3518template <
int dim,
int spacedim>
3521 const unsigned int shape_function,
3527 this->n_components() + 1);
3540 for (
unsigned int i =
components.first_tensor_component;
3552template <
int dim,
int spacedim>
3555 const unsigned int shape_function,
3561 this->n_components() + 1);
3574 for (
unsigned int i =
components.first_tensor_component;
3586template <
int dim,
int spacedim>
3589 const unsigned int index)
const
3592 return restriction_is_additive_flags[
index];
3597template <
int dim,
int spacedim>
3602 return nonzero_components[i];
3607template <
int dim,
int spacedim>
3612 return n_nonzero_components_table[i];
3617template <
int dim,
int spacedim>
3626template <
int dim,
int spacedim>
3644 return (
is_primitive() || (n_nonzero_components_table[i] == 1));
3649template <
int dim,
int spacedim>
3658template <
int dim,
int spacedim>
3661 const unsigned int cell_dof_index)
const
size_type block_size(const unsigned int i) const
unsigned int size() const
size_type block_start(const unsigned int i) const
std::pair< unsigned int, size_type > global_to_local(const size_type i) const
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
unsigned int get_first_line_index() const
const unsigned int components
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_components() const
unsigned int n_unique_2d_subobjects() 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
virtual ~InternalDataBase()=default
InternalDataBase(const InternalDataBase &)=delete
virtual std::size_t memory_consumption() const
bool constraints_are_implemented(const ::internal::SubfaceCase< dim > &subface_case=::internal::SubfaceCase< dim >::case_isotropic) const
bool shape_function_belongs_to(const unsigned int shape_function, const FEValuesExtractors::Vector &components) const
std::pair< unsigned int, types::global_dof_index > system_to_block_index(const unsigned int component) const
bool isotropic_prolongation_is_implemented() const
virtual std::string get_name() const =0
virtual Point< dim > unit_support_point(const unsigned int index) const
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const
const std::vector< unsigned int > n_nonzero_components_table
virtual std::unique_ptr< InternalDataBase > get_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const =0
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
const ComponentMask & get_nonzero_components(const unsigned int i) const
virtual void fill_fe_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const =0
std::vector< std::vector< Point< dim - 1 > > > unit_face_support_points
bool prolongation_is_implemented() const
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const
ComponentMask component_mask(const BlockMask &block_mask) const
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const
ComponentMask component_mask(const FEValuesExtractors::SymmetricTensor< 2 > &sym_tensor) const
virtual std::unique_ptr< InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const hp::QCollection< dim - 1 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
std::pair< unsigned int, unsigned int > component_to_base_index(const unsigned int component) const
virtual Point< dim - 1 > unit_face_support_point(const unsigned int index, const unsigned int face_no=0) const
bool is_primitive(const unsigned int i) const
static std::vector< unsigned int > compute_n_nonzero_components(const std::vector< ComponentMask > &nonzero_components)
virtual std::unique_ptr< InternalDataBase > get_subface_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim - 1 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
bool shape_function_belongs_to(const unsigned int shape_function, const FEValuesExtractors::Scalar &component) const
bool has_face_support_points(const unsigned int face_no=0) const
const bool cached_primitivity
virtual const FiniteElement< dim, spacedim > & get_sub_fe(const unsigned int first_component, const unsigned int n_selected_components) const
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
ComponentMask component_mask(const FEValuesExtractors::Scalar &scalar) const
bool operator!=(const FiniteElement< dim, spacedim > &) const
ComponentMask component_mask(const FEValuesExtractors::Vector &vector) const
bool has_support_points() const
std::vector< std::vector< FullMatrix< double > > > restriction
bool has_generalized_support_points() const
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const
std::vector< Table< 2, int > > adjust_quad_dof_index_for_face_orientation_table
virtual bool operator==(const FiniteElement< dim, spacedim > &fe) const
bool shape_function_belongs_to(const unsigned int shape_function, const FEValuesExtractors::SymmetricTensor< 2 > &components) const
const std::vector< Point< dim > > & get_unit_support_points() const
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 Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
static constexpr unsigned int space_dimension
BlockIndices base_to_block_indices
bool is_primitive() const
void reinit_restriction_and_prolongation_matrices(const bool isotropic_restriction_only=false, const bool isotropic_prolongation_only=false)
const std::vector< Point< dim - 1 > > & get_unit_face_support_points(const unsigned int face_no=0) const
bool isotropic_restriction_is_implemented() const
std::vector< std::vector< Point< dim - 1 > > > generalized_face_support_points
std::pair< unsigned int, unsigned int > block_to_base_index(const unsigned int block) const
std::vector< int > adjust_line_dof_index_for_line_orientation_table
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const
bool restriction_is_additive(const unsigned int index) const
virtual void fill_fe_subface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim - 1 > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const =0
const FiniteElement< dim, spacedim > & get_sub_fe(const ComponentMask &mask) const
virtual Tensor< 4, dim > shape_4th_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
unsigned int adjust_quad_dof_index_for_face_orientation(const unsigned int index, const unsigned int face_no, const types::geometric_orientation combined_orientation) const
FiniteElement(const FiniteElement< dim, spacedim > &)=default
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
unsigned int component_to_block_index(const unsigned int component) const
BlockMask block_mask(const FEValuesExtractors::Scalar &scalar) const
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const =0
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const
std::pair< unsigned int, unsigned int > system_to_component_index(const unsigned int index) const
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > system_to_base_table
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double > > &support_point_values, std::vector< double > &nodal_values) const
FiniteElement(const FiniteElementData< dim > &fe_data, const std::vector< bool > &restriction_is_additive_flags, const std::vector< ComponentMask > &nonzero_components)
BlockMask block_mask(const FEValuesExtractors::Vector &vector) const
BlockMask block_mask(const ComponentMask &component_mask) const
bool shape_function_belongs_to(const unsigned int shape_function, const FEValuesExtractors::Tensor< 2 > &components) const
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > system_to_base_index(const unsigned int index) const
std::vector< std::pair< unsigned int, unsigned int > > system_to_component_table
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > face_system_to_base_index(const unsigned int index, const unsigned int face_no=0) const
virtual Tensor< 3, dim > shape_3rd_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
const FullMatrix< double > & constraints(const ::internal::SubfaceCase< dim > &subface_case=::internal::SubfaceCase< dim >::case_isotropic) const
unsigned int element_multiplicity(const unsigned int index) const
std::pair< std::unique_ptr< FiniteElement< dim, spacedim > >, unsigned int > operator^(const unsigned int multiplicity) const
unsigned int adjust_line_dof_index_for_line_orientation(const unsigned int index, const types::geometric_orientation combined_orientation) const
const std::vector< bool > restriction_is_additive_flags
virtual ~FiniteElement() override=default
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
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > component_to_base_table
TableIndices< 2 > interface_constraints_size() const
std::vector< std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > > face_system_to_base_table
std::vector< Point< dim > > unit_support_points
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
bool restriction_is_implemented() const
virtual std::unique_ptr< InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim - 1 > &quadrature, internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
std::vector< std::vector< std::pair< unsigned int, unsigned int > > > face_system_to_component_table
virtual void fill_fe_face_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const Quadrature< dim - 1 > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, const InternalDataBase &fe_internal, internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
FiniteElement(FiniteElement< dim, spacedim > &&)=default
unsigned int n_nonzero_components(const unsigned int i) const
FullMatrix< double > interface_constraints
const std::vector< Point< dim > > & get_generalized_support_points() const
BlockMask block_mask(const FEValuesExtractors::SymmetricTensor< 2 > &sym_tensor) const
unsigned int n_base_elements() const
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
Table< 2, bool > local_dof_sparsity_pattern
virtual double shape_value(const unsigned int i, const Point< dim > &p) const
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix, const unsigned int face_no=0) const
virtual const Table< 2, bool > & get_local_dof_sparsity_pattern() const
virtual std::size_t memory_consumption() const
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const
GeometryPrimitive get_associated_geometry_primitive(const unsigned int cell_dof_index) const
std::vector< Point< dim > > generalized_support_points
unsigned int component_to_system_index(const unsigned int component, const unsigned int index) const
const std::vector< ComponentMask > nonzero_components
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
std::pair< unsigned int, unsigned int > face_system_to_component_index(const unsigned int index, const unsigned int face_no=0) const
virtual bool hp_constraints_are_implemented() const
std::vector< std::vector< FullMatrix< double > > > prolongation
types::global_dof_index first_block_of_base(const unsigned int b) const
Abstract base class for mapping classes.
* const unsigned int component
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DeclException0(Exception0)
static ::ExceptionBase & ExcShapeFunctionNotPrimitive(int arg1)
#define Assert(cond, exc)
static ::ExceptionBase & ExcWrongInterfaceMatrixSize(int arg1, int arg2)
#define DeclException2(Exception2, type1, type2, outsequence)
static ::ExceptionBase & ExcUnitShapeValuesDoNotExist()
static ::ExceptionBase & ExcProjectionVoid()
#define AssertIndexRange(index, range)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcFENotPrimitive()
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcEmbeddingVoid()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcInterpolationNotImplemented()
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcFEHasNoSupportPoints()
* * * ScaleZFunction< dim, Number, components >::ScaleZFunction * component(component)
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
constexpr types::geometric_orientation reverse_line_orientation
constexpr types::geometric_orientation default_geometric_orientation
std::uint8_t geometric_orientation