We now turn to the next crucial mathematical ingredient: the function space, whose definition depends on — or more precisely its partitioning
— and the choice of basis function. Function spaces in follow the same definition, see listing~fspace1}, and provides support for continuous and discontinuous Galerkin methods and in particular approximations in
,
-conforming and
-nonconforming,
,
and
{At the time of writing,
,
and
approximations are in experimental support.}.
The FunctionSpace
class
We introduce the following spaces
where and
are respectively the Raviart-Thomas and N\'ed\'elec finite elements of degree
.
The Legrendre and Dubiner basis yield implicitely discontinuous approximations, the Legendre and Dubiner boundary adapted basis, see~[8], were designed to handle continuous approximations whereas the Lagrange basis can yield either discontinuous or continuous (default behavior) approximations. and
are implicitely spaces of vectorial functions
. As to the other basis functions, Lagrange, Legrendre, Dubiner, , they are parametrized by their values namely
Scalar
, Vectorial
or Matricial
. Note that FunctionSpace
handles also products of function spaces. This is very powerful to describe complex multiphysics problems when coupled with operators, functionals and forms described in the next section. Extracting subspaces or component spaces are part of the interface.
The most important feature in FunctionSpace
is that it embeds the definition of element which allows for the strict definition of an Element
of a FunctionSpace
and thus ensures the correctness of the code. An element has its representation as a vector — also in the case of product of multiple spaces. — The vector representation is parametrized by one of the linear algebra backends. Other supported operations are interpolation and extraction of components — be it a product of function spaces element or a vectorial/matricial element:
Finally Feel++ provides the Lagrange, , Crouzeix-Raviart,
, Raviart-Thomas,
and N\'ed\'elec,
global interpolation operators. In abstract form, they read
where is the infinite dimensional space,
are the linear forms and
the basis function associated with the various approximations.
Pch<N>(mesh)
generates Pchv<N>(mesh)
generates THch<N>(mesh)
generates