Code of the Week #5: div(phi,U) Gauss linear
本周,我们了解一下散度的离散格式指定,如下程序段位于 system/fvSchemes
内。
divSchemes
{
default none;
div(phi,U) Gauss linear;
}
这一对 {}
指定 $\nabla\cdot$ 的离散方法,其中,default none;
指的是无缺省的离散格式;div(phi, U) Gauss linear;
指定了 $\nabla\cdot(\rho U U)$ 的离散格式为Gauss 方法,并使用中心差分。
Gauss 方法是散度的唯一离散方法,并在其后需要指定所求场的插值格式。指定的方法为
div() Gauss <插值格式>;
插值格式有如下一些选择:
插值格式 | 简要说明 |
---|---|
中心差分 | |
linear | 线性插值 (中心差分) |
cubicCorrection | 三次格式 |
midPoint | 对称权重的中心差分 |
迎风差分 | |
upwind | 迎风差分 |
linearUpwind | 线性迎风差分 |
skewLinear | 有 skewness 的线性迎风差分 |
filteredLinear2 | Linear with filtering for high-frequency ringing |
TVD 格式 | |
limitedLinear | limited linear differencing |
vanLeer | van Leer limiter |
MUSCL | MUSCL limiter |
limitedCubic | Cubic limiter |
NVD 格式 | |
SFCD | Self-filtered central differencing |
Gamma $\psi$ | Gamma differencing |
以上的差分格式可以分为三类,一类是通用的(中心差分),第二类是对流项特定的(后三项:upwind, TVD, NVD)。如果要指定 div(phi,U)
为迎风格式,可以写为:
div(phi,U) Gauss upwind;
格式 | 数值分析 |
---|---|
linear | 二阶,无界 |
skewLinear | 二阶, (更) 无界, skewness 修正 |
cubicCorrected | 四阶, 无界 |
upwind | 一阶, 有界 |
linearUpwind | 一/二阶, 有界 |
QUICK | 一/二阶, 有界 |
TVD schemes | 一/二阶, 有界 |
SFCD | 二阶, 有界 |
NVD schemes | 一/二阶, 有界 |
对流项的差分格式并不需要指定通量的插值格式,因为通量 (phi) 的插值格式已由
interpolationSchemes
{
default linear;
}
指定。 interpolationSchemes
子字典主要包括从体心到面心的插值项。这些格式的指定需要列出基于某一通量进行插值的这个通量名称。在 OpenFOAM 应用中,大多数情况为 phi
, 是面标量场 (surfaceScalarField) 速度通量 $\phi$ . 三个特定对流项的插值格式有三种:一般的;normalised variable (NV); and, total variation diminishing (TVD). 除了 blended 格式,一般对流和 TVD 格式由差分方法和通量的名称来指定,如:基于通量 phi 的迎风差分定义为缺省格式:
interpolationSchemes
{
default upwind phi;
}
某些 TVD/NVD 格式需要指定系数 $0\leqslant \psi \leqslant 1 $ ,当 $\psi = 1$ 表示TVD 式,可实现较强的收敛性。 当 $\psi = 0$ 表示实现最好的准确性。推荐设定 $\psi = 1$ 。格式基于 phi 的 limitedLinear
格式且设定 $\psi = 1$ 为缺省插值格式:
interpolationSchemes
{
default limitedLinear phi 1.0;
}
某些标量场需要严格限制有界,OpenFOAM 也提供了限制器。要指定某一标量的上下界,插值格式的前面要加上 limited
并在其后指定上下界。如,指定 vanLeer 格式严格在 $[-2,\,3]$ 有界,方式为:
interpolationSchemes
{
default limitedVanLeer -2.0 3.0;
}
还有一些标量通常在 $[0,\,1]$ 有界,也有特殊版本。只需要在插值格式的后面加上 01
(注意没有空格)。如指定 vanLeer 格式,并于 $[0,\,1]$ 有界:
interpolationSchemes
{
default vanLeer01;
}
OpenFOAM 提供了这几个严格有界的格式:limitedLinear, vanLeer, Gamma, limitedCubic, MUSCL 和 SuperBee。
针对向量场,还可以使用一些增强型的限制器格式,它们将场的方向也考虑进来了。
这些格式后面都加上了 V
,如 limitedLinearV
表示增强型的 limitedLinear。这些格式提供 ‘V’ 版:limitedLinearV, vanLeerV, GammaV, limitedCubicV 和 SFCDV。
讨论请移步至CFDwired Forum: Code of the Week #5: div(phi,U) Gauss linear