Rodin/Variational/FiniteElement.h file

Base classes for finite element definitions.

This file defines the FiniteElementBase class, which provides the foundation for all finite element types. A finite element is characterized by the triple $ (K, P, \Sigma) $ defining its geometry, polynomial space, and DOFs.

Mathematical Foundation

A finite element is defined by:

  • $ K $ : Reference element geometry (interval, triangle, tetrahedron, etc.)
  • $ P $ : Polynomial space (e.g., $ \mathbb{P}_k $ , $ \mathbb{Q}_k $ )
  • $ \Sigma $ : Degrees of freedom (nodal values, moments, etc.)

Element Types

Common finite element families:

  • Lagrange: $ C^0 $ continuous, nodal DOFs at vertices/edges/faces
  • Hermite: $ C^1 $ continuous, includes derivative DOFs
  • Raviart-Thomas: $ H(\text{div}) $ conforming
  • Nédélec: $ H(\text{curl}) $ conforming
  • Discontinuous: $ L^2 $ elements for DG methods

Polynomial Spaces

  • $ \mathbb{P}_k $ : Complete polynomials of degree $ \leq k $
  • $ \mathbb{Q}_k $ : Tensor product polynomials of degree $ \leq k $ per direction
  • Serendipity: Subset of $ \mathbb{Q}_k $ with reduced DOFs

Reference Elements

Standard geometries:

  • 1D: Interval [0,1]
  • 2D: Triangle (vertices at (0,0), (1,0), (0,1)) or quadrilateral [0,1]²
  • 3D: Tetrahedron, hexahedron, prism, pyramid

Namespaces

namespace Rodin
The Rodin library for Shape and Topology Optimization.
namespace Rodin::Variational
Module which provides the necessary tools for constructing variational problems.

Classes

template<class Derived>
class Rodin::Variational::FiniteElementBase
Base class for finite elements.