OpenFOAM的PISO算法
流体力学的控制方程是耦合方程组,形式上体现为连续方程和运动方程的耦合,变量上体现为速度和压强的耦合。在数值计算过程中,同时求解速度和压强的方法称为“同时算法”,这通常比较困难繁琐,为此“分离算法”得到了广泛的应用。
分离算法的思路是建立速度和压强之间的迭代关系,在迭代中去寻求稳定解。有一点促使了分离算法的应用:连续方程和运动方程在离散后均得到速度-压强关系。这使得在迭代过程中只需要在两个方程间进行切换,而无需想办法构造一个不动点迭代。
Jasak的论文中对OpenFOAM所采用的PISO算法给出了描述,但是今天跟ZD讨论之后发现,Jasak所提的PISO实际上是标准的SIMPLE算法(目前还不证实代码中到底是SIMPLE还是PISO,需要研读一下代码)。 SIMPLE算法和PISO算法的显著区别就是:SIMPLE没有“相邻校正”,即在迭代过程中始终保持相邻网格的速度值为第一次速度预测值;而PISO有相邻校正,在每个迭代步中,相邻网格的速度值都会采用最新的速度预测值。
真正的PISO算法可以描述如下:
1.假定压强(或利用压强初值),隐式求解运动方程,得到速度预测值U*,可称为速度预测;
2.利用U*求解连续方程,得到压强值p*,这步可称为压强求解;
3.利用p*再求解运动方程,但改为显式求解(即相邻网格采用u*),得到u**,称为速度校正。然后回到第2步,迭代求解,直至允许的迭代公差。
一句话:PISO就是在一个隐式速度预测之后紧跟一系列压强求解和显式速度校正,并在迭代的过程中考虑相邻校正。