Loading [MathJax]/extensions/TeX/AMSmath.js
ug4
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Assembling Concept

libDiscretization provides two interface types to facilitate the implementation and reusability of discretization. These concepts are described in the following. This is done in three steps.

First, a general describtion of the PDE problems is given.

Then, a categorization of the different problems is presented together with the needs of the implementation. These needs give rise to a first Interface class.

In a third step an even finer splitting of the problem is described. This splitting suggests a second interface class. One implementation of the first Interface class will use this finer grained splitting.


For any questions, contact andre.nosp@m.as.v.nosp@m.ogel@.nosp@m.gcsc.nosp@m..uni-.nosp@m.fran.nosp@m.kfurt.nosp@m..de .


General Problem Description

This section explains what kind of partial differential equations (PDE) can be discretized using libDiscretization.

The starting point for any discretization is a physical domain, \Omega \subset \mathbb{R}^d . In Ug currently 1d, 2, and 3d domains are supported. Furthermore, for time dependent problems one has a finite time interval I := [t_{start}, t_{end}] where the solution is searched.

The PDE model the behaviour of a set of n functions on the domain:

\begin{align*} u_i : \Omega \times I &\mapsto \mathbb{R}\\ (\vec{x}, t) &\mapsto u_i(\vec{x}, t). \end{align*}

The support for each function may not be the whole domain, but be only a subset of the given domain. This case will be documented (hopefully) soon ....

To simplify notations, one can group all functions to one single function

\begin{align*} \vec{u}(\vec{x},t) := \begin{pmatrix} u_1(\vec{x}, t) \\ \vdots \\ u_n(\vec{x}, t) \end{pmatrix}. \end{align*}

Now, a sytem of PDEs for the unknown functions is given by

\begin{align*} \mathcal{M}(\vec{u}) + \mathcal{A}(\vec{u}) &= f, &x\in\Omega,\\ \mathcal{B}(\vec{u}) &= 0, &x\in\partial \Omega. \end{align*}

Here, we have the following notation:

\begin{align*} f(\vec{x}, t) &\text{ is a given right - hand side independent of } \vec{u},\\ \mathcal{M} &\text{ is a time-dependent operator acting on } \vec{u},\\ \mathcal{A} &\text{ is a time-independent operator acting in } \vec{u},\\ \mathcal{B} &\text{ are boundary conditions for } \vec{u}. \end{align*}

Note, that this gives a well-defined separation of the problem. Usually, the term \mathcal{M} is called Mass-part while \mathcal{A} is called Stiffness-part (for historic reasons). Some examples:

  • Convection-Diffusion-Reaction Equation

    \begin{align*} \partial_t c - \nabla \left( D \nabla c - \vec{v} c \right) + r(c) &= f, &\text{ in } \Omega,\\ c &= g, &\text{ on } \partial\Omega_D,\\ \frac{\partial c}{\partial \vec{n}} &= h &\text{ on } \partial\Omega_N, \end{align*}

    with the notation

    • c(\vec{x},t) is an unknown concentration,
    • D(\vec{x},t) is the diffusion tensor,
    • v(\vec{x},t) is the convective velocity,
    • r(c, \vec{x},t) is the reaction term,
    • f(\vec{x},t) is a source term independent of \vec{c}.

    Interpreting this problem in the above terms one finds:

    • \vec{u} = c,
    • \mathcal{M}(c) := \partial_t c ,
    • \mathcal{A}(c) := - \nabla \left( D \nabla c - \vec{v} c \right) + r(c),
    • f = f ,
    • \mathcal{B}(c) := \begin{cases} c(\vec{x}, t) - g(\vec{x}, t), &x \in \partial\Omega_D,\\ \frac{\partial c}{\partial \vec{n}} - h(\vec{x}, t) &x \in \partial\Omega_N. \end{cases}.

    For the stationary problem (i.e. time-independent), one finds \partial_t c = 0 and omits the dependency of t in for all functions. This problem can be written as above, with \mathcal{M}(c) = 0 .

  • Density-Driven Flow [... to be added ...]

libDiscretization uses this splitting of the problem into different operators to implement the problem in a modular way. This is described in Categorization of Problems