OpenFOAM中的Simple算法和Piso算法

方程

动量预测

M U = − ∇ p MU = - \nabla p MU=p动量预测方程在UEqn.h文件中
其主要代码如下

solve(UEqn == -fvc::grad(p));

矩阵分解

M U = A U − H MU = AU - H MU=AUH矩阵分解在pEqn.H文件中
其主要代码如下

volScalarField rAU(1.0/UEqn.A());
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));

压力修正

∇ ⋅ ( A − 1 ∇ p ) = ∇ ⋅ ( A − 1 H ) \nabla \cdot \left( {{A^{ - 1}}\nabla p} \right) = \nabla \cdot \left( {{A^{ - 1}}H} \right) (A1p)=(A1H)压力修正方程也在pEqn.H文件中
其主要代码如下

fvm::laplacian(rAtU(), p) == fvc::div(phiHbyA)

速度修正

U = A − 1 H − A − 1 ∇ p U = {A^{ - 1}}H - {A^{ - 1}}\nabla p U=A1HA1p速度修正方程也在pEqn.H文件中
其主要代码如下

 U = HbyA - rAtU()*fvc::grad(p);

Simple算法

代码在simpleFoam.C中
主要代码如下

 while (simple.loop(runTime))
 {
     ......
     // --- Pressure-velocity SIMPLE corrector
     {
         #include "UEqn.H"
         #include "pEqn.H"
     }
	......
 }

每一轮迭代都需要执行UEqn.H和pEqn.H中的所有步骤

Piso算法

代码在pisoFoam.C中
主要代码如下

while (runTime.loop())
{
   ......
   // Pressure-velocity PISO corrector
   {
	......
       #include "UEqn.H"
       // --- PISO loop
       while (piso.correct())
       {
           #include "pEqn.H"
       }
   }
   ......
}

参考自
https://zhuanlan.zhihu.com/p/126368311
https://www.bilibili.com/video/BV1EL411A7gu?p=11

你可能感兴趣的:(算法,流体力学,算法,矩阵,学习,经验分享)