压力方程和压力修正方程



  • 请问一个压力基的的问题,压力方程和压力修正方程的区别到底是什么,为什么几乎所有的教材在讲述simple和Piso算法的时候都是用的压力修正方程,但是openfoam里面却全是压力方程?


  • OpenFOAM讲师


  • 网格教授 OpenFOAM教授 管理员

    压力方程和压力修正方程的区别到底是什么,为什么几乎所有的教材在讲述simple和Piso算法的时候都是用的压力修正方程,但是openfoam里面却全是压力方程?

    • 主要原因是教材都非常老了,经典教材第一版写的时候都是90年代。同理,教材都是采用的交错网格。虽然同位网格有介绍。如果2018年有人写一本新的CFD巨著,很有可能用的就是压力方程而不是压力修正方程。

    • 但为了遵守SIMPLE算法的基本思想,压力修正方程的介绍还是有必要。但是你看PISO直接用的就是压力泊松。但相对于PISO,SIMPLE更容易理解因此教材中主要介绍原始的SIMPLE压力修正。

    • 压力方程可以从压力修正方程推导出来



  • @李东岳
    感谢东岳老师。

    • 主要原因是教材都非常老了,经典教材第一版写的时候都是90年代。同理,教材都是采用的交错网格。虽然同位网格有介绍。如果2018年有人写一本新的CFD巨著,很有可能用的就是压力方程而不是压力修正方程。

    您的意思是压力方程和压力修正方程都一样,还是说压力方程相对于压力修正方程更有优势?

    • 但为了遵守SIMPLE算法的基本思想,压力修正方程的介绍还是有必要。但是你看PISO直接用的就是压力泊松。但相对于PISO,SIMPLE更容易理解因此教材中主要介绍原始的SIMPLE压力修正。

    我看computational methods for fluid dynamics等教材, PISO也是用压力修正方程推导的。

    是不是对于可压缩的压力基计算,压力修正方程更适合一些呢?
    对于压力方程:
    0_1516258562958_416c8085-9cc7-421c-a508-0581e98ae84e-image.png
    只有是rho=a*p这种形式的状态方程才可以直接把对流项里面的rho换成p。
    但是对于压力修正方程:0_1516258780373_a1c21623-ee79-44e9-8b58-6402c5a8f75c-image.png
    对于任何状态方程都是可以用的。
    谢谢您!



  • @程迪
    您写的博客实在太详细了,关于openfoam的piso算法,

    1.这个是由piso.correct()控制的,而piso.correct()是由变量label corrPISO_控制的。
    2.重复的时候,UEqn所引用的U是有更新的。所以用UEqn构造的UEqn.A(), UEqn.H()也可能会有所更新。

    之前有帖子曾经讨论过这个问题,http://www.cfd-china.com/topic/589/关于piso循环的二次修正的一个疑问/15

    @李东岳 在 关于piso循环的二次修正的一个疑问 中说:

    piso循环的二次修正是建立在第一次修正的基础上的。第二次修正的连续性方程是涉及到u**。上面的代码里,UEqn并没有做更新。如果忽略函数fvc::ddtCorr(U, phi),pEqn也是没有变动的。
    问题1: 这是不是就意味着对同一个pEqn重复一次迭代运算?

    虽然构建的速度矩阵Ueqn没有更新,但是HbyA有变化,因此求解的pEqn不是同一个pEqn

    问题2:我对问题1的理解是,在icoFoam的算法里,速度u通过连续性方程被隐性的耦合到了pEqn里面。第二次的修正是没有必要的。这与原始的PISO算法有区别。请问这样的理解对吗?

    不是很清楚你说的哪个二次修正,如果你说的是楼上指的非正交修正,一般情况下不需要进行,除非在那个potentialFoam中。因为这个求解器没有进行速度-压力耦合迭代。

    为什么Ueqn没有更新,但是HbyA有变化,HbyA不是等于UEqn.H()/UEqn.A()吗? Ueqn没有更新,那么UEqn.H()和UEqn.A()应该没变啊,为什么HbyA反而有变化。


  • 网格教授 OpenFOAM教授 管理员

    我看computational methods for fluid dynamics等教材, PISO也是用压力修正方程推导的。

    是不是对于可压缩的压力基计算,压力修正方程更适合一些呢?

    看了下,确实这本书里面是压力修正方程。但是JCP上Issa那个论文用的压力方程。因为压力修正方程经过几步运算可以直接推导出来压力方程,类似你求解3a+4b=S,变成6a+8b=2S。暂时没有深入研究是不是压力修正方程或者压力方程哪个更合适,不过压力方程不需要存储压力修正量。如果有文献对比过压力修正方程或者压力方程我也想看看,但我个人感觉没区别。


  • OpenFOAM讲师

    @litong189456
    UEqn是一个fvMatrix<T> 类,类成员里有个指针psi_,指向了U,所以UEqn.A, H计算都会引用U,U更新,A,H也更新。


  • OpenFOAM讲师

    @李东岳
    同问,到底谁是压力方程,Pressure Linked Equation(PLE), Pressure Poisson Equation(PPE)?

    PISO用的好像也不是PPE
    @litong189456
    另外OpenFOAM是Picard迭代,

    至少SIMPLE的PLE是玩的Discrete Then Split, DTS流程。投影法之类的玩的是STD流程。



  • @李东岳
    好的,谢谢东岳老师。



  • 我还得更深入的阅读代码了,太感谢了。