• 返回主页
  • 浅谈Piso,Simple算法

    本文章基本翻译Hrvoje Jasak的博士论文
    本文主要为从Hrvoje Jasak的博士论文中摘取的PISO,SIMPLE概要,不涉及NS方程离散等相关内容,有关NS方程离散请参考icoFoam解析
  • NS方程求解的两个著名问题

  • 对于不可压缩层流,我们有NS方程: \begin{equation} \nabla \cdot u=0 \end{equation} \begin{equation} \frac{\partial u}{\partial t}+\nabla \cdot (uu)=-\nabla \frac{p}{\rho}+\nabla \cdot(\nabla u) \end{equation} 在对公式(1),(2)求解的过程中,会遇到以下俩个著名问题,依据这两个著名问题,我们也就有了PISO和SIMPLE两大主流算法。

    非线性问题   动量方程(公式(2))中包含了非线性项,即其中的$\nabla \cdot (uu)$。在对其线性化处理的时候,意味着需要用已知时间步的速度来计算$A_p$和$A_n$(其定义参考icoFoam解析)。这进而又分为两个情况:

    (1)稳态:$A_p$和$A_n$的滞后问题在收敛的时候无关紧要;
    (2)瞬态:要么我们在每一个时间步内对非线性项,$\nabla \cdot (uu)$,进行迭代求解,要么忽略非线性项的滞后性。对于前一种方法,如果使用大的时间步长会非常耗费计算机资源,但是其优点是非线性项完全被求解。这种方法中时间步的限制主要来源于时间项的精度要求。如果对时间精度要求很高,就不得不使用一个较小的时间步长。另一方面,如果使用一个较小的时间步长,每个时间步的流场改变也是很小的,因此忽略非线性项的滞后性也可以理解;

    速度-压力耦合问题   连续性方程和动量方程被耦合在一起,因为动量方程以及连续性方程都包含$u$。但是$p$却只出现在动量方程中,连续性方程却没有。这进而又分为两个情况:

    (1)解耦类算法:解耦算法依次求解每一个变量(如$u$,$p$,$T$等)的控制方程,每个控制方程在求解时与其他控制方程是解耦的(即求解某个变量控制方程时,假定其他变量是常量),故名解耦算法。解耦算法比较节约内存,因为一次只需要离散一个控制方程并存储到内存里。但由于这种解耦的求解方式,解耦算法收敛速度较慢;
    (2)耦合类算法:与前述的解耦算法不同,基于压力修正的耦合算法同时求解彼此耦合的动量方程与压力修正形式的连续性方程系统。因此,在耦合算法中,上述解耦算法流程中的第2与第3步(注:第2步与第3步指的是解耦算法里依次求解动量方程和连续性方程的步骤)要替换成一个耦合求解动量和连续性方程的步骤。而除速度$u$和压力$p$以外的其他变量仍然采用解耦方式来求解;

  • 迭代的SIMPLE算法和非迭代的PISO算法

  • PISO非迭代算法   (主要方程计算参考icoFoam解析),如果我们对icoFoam中的公式(19)仔细观察,我们会发现速度更新主要来源于两个部分:第一个是临点速度传输的影响,$HbyA$,第二个是压力梯度的影响,$\frac{1}{a_\mathrm{P}\nabla p}$。在每一个PISO算法的内迭代步中,首先利用压力方程来求解压力梯度,进而来更新速度,再利用压力方程来求解压力梯度,再次来更新速度,进而循环。也即我们在每个时间步内,多了内迭代步来处理压力-速度的耦合问题;

    SIMPLE迭代算法   如果使用耦合类算法求解一个稳态问题,我们就没必要在每一个时间步内来处理压力-速度的耦合问题。在稳态计算中,非线性问题则更加重要。这表现为求解每一个压力方程之后则对$HbyA$进行更新,进而循环。SIMPLE算法中的另一个特点为引入了低松弛,低松弛因子的引入使得瞬态SIMPLE可以调用更大的时间步长。并且由于SIMPLE算法本身侧重于对非线性化的处理。在大时间步下,非线性项的滞后变的更为明显。因此需要更多的内迭代。可以预见的是,在库郎数非常高例如10或者20的时候,瞬态SIMPLE算法会在每个时间步内进行大量迭代来计算;

    下面两张图为PISO算法和SIMPLE算法的流场图(左图为瞬态PISO,右图为稳态SIMPLE):



    如何引用:

    李东岳. 浅谈Piso,Simple算法.[OL]. http://dyfluid.com/PISOSIMPLE.html, 2016.3.10


    东岳流体
    info@dyfluid.com