|
Reference documentation for deal.II version 9.2.0
|
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\)
\(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\)
\(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\)
\(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Go to the documentation of this file.
16 #ifndef dealii_fe_system_h
17 # define dealii_fe_system_h
31 # include <type_traits>
40 template <
int dim,
int spacedim>
171 template <
int dim,
int spacedim = dim>
206 const unsigned int n_elements);
215 const unsigned int n1,
217 const unsigned int n2);
226 const unsigned int n1,
228 const unsigned int n2,
230 const unsigned int n3);
239 const unsigned int n1,
241 const unsigned int n2,
243 const unsigned int n3,
245 const unsigned int n4);
254 const unsigned int n1,
256 const unsigned int n2,
258 const unsigned int n3,
260 const unsigned int n4,
262 const unsigned int n5);
450 const std::vector<unsigned int> &multiplicities);
452 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
498 (std::is_same<typename std::decay<FEPairs>::type,
499 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
501 std::is_base_of<FiniteElement<dim, spacedim>,
502 typename std::decay<FEPairs>::type>
::value)...>::type>
518 const std::initializer_list<
537 std::move(other_fe_system.generalized_support_points_index_table);
556 virtual std::unique_ptr<FiniteElement<dim, spacedim>>
557 clone()
const override;
569 get_sub_fe(
const unsigned int first_component,
570 const unsigned int n_selected_components)
const override;
598 const unsigned int component)
const override;
628 const unsigned int component)
const override;
658 const unsigned int component)
const override;
689 const unsigned int component)
const override;
720 const unsigned int component)
const override;
752 const unsigned int face_index)
const override;
779 const unsigned int child,
812 const unsigned int child,
856 const unsigned int face,
857 const bool face_orientation =
true,
858 const bool face_flip =
false,
859 const bool face_rotation =
false)
const override;
870 virtual Point<dim - 1>
880 virtual std::pair<Table<2, bool>, std::vector<unsigned int>>
929 const unsigned int subface,
947 virtual std::vector<std::pair<unsigned int, unsigned int>>
955 virtual std::vector<std::pair<unsigned int, unsigned int>>
963 virtual std::vector<std::pair<unsigned int, unsigned int>>
972 const unsigned int codim = 0) const override final;
992 const std::vector<
Vector<
double>> &support_point_values,
993 std::vector<
double> & dof_values) const override;
1007 virtual std::unique_ptr<
1011 const
Mapping<dim, spacedim> &mapping,
1013 ::
internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1015 &output_data) const override;
1017 virtual std::unique_ptr<
1021 const
Mapping<dim, spacedim> &mapping,
1023 ::
internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1025 &output_data) const override;
1027 virtual std::unique_ptr<
1031 const
Mapping<dim, spacedim> &mapping,
1033 ::
internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1035 &output_data) const override;
1039 const typename
Triangulation<dim, spacedim>::cell_iterator &cell,
1042 const
Mapping<dim, spacedim> & mapping,
1043 const typename
Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1044 const ::
internal::FEValuesImplementation::MappingRelatedData<dim,
1047 const typename
FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1048 ::
internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1050 &output_data) const override;
1054 const typename
Triangulation<dim, spacedim>::cell_iterator &cell,
1055 const
unsigned int face_no,
1057 const
Mapping<dim, spacedim> & mapping,
1058 const typename
Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1059 const ::
internal::FEValuesImplementation::MappingRelatedData<dim,
1062 const typename
FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1063 ::
internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1065 &output_data) const override;
1069 const typename
Triangulation<dim, spacedim>::cell_iterator &cell,
1070 const
unsigned int face_no,
1071 const
unsigned int sub_no,
1073 const
Mapping<dim, spacedim> & mapping,
1074 const typename
Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1075 const ::
internal::FEValuesImplementation::MappingRelatedData<dim,
1078 const typename
FiniteElement<dim, spacedim>::InternalDataBase &fe_internal,
1079 ::
internal::FEValuesImplementation::FiniteElementRelatedData<dim,
1081 &output_data) const override;
1093 template <
int dim_1>
1096 const
Mapping<dim, spacedim> & mapping,
1097 const typename
Triangulation<dim, spacedim>::cell_iterator &cell,
1098 const
unsigned int face_no,
1099 const
unsigned int sub_no,
1102 const typename
Mapping<dim, spacedim>::InternalDataBase &mapping_internal,
1103 const typename
FiniteElement<dim, spacedim>::InternalDataBase &fe_data,
1104 const
internal::FEValuesImplementation::MappingRelatedData<dim, spacedim>
1106 internal::FEValuesImplementation::FiniteElementRelatedData<dim, spacedim>
1107 &output_data) const;
1122 std::vector<std::pair<std::unique_ptr<const
FiniteElement<dim, spacedim>>,
1147 const std::vector<
unsigned int> &multiplicities);
1160 template <
int structdim>
1161 std::vector<std::pair<
unsigned int,
unsigned int>>
1191 const unsigned int base_no,
1199 get_fe_data(
const unsigned int base_no)
const;
1207 get_fe_output_object(
const unsigned int base_no)
const;
1220 typename std::vector<
1221 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>>
1232 mutable std::vector<
1250 namespace FESystemImplementation
1252 template <
int dim,
int spacedim>
1255 const std::initializer_list<
1259 return std::count_if(
1263 unsigned int> &fe_system) {
1264 return fe_system.second > 0;
1270 template <
int dim,
int spacedim>
1271 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
unsigned int>
1274 return std::make_pair(std::move(fe.
clone()), 1u);
1279 template <
int dim,
int spacedim>
1287 return std::forward<
1288 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
unsigned int>>(
1296 # if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
1301 template <
int dim,
int spacedim>
1302 template <
class... FEPairs,
typename>
1305 {internal::FESystemImplementation::promote_to_fe_pair<dim, spacedim>(
1306 std::forward<FEPairs>(fe_pairs))...})
1311 template <
int dim,
int spacedim>
1313 const std::initializer_list<
1323 , base_elements(
internal::FESystemImplementation::count_nonzeros(fe_systems))
1325 std::vector<const FiniteElement<dim, spacedim> *> fes;
1326 std::vector<unsigned int> multiplicities;
1329 [&fes, &multiplicities](
1330 const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1331 unsigned int> &fe_system) {
1332 fes.push_back(fe_system.first.get());
1333 multiplicities.push_back(fe_system.second);
1336 for (
const auto &p : fe_systems)
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
virtual Tensor< 3, dim > shape_3rd_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual const FiniteElement< dim, spacedim > & get_sub_fe(const unsigned int first_component, const unsigned int n_selected_components) const override
virtual Tensor< 4, dim > shape_4th_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const override
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const override
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double >> &support_point_values, std::vector< double > &dof_values) const override
void build_interface_constraints()
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
virtual Point< dim > unit_support_point(const unsigned int index) const override
FESystem(const FiniteElement< dim, spacedim > &fe, const unsigned int n_elements)
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
virtual std::size_t memory_consumption() const override
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 override
std::vector< std::vector< std::size_t > > generalized_support_points_index_table
constexpr ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const override
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 Point< dim - 1 > unit_face_support_point(const unsigned int index) const override
Abstract base class for mapping classes.
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 override
#define DEAL_II_NAMESPACE_OPEN
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
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 override
std::vector< std::pair< unsigned int, unsigned int > > hp_object_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const override
@ matrix
Contents is actually a matrix.
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const override
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const override
virtual bool hp_constraints_are_implemented() const override
virtual double shape_value(const unsigned int i, const Point< dim > &p) const override
virtual std::string get_name() const override
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const override
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
FESystem(FESystem< dim, spacedim > &&other_fe_system) noexcept
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
static const unsigned int invalid_unsigned_int
static const unsigned int invalid_face_number
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 override
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const override
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const override
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const override
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const override
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 typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
void initialize(const std::vector< const FiniteElement< dim, spacedim > * > &fes, const std::vector< unsigned int > &multiplicities)
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 typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
#define DEAL_II_NAMESPACE_CLOSE
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const override
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const override
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 typename FiniteElement< dim, spacedim >::InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const override
virtual ~FESystem() override=default
virtual FiniteElementDomination::Domination compare_for_domination(const FiniteElement< dim, spacedim > &fe_other, const unsigned int codim=0) const override final