Skip to content

Advection problem with artificial diffusion #214

@spossann

Description

@spossann

We aim to discretize the following advection problem:

$$ \partial_t u + a(t, x) \cdot \nabla u = 0. $$

with $\nabla \cdot a(t, x) = 0$. For stabilization we will use artificial diffusion and change the problem to

$$ \partial_t u + a(t, x) \cdot \nabla u - \nabla \cdot (\sigma \nabla u) = 0, $$

where the matrix $\sigma$ has to be chosen carefully. For example, in SUPG (Streamline Upwind Petrov-Galerkin) methods:

$$ \sigma = \tau \ a a^\top, \qquad \tau \sim \frac{h}{2|a|}, $$

where $\tau$ is a stabilization parameter that can be tuned, and $h$ is the grid parameter in the direction of advection.

We formulate weakly: find $u \in H^1$ such that

$$ \int_\Omega \partial_t u v \ dx + \int_\Omega a(t, x) \cdot \nabla u \ v \ dx + \int_\Omega \nabla u \ \sigma \nabla v \ dx = 0 \qquad \forall v \in H^1. $$

Discretize in space with FEEC:

$$ u(t, x) \in H^1 \quad \approx \quad u_h(t, x) = \sum_{i=0}^{N_0-1} u_i(t) \Lambda^0_i(x) \quad \in V_0 \subset H^1 $$

ans similar for $v \in H^1$. The dimension of the space $V_0$ is $N_0$. For the derivative we have

$$ \nabla u_h(t, x) = \sum_{i=0}^{N_1-1} (\mathbb C \mathbf u(t))_i \Lambda^1_i (x) \quad \in V_1 \subset H(curl), $$

where $\mathbf u(t) = (u_i(t))_i \in \mathbb R^{N_0}$, $\mathbb C: \mathbb R^{N_0} \to \mathbb R^{N_1}$ is the gradient matrix (containing only 0 and 1), and $\Lambda^1(x)$ are the basis functions spanning the space $V_1$ of dimension $N_1$. For more details on the Derham sequence see https://struphy-hub.github.io/struphy/sections/subsections/numerics-geomFE.html

Additionally, we shall need the mass matrices

$$ \mathbb M^0_{ij} = \int_\Omega \Lambda^0_i(x) \Lambda^0_j(x) \ dx , \qquad \mathbb M^{1,\sigma}_{ij} = \int_\Omega \Lambda^1_i(x) \ \sigma \ \Lambda^1_j(x) \ dx $$

The space-discrete problem thus reads

$$ \int_\Omega \partial_t u_h v_h \ dx + \int_\Omega a(t, x) \cdot \nabla u_h \ v_h \ dx + \int_\Omega \nabla u_h \ \sigma \nabla v_h \ dx = 0 \qquad \forall v_h \in V_0. $$

The diffusion part of the equation is straight forward, by inserting the above definitions:

$$ \begin{aligned} \int_\Omega \partial_t u_h v_h \ dx \quad &\to \quad \dot{\mathbf u}^\top \mathbb M^0 \mathbf v \\ \int_\Omega \nabla u_h \ \sigma \nabla v_h \ dx \quad &\to \quad \mathbf u^\top \mathbb C^\top \mathbb M^{1,\sigma} \mathbb C \mathbf v \end{aligned} $$

We now have to decide on the projection used in the advection term. To clearly see the problem, let us rewrite it:

$$ \int_\Omega a(t, x) \cdot \nabla u_h \ v_h \ dx = \int_\Omega f \ v_h \ dx \qquad \forall v_h \in V_0, $$

where $f = a(t, x) \cdot \nabla u_h \in H^1$ is not in the discrete space $V_0$, and thus needs to be projected. The natural choice would be $L^2$-projection $\mathcal P_0: H^1 \to V_0$ defined by

$$ \int_\Omega \mathcal P_0(f) \ \Lambda^0_i \ dx = \int_\Omega f \ \Lambda^0_i \ dx \qquad \forall i. $$

In the advection term, this leads to

$$ \int_\Omega f \ v_h \ dx = \int_\Omega \mathcal P_0(f) \ v_h \ dx , $$

because we can substitute any $\Lambda^0_i$ for $v_h$. From the definition of the $L^2$-projection (two lines above) we obtain

$$ \mathcal P_0(f) = \sum_{i=0}^{N_0 - 1} f_i \Lambda^0_i(x) \qquad \textrm{with} \qquad f_i = (\mathbb{M}^0)^{-1}_{ij} L_j(u_h),\qquad \mathbf f = (\mathbb{M}^0)^{-1} \mathbf L(u_h), $$

where $\mathbf L:\mathbb R^{N_0} \to \mathbb R$ is a linear form that depends on $u_h$, defined by

$$ L_j(u_h) := \int_\Omega a(t, x) \cdot \nabla u_h \Lambda^0_j(x) \ dx , \qquad \mathbf L = (L_j)_j. $$

The advection term is thus discretized as follows:

$$ \int_\Omega a(t, x) \cdot \nabla u_h \ v_h \ dx \quad \to \quad \mathbf L^\top(u_h) (\mathbb{M}^0)^{-\top} \mathbb M^0 \mathbf v = \mathbf L^\top(u_h) \mathbf v. $$

In summary, the fully space-discrete problem reads

$$ \dot{\mathbf u}^\top \mathbb M^0 \mathbf v + \mathbf L^\top(u_h) \mathbf v + \mathbf u^\top \mathbb C^\top \mathbb M^{1,\sigma} \mathbb C \mathbf v = 0 \qquad \forall \mathbf v \in \mathbb R^{N_0}. $$

Since this holds for all $\mathbf v \in \mathbb R^{N_0}$, and using the symmetry of the mass matrices, we obtain

$$ \dot{\mathbf u} + (\mathbb{M}^0)^{-1}\mathbf L(u_h) + (\mathbb{M}^0)^{-1} \mathbb C^\top \mathbb M^{1,\sigma} \mathbb C \mathbf u = 0. $$

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions