Rheolef
7.2
an efficient C++ finite element environment
|
The class constructor takes a string that characterizes the finite element method, e.g. "P0"
, "P1"
or "P2"
. The letters characterize the finite element family and the number is the polynomial degree in this family. The finite element also depends upon the reference element, e.g. triangle, square, tetrahedron, etc. See reference_element
for more details. For instance, on the square reference element, the "P1"
string designates the common Q1
four-nodes finite element.
Pk
The classical Lagrange finite element family, where
k
is any polynomial degree greater or equal to 1.
Pkd
The discontinuous Galerkin finite element family, where
k
is any polynomial degree greater or equal to 0. For convenience,P0d
could also be written asP0
.
bubble
The product of baycentric coordinates. Only simplicial elements are supported:
edge
,triangle
andtetrahedron
.
RTk
RTkd
The vector-valued Raviart-Thomas family, where
k
is any polynomial degree greater or equal to 0. TheRTkd
piecewise discontinuous version is fully implemented for thetriangle
. ItsRTk
continuous counterpart is still under development.
Bk
The Bernstein finite element family, where
k
is any polynomial degree greater or equal to 1. Thisbasis
was initially introduced by Bernstein (Comm. Soc. Math. Kharkov, 2th series, 1912) and more recently used in the context of finite elements. This feature is still under development.
Sk
The spectral finite element family, as proposed by Sherwin and Karniadakis (Oxford University Press, 2nd ed., 2005). Here,
k
is any polynomial degree greater or equal to 1. This feature is still under development.
Some finite element families could support either continuous or discontinuous junction at inter-element boundaries. For instance, the Pk
Lagrange finite element family, with k >= 1, has a continuous interelements junction: it defines a piecewise polynomial and globally continuous finite element functional space
. Conversely, the Pkd
Lagrange finite element family, with k >= 0, has a discontinuous interelements junction: it defines a piecewise polynomial and globally discontinuous finite element functional space
.
The basis
class supports some options associated to each finite element method. These options are appended to the string bewteen square braces, and are separated by a coma, e.g. "P5[feteke,bernstein]"
. See basis
for some examples.
equispaced
Nodes are equispaced. This is the default.
fekete
Node are non-equispaced: for high-order polynomial degree, e.g. greater or equal to 3, their placement is fully optimized, as proposed by Taylor, Wingate and Vincent, 2000, SIAM J. Numer. Anal. With this choice, the interpolation error is dramatically decreased for high order polynomials. This feature is still restricted to the triangle reference element and to polynomial degree lower or equal to 19. Otherwise, it fall back to the following
warburton
node set.
warburton
Node are non-equispaced: for high-order polynomial degree, e.g. greater or equal to 3, their placement is optimized thought an heuristic solution, as proposed by Warburton, 2006, J. Eng. Math. With this choice, the interpolation error is dramatically decreased for high order polynomials. This feature applies to any reference element and polynomial degree.
The raw (or initial) polynomial basis is used for building the dual basis, associated to degrees of freedom, via the Vandermonde matrix and its inverse. Changing the raw basis do not change the definition of the FEM basis, but only the way it is constructed. There are three possible raw basis:
monomial
The monomial basis is the simplest choice. While it is suitable for low polynomial degree (less than five), for higher polynomial degree, the Vandermonde matrix becomes ill-conditioned and its inverse leads to errors in double precision.
dubiner
The Dubiner basis (see Dubiner, 1991 J. Sci. Comput.) leads to much better condition number. This is the default.
bernstein
The Bernstein basis could also be an alternative raw basis.
The basis
class defines member functions that evaluates all the polynomial basis functions of a finite element and their derivatives at a point or a set of point.
The basis polynomial functions are evaluated by the evaluate
member function. This member function is called during the assembly process of the integrate
function.
The interpolation nodes used by the interpolate
function are available by the member function hat_node
. Conversely, the member function compute_dofs
compute the degrees of freedom.
This documentation has been generated from file fem/lib/basis.h
The basis
class is simply an alias to the basis_basic
class
The basis_basic
class provides an interface to a data container: