1. 实例

下面是fvSchemes 文件的一个典型例子,其内容(略去文件头部注释):

//文件说明
FoamFile
{
    version     2.0;                //版本号
    format      ascii;              //文本格式
    class       dictionary;         //类型为字典文件
    location    "system";           //所在目录
    object      fvSchemes;          //对象名
}
//时间一阶导项(非定常项)格式
ddtSchemes
{
    default         Euler;
}
//梯度项格式
gradSchemes
{
    default         Gauss linear;
    grad(T)         Gauss linear;
}
//散度项格式
divSchemes
{
    default         none;
}
//拉普拉斯项格式
laplacianSchemes
{
    default         none;
    laplacian(DT,T) Gauss linear corrected;
}
//插值格式
interpolationSchemes
{
    default         linear;
}
//面法向梯度格式
snGradSchemes
{
    default         corrected;
}
//需要用来计算通量的场
fluxRequired
{
    default         no;
    T;
}

2. fvSchemes 文件简介

system目录下的fvSchemes文件用来设置 离散格式, 凡是求解器里面出现的方程,都需要在这里面进行离散格式设置。fvSchemes中需要指定的信息主要分为7类:

子字典关键字 说明
interpolationSchemes 插值格式
snGradSchemes 面法向梯度格式
timeScheme 时间导数项,格式
divSchemes 散度项格式
gradSchemes 梯度项格式
laplacianSchemes 拉普拉斯项格式
fluxRequired 需要计算通量的场

3. 插值格式 interpolationSchemes

插值格式在子字典interpolationSchemes下设置,通常用来指定从相邻两个 体单元 计算公共 面单元 处变量值的计算方法。OpenFOAM中可用的插值格式可以分为四类:

类别 插值格式 用途
一类 中心格式 应用于普通场插值
二类 迎风格式 主要应用于对流项
三类 TVD家族 主要应用于对流项
四类 NVD家族 主要应用于对流项

3.1 中心格式

中心格式包括:

中心格式 说明
linear 线性插值(中心差分)格式
cubicCorrection 立方正交格式
midPoint 对称加权线性插值格式

中心格式的指定方式为:

default linear;

3.2 应用于对流项的插值格式

迎风格式包括:

迎风格式 说明
upwind 一阶迎风格式
linearUpwind 线性迎风格式
skewLinear 带畸变修正线性迎风格式
filteredLinear2 高频波过滤线性迎风格式

TVD家族包括:

TVD家族 说明
limitedLinear 有界线性格式
vanLeer van Leer有界格式
MUSCL MUSCL有界格式
limitedCubic 立方正交有界格式

NVD家族包括:

NVD家族 说明
SFCD 自过滤中心格式
Gamma Gamma差分格式

针对对流项的插值格式需要在通量的基础上计算插值,因此这些格式的指定需要提供通量场的名称。在OpenFOAM标准求解器中,体积通量名称一般为phi,类型surfaceScalarField(面心标量场),因此针对对流项的插值格式指定方式(以upwind格式为例)为:

default upwind phi;

一些基于TVD或NVD的格式需要系数,介于01之间,(建议值)对应标准TVD格式,能够达到最快的收敛速度,对应最高精度,例如:

default limitedLinear phi 1.0;

3.3 严格有界标量格式

某些标量场是严格有界的(有界性),例如VOF模型中的流体体积分数场(也有文献将其定义为),其值严格介于01之间,因此,才会出现一些带有限制器的增强版格式(除SFCD格式外,所有的TVD家族和NVD家族都具有带限制器的增强版本)。用户如果想要指定有界场的上下限,需要在格式名称前加上前缀limited。例如,将vanLeer格式上下限设置为:

default limitedVanLeer -2.0 3.0;

需要注意的是,OpenFOAM遵循小驼峰式命名法limitedVanLeer中的V是大写的,注意与vanLeer的区分。特别地,对类似于流体体积分数场,上下限严格为,可以添加后缀01,如:

default vanLeer01;

以下格式具有带限制器的增强版本:limitedLinearvanLeerGammalimitedCubicMUSCLSuperBee

3.4 矢量场专用格式

针对矢量场的 有向性,一些带有限制器的格式具有矢量场的专用版本,使用方法为添加后缀V,如:

default limitedLinearV;

