OGS
NumLib::FullUpwind Class Referencefinal

Detailed Description

For the full upwind scheme, we consider the general advection term of the advection diffusion transport equation:

\[ \nabla \cdot ( u \mathbf{v}), \]

where \(u\) can be temperature \( T\) or mass component concentration \(C\), and \(\mathbf{v}\) is the fluid velocity. This means \(\nabla \cdot \mathbf{v}\) may not be zero, or physically the fluid flow may be compressible.

The discretized weak form of that advection term takes the form

\[ \int_{\Omega_e} \nabla \cdot ( u \mathbf{v}) \phi_i \mathrm{d} \Omega = \int_{\Omega_e} \nabla \cdot ( u \mathbf{v} \phi_i) \mathrm{d} \Omega - \int_{\Omega_e} \nabla \phi_i \cdot ( u \mathbf{v} ) \mathrm{d} \Omega \]

with \(\phi_i\) the test function. The first term on the right hand side can be converted to boundary integration according to the Green's theorem as

\[ \int_{\Omega_e} \nabla \cdot ( u \mathbf{v} \phi_i) \mathrm{d} \Omega = \int_{\partial\Omega_e} ( u \mathbf{v} \phi_i) \cdot \mathbf{n} \mathrm{d} \Gamma \]

with \(\mathbf{n}\) the normal to the boundary surface. That boundary integration is a part of Neumann boundary condition. Therefore what left for the element integration is

\[ -\int_{\Omega_e} \nabla \phi_i \cdot ( u \mathbf{v} ) \mathrm{d} \Omega, \]

which is denoted as \(R_i\) hereafter.

Based on the scheme introduced by Dalen [10], the full upwind scheme evaluates the following flux related quantity for each node

\[ q_i = -\int_{\Omega_e} \nabla \phi_i \cdot \mathbf{v} \mathrm{d} \Omega \]

to determine whether it is an upwind node. If \(q_i>0\), node \( i\) is at upwind position.

Let

\[ {q}_{up}=\sum_{q_i \geq 0} q_i u_i \]

be the total flux at the upwind nodes, and

\[ {q}_{down}=-\sum_{q_i < 0} q_i \]

be the total flux related quantity at the down nodes, we can approximate the discretized weak form of the advection term as:

\begin{eqnarray*} R_i & \approx& \begin{cases} q_i\,u_i,\forall q_i \geq 0\\ q_i \frac{{q}_{up}}{{q}_{down}},\forall q_i < 0 \end{cases}\\ & = & \begin{cases} q_i\,u_i,\forall q_i \geq 0\\ \frac{1}{{q}_{down}} q_i {\sum_{q_j \geq 0} (q_j u_j)},\forall q_i < 0 \end{cases} =\tilde{R}_i.\\ \end{eqnarray*}

The above approximation defines the full upwind scheme of the advection term of the advection diffusion transport equation for the FEM analysis. Obviously, we see that

\begin{eqnarray*} \sum_i \tilde{R}_i &=& \sum_{q_i \geq 0} q_i u_i + \sum_{q_i < 0} \frac{1}{{q}_{down}} q_i {\sum_{q_j \geq 0} (q_j u_j)}\\ &=& \sum_{q_i \geq 0} q_i u_i + \frac{\sum_{q_i < 0} q_i}{{q}_{down}} {\sum_{q_j \geq 0} (q_j u_j)} = q_{up}-q_{up} = 0, \end{eqnarray*}

which means the nodal mass balance of element is guaranteed.

Definition at line 160 of file NumericalStabilization.h.

#include <NumericalStabilization.h>

Public Member Functions

 FullUpwind (double const cutoff_velocity)
 
double getCutoffVelocity () const
 

Private Attributes

double const cutoff_velocity_
 

Constructor & Destructor Documentation

◆ FullUpwind()

NumLib::FullUpwind::FullUpwind ( double const cutoff_velocity)
inlineexplicit

Definition at line 163 of file NumericalStabilization.h.

164 : cutoff_velocity_(cutoff_velocity)
165 {
166 }

Member Function Documentation

◆ getCutoffVelocity()

double NumLib::FullUpwind::getCutoffVelocity ( ) const
inline

Definition at line 168 of file NumericalStabilization.h.

168{ return cutoff_velocity_; }

References cutoff_velocity_.

Member Data Documentation

◆ cutoff_velocity_

double const NumLib::FullUpwind::cutoff_velocity_
private

The cutoff velocity. The stabilization is not applied if the velocity magnitude is below the cutoff velocity.

Definition at line 173 of file NumericalStabilization.h.

Referenced by getCutoffVelocity().


The documentation for this class was generated from the following file: