OpenFOAM中大多数求解器(不可压缩流)采用了以下的动量方程:
fvVectorMatrix UEqn
(
fvm::ddt(U)
+ fvm::div(phi, U)
+ MRF.DDt(U) //MRF是多参考坐标系,在动网格中会用到(像旋转机械等),一般情况下可忽略
+ turbulence->divDevReff(U)
==
fvOptions(U)//源项或约束
);
-
fvm::ddt(U)
:时间导数项; -
fvm::div(phi, U)
:对流项,涉及到非线性问题的线性化处理; -
MRF.DDt(U)
:涉及动网格技术(旋转机械等)需要引用MRF,否则可忽略。具体可参考MRF.DDt(U)—MRF模型简介; -
turbulence->divDevReff(U)
:剪切力张量项,可查看turbulence->divDevReff(U)代码解读; -
fvOptions(U)
:源项或约束,如:多孔介质、磁流变液和体积力等。具体可参考fvOptions(U); -
在OF中,压力梯度项一般不直接放入
UEqn
中,而是根据算法字典中的关键字momentumPredictor
的状态,对动量方程进行修正。
if (pimple.momentumPredictor())//动量预测开关,默认为关闭,这里的p由上一时间步求得
{
solve(UEqn == -fvc::grad(p));
fvOptions.correct(U);
}