pimple算法的个人理解,其思想与使用时参数设置问题
-
看了Tobi写的pimple使用时的参数设置对比,还有些疑问想提出来跟大家讨论,我就想到什么就写什么啦,先说以下这几个关键字吧~
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内松弛迭代数是多少。。)
-
再附上一张我的残差曲线图,大家看有问题没
-
一般而言,如何给定
nOuterCorrctors
的值呢?Tobi给出了几个例子的对比,表示最后出现了非定常残差收敛曲线的样子,就认定给的值可以了么?我不知道大家是怎么给的,如何给定值并判断在每个时间步delta_t中定常收敛呢?nOuterCorrctors
无所谓,如果你已经控制好pimple
的残差,他会知道收敛为止。比如你设定200,可能35就收敛了。turbOnFinalIterOnly
这句话怎么理解?什么叫high turbulent flow??湍流变量方程不属于压力速度耦合方程之内,因此可以在速度压力求解之后求解一边湍流方程就可以。
我干吗不自己搞一个时间步很小的piso来算呢?
pimple
和piso
个人认为是个帮派,不同应用倾向于不同的算法,我做多相流不是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方程中的内外循环是怎么回事呢?
相方程需要保证更小的库狼书,因此在一个时间步多次求解。
-
@李东岳 谢谢前辈回复,我最近在计算空化遇到了一些问题,目前定位于相变源项对压力泊松方程的影响,虽然源项的隐式处理改善了对角占优特性,当出现空化时(液体变成气体)压力计算正常,反之,冷凝会出现局部压力过高,导致全场压力受到影响,所计算的压力结果完全是错的。但是过了几个时间步又会恢复正常,不知前辈遇到过这种问题么?
-
调解后的时间步进的长度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循环内都求解多次湍流输运方程。