OpenFOAM不可压求解器pimpleFoam研究(一)粘度实现

OpenFOAM提供了几个单相的不可压求解器:icoFoam(瞬态,层流)、simpleFoam(稳态,湍流)、pisoFoam(瞬态,湍流)和pimpleFoam(瞬态,湍流)。这几个求解器的不同之处主要在于其使用的算法不一样,主要有SIMPLE和PISO两种。icoFoam和simpleFoam的解析在李东岳的网站里能找到,写得十分详细。pisoFoam算是icoFoam的进阶版,可以处理湍流的情况,使用湍流模型。而pimpleFoam是PISO和SIMPLE算法的一个结合,为瞬态处理器,也能处理湍流。

icoFoam(下左图)和pimpleFoam(下右图)的动量方程在形式上有一些不一样。

1. pim用tmp<fvVectorMatrix> 来定义动量方程的矩阵类型,而ico则是直接用fvVectorMatrix。tmp是一个包装类,详细的介绍可以在OpenFOAM中的tmp类_寒冰彻骨的博客-优快云博客看到。简单来说,tmp不是必须的,但在场量数据(fields)十分大的时候,tmp可以帮助处理场量空间,减少峰值内存,从而提高程序的计算效率。

2. pimpleFoam中多了MRF.DDt(U)这一项是关于旋转坐标系(滑移网格)下用于修正时间项的科里奥利力。详细介绍在MRF.DDt(U)---MRF模型简介_寒冰彻骨的博客-优快云博客_mrf模型也可以看到。

3. fvOptions(U)是动量方程的源项。目前可以添加体积力、多孔介质等多种性质的源项。

4. 粘度项turbulence->divDevReff(U)。这个是pimpleFoam用来处理湍流(有效粘度)的。在icoFoam中,粘度项是层流粘度,不考虑湍流带来的湍流粘度的影响。当雷诺数较大时,icoFoam计算就不适用了。pimple的粘度项的介绍可以看turbulence-&gtdivDevReff(U)代码解读_寒冰彻骨的博客-优快云博客

在transportPropertiesDict文件里我们可以设置粘度nu的大小,但是在pimpleFoam的源码中找不到nu的创建代码(icoFoam的是可以在createFields.H里找到的)。我想这个应该在某个头文件里被定义好了,所以查看singlePhaseTransportModel.H:

就是说,这个类它在构造的时候,会自动读取transportPropertiesDict文件,并读取nu作为粘度。在pim的createFields里:

新建一个类laminarTransport(U,phi),在新建的时候会读取文件里的nu并作为其privateData。

所以,如果在pimpleFoam里想引用nu的话,需要改成laminarTransrpot.nu()。而且在类型上,icoFoam里nu是一个dimensionedScalar,但是在pimpleFoam里是一个volScalarField,创建时要注意区分,如:

volScalarField nu
(
    IOobject
    (
        "nu",
        runTime.timeName(),
        mesh,
        IOobject::NO_READ,
        IOobject::NO_WRITE
    ),
    laminarTransport.nu()
);

这样,nu就会是一个新建的层流粘度场,供后续使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kino Chan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值