OpenFOAM 2.2.0: Numerical Methods
Boundedness, Conservation and Steady-State
When solving transport equations, e.g. for enthalpy h, the material time derivative is expressed in terms of a spatial time derivative and convection, i.e.
For numerical solution of incompressible flows, at convergence, at which point the third term on the right hand side is zero. Before convergence is reached, however, and in some circumstances it is better to include the term within a numerical solution because it helps maintain boundedness of the solution variable and promotes better convergence.
In particular, for steady-state it is necessary to use the bounded form, equivalent to
fvm::div(phi, h) - fvm::Sp(fvc::div(phi), h)
For transient solutions, it is usually better to implement only the term
fvm::div(phi, h)
Where transport equations are buried within models, e.g. turbulence, it is better if the users can select the form of the discretisation to suit the problem they are solving, i.e. steady or transient, than having one form hard-coded.
Prior to this version of OpenFOAM, the form of convective derivative was hard-coded into transport equations. In version 2.2.0, we have introduced a bounded form of discretisation which, when applied to a convective derivative such as fvm::div(phi, h)
, will include a component for the -fvm::Sp(fvc::div(phi), h)
term. Users can verify, by referring to steady-state example cases in OpenFOAM, that the bounded form of discretisation is adopted as expected; the divSchemes
sub-dictionary in fvSchemes for the steady-state motorBike tutorial looks like:
divSchemes { default none; div(phi,U) bounded Gauss linearUpwindV grad(U); div(phi,k) bounded Gauss upwind; div(phi,omega) bounded Gauss upwind; div((nuEff*dev(T(grad(U))))) Gauss linear; }
Compressible solvers for transient problems generally use the PIMPLE algorithm, which supports partial convergence of intermediate iterations. The solution may benefit from the use of the bounded form of convection but, in such cases, the corresponding bounded time derivative must also be included, since
In other words, the - fvm::Sp(fvc:ddt(rho), h)
must be included through a bounded
version of ddtSchemes
, e.g.:
ddtSchemes { default Euler; ddt(rho,h) bounded Euler; } divSchemes { div(phi,h) bounded Gauss linearUpwind grad(h); ... }
Example
- motorbike
$FOAM
_TUTORIALS/incompressible/simpleFoam/motorBike
Cell Value Reconstruction
This release includes a new “face-volume” weighting for reconstruction of cell values from fluxes using the fvc::reconstruct
function. The new weighting improves robustness of solvers on poor-quality meshes. This is particularly important for VoF and other multiphase solvers in which the momentum sources are all reconstructed to maintain force balances.
Implicit Region Coupling
For multi-region cases, such as when modelling conjugate heat transfer between multiple fluids and solids, the solution of the energy system when using a segregated approach may require many iterations to converge. This is partly due to the explicit treatment of the thermal boundaries coupling the regions.
A new framework for the implicit solution of coupled thermal boundaries has been implemented, allowing a closer coupling between the solid and fluid regions. From a user perspective, the only change necessary is to employ a new type of boundary condition. Currently, this is still a work-in-progress, and under active development.
Source code
- regionCoupled directories
$FOAM
_SRC/regionCoupled
$FOAM
_SRC/meshTools/regionCoupled
Schemes
A new numerical scheme, called CoBlended
, has been implemented that blends two different schemes based on the local flow Courant number. The functional form of the blending factor/weight, w
is given by:
where Co
is the local Courant number, and alpha
is a scheme coefficient. Accordingly, for large alpha there is a bias towards the first scheme, and for small alpha, the bias is towards the second scheme.