15#ifndef dealii_fe_collection_h
16#define dealii_fe_collection_h
35 template <
int dim,
int spacedim>
36 class MappingCollection;
61 template <
int dim,
int spacedim = dim>
84 const unsigned int fe_index)
86 return ((fe_index + 1) < fe_collection.
size()) ? fe_index + 1 :
99 const unsigned int fe_index)
102 return (fe_index > 0) ? fe_index - 1 : fe_index;
127 template <
class... FETypes>
154 std::is_nothrow_move_constructible<
156 &&
std::is_nothrow_move_constructible<
std::function<
158 const
unsigned int)>>::value) = default;
344 std::vector<
std::map<
unsigned int,
unsigned int>>
351 std::vector<
std::map<
unsigned int,
unsigned int>>
358 std::vector<
std::map<
unsigned int,
unsigned int>>
360 const
unsigned int face_no = 0) const;
384 std::set<
unsigned int>
386 const
unsigned int codim = 0) const;
409 std::set<
unsigned int>
411 const
unsigned int codim = 0) const;
447 const
unsigned int codim = 0) const;
483 const
unsigned int codim = 0) const;
510 const
unsigned int codim = 0) const;
536 const
unsigned int codim = 0) const;
565 const
unsigned int)> &next,
566 const
std::function<
unsigned int(
568 const
unsigned int)> &
prev);
599 std::vector<
unsigned int>
880 template <
int dim,
int spacedim>
881 template <class... FETypes>
886 "Not all of the input arguments of this function "
887 "are derived from FiniteElement<dim, spacedim>!");
892 const auto fe_pointers = {
894 for (
const auto p : fe_pointers)
900 template <
int dim,
int spacedim>
919 template <
int dim,
int spacedim>
924 const unsigned int n_elements = this->
size();
925 if (n_elements != fe_collection.
size())
928 for (
unsigned int i = 0; i < n_elements; ++i)
929 if (!(this->
operator[](i) == fe_collection[i]))
937 template <
int dim,
int spacedim>
942 return !(*
this == fe_collection);
947 template <
int dim,
int spacedim>
953 unsigned int max = 0;
954 for (
unsigned int i = 0; i < this->
size(); ++i)
955 max =
std::max(max, this->
operator[](i).degree);
962 template <
int dim,
int spacedim>
968 unsigned int max = 0;
969 for (
unsigned int i = 0; i < this->
size(); ++i)
970 max =
std::max(max, this->
operator[](i).n_dofs_per_vertex());
977 template <
int dim,
int spacedim>
983 unsigned int max = 0;
984 for (
unsigned int i = 0; i < this->
size(); ++i)
985 max =
std::max(max, this->
operator[](i).n_dofs_per_line());
992 template <
int dim,
int spacedim>
998 unsigned int max = 0;
999 for (
unsigned int i = 0; i < this->
size(); ++i)
1000 max =
std::max(max, this->
operator[](i).max_dofs_per_quad());
1007 template <
int dim,
int spacedim>
1013 unsigned int max = 0;
1014 for (
unsigned int i = 0; i < this->
size(); ++i)
1015 max =
std::max(max, this->
operator[](i).n_dofs_per_hex());
1022 template <
int dim,
int spacedim>
1028 unsigned int max = 0;
1029 for (
unsigned int i = 0; i < this->
size(); ++i)
1030 max =
std::max(max, this->
operator[](i).max_dofs_per_face());
1037 template <
int dim,
int spacedim>
1043 unsigned int max = 0;
1044 for (
unsigned int i = 0; i < this->
size(); ++i)
1045 max =
std::max(max, this->
operator[](i).n_dofs_per_cell());
1051 template <
int dim,
int spacedim>
1057 for (
unsigned int i = 0; i < this->
size(); ++i)
1058 if (this->
operator[](i).hp_constraints_are_implemented() ==
false)
unsigned int size() const
const T & operator[](const unsigned int index) const
std::vector< std::map< unsigned int, unsigned int > > hp_vertex_dof_identities(const std::set< unsigned int > &fes) const
unsigned int previous_in_hierarchy(const unsigned int fe_index) const
unsigned int max_dofs_per_line() const
unsigned int max_dofs_per_hex() const
std::vector< unsigned int > get_hierarchy_sequence(const unsigned int fe_index=0) const
unsigned int max_dofs_per_vertex() const
unsigned int find_dominating_fe_extended(const std::set< unsigned int > &fes, const unsigned int codim=0) const
bool hp_constraints_are_implemented() const
bool operator==(const FECollection< dim, spacedim > &fe_collection) const
std::function< unsigned int(const typename hp::FECollection< dim, spacedim > &, const unsigned int)> hierarchy_next
const MappingCollection< dim, spacedim > & get_reference_cell_default_linear_mapping() const
std::set< unsigned int > find_common_fes(const std::set< unsigned int > &fes, const unsigned int codim=0) const
FECollection(const FETypes &...fes)
void push_back(const FiniteElement< dim, spacedim > &new_fe)
unsigned int next_in_hierarchy(const unsigned int fe_index) const
void set_default_hierarchy()
std::shared_ptr< MappingCollection< dim, spacedim > > reference_cell_default_linear_mapping
unsigned int max_degree() const
unsigned int find_dominating_fe(const std::set< unsigned int > &fes, const unsigned int codim=0) const
std::set< unsigned int > find_enclosing_fes(const std::set< unsigned int > &fes, const unsigned int codim=0) const
unsigned int find_dominated_fe(const std::set< unsigned int > &fes, const unsigned int codim=0) const
unsigned int max_dofs_per_face() const
ComponentMask component_mask(const FEValuesExtractors::Scalar &scalar) const
bool operator!=(const FECollection< dim, spacedim > &fe_collection) const
std::vector< std::map< unsigned int, unsigned int > > hp_line_dof_identities(const std::set< unsigned int > &fes) const
void set_hierarchy(const std::function< unsigned int(const typename hp::FECollection< dim, spacedim > &, const unsigned int)> &next, const std::function< unsigned int(const typename hp::FECollection< dim, spacedim > &, const unsigned int)> &prev)
FECollection(FECollection< dim, spacedim > &&) noexcept(std::is_nothrow_move_constructible< std::vector< std::shared_ptr< const FiniteElement< dim, spacedim > > > >::value &&std::is_nothrow_move_constructible< std::function< unsigned int(const typename hp::FECollection< dim, spacedim > &, const unsigned int)> >::value)=default
unsigned int max_dofs_per_quad() const
unsigned int find_dominated_fe_extended(const std::set< unsigned int > &fes, const unsigned int codim=0) const
std::function< unsigned int(const typename hp::FECollection< dim, spacedim > &, const unsigned int)> hierarchy_prev
unsigned int n_blocks() const
FECollection(const FECollection< dim, spacedim > &)=default
unsigned int n_components() const
std::vector< std::map< unsigned int, unsigned int > > hp_quad_dof_identities(const std::set< unsigned int > &fes, const unsigned int face_no=0) const
unsigned int max_dofs_per_cell() const
BlockMask block_mask(const FEValuesExtractors::Scalar &scalar) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DeclException0(Exception0)
#define Assert(cond, exc)
static ::ExceptionBase & ExcNoFiniteElements()
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
static unsigned int next_index(const typename hp::FECollection< dim, spacedim > &fe_collection, const unsigned int fe_index)
static unsigned int previous_index(const typename hp::FECollection< dim, spacedim > &fe_collection, const unsigned int fe_index)
void prev(std::tuple< I1, I2 > &t)