20 #ifndef LIBMESH_FE_TYPE_H 21 #define LIBMESH_FE_TYPE_H 24 #include "libmesh/compare_types.h" 25 #include "libmesh/libmesh_config.h" 26 #include "libmesh/enum_order.h" 27 #include "libmesh/enum_fe_family.h" 28 #include "libmesh/enum_inf_map_type.h" 29 #include "libmesh/hashing.h" 121 #define OrderWrapperOperators(comparisontype) \ 122 inline bool operator==(comparisontype lhs, Order rhs) \ 123 { return lhs == static_cast<comparisontype>(rhs); } \ 124 inline bool operator==(Order lhs, comparisontype rhs) \ 125 { return static_cast<comparisontype>(lhs) == rhs; } \ 126 inline bool operator!=(comparisontype lhs, Order rhs) \ 127 { return !(lhs == rhs); } \ 128 inline bool operator!=(Order lhs, comparisontype rhs) \ 129 { return !(lhs == rhs); } \ 130 inline bool operator< (comparisontype lhs, Order rhs) \ 131 { return lhs < static_cast<comparisontype>(rhs); } \ 132 inline bool operator< (Order lhs, comparisontype rhs) \ 133 { return static_cast<comparisontype>(lhs) < rhs; } \ 134 inline bool operator> (comparisontype lhs, Order rhs) \ 135 { return rhs < lhs; } \ 136 inline bool operator> (Order lhs, comparisontype rhs) \ 137 { return rhs < lhs; } \ 138 inline bool operator<=(comparisontype lhs, Order rhs) \ 139 { return !(lhs > rhs); } \ 140 inline bool operator<=(Order lhs, comparisontype rhs) \ 141 { return !(lhs > rhs); } \ 142 inline bool operator>=(comparisontype lhs, Order rhs) \ 143 { return !(lhs < rhs); } \ 144 inline bool operator>=(Order lhs, comparisontype rhs) \ 145 { return !(lhs < rhs); } 149 #if LIBMESH_SIZEOF_SIZE_T != LIBMESH_SIZEOF_UNSIGNED_INT 200 #ifndef LIBMESH_ENABLE_INFINITE_ELEMENTS 236 const int ro =
THIRD,
277 #endif // ifndef LIBMESH_ENABLE_INFINITE_ELEMENTS 286 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
299 return !(*
this == f2);
312 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 319 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 340 const int extraorder=0)
const;
359 const int extraorder=0)
const;
391 std::size_t seed = 0;
400 #endif // LIBMESH_FE_TYPE_H class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
FEFamily family
The type of finite element.
bool operator==(const FEType &f2) const
Tests equality.
OrderWrapper(int order)
Constructor.
Order
defines an enum for polynomial orders.
OrderWrapperOperators(int) OrderWrapperOperators(unsigned int) OrderWrapperOperators(std
Order unweighted_quadrature_order() const
void hash_combine(std::size_t &seed, const T &value)
bool operator<(const OrderWrapper &lhs, const OrderWrapper &rhs)
OrderWrapper radial_order
The approximation order in radial direction of the infinite element.
std::ostream & operator<<(std::ostream &os, const OrderWrapper &order)
Overload stream operators.
Order default_quadrature_order() const
OrderWrapper order
The approximation order of the element.
bool operator>=(const OrderWrapper &lhs, const OrderWrapper &rhs)
The libMesh namespace provides an interface to certain functionality in the library.
bool operator!=(const OrderWrapper &lhs, const OrderWrapper &rhs)
bool operator<=(const OrderWrapper &lhs, const OrderWrapper &rhs)
bool operator!=(const FEType &f2) const
Tests inequality.
std::unique_ptr< QBase > default_quadrature_rule(const unsigned int dim, const int extraorder=0) const
int _order
The approximation order of the element.
bool operator>(const OrderWrapper &lhs, const OrderWrapper &rhs)
FEType(const int o=1, const FEFamily f=LAGRANGE)
Constructor.
This provides a shim class that wraps the Order enum.
OrderWrapper & operator+=(T p)
InfMapType inf_map
The coordinate mapping type of the infinite element.
bool operator==(const OrderWrapper &lhs, const OrderWrapper &rhs)
Overload comparison operators for OrderWrapper.
bool operator<(const FEType &f2) const
An ordering to make FEType useful as a std::map key.
FEFamily radial_family
The type of approximation in radial direction.
OrderWrapper & operator-=(T p)
int get_order() const
Explicitly request the order as an int.
std::unique_ptr< QBase > unweighted_quadrature_rule(const unsigned int dim, const int extraorder=0) const
InfMapType
defines an enum for the types of coordinate mappings available in infinite elements.
std::size_t operator()(const libMesh::FEType &fe_type) const
FEFamily
defines an enum for finite element families.
FEType(const int o=1, const FEFamily f=LAGRANGE, const int ro=THIRD, const FEFamily rf=JACOBI_20_00, const InfMapType im=CARTESIAN)
Constructor.
OrderWrapper(Order order)
Constructor.
void ErrorVector unsigned int