@daidezhi
2016-05-26T22:15:49.000000Z
字数 5250
阅读 7764
CFD C++ OpenFOAM
下面是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;}
system目录下的fvSchemes文件用来设置 离散格式, 凡是求解器里面出现的方程,都需要在这里面进行离散格式设置。fvSchemes中需要指定的信息主要分为7类:
| 子字典关键字 | 说明 |
|---|---|
interpolationSchemes |
插值格式 |
snGradSchemes |
面法向梯度格式 |
timeScheme |
时间导数项,格式 |
divSchemes |
散度项格式 |
gradSchemes |
梯度项格式 |
laplacianSchemes |
拉普拉斯项格式 |
fluxRequired |
需要计算通量的场 |
插值格式在子字典interpolationSchemes下设置,通常用来指定从相邻两个 体单元 计算公共 面单元 处变量值的计算方法。OpenFOAM中可用的插值格式可以分为四类:
| 类别 | 插值格式 | 用途 |
|---|---|---|
| 一类 | 中心格式 | 应用于普通场插值 |
| 二类 | 迎风格式 | 主要应用于对流项 |
| 三类 | TVD家族 | 主要应用于对流项 |
| 四类 | NVD家族 | 主要应用于对流项 |
中心格式包括:
| 中心格式 | 说明 |
|---|---|
linear |
线性插值(中心差分)格式 |
cubicCorrection |
立方正交格式 |
midPoint |
对称加权线性插值格式 |
中心格式的指定方式为:
default linear;
迎风格式包括:
| 迎风格式 | 说明 |
|---|---|
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的格式需要系数,介于0和1之间,(建议值)对应标准TVD格式,能够达到最快的收敛速度,对应最高精度,例如:
default limitedLinear phi 1.0;
某些标量场是严格有界的(有界性),例如VOF模型中的流体体积分数场(也有文献将其定义为),其值严格介于0和1之间,因此,才会出现一些带有限制器的增强版格式(除SFCD格式外,所有的TVD家族和NVD家族都具有带限制器的增强版本)。用户如果想要指定有界场的上下限,需要在格式名称前加上前缀limited。例如,将vanLeer格式上下限设置为:
default limitedVanLeer -2.0 3.0;
需要注意的是,OpenFOAM遵循小驼峰式命名法,limitedVanLeer中的V是大写的,注意与vanLeer的区分。特别地,对类似于流体体积分数场,上下限严格为,可以添加后缀01,如:
default vanLeer01;
以下格式具有带限制器的增强版本:limitedLinear,vanLeer,Gamma,limitedCubic,MUSCL和SuperBee。
针对矢量场的 有向性,一些带有限制器的格式具有矢量场的专用版本,使用方法为添加后缀V,如:
default limitedLinearV;
以下格式具有矢量场专用版本:limitedLinearV,vanLeerV,GammaV,limitedCubicV和SFCDV。
面法向梯度指的是变量场梯度在面处的法向分量,一般需要在单独计算面法向梯度或者指定拉普拉斯项离散格式时指定面法向梯度格式。面法向梯度格式在子字典snGradSchemes下设置,支持的标准格式有:
| snGradSchemes | 说明 |
|---|---|
corrected |
显式非正交修正格式 |
uncorrected |
无非正交修正格式 |
limited |
非完全正交修正格式 |
bounded |
对正值标量的有界修正格式 |
fourth |
四阶格式(不详) |
特别地,非完全正交修正格式limited需要指定系数,其值介于0和1之间:
| 说明 | |
|---|---|
0 |
无非正交修正 |
0.333 |
限制非正交修正部分不超过正交部分的一半 |
0.5 |
限制非正交修正部分不超过正交部分 |
1 |
不限制非正交修正部分,等同于corrected格式 |
limited格式使用如下:
default limited 0.5;
有关非正交修正的具体内容,请阅读文献第8.6节。
时间一阶导项格式在子字典ddtSchemes下设置,支持的标准格式有:
| ddtSchemes | 说明 |
|---|---|
Euler |
一阶精度,有界,隐式 |
localEuler |
局部时间步,一阶精度,有界,隐式 |
CrankNicolson |
二阶精度,有界,隐式 |
backward |
二阶精度,隐式 |
steadyState |
定常,忽略时间导数项 |
其中,CrankNicolson格式中的系数介于0和1之间,时为纯Crank-Nicolson格式,时为纯Euler格式。
时间二阶导项格式在子字典d2dt2Schemes下设置,只支持Euler格式。
梯度 格式在子字典gradSchemes下设置,支持的标准格式有:
| gradSchemes | 说明 |
|---|---|
Gauss <interpolationScheme> |
高斯积分,<interpolationScheme>设置插值格式,二阶精度 |
leastSquares |
最小二乘法,二阶精度 |
fourth |
最小二乘法,四阶精度 |
cellLimited <gradScheme> |
上述格式的体单元有界版本 |
faceLimited <gradScheme> |
上述格式的面单元有界版本 |
此项一般只出现在涉及流体流动的数值模拟中,例如(标量形式)或(矢量形式)。以动量方程中的对流项为例,基于有限体积积分有:
其中,表示面处的质量通量,即。也因此其在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 | 一/二阶,有界 |
在流体流动的动量方程中,拉普拉斯项一般为(在OpenFOAM求解器中出现方式为laplacian(nu, U)),基于有限体积积分有:
因此,需要指定的插值格式,同时也要指定面法向梯度的离散格式。拉普拉斯项 格式子字典laplacianSchemes下设置,只支持Gauss <interpolationScheme> <snGradScheme>格式,其中,<interpolationScheme>用于指定的插值格式,<snGradScheme>用于指定面法向梯度的离散格式:
<snGradScheme> |
数学特性 |
|---|---|
corrected |
无界,二阶,守恒 |
uncorrected |
有界,一阶,非守恒 |
limited |
corrected和uncorrected的混合格式 |
bounded |
有界,一阶 |
fourth |
无界,四阶,守恒 |
fluxRequired子字典列举了数值模拟过程中需要计算通量的场。例如流体流动模拟中,在求解压力p的方程后需要计算通量,这可以通过在fluxRequired子字典中简单地指定:
fluxRequired{p;}
感谢您的阅读,欢迎讨论和批评指正。
作者:戴得志