A 1d negative elliptic differential operator \( -\partial_x ( \chi \partial_x ) \).
More...
|
| Elliptic1d ()=default |
| empty object ( no memory allocation) More...
|
|
| Elliptic1d (const Geometry &g, direction dir=forward, value_type jfactor=1.) |
| Construct from Grid. More...
|
|
| Elliptic1d (const Geometry &g, bc bcx, direction dir=forward, value_type jfactor=1.) |
| Construct from grid and boundary conditions. More...
|
|
template<class ... Params> |
void | construct (Params &&...ps) |
| Perfect forward parameters to one of the constructors. More...
|
|
template<class ContainerType0 > |
void | set_chi (const ContainerType0 &sigma) |
| Change scalar part Chi. More...
|
|
const Container & | weights () const |
| Return the weights making the operator self-adjoint. More...
|
|
const Container & | precond () const |
| Return the default preconditioner to use in conjugate gradient. More...
|
|
void | set_jfactor (value_type new_jfactor) |
| Set the currently used jfactor ( \( \alpha \)) More...
|
|
value_type | get_jfactor () const |
| Get the currently used jfactor ( \( \alpha \)) More...
|
|
template<class ContainerType0 , class ContainerType1 > |
void | operator() (const ContainerType0 &x, ContainerType1 &y) |
| Compute elliptic term and store in output. More...
|
|
template<class ContainerType0 , class ContainerType1 > |
void | symv (const ContainerType0 &x, ContainerType1 &y) |
| Compute elliptic term and store in output. More...
|
|
template<class ContainerType0 , class ContainerType1 > |
void | symv (value_type alpha, const ContainerType0 &x, value_type beta, ContainerType1 &y) |
| Compute elliptic term and add to output. More...
|
|
template<class Geometry, class Matrix, class Container>
class dg::Elliptic1d< Geometry, Matrix, Container >
A 1d negative elliptic differential operator \( -\partial_x ( \chi \partial_x ) \).
The term discretized is
\[ -\partial_x ( \chi \partial_x ) \]
where \( \partial_x \) is the one-dimensional derivative and \(\chi\) is a scalar function Per default, \( \chi = 1\) but you can set it to any value you like (in order for the operator to be invertible \(\chi\) should be strictly positive though).
- See also
- Our theory guide Introduction to dg methods on overleaf holds a detailed derivation
Note that the local discontinuous Galerkin discretization adds so-called jump terms
\[ D^\dagger \chi D + \alpha\chi_{on/off} J \]
where \(\alpha\) is a scale factor ( = jfactor), \( D \) contains the discretizations of the above derivatives, and \( J\) is a self-adjoint matrix. ( \(J\) is added before the volume element is divided). The adjoint of a matrix is defined with respect to the volume element including dG weights. Usually the default \( \alpha=1 \) is a good choice. However, in some cases, e.g. when \( \sigma \) exhibits very large variations \( \alpha=0.1\) or \( \alpha=0.01\) might be better values. In a time dependent problem the value of \(\alpha\) determines the numerical diffusion, i.e. for too low values numerical oscillations may appear. The \( \chi_{on/off} \) in the jump term serves to weight the jump term with \( \chi \). This can be switched either on or off with off being the default. Also note that a forward discretization has more diffusion than a centered discretization.
- Template Parameters
-
Geometry | A type that is or derives from one of the abstract geometry base classes ( aGeometry2d , aGeometry3d , aMPIGeometry2d , ...). Geometry determines which Matrix and Container types can be used: |
Matrix | A class for which the dg::blas2::symv functions are callable in connection with the Container class and to which the return type of dg::create::dx() can be converted using dg::blas2::transfer . The Matrix type can be one of:
|
Container | A data container class for which the blas1 functionality is overloaded and to which the return type of blas1::subroutine() can be converted using dg::assign . We assume that Container is copyable/assignable and has a swap member function. In connection with Geometry this is one of
|
- Note
- The constructors initialize \( \chi=1\) so that a negative laplacian operator results
-
The inverse of \( \chi\) makes a good general purpose preconditioner
- Attention
- Pay attention to the negative sign which is necessary to make the matrix positive definite