---
name: "characteristic"
section: "2rheolef"
platform: "linux"
package: "librheolef-dev"
version: "7.2-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/characteristic"
---

# characteristic(2rheolef)

Lagrange-Galerkin method (rheolef-7.2)

## NAME

characteristic - Lagrange-Galerkin method (rheolef-7.2)

## DESCRIPTION

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.

Note that the Lagrange-Galerkin method applies to diffusion-convection problems when the convection term is not dominant. For more serious problems, please refer to the discontinuous Galerkin method in the Rheolef library.

## 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)` for any x in Omega, 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 formula is recommended for the computation of integrals involving the characteristic `X` of the Lagrange-Galerkin method. The order equal to the polynomial order of `Xh` (order 1: trapeze, order 2: simpson, etc). Recall that this choice of quadrature formula guaranties inconditionnal stability at any polynomial order. Alternative quadrature formulae or order can be used by using the additional **integrate\_option(3)** argument to the **integrate(3)** function.

## IMPLEMENTATION

This documentation has been generated from file main/lib/characteristic.h

The `characteristic` class is simply an alias to the **characteristic\_basic class**

```
typedef characteristic_basic<Float> characteristic;
```

**The characteristic\_basic class provides an interface, via the smart\_pointer(7) class family, to a data container:**

```
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;
```

```
};
```

## AUTHOR

**Pierre  Saramito  \<Pierre.Saramito@imag.fr\>**

## COPYRIGHT

**Copyright   (C)  2000-2018  Pierre  Saramito  \<Pierre.Saramito@imag.fr\>** **GPLv3+: GNU GPL version 3 or later  \<http://gnu.org/licenses/gpl.html\>.** **This  is  free  software:  you  are free to change and redistribute it.** **There is NO WARRANTY, to the extent permitted by law.**
