Patate Lib  0.5
Vitelotte::FVElementBuilder< _Mesh, _Scalar > Class Template Reference

## Detailed Description

### template<class _Mesh, typename _Scalar = typename _Mesh::Scalar> class Vitelotte::FVElementBuilder< _Mesh, _Scalar >

Fraeijs de Veubeke's (FV) element builder, for harmonic interpolation with quadratic triangles output.

Use this element builder to solve biharmonic diffusion and get an image with quadratic interpolation.

FV elements have 6 value nodes, 3 at each vertex (v) and 3 at edge midpoints (e), plus 3 gradient nodes corresponding to the mean value of the first (outward) normal derivative along each edge (g). There are the basis functions:

\begin{eqnarray*} v_0 &=& \lambda_{0} \left(\lambda_{0} - \frac{1}{2}\right) \left(\lambda_{0} + 1\right) + 3 \lambda_{0} \lambda_{1} \lambda_{2} + \left( \frac{d \lambda_{0}}{d \boldsymbol{n}_{1}} + \frac{1}{2} \frac{d \lambda_{1}}{d \boldsymbol{n}_{1}} \right) g_1 + \left( \frac{d \lambda_{0}}{d \boldsymbol{n}_{2}} + \frac{1}{2} \frac{d \lambda_{2}}{d \boldsymbol{n}_{2}} \right) g_2 \\ e_0 &=& 4 \lambda_{0} \left(- 2 \lambda_{0} + 1\right) \left(- \lambda_{0} + 1\right) + 4 \lambda_{1} \lambda_{2} - 12 \lambda_{0} \lambda_{1} \lambda_{2}\\ g_0 &=& - \frac{2 \Delta}{l_{0}} \lambda_{0} \left(\lambda_{0} - 1\right) \left(2 \lambda_{0} - 1\right)\\ \end{eqnarray*}

where $$\lambda_i$$ is the barycentric coordinate for the vertex $$i$$, $$\Delta$$ is the area of the triangle, $$l_i$$ is the length of the edge $$i$$ opposed to the vertex $$i$$ and $$\boldsymbol{n}_i$$ is the (clockwise, normalized) normal of the edge $$i$$. The others basis functions can be obtained by cyclic permutation of the indices.

## Public Types

typedef _Scalar Scalar

typedef _Mesh Mesh

typedef ElementBuilderBase
< _Mesh, _Scalar >
Base

typedef Base::Vector Vector

typedef Base::Matrix Matrix

typedef Base::Triplet Triplet

typedef Base::Face Face

Public Types inherited from Vitelotte::ElementBuilderBase< _Mesh, _Scalar >
typedef _Scalar Scalar

typedef _Mesh Mesh

typedef Eigen::Matrix< Scalar,
Mesh::DimsAtCompileTime, 1 >
Vector

typedef Eigen::Matrix< Scalar,
Eigen::Dynamic, Eigen::Dynamic >
Matrix

typedef Eigen::Triplet< Scalar > Triplet

typedef Mesh::Face Face

## Public Member Functions

FVElementBuilder (Scalar sigma=Scalar(.5))

unsigned nCoefficients (const Mesh &mesh, Face element, SolverError *error=0) const

unsigned nExtraConstraints (const Mesh &mesh, Face element) const

template<typename Inserter >
void addCoefficients (Inserter &inserter, const Mesh &mesh, Face element, SolverError *error=0)

template<typename Inserter >
void addExtraConstraints (Inserter &inserter, const Mesh &mesh, Face element, SolverError *error)

Public Member Functions inherited from Vitelotte::ElementBuilderBase< _Mesh, _Scalar >
unsigned nExtraConstraints (const Mesh &, Face) const

template<typename Inserter >
void addExtraConstraints (Inserter &, const Mesh &, Face, SolverError *)

## Protected Types

typedef Eigen::Matrix< Scalar, 3, 1 > Vector3

typedef Eigen::Matrix< Scalar, 6, 1 > Vector6

typedef Mesh::Halfedge Halfedge

typedef std::map< unsigned,
Halfedge >
PGCMap