以下格式具有矢量场专用版本:limitedLinearVvanLeerVGammaVlimitedCubicVSFCDV


4. 面法向梯度格式 snGradSchemes

面法向梯度指的是变量场梯度在面处的法向分量,一般需要在单独计算面法向梯度或者指定拉普拉斯项离散格式时指定面法向梯度格式。面法向梯度格式在子字典snGradSchemes下设置,支持的标准格式有:

snGradSchemes 说明
corrected 显式非正交修正格式
uncorrected 无非正交修正格式
limited 非完全正交修正格式
bounded 对正值标量的有界修正格式
fourth 四阶格式(不详)

特别地,非完全正交修正格式limited需要指定系数,其值介于01之间:

说明
0 无非正交修正
0.333 限制非正交修正部分不超过正交部分的一半
0.5 限制非正交修正部分不超过正交部分
1 不限制非正交修正部分,等同于corrected格式

limited格式使用如下:

default limited 0.5;

有关非正交修正的具体内容,请阅读文献8.6节。


5. 时间一阶导项 格式 ddtSchemes

时间一阶导项格式在子字典ddtSchemes下设置,支持的标准格式有:

ddtSchemes 说明
Euler 一阶精度,有界,隐式
localEuler 局部时间步,一阶精度,有界,隐式
CrankNicolson 二阶精度,有界,隐式
backward 二阶精度,隐式
steadyState 定常,忽略时间导数项

其中,CrankNicolson格式中的系数介于01之间,时为纯Crank-Nicolson格式,时为纯Euler格式。


6. 时间二阶导项 格式 d2dt2Schemes

时间二阶导项格式在子字典d2dt2Schemes下设置,只支持Euler格式。


7. 梯度项 格式 gradSchemes

梯度 格式在子字典gradSchemes下设置,支持的标准格式有:

gradSchemes 说明
Gauss <interpolationScheme> 高斯积分,<interpolationScheme>设置插值格式,二阶精度
leastSquares 最小二乘法,二阶精度
fourth 最小二乘法,四阶精度
cellLimited <gradScheme> 上述格式的体单元有界版本
faceLimited <gradScheme> 上述格式的面单元有界版本

8. 散度项 格式 divSchemes

此项一般只出现在涉及流体流动的数值模拟中,例如(标量形式)或(矢量形式)。以动量方程中的对流项为例,基于有限体积积分有:

其中,表示面处的质量通量,即。也因此其在OpenFOAM求解器中出现方式为div(phi, U)

散度项 格式在子字典divSchemes下设置,只支持Gauss <interpolationScheme>格式。为线化此非线性项,在对对流项进行离散的过程中,是作为已知量参与计算的,一般使用上一时间步的速度场计算得到,即

其中,的数值通过Rhie-Chow动量插值计算得到,具体参考文献15.4节。因此,这里的插值格式<interpolationScheme>只针对上式中的,其数学特性如下:

<interpolationScheme> 数学特性
linear 二阶,无界
skewLinear 二阶,带skewness修正,无界
cubicCorrected 四阶,无界
upwind 一阶,有界
linearUpwind 一/二阶,有界
QUICK 一/二阶,有界
TVD schemes 一/二阶,有界
SFCD 二阶,有界
NVD schemes 一/二阶,有界

9. 拉普拉斯项 格式 laplacianSchemes

在流体流动的动量方程中,拉普拉斯项一般为(在OpenFOAM求解器中出现方式为laplacian(nu, U)),基于有限体积积分有:

因此,需要指定的插值格式,同时也要指定面法向梯度的离散格式。拉普拉斯项 格式子字典laplacianSchemes下设置,只支持Gauss <interpolationScheme> <snGradScheme>格式,其中,<interpolationScheme>用于指定的插值格式,<snGradScheme>用于指定面法向梯度的离散格式:

<snGradScheme> 数学特性
corrected 无界,二阶,守恒
uncorrected 有界,一阶,非守恒
limited correcteduncorrected的混合格式
bounded 有界,一阶
fourth 无界,四阶,守恒

10. 需要计算通量的场 fluxRequired

fluxRequired子字典列举了数值模拟过程中需要计算通量的场。例如流体流动模拟中,在求解压力p的方程后需要计算通量,这可以通过在fluxRequired子字典中简单地指定:

fluxRequired {     p; }