ug4
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