pimple算法的个人理解,其思想与使用时参数设置问题



  • 看了Tobi写的pimple使用时的参数设置对比,还有些疑问想提出来跟大家讨论,我就想到什么就写什么啦,先说以下这几个关键字吧~

    pimple by Tobi

    nOuterCorrctors (50)
    nCorrectors (2)
    nNonOrthogonalCorrectors (0)
    turbOnFinalIterOnly (ture)

    1.在controlDict设置了基于Co数自动调节时间步长后,一般来说,调解后的时间步进的长度delta_t都要小于设置的delta_T,这时候是在每个delta_t中都要跑一遍nOuterCorrectors(50)和nCorrectors (2)对不?
    如果是,我在用DES模型算case,发现自动调节的时间步长非常小,既然如此,我干吗不用piso算法自己手动调节时间步长呢?

    2.一般而言,如何给定nOuterCorrctors 的值呢?Tobi给出了几个例子的对比,表示最后出现了非定常残差收敛曲线的样子,就认定给的值可以了么?我不知道大家是怎么给的,如何给定值并判断在每个时间步delta_t中定常收敛呢?

    3.turbOnFinalIterOnly默认为true,意义是在最后一次进行湍流修正,Tobi的解释是:
    For high turbulent flow you should add turbOnFinalIterOnly = false to your PIMPLE control
    这句话怎么理解?什么叫high turbulent flow??

    4.理论上说,RANS模型只能用在simpleFoam中才对,所以双时间步对使用URANS模型的意义非同一般,pimple的思想就是想搞一个定常的小时间步继而使用RANS模型;这让我想到热力学中平衡态的定义,在无限小的时间尺度下,系统内外势差很小,此时可以测得我想要的比如温度之类的量了。那么好,这又与第一条结论相同,我干吗不自己搞一个时间步很小的piso来算呢?

    理解可能有偏差,目前就想到这些,还请大家指教~



  • 补充:
    综合1,2两点,fluent的transition模式下是可以自己手动设置双时间步的,即deltaT与将deltaT分割成n份,两个参数;但是到了OF中由于设置了基于Co自动调节deltat,其在deltaT时间步内分割的份数n就不一定了。(但是我没看到在fluent中每个deltat内松弛迭代数是多少。。)



  • 再附上一张我的残差曲线图,大家看有问题没
    0_1496073856896_5ZZIRQ0EV5EA$X3R7EDX}4P.png



  • 一般而言,如何给定nOuterCorrctors的值呢?Tobi给出了几个例子的对比,表示最后出现了非定常残差收敛曲线的样子,就认定给的值可以了么?我不知道大家是怎么给的,如何给定值并判断在每个时间步delta_t中定常收敛呢?

    nOuterCorrctors无所谓,如果你已经控制好pimple的残差,他会知道收敛为止。比如你设定200,可能35就收敛了。

    turbOnFinalIterOnly这句话怎么理解?什么叫high turbulent flow??

    湍流变量方程不属于压力速度耦合方程之内,因此可以在速度压力求解之后求解一边湍流方程就可以。

    我干吗不自己搞一个时间步很小的piso来算呢?

    pimplepiso个人认为是个帮派,不同应用倾向于不同的算法,我做多相流不是pimple的粉丝,有些传热的人比较喜欢pimple,所以我只用piso,为了更好地保证相方程的传输。

    你那个残差图坐标做好调节成log…



  • @李东岳 谢谢前辈回复,如果我把simple循环设置为1就成了piso算法了哈,这样的话给一个比较小的时间步就可以计算,并满足cfl数小于0.5(我是用DES模型计算),请问此时的piso内迭代步给2或3就可以么(多相流计算)。

    请问前辈做多相流计算时,为什么会用piso呢?

    还有个问题就是,在做多相流计算时,alpha方程中的内外循环是怎么回事呢?
    关键字是nAlphaSubCycles

    谢谢前辈指导~


  • 管理员

    请问此时的piso内迭代步给2或3就可以么

    必须要给2-3步吧?这是PISO的要求好像。



  • 请问此时的piso内迭代步给2或3就可以么

    是的,多的没必要,我一般选择2。

    做多相流计算时,为什么会用piso呢?

    这个可能更是应用导向,因为目前小的库狼数的计算时间可以忍受,并且我一直属于保守派 :expressionless:

    alpha方程中的内外循环是怎么回事呢?

    相方程需要保证更小的库狼书,因此在一个时间步多次求解。



  • @李东岳 谢谢前辈回复,我最近在计算空化遇到了一些问题,目前定位于相变源项对压力泊松方程的影响,虽然源项的隐式处理改善了对角占优特性,当出现空化时(液体变成气体)压力计算正常,反之,冷凝会出现局部压力过高,导致全场压力受到影响,所计算的压力结果完全是错的。但是过了几个时间步又会恢复正常,不知前辈遇到过这种问题么?


  • 版主

    @yhdthu

    调解后的时间步进的长度delta_t都要小于设置的delta_T

    调节后的时间步大小取决于controlDict中的maxCo值,maxCo的默认值为1。代码见src/finiteVolume/cfdTools/general/include/createTimeControls.H 以及
    src/finiteVolume/cfdTools/general/include/readTimeControls.H

    在每个delta_t中都要跑一遍nOuterCorrectors(50)和nCorrectors (2)对不?

    没错。

    干吗不用piso算法自己手动调节时间步长

    可以通过增大maxCo来增大自动调节的时间步长,据说PIMPLE算法的Co数可以达到10以上,不过对于用DES或LES计算的湍流问题另当别论。

    如何给定nOuterCorrctors 的值呢?

    这个只能靠经验了,不过一般肯定用不着50。

    这句话怎么理解?什么叫high turbulent flow??

    simulationType设置为RAS或LES时,求解的是考虑湍流粘度($\nu_t$)影响的RANS/LES方程,而湍流粘度取决于求解湍流输运方程后得到的各湍流系数。

    turbOnFinalIterOnly为false代表每个PIMPLE循环内求解多次湍流输运方程,每次PIMPLE循环求解RANS/LES方程时的湍流系数都用的是上个PIMPLE循环内得到的湍流系数。

    turbOnFinalIterOnly为true则代表每个PIMPLE循环内只求解一次湍流输运方程,每次PIMPLE循环求解RANS/LES方程时的湍流系数都用的是上个时间步得到的湍流系数。

    高雷诺数流动为了精确得到速度压力场,需要每个PIMPLE循环内都求解多次湍流输运方程。


登录后回复
 

与 CFD 中国 的连接断开,我们正在尝试重连,请耐心等待