16 #ifndef dealii_fe_system_h 17 #define dealii_fe_system_h 23 #include <deal.II/base/config.h> 24 #include <deal.II/base/thread_management.h> 25 #include <deal.II/fe/fe.h> 26 #include <deal.II/fe/fe_tools.h> 31 #include <type_traits> 34 DEAL_II_NAMESPACE_OPEN
166 template <
int dim,
int spacedim=dim>
202 const unsigned int n_elements);
424 const std::vector<unsigned int> &multiplicities);
463 template <
class... FEPairs,
464 typename =
typename enable_if_all<
465 (std::is_same<typename std::decay<FEPairs>::type,
466 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
unsigned int>>::value
468 std::is_base_of<FiniteElement<dim, spacedim>,
469 typename std::decay<FEPairs>::type>::value)
484 unsigned int>> &fe_systems);
510 virtual std::string
get_name ()
const;
513 std::unique_ptr<FiniteElement<dim,spacedim> >
528 get_sub_fe (
const unsigned int first_component,
529 const unsigned int n_selected_components)
const;
556 const unsigned int component)
const;
585 const unsigned int component)
const;
616 const unsigned int component)
const;
645 const unsigned int component)
const;
674 const unsigned int component)
const;
705 const unsigned int face_index)
const;
805 const unsigned int face,
806 const bool face_orientation =
true,
807 const bool face_flip =
false,
808 const bool face_rotation =
false)
const;
831 virtual std::pair<Table<2,bool>, std::vector<unsigned int> >
879 const unsigned int subface,
898 std::vector<std::pair<unsigned int, unsigned int> >
906 std::vector<std::pair<unsigned int, unsigned int> >
914 std::vector<std::pair<unsigned int, unsigned int> >
948 std::vector<double> &dof_values)
const;
963 std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
970 std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
977 std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
990 const ::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim> &mapping_data,
997 const unsigned int face_no,
1001 const ::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim> &mapping_data,
1008 const unsigned int face_no,
1009 const unsigned int sub_no,
1013 const ::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim> &mapping_data,
1027 template <
int dim_1>
1030 const unsigned int face_no,
1031 const unsigned int sub_no,
1053 std::vector<std::pair<std::unique_ptr<const FiniteElement<dim,spacedim> >,
1077 const std::vector<unsigned int> &multiplicities);
1089 template <
int structdim>
1090 std::vector<std::pair<unsigned int, unsigned int> >
1148 typename std::vector<std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase > >
base_fe_datas;
1174 template <
int dim,
int spacedim>
1175 unsigned int count_nonzeros
1177 unsigned int>> &fe_systems)
1179 return std::count_if(fe_systems.begin(),
1181 [](
const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1190 template <
int dim,
int spacedim>
1191 std::pair<std::unique_ptr<FiniteElement<dim, spacedim> >,
unsigned int>
1194 return std::make_pair<std::unique_ptr<FiniteElement<dim, spacedim> >,
1195 unsigned int> (std::move(fe.
clone()), 1u);
1200 template <
int dim,
int spacedim>
1205 return std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim> >,
unsigned int> >(p);
1214 template<
int dim,
int spacedim>
1215 template <
class... FEPairs,
1219 FESystem<dim, spacedim> ({promote_to_fe_pair<dim,spacedim>(std::forward<FEPairs>(fe_pairs))...})
1224 template <
int dim,
int spacedim>
1227 unsigned int>> &fe_systems)
1235 std::vector<const FiniteElement<dim,spacedim>*> fes;
1236 std::vector<unsigned int> multiplicities;
1239 = [&fes, &multiplicities]
1240 (
const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
unsigned int> &
fe_system)
1243 multiplicities.push_back(
fe_system.second);
1246 for (
const auto &p : fe_systems)
1254 DEAL_II_NAMESPACE_CLOSE
static const unsigned int invalid_unsigned_int
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::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
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const
void build_interface_constraints()
void initialize(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities)
std::vector< std::pair< unsigned int, unsigned int > > hp_object_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual bool hp_constraints_are_implemented() const
virtual ~FESystem()=default
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const
virtual Point< dim > unit_support_point(const unsigned int index) const
InternalData(const unsigned int n_base_elements)
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const
const std::unique_ptr< const FESystem< dim, spacedim > > fe_system
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const
std::vector< std::vector< std::size_t > > generalized_support_points_index_table
virtual Tensor< 3, dim > shape_3rd_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual std::string get_name() const
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
virtual Tensor< 4, dim > shape_4th_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double > > &support_point_values, std::vector< double > &dof_values) const
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
static const unsigned int invalid_face_number
Abstract base class for mapping classes.
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const
void set_fe_data(const unsigned int base_no, std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase >)
ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
virtual double shape_value(const unsigned int i, const Point< dim > &p) const
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const
virtual std::size_t memory_consumption() const
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
virtual FiniteElementDomination::Domination compare_for_face_domination(const FiniteElement< dim, spacedim > &fe_other) const
FiniteElement< dim, spacedim >::InternalDataBase & get_fe_data(const unsigned int base_no) const
virtual Point< dim-1 > unit_face_support_point(const unsigned int index) const
FESystem(const FiniteElement< dim, spacedim > &fe, const unsigned int n_elements)
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const
internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > & get_fe_output_object(const unsigned int base_no) const
void compute_fill(const Mapping< dim, spacedim > &mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim_1 > &quadrature, const CellSimilarity::Similarity cell_similarity, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_data, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
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
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::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
unsigned int n_base_elements() const
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual const FiniteElement< dim, spacedim > & get_sub_fe(const unsigned int first_component, const unsigned int n_selected_components) const
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const