Implementation details

For a cell with volume \(V\), Gauss' theorem is applied to give:

\[ \div \u = \frac{1}{V}\int_V \left( \div \u \right) dV = \frac{1}{V} \oint_S \left( \vec{n} \dprod \u \right) d\vec{S} = \frac{1}{V} \sum_i^{\mathrm{nFace}}\u_{f,i} \dprod \vec{S}_{f,i} \]

i.e. the divergence is given by the sum over all faces of the dot product of the face normal with the vector quantity at the face. To transform the quantity from the cell centre to the face centre, an interpolation scheme is required.

The divergence term contributions enter the system of equations via the owner and neighbour cells (see gaussConvectionScheme.C)

fvm.lower() = -weights.internalField()*faceFlux.internalField();
fvm.upper() = fvm.lower() + faceFlux.internalField();
fvm.negSumDiag();

The overall weights \(w\) are derived from the selected scheme weights, \(\Psi\), and the linear \(w_l\) interpolation weights, such that for a positive flux:

\[ w = w_l \Psi + (1 - \Psi)_u \]

where the subscript \(()_u\) denotes the upwind contribution. The face values are then calculated as:

\[ \phi_f = \phi_N + w \left(\phi_P - \phi_N \right) \]

Source code:


Would you like to suggest an improvement to this page? Create an issue

Copyright © 2016 OpenCFD Ltd.

Licensed under the Creative Commons License BY-NC-ND Creative Commons License