OGS
[case] FullUpwind

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.

Child parameters, attributes and cases

Additional info

No additional info.

Used in the following test data files

  • [→ ogs/ogs/master | → doc] Parabolic/ComponentTransport/ClassicalTransportExample/classical_transport_example_full_upwind.prj
  • [→ ogs/ogs/master | → doc] Parabolic/HT/ClassicalTransportExample/classical_transport_example_full_upwind.prj
  • [→ ogs/ogs/master | → doc] Parabolic/HT/ClassicalTransportExample/classical_transport_example_full_upwind_staggered.prj
  • [→ ogs/ogs/master | → doc] ThermoHydroMechanics/Linear/TH_ClassicalTransportExample/classical_transport_example_full_upwind.prj