Reference documentation for deal.II version 9.1.1

The members of this submodule describe the implementation mechanics of finite element classes, without actually implementing a concrete element. For example, the FiniteElement base class declares the virtual functions a derived class has to implement if it wants to describe a finite element space. Likewise, the FiniteElementData holds variables that describe certain values characterizing a finite element, such as the number of degrees of freedom per vertex, line, or face.
On the other hand, classes like FE_Poly and FE_PolyTensor are higher abstractions. They describe finite elements that are built atop polynomial descriptions of the shape functions on the unit cell. Classes derived from them then only have to provide a description of the particular polynomial from which a finite element is built. For example, the FE_Q class that implements the usual Lagrange elements uses the FE_Poly base class to generate a finite element by providing it with a set of Lagrange interpolation polynomials corresponding to an equidistant subdivision of interpolation points.
Finally, the FESystem class is used for vectorvalued problems. There, one may want to couple a number of scalar (or also vectorvalued) base elements together to form the joint finite element of a vectorvalued operator. As an example, for 3d NavierStokes flow, one may want to use three Q1 elements for the three components of the velocity, and a piecewise constant Q0 element for the pressure. The FESystem class can be used to couple these four base elements together into a single, vectorvalued element with 4 vector components. The step8, step17, and step18 tutorial programs give an introduction into the use of this class in the context of the vectorvalued elasticity (Lamé) equations. step20 discusses a mixed Laplace discretization that also uses vectorvalued elements.