Man pages sections > man2 > characteristic

# characteristic - the Lagrange-Galerkin method implemented

 characteristic(2rheolef) rheolef-6.7 characteristic(2rheolef)

## NAME

characteristic - the Lagrange-Galerkin method implemented

## SYNOPSYS

The class characteristic implements the Lagrange-Galerkin method:
It is the extension of the method of characteristic from the finite
difference to the finite element context.

## EXAMPLE

Consider the bilinear form lh defined by

```            /
|
lh(x) = | uh(x+dh(x)) v(x) dx
|
/ Omega

```
where dh is a deformation vector field.
The characteristic is defined by X(x)=x+dh(x)
and the previous integral writes equivalently:

```            /
|
lh(x) = | uh(X(x)) v(x) dx
|
/ Omega

```

For instance, in Lagrange-Galerkin methods,
the deformation field dh(x)=-dt*uh(x)
where uh is the advection field and dt a time step.
The following code implements the computation of lh:

```  field dh = ...;
field uh = ...;
characteristic X (dh);
test v (Xh);
field lh = integrate (compose(uh, X)*v, qopt);

```
The Gauss-Lobatto quadrature formule is recommended for
Lagrange-Galerkin methods.
The order equal to the polynomial order of Xh
(order 1: trapeze, order 2: simpson, etc).
Recall that this choice of quadrature formulae guaranties inconditional
stability at any polynomial order.
Alternative quadrature formulae or order can be used by using the

## IMPLEMENTATION

```template<class T, class M = rheo_default_memory_model>
class characteristic_basic : public smart_pointer<characteristic_rep<T,M> > {
public:
typedef characteristic_rep<T,M> rep;
typedef smart_pointer<rep>      base;

// allocator:

characteristic_basic(const field_basic<T,M>& dh);

// accesors:

const field_basic<T,M>& get_displacement() const;

get_pre_computed (
const space_basic<T,M>&       Xh,
const field_basic<T,M>&       dh,