19 #include <deal.II/base/config.h> 20 #include <deal.II/base/geometry_info.h> 21 #include <deal.II/fe/fe_base.h> 22 #include <deal.II/fe/fe_values_extractors.h> 23 #include <deal.II/fe/fe_update_flags.h> 24 #include <deal.II/fe/component_mask.h> 25 #include <deal.II/fe/block_mask.h> 26 #include <deal.II/fe/mapping.h> 28 DEAL_II_NAMESPACE_OPEN
31 template <
int dim,
int spacedim>
class FEValues;
34 template <
int dim,
int spacedim>
class FESystem;
574 template <
int dim,
int spacedim=dim>
582 static const unsigned int space_dimension = spacedim;
649 virtual std::size_t memory_consumption ()
const;
696 const std::vector<bool> &restriction_is_additive_flags,
697 const std::vector<ComponentMask> &nonzero_components);
723 virtual std::string get_name ()
const = 0;
773 virtual double shape_value (
const unsigned int i,
782 virtual double shape_value_component (
const unsigned int i,
784 const unsigned int component)
const;
816 virtual Tensor<1,dim> shape_grad_component (
const unsigned int i,
818 const unsigned int component)
const;
850 virtual Tensor<2,dim> shape_grad_grad_component (
const unsigned int i,
852 const unsigned int component)
const;
875 virtual Tensor<3,dim> shape_3rd_derivative (
const unsigned int i,
884 virtual Tensor<3,dim> shape_3rd_derivative_component (
const unsigned int i,
886 const unsigned int component)
const;
909 virtual Tensor<4,dim> shape_4th_derivative (
const unsigned int i,
918 virtual Tensor<4,dim> shape_4th_derivative_component (
const unsigned int i,
920 const unsigned int component)
const;
931 virtual bool has_support_on_face (
const unsigned int shape_index,
932 const unsigned int face_index)
const;
956 get_restriction_matrix (
const unsigned int child,
989 get_prolongation_matrix (
const unsigned int child,
1013 bool prolongation_is_implemented ()
const;
1030 bool isotropic_prolongation_is_implemented ()
const;
1053 bool restriction_is_implemented ()
const;
1070 bool isotropic_restriction_is_implemented ()
const;
1081 bool restriction_is_additive (
const unsigned int index)
const;
1135 virtual bool hp_constraints_are_implemented ()
const;
1189 const unsigned int subface,
1215 std::vector<std::pair<unsigned int, unsigned int> >
1223 std::vector<std::pair<unsigned int, unsigned int> >
1231 std::vector<std::pair<unsigned int, unsigned int> >
1292 std::pair<unsigned int, unsigned int>
1293 system_to_component_index (
const unsigned int index)
const;
1304 unsigned int component_to_system_index(
const unsigned int component,
1305 const unsigned int index)
const;
1316 std::pair<unsigned int, unsigned int>
1317 face_system_to_component_index (
const unsigned int index)
const;
1327 unsigned int adjust_quad_dof_index_for_face_orientation (
const unsigned int index,
1328 const bool face_orientation,
1329 const bool face_flip,
1330 const bool face_rotation)
const;
1387 unsigned int face_to_cell_index (
const unsigned int face_dof_index,
1388 const unsigned int face,
1389 const bool face_orientation =
true,
1390 const bool face_flip =
false,
1391 const bool face_rotation =
false)
const;
1400 unsigned int adjust_line_dof_index_for_line_orientation (
const unsigned int index,
1401 const bool line_orientation)
const;
1420 get_nonzero_components (
const unsigned int i)
const;
1433 n_nonzero_components (
const unsigned int i)
const;
1446 is_primitive (
const unsigned int i)
const;
1465 unsigned int n_base_elements ()
const;
1473 base_element (
const unsigned int index)
const;
1482 element_multiplicity (
const unsigned int index)
const;
1503 std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>
1504 system_to_base_index (
const unsigned int index)
const;
1514 std::pair<std::pair<unsigned int, unsigned int>,
unsigned int>
1515 face_system_to_base_index (
const unsigned int index)
const;
1535 std::pair<unsigned int, unsigned int>
1536 component_to_base_index (
const unsigned int component)
const;
1543 std::pair<unsigned int,unsigned int>
1544 block_to_base_index (
const unsigned int block)
const;
1549 std::pair<unsigned int,types::global_dof_index>
1550 system_to_block_index (
const unsigned int component)
const;
1556 component_to_block_index (
const unsigned int component)
const;
1626 component_mask (
const BlockMask &block_mask)
const;
1730 virtual std::pair<Table<2,bool>,std::vector<unsigned int> >
1731 get_constant_modes ()
const;
1770 const std::vector<Point<dim> > &
1771 get_unit_support_points ()
const;
1790 bool has_support_points ()
const;
1806 unit_support_point (
const unsigned int index)
const;
1834 const std::vector<
Point<dim-1> > &
1835 get_unit_face_support_points ()
const;
1845 bool has_face_support_points ()
const;
1853 unit_face_support_point (
const unsigned int index)
const;
1862 const std::vector<Point<dim> > &
1863 get_generalized_support_points ()
const;
1873 bool has_generalized_support_points ()
const;
1878 const std::vector<
Point<dim-1> > &
1879 get_generalized_face_support_points ()
const;
1890 has_generalized_face_support_points ()
const;
1936 get_associated_geometry_primitive (
const unsigned int cell_dof_index)
const;
1949 interpolate(std::vector<double> &local_dofs,
1950 const std::vector<double> &values)
const;
1963 interpolate(std::vector<double> &local_dofs,
1965 unsigned int offset = 0)
const;
1973 interpolate(std::vector<double> &local_dofs,
1974 const VectorSlice<
const std::vector<std::vector<double> > > &values)
const;
1986 virtual std::size_t memory_consumption ()
const;
1995 <<
"The shape function with index " << arg1
1996 <<
" is not primitive, i.e. it is vector-valued and " 1997 <<
"has more than one non-zero vector component. This " 1998 <<
"function cannot be called for these shape functions. " 1999 <<
"Maybe you want to use the same function with the " 2000 <<
"_component suffix?");
2013 "You are trying to access the values or derivatives of shape functions " 2014 "on the reference cell of an element that does not define its shape " 2015 "functions through mapping from the reference cell. Consequently, " 2016 "you cannot ask for shape function values or derivatives on the " 2026 "You are trying to access the support points of a finite " 2027 "element that either has no support points at all, or for " 2028 "which the corresponding tables have not been implemented.");
2037 "You are trying to access the matrices that describe how " 2038 "to embed a finite element function on one cell into the " 2039 "finite element space on one of its children (i.e., the " 2040 "'embedding' or 'prolongation' matrices). However, the " 2041 "current finite element can either not define this sort of " 2042 "operation, or it has not yet been implemented.");
2052 "You are trying to access the matrices that describe how " 2053 "to restrict a finite element function from the children " 2054 "of one cell to the finite element space defined on their " 2055 "parent (i.e., the 'restriction' or 'projection' matrices). " 2056 "However, the current finite element can either not define " 2057 "this sort of operation, or it has not yet been " 2066 <<
"The interface matrix has a size of " << arg1
2068 <<
", which is not reasonable for the current element " 2069 "in the present dimension.");
2091 void reinit_restriction_and_prolongation_matrices(
const bool isotropic_restriction_only=
false,
2092 const bool isotropic_prolongation_only=
false);
2229 std::vector<std::pair<std::pair<unsigned int,unsigned int>,
unsigned int> >
2235 std::vector<std::pair<std::pair<unsigned int,unsigned int>,
unsigned int> >
2259 std::vector<std::pair<std::pair<unsigned int, unsigned int>,
unsigned int> >
2299 interface_constraints_size ()
const;
2307 std::vector<unsigned int>
2308 compute_n_nonzero_components (
const std::vector<ComponentMask> &nonzero_components);
2332 requires_update_flags (
const UpdateFlags update_flags)
const = 0;
2596 const CellSimilarity::Similarity cell_similarity,
2600 const ::internal::FEValues::MappingRelatedData<dim, spacedim> &mapping_data,
2601 const InternalDataBase &fe_internal,
2649 const unsigned int face_no,
2653 const ::internal::FEValues::MappingRelatedData<dim, spacedim> &mapping_data,
2654 const InternalDataBase &fe_internal,
2705 const unsigned int face_no,
2706 const unsigned int sub_no,
2710 const ::internal::FEValues::MappingRelatedData<dim, spacedim> &mapping_data,
2711 const InternalDataBase &fe_internal,
2714 friend class InternalDataBase;
2716 friend class FEValues<dim,spacedim>;
2719 friend class FESystem<dim,spacedim>;
2726 template <
int dim,
int spacedim>
2733 ExcMessage (
"A fe_index of zero is the only index allowed here"));
2739 template <
int dim,
int spacedim>
2741 std::pair<unsigned int,unsigned int>
2753 template <
int dim,
int spacedim>
2763 template <
int dim,
int spacedim>
2773 template <
int dim,
int spacedim>
2777 const unsigned int index)
const 2780 const std::vector<std::pair<unsigned int, unsigned int> >::const_iterator
2782 std::pair<unsigned int, unsigned int>(component, index));
2785 ExcMessage (
"You are asking for the number of the shape function " 2786 "within a system element that corresponds to vector " 2789 "shape function exists."));
2795 template <
int dim,
int spacedim>
2797 std::pair<unsigned int,unsigned int>
2824 template <
int dim,
int spacedim>
2826 std::pair<std::pair<unsigned int,unsigned int>,
unsigned int>
2837 template <
int dim,
int spacedim>
2839 std::pair<std::pair<unsigned int,unsigned int>,
unsigned int>
2849 template <
int dim,
int spacedim>
2859 template <
int dim,
int spacedim>
2861 std::pair<unsigned int,unsigned int>
2872 template <
int dim,
int spacedim>
2874 std::pair<unsigned int,unsigned int>
2882 template <
int dim,
int spacedim>
2884 std::pair<unsigned int,types::global_dof_index>
2888 ExcIndexRange(index, 0, this->dofs_per_cell));
2892 return std::pair<unsigned int, types::global_dof_index>(
2900 template <
int dim,
int spacedim>
2906 ExcIndexRange(index, 0, this->dofs_per_cell));
2912 template <
int dim,
int spacedim>
2923 template <
int dim,
int spacedim>
2934 template <
int dim,
int spacedim>
2959 template <
int dim,
int spacedim>
2965 ExcIndexRange (cell_dof_index, 0, this->dofs_per_cell));
2970 return GeometryPrimitive::vertex;
2972 return GeometryPrimitive::line;
2974 return GeometryPrimitive::quad;
2976 return GeometryPrimitive::hex;
2981 DEAL_II_NAMESPACE_CLOSE
const unsigned int first_hex_index
bool is_primitive() const
bool restriction_is_additive(const unsigned int index) const
std::vector< std::vector< FullMatrix< double > > > restriction
#define DeclException2(Exception2, type1, type2, outsequence)
std::vector< Point< dim > > generalized_support_points
FullMatrix< double > interface_constraints
unsigned int n_nonzero_components(const unsigned int i) const
::ExceptionBase & ExcMessage(std::string arg1)
#define AssertIndexRange(index, range)
Auxiliary class aiding in the handling of block structures like in BlockVector or FESystem...
Table< 2, int > adjust_quad_dof_index_for_face_orientation_table
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > component_to_base_table
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > face_system_to_base_table
size_type block_size(const unsigned int i) const
const std::vector< unsigned int > n_nonzero_components_table
std::vector< Point< dim > > unit_support_points
const unsigned int first_quad_index
#define DeclException1(Exception1, type1, outsequence)
std::vector< std::vector< FullMatrix< double > > > prolongation
std::pair< unsigned int, unsigned int > component_to_base_index(const unsigned int component) const
unsigned int global_dof_index
#define Assert(cond, exc)
unsigned int element_multiplicity(const unsigned int index) const
GeometryPrimitive get_associated_geometry_primitive(const unsigned int cell_dof_index) const
Abstract base class for mapping classes.
std::vector< Point< dim-1 > > unit_face_support_points
const ComponentMask & get_nonzero_components(const unsigned int i) const
#define DeclExceptionMsg(Exception, defaulttext)
#define DeclException0(Exception0)
std::pair< unsigned int, unsigned int > face_system_to_component_index(const unsigned int index) const
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
std::pair< unsigned int, unsigned int > block_to_base_index(const unsigned int block) const
const unsigned int dofs_per_cell
std::vector< Point< dim-1 > > generalized_face_support_points
types::global_dof_index first_block_of_base(const unsigned int b) const
unsigned int component_to_system_index(const unsigned int component, const unsigned int index) const
std::pair< unsigned int, unsigned int > system_to_component_index(const unsigned int index) const
const FiniteElement< dim, spacedim > & operator[](const unsigned int fe_index) const
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > face_system_to_base_index(const unsigned int index) const
unsigned int n_components() const
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > system_to_base_index(const unsigned int index) const
std::pair< unsigned int, types::global_dof_index > system_to_block_index(const unsigned int component) const
std::vector< std::pair< unsigned int, unsigned int > > system_to_component_table
size_type block_start(const unsigned int i) const
const unsigned int first_line_index
const std::vector< ComponentMask > nonzero_components
std::vector< std::pair< unsigned int, unsigned int > > face_system_to_component_table
virtual unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false) const
BlockIndices base_to_block_indices
unsigned int n_base_elements() const
unsigned int size() const
std::vector< int > adjust_line_dof_index_for_line_orientation_table
std::pair< unsigned int, size_type > global_to_local(const size_type i) const
const std::vector< bool > restriction_is_additive_flags
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > system_to_base_table