OpenFOAM——SIMPLE,PISO,PIMPLE

文章详细介绍了基于连续性方程和动量方程的流体动力学求解算法,包括SIMPLE、PISO和它们的变种PLMPL。SIMPLE算法通过离散线性化动量方程推导出压力方程,而PISO则在SIMPLE基础上增加了对速度场的修正。PIMPLE是两者的结合,旨在每个时间步长中找到稳定的解。这些算法在解决流体力学问题时,通常涉及速度场和压力场的迭代求解过程。

SIMPLE & PISO &PLMPLE

参考链接
不可压缩连续性方程和动量方程为:

∇ ⋅ u = 0 ∂ u ∂ t + ∇ ⋅ ( u u ) − ∇ ⋅ ( ν ∇ u ) = − ∇ p \begin{aligned} &\nabla \cdot \mathbf{u} = 0 \\ &\frac{\partial \mathbf{u}}{\partial t} +\nabla \cdot(\mathbf{u}\mathbf{u})-\nabla\cdot(\nu \nabla \mathbf{u}) = -\nabla p \end{aligned} u=0tu+(uu)(νu)=p

下面利用连续性方程与动量方程推到压力方程。

离散线性化动量方程,同时压力梯度的形式保持不变。得到:

[ a 1 , 1 a 1 , 2 a 1 , 3 ⋯ a 1 , n a 2 , 1 a 2 , 2 a 2 , 3 ⋯ a 2 , n a 3 , 1 a 3 , 2 a 3 , 3 ⋯ a 3 , n ⋮ ⋮ ⋮ ⋱ ⋮ a n , 1 a n , 2 a n , 3 ⋯ a n , n ] [ u 1 u 2 u 3 ⋮ u n ] = [ r 1 r 2 r 3 ⋮ r n ] + [ ( ∂ p / ∂ x ) 1 ( ∂ p / ∂ x ) 2 ( ∂ p / ∂ x ) 3 ⋮ ( ∂ p / ∂ x ) n ] \left[ \begin{matrix} a_{1,1} & a_{1,2} & a_{1,3} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & a_{2,3} & \cdots & a_{2,n} \\ a_{3,1} & a_{3,2} & a_{3,3} & \cdots & a_{3,n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n,1} & a_{n,2} & a_{n,3} & \cdots & a_{n,n} \\ \end{matrix} \right] \left[\begin{matrix} u_1 \\ u_2 \\ u_3 \\ \vdots \\ u_n \end{matrix}\right]= \left[\begin{matrix} r_1 \\ r_2 \\ r_3 \\ \vdots \\ r_n \end{matrix}\right]+ \left[\begin{matrix} (\partial p/\partial x)_{1} \\ (\partial p/\partial x)_{2} \\ (\partial p/\partial x)_{3} \\ \vdots \\ (\partial p/\partial x)_{n} \end{matrix}\right] a1,1a2,1a3,1an,1a1,2a2,2a3,2an,2a1,3a2,3a3,3an,3a1,na2,na3,nan,n

icoFoam 求解器名称 |-createFields.H 场变量的声明初始化 ————————————————————————————————————————————— Info<< "Reading transportProperties\n" << endl; //屏幕提示读入参数控制文件,等价于 C++中std::cout //声明属性字典类对象,该对象由 constant 文件夹下的“transportProperties”初始化创建。 IOdictionary transportProperties ( IOobject //其实IOobject,顾名思义就是输入输出对象,它完成的是一个桥梁的作用,即连接要构造的类及硬盘中的相应文件。这可以通过其成员函数objectStream()了解到,当完成了“搭桥”之后,便可通过这一成员函数返回硬盘文件对应的输入流,从而从输入流中读入将要构造的类的相关信息// ( "transportProperties", // 文件名称 runTime.constant(), // 文件位置,case/constant mesh, // 网格对象 IOobject::MUST_READ_IF_MODIFIED, //如果更改,必须读入 IOobject::NO_WRITE // 不对该文件进行写操作 ) ); //字典查询黏性,以便初始化带有单位的标量 dimensionedScalar nu ( transportProperties.lookup("nu") ); //屏幕提示创建压力场 Info<< "Reading field p\n" << endl; //创建压力场 volScalarField p //声明一个带单位的标量场,网格中心存储变量。 ( IOobject // IOobject主要从事输入输出控制 ( "p", // 压力场初始文件名称 runTime.timeName(), // 文件位置,由case中的system/controlDict中的startTime控制 //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值