12 #ifndef MFEM_FE_COLLECTION
13 #define MFEM_FE_COLLECTION
15 #include "../config/config.hpp"
29 template <Geometry::Type geom>
30 static inline void GetNVE(
int &nv,
int &ne);
32 template <Geometry::Type geom,
typename v_t>
33 static inline void GetEdge(
int &nv, v_t &v,
int &ne,
int &e,
int &eo,
37 typename v_t,
typename e_t,
typename eo_t>
38 static inline void GetFace(
int &nv, v_t &v,
int &ne, e_t &e, eo_t &eo,
61 virtual const char *
Name()
const {
return "Undefined"; }
177 {
return H1_dof[GeomType]; }
241 return L2_Elements[GeomType];
245 if (L2_Elements[GeomType])
247 return L2_Elements[GeomType]->
GetDof();
253 virtual const char *
Name()
const {
return d_name; }
260 return Tr_Elements[GeomType];
282 void InitFaces(
const int p,
const int dim,
const int map_type,
300 {
return RT_dof[GeomType]; }
350 {
return ND_dof[GeomType]; }
385 mutable char name[16];
397 QuadrilateralFE->
Reset();
398 ParallelepipedFE->
Reset();
417 virtual const char *
Name()
const {
return name; }
449 virtual const char *
Name()
const {
return "Linear"; }
477 virtual const char *
Name()
const {
return "Quadratic"; }
500 virtual const char *
Name()
const {
return "QuadraticPos"; }
519 : ParallelepipedFE(3), WedgeFE(3,
BasisType::ClosedUniform) { }
529 virtual const char *
Name()
const {
return "Cubic"; }
552 virtual const char *
Name()
const {
return "CrouzeixRaviart"; }
577 virtual const char *
Name()
const {
return "LinearNonConf3D"; }
602 virtual const char *
Name()
const {
return "RT0_2D"; }
626 virtual const char *
Name()
const {
return "RT1_2D"; }
650 virtual const char *
Name()
const {
return "RT2_2D"; }
674 virtual const char *
Name()
const {
return "Const2D"; }
699 virtual const char *
Name()
const {
return "LinearDiscont2D"; }
723 virtual const char *
Name()
const {
return "GaussLinearDiscont2D"; }
740 virtual const char *
Name()
const {
return "P1OnQuad"; }
764 virtual const char *
Name()
const {
return "QuadraticDiscont2D"; }
782 virtual const char *
Name()
const {
return "QuadraticPosDiscont2D"; }
805 virtual const char *
Name()
const {
return "GaussQuadraticDiscont2D"; }
829 virtual const char *
Name()
const {
return "CubicDiscont2D"; }
854 virtual const char *
Name()
const {
return "Const3D"; }
878 virtual const char *
Name()
const {
return "LinearDiscont3D"; }
902 virtual const char *
Name()
const {
return "QuadraticDiscont3D"; }
928 virtual const char *
Name()
const {
return "RefinedLinear"; }
952 virtual const char *
Name()
const {
return "ND1_3D"; }
976 virtual const char *
Name()
const {
return "RT0_3D"; }
999 virtual const char *
Name()
const {
return "RT1_3D"; }
1016 {
return (GeomType == _GeomType) ? Local_Element : NULL; }
1018 {
return (GeomType == _GeomType) ? Local_Element->
GetDof() : 0; }
1022 virtual const char *
Name()
const {
return d_name; }
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
Abstract class for all finite elements.
int GetOrder() const
Get the order of the NURBS collection: either a positive number, when using fixed order...
Normal component of vector field.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
A 2D 2nd order Raviart-Thomas vector element on a triangle.
Arbitrary order non-uniform rational B-splines (NURBS) finite elements.
Field is discontinuous across element interfaces.
virtual const char * Name() const
virtual const char * Name() const
virtual const char * Name() const
H1_Trace_FECollection(const int p, const int dim, const int btype=BasisType::GaussLobatto)
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
Arbitrary order L2 elements in 3D on a wedge.
Piecewise-cubic discontinuous finite elements in 2D. This class is kept only for backward compatibili...
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
Version of QuadraticDiscont2DFECollection with dofs in the Gaussian points.
int RT_dof[Geometry::NumGeom]
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
FiniteElement * ND_Elements[Geometry::NumGeom]
A 2D 1st order Raviart-Thomas vector element on a square.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
A 1D constant element on a segment.
A 1D linear element with nodes at 1/3 and 2/3 (trace of RT1)
A 1D quadratic element with nodes at the Gaussian points (trace of RT2)
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const char * Name() const
virtual FiniteElementCollection * GetTraceCollection() const
virtual const char * Name() const
GaussQuadraticDiscont2DFECollection()
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual ~NURBSFECollection()
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
RT_FECollection(const int p, const int dim, const int map_type, const bool signs, const int ob_type=BasisType::GaussLegendre)
A 3D 1st order Nedelec element on a tetrahedron.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const char * Name() const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
FiniteElementCollection * GetTraceCollection() const
virtual const char * Name() const
virtual int GetContType() const =0
Tangential components of vector field.
QuadraticDiscont3DFECollection()
A 2D 3rd order Raviart-Thomas vector element on a square.
virtual ~L2_FECollection()
LinearNonConf3DFECollection()
virtual const char * Name() const
virtual int GetContType() const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
RefinedLinearFECollection()
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const =0
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
Piecewise-(bi/tri)linear continuous finite elements.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
A 2D quadratic element on triangle with nodes at the vertices and midpoints of the triangle...
A 0D point finite element.
A 3D 0th order Raviert-Thomas element on a cube.
A 1D quadractic finite element with uniformly spaced nodes.
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const char * Name() const
virtual int GetContType() const
FiniteElementCollection * GetTraceCollection() const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
Second order Raviart-Thomas finite elements in 2D. This class is kept only for backward compatibility...
virtual int DofForGeometry(Geometry::Type GeomType) const
void InitFaces(const int p, const int dim, const int map_type, const bool signs)
FiniteElementCollection * GetTraceCollection() const
virtual const char * Name() const
A 3D constant element on a tetrahedron.
DG_Interface_FECollection(const int p, const int dim, const int map_type=FiniteElement::VALUE, const int ob_type=BasisType::GaussLegendre)
int HasFaceDofs(Geometry::Type GeomType) const
virtual const char * Name() const
A 3D Crouzeix-Raviart element on the tetrahedron.
A 2D bi-cubic element on a square with uniformly spaces nodes.
virtual const char * Name() const
Finite element collection on a macro-element.
virtual int GetContType() const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
A 2D refined bi-linear FE on a square.
Possible basis types. Note that not all elements can use all BasisType(s).
QuadraticPosDiscont2DFECollection()
NURBSFECollection(int Order=VariableOrder)
The parameter Order must be either a positive number, for fixed order, or VariableOrder (default)...
virtual int GetContType() const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual int GetContType() const
virtual int DofForGeometry(Geometry::Type GeomType) const =0
virtual const char * Name() const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual ~RT_FECollection()
L2_FECollection(const int p, const int dim, const int btype=BasisType::GaussLegendre, const int map_type=FiniteElement::VALUE)
virtual int GetContType() const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
Piecewise-(bi)cubic continuous finite elements.
Class for finite elements with basis functions that return scalar values.
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const char * Name() const
const int * GetDofMap(Geometry::Type GeomType) const
Get the Cartesian to local H1 dof map.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int GetContType() const
virtual int GetContType() const
virtual int GetContType() const
A 2D bi-linear element on a square with nodes at the "Gaussian" points.
A 1D refined linear element.
int H1_dof[Geometry::NumGeom]
A 2D refined linear element on a triangle.
A 2D refined linear element on a tetrahedron.
static void GetFace(int &nv, v_t &v, int &ne, e_t &e, eo_t &eo, int &nf, int &f, Geometry::Type &fg, int &fo, const int face_info)
FiniteElement * RT_Elements[Geometry::NumGeom]
virtual int GetContType() const
virtual int DofForGeometry(Geometry::Type GeomType) const
A 2D constant element on a triangle.
virtual int DofForGeometry(Geometry::Type _GeomType) const
static void GetNVE(int &nv, int &ne)
virtual int GetContType() const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
Piecewise-linear discontinuous finite elements in 2D. This class is kept only for backward compatibil...
H1_FECollection(const int p, const int dim=3, const int btype=BasisType::GaussLobatto)
ND_Trace_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Arbitrary order "H^{1/2}-conforming" trace finite elements defined on the interface between mesh elem...
virtual int GetContType() const
ND_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
A 3D refined tri-linear element on a cube.
Discontinuous collection defined locally by a given finite element.
Arbitrary order H(curl)-trace finite elements defined on the interface between mesh elements (faces...
CubicDiscont2DFECollection()
Version of QuadraticDiscont2DFECollection with positive basis functions.
virtual ~ND_FECollection()
A 3D quadratic element on a tetrahedron with uniformly spaced nodes.
QuadraticDiscont2DFECollection()
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int GetContType() const
Third order Raviart-Thomas finite elements in 2D. This class is kept only for backward compatibility...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
First order Raviart-Thomas finite elements in 3D. This class is kept only for backward compatibility...
virtual int DofForGeometry(Geometry::Type GeomType) const
void SubDofOrder(Geometry::Type Geom, int SDim, int Info, Array< int > &dofs) const
Get the local dofs for a given sub-manifold.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual int DofForGeometry(Geometry::Type GeomType) const
Version of QuadraticFECollection with positive basis functions.
virtual ~Local_FECollection()
virtual const char * Name() const
virtual const FiniteElement * TraceFiniteElementForGeometry(Geometry::Type GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual ~H1_FECollection()
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
Piecewise-constant discontinuous finite elements in 3D. This class is kept only for backward compatib...
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
LinearDiscont3DFECollection()
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
A 3D linear element on a tetrahedron with nodes at the vertices of the tetrahedron.
A 1D linear element with nodes on the endpoints.
virtual int GetContType() const
A 2D Crouzeix-Raviart finite element on square.
A 2D linear element on triangle with nodes at the vertices of the triangle.
LinearDiscont2DFECollection()
virtual int GetContType() const
A quadratic element on triangle with nodes at the "Gaussian" points.
virtual const char * Name() const
virtual const char * Name() const
FiniteElementCollection * GetTraceCollection() const
virtual int DofForGeometry(Geometry::Type GeomType) const
Piecewise-constant discontinuous finite elements in 2D. This class is kept only for backward compatib...
FiniteElement * H1_Elements[Geometry::NumGeom]
Piecewise-linear nonconforming finite elements in 3D.
Crouzeix-Raviart nonconforming elements in 2D.
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
L2_FECollection DG_FECollection
Declare an alternative name for L2_FECollection = DG_FECollection.
H1Pos_FECollection(const int p, const int dim=3)
virtual int DofForGeometry(Geometry::Type GeomType) const
static void GetEdge(int &nv, v_t &v, int &ne, int &e, int &eo, const int edge_info)
virtual const FiniteElement * TraceFiniteElementForGeometry(Geometry::Type GeomType) const
H1Ser_FECollection(const int p, const int dim=2)
A 2D 2nd order Raviart-Thomas vector element on a square.
virtual const char * Name() const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const =0
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
double p(const Vector &x, double t)
virtual const char * Name() const
virtual const char * Name() const
void SetOrder(int Order) const
Set the order and the name, based on the given Order: either a positive number for fixed order...
virtual const char * Name() const
virtual int DofForGeometry(Geometry::Type GeomType) const
A 3D 1st order Raviert-Thomas element on a cube.
virtual const char * Name() const
int GetDof() const
Returns the number of degrees of freedom in the finite element.
A 2D bi-quadratic element on a square with uniformly spaced nodes.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
A 3D tri-linear element on a cube with nodes at the vertices of the cube.
Collection of finite elements from the same family in multiple dimensions. This class is used to matc...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type _GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
Piecewise-quadratic discontinuous finite elements in 3D. This class is kept only for backward compati...
virtual int DofForGeometry(Geometry::Type GeomType) const
Field is continuous across element interfaces.
virtual int GetContType() const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
A 3D constant element on a cube.
virtual const char * Name() const
A 2D bi-linear element on a square with nodes at the vertices of the square.
virtual int DofForGeometry(Geometry::Type GeomType) const
Version of LinearDiscont2DFECollection with dofs in the Gaussian points.
virtual const char * Name() const
static FiniteElementCollection * New(const char *name)
Factory method: return a newly allocated FiniteElementCollection according to the given name...
A linear element on a triangle with nodes at the 3 "Gaussian" points.
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int GetContType() const
virtual int GetContType() const
Lowest order Nedelec finite elements in 3D. This class is kept only for backward compatibility, consider using the new ND_FECollection instead.
Arbitrary order H1-conforming (continuous) finite elements with positive basis functions.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const char * Name() const
GaussLinearDiscont2DFECollection()
virtual int GetContType() const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual int GetContType() const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
A 2D bi-quadratic element on a square with nodes at the 9 "Gaussian" points.
virtual const char * Name() const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
A 1D quadratic positive element utilizing the 2nd order Bernstein basis.
virtual int DofForGeometry(Geometry::Type GeomType) const
Piecewise-linear discontinuous finite elements in 3D. This class is kept only for backward compatibil...
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
virtual const char * Name() const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual int GetContType() const
virtual int GetContType() const
RT_Trace_FECollection(const int p, const int dim, const int map_type=FiniteElement::INTEGRAL, const int ob_type=BasisType::GaussLegendre)
virtual int GetContType() const
QuadraticPosFECollection()
Tensor products of 1D Lagrange1DFiniteElement (only degree 2 is functional)
virtual int DofForGeometry(Geometry::Type GeomType) const
Piecewise-(bi)quadratic continuous finite elements.
First order Raviart-Thomas finite elements in 2D. This class is kept only for backward compatibility...
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
A 2D constant element on a square.
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
Arbitrary order H(curl)-conforming Nedelec finite elements.
A 2D cubic element on a triangle with uniformly spaced nodes.
virtual int DofForGeometry(Geometry::Type GeomType) const
A 1D cubic element with uniformly spaced nodes.
virtual const char * Name() const
Arbitrary order "H^{-1/2}-conforming" face finite elements defined on the interface between mesh elem...
virtual int GetContType() const
A 2D 1st order Raviart-Thomas vector element on a triangle.
Arbitrary order H1-conforming (continuous) finite elements.
Second order Raviart-Thomas finite elements in 3D. This class is kept only for backward compatibility...
virtual const char * Name() const
A 2D linear element on a square with 3 nodes at the vertices of the lower left triangle.
virtual const char * Name() const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
CrouzeixRaviartFECollection()
virtual int GetContType() const
virtual int DofForGeometry(Geometry::Type GeomType) const
Piecewise-quadratic discontinuous finite elements in 2D. This class is kept only for backward compati...
Arbitrary order H1 elements in 3D on a wedge.
A 3D 0th order Raviert-Thomas element on a tetrahedron.
virtual int GetContType() const
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
A 2D 3rd order Raviart-Thomas vector element on a triangle.
Local_FECollection(const char *fe_name)
virtual int DofForGeometry(Geometry::Type GeomType) const
virtual const char * Name() const
Linear (P1) finite elements on quadrilaterals.
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i]...
An arbitrary order 3D NURBS element on a cube.
virtual int GetContType() const
An arbitrary order 1D NURBS element on a segment.
virtual int GetContType() const
virtual ~FiniteElementCollection()
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
virtual int GetContType() const
int ND_dof[Geometry::NumGeom]
An arbitrary order 2D NURBS element on a square.
A 3D 1st order Nedelec element on a cube.
virtual int GetContType() const
A 2D Crouzeix-Raviart element on triangle.
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const
Arbitrary order "L2-conforming" discontinuous finite elements.
double f(const Vector &p)
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const