16#ifndef dealii_fe_collection_h
17#define dealii_fe_collection_h
52 template <
int dim,
int spacedim = dim>
75 const unsigned int fe_index)
77 return ((fe_index + 1) < fe_collection.
size()) ? fe_index + 1 :
90 const unsigned int fe_index)
93 return (fe_index > 0) ? fe_index - 1 : fe_index;
118 template <
class... FETypes>
145 std::is_nothrow_move_constructible<
147 &&
std::is_nothrow_move_constructible<
std::function<
149 const
unsigned int)>>::value) = default;
307 const
unsigned int codim = 0) const;
332 const
unsigned int codim = 0) const;
368 const
unsigned int codim = 0) const;
404 const
unsigned int codim = 0) const;
431 const
unsigned int codim = 0) const;
457 const
unsigned int codim = 0) const;
474 const
unsigned int)> &next,
475 const
std::function<
unsigned int(
477 const
unsigned int)> &prev);
508 std::vector<
unsigned int>
766 template <
int dim,
int spacedim>
767 template <class... FETypes>
772 "Not all of the input arguments of this function "
773 "are derived from FiniteElement<dim,spacedim>!");
778 const auto fe_pointers = {
780 for (
const auto p : fe_pointers)
786 template <
int dim,
int spacedim>
805 template <
int dim,
int spacedim>
810 const unsigned int n_elements = this->
size();
811 if (n_elements != fe_collection.
size())
814 for (
unsigned int i = 0; i < n_elements; ++i)
815 if (!(this->
operator[](i) == fe_collection[i]))
823 template <
int dim,
int spacedim>
828 return !(*
this == fe_collection);
833 template <
int dim,
int spacedim>
839 unsigned int max = 0;
840 for (
unsigned int i = 0; i < this->
size(); ++i)
848 template <
int dim,
int spacedim>
854 unsigned int max = 0;
855 for (
unsigned int i = 0; i < this->
size(); ++i)
863 template <
int dim,
int spacedim>
869 unsigned int max = 0;
870 for (
unsigned int i = 0; i < this->
size(); ++i)
878 template <
int dim,
int spacedim>
884 unsigned int max = 0;
885 for (
unsigned int i = 0; i < this->
size(); ++i)
893 template <
int dim,
int spacedim>
899 unsigned int max = 0;
900 for (
unsigned int i = 0; i < this->
size(); ++i)
908 template <
int dim,
int spacedim>
914 unsigned int max = 0;
915 for (
unsigned int i = 0; i < this->
size(); ++i)
923 template <
int dim,
int spacedim>
929 unsigned int max = 0;
930 for (
unsigned int i = 0; i < this->
size(); ++i)
937 template <
int dim,
int spacedim>
943 for (
unsigned int i = 0; i < this->
size(); ++i)
944 if (this->
operator[](i).hp_constraints_are_implemented() ==
false)
unsigned int n_components() const
unsigned int size() const
const FiniteElement< dim, dim > & operator[](const unsigned int index) 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
std::set< unsigned int > find_common_fes(const std::set< unsigned int > &fes, const unsigned int codim=0) const
void push_back(const FiniteElement< dim, spacedim > &new_fe)
unsigned int next_in_hierarchy(const unsigned int fe_index) const
void set_default_hierarchy()
FECollection(const FETypes &... fes)
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
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
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
__global__ void set(Number *val, const Number s, const size_type N)
#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)