翻译自:CFD-online
帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/68072-pimplefoam-vs-simplefoam-vs-pisofoam-vs-icofoam.html
phisieh2005:
大家好,
谁能给我解释一下pimpleFoam,simpleFoam,pisoFoam和icoFoam求解器之间的区别吗?
以及在什么情况下选择对应的求解器?
感谢!
ata:
你好
icoFoam是计算不可压缩牛顿流体层流流动的瞬态求解器
pimpleFoam是采用PIMPLE算法(混合PISO-SIMPLE算法)计算大时间步长瞬态不可压缩流。
pisoFoam是计算可压缩流动的瞬态求解器
湍流模型是通用的,例如:层流,雷诺平均或者大涡模拟
simpleFoam是用来求解稳态可压缩湍流流动的
祝好
Ata
David:
simpleFoam是针对不可压湍流
ata:
你好,David
非常感谢,你是正确的
祝好
Ata
Kjetil:
大涡模拟可以采用simpleFoam求解器吗?
florian_krause:
你好,
simpleFoam是一个稳态求解器,正如ata已经提到的...
因此,你不能使用simpleFoam求解器进行大涡模拟,而应该用pisoFoam求解器代替
祝好
Florian
Nileshjrane:
大家好
我在使用icoFoam和simpleFoam求解器计算一个相同算例的时候得到了不同的结果。icoFoam的计算结果似乎更好。可能的原因是什么?难道不应该两个求解器给出相近的结果吗?我使用的是OpenFOAM170默认求解器,我仅改变了离散格式参数字典文件fvSchemes里面速度的离散格式为迎风格式(至少这个格式是应用在simpleFoam求解器里面的)
Djub:
大家好!
我也有相同疑问:pisoFoam求解器比起pimpleFoam求解器如何?
我尝试模拟风与建筑物之间的相互作用:我的模拟是非定常,不可压,大雷诺数并且有复杂几何。我应该用pisoFoam求解器还是pimpleFoam求解器?为什么呢?Nilesh,在你的算例当中,icoFoam求解器应用于非定常层流,然而simpleFoam求解器对针对湍流的.方程是不一样的!
我想人们比起pisoFoam求解器更愿意选择pimpleFoam求解器(http://www.symscape.com/node/948)。但是相比于他们运行雷诺平均,我更喜欢使用大涡模拟。能给一些建议或者说明吗?
Owayz:
使用大涡模拟或者雷诺平均都不是问题。喜欢使用pimpleFoam求解器的人认为pimple算法更加鲁棒和有效。他们还认为pimple算法可以采用大步长(比较piso算法,piso算法当库朗数大于1时会导致发散)。如果对大步长感兴趣的话(在某些sudo瞬态算例当中),pimple算法当然是很有吸引力的算法。你说你想做大涡模拟。在大涡模拟时,你需要考虑时间尺度并且你必须保证你的时间步长比你实际模拟的大涡时间尺度小。
我观察到人们通常保证库朗数小于0.5-0.4。Pimple算法通过提供
nOuterIterations参数给你更多的可控性。如果你的nOuterIterations等于1,那么你是用pimple算法就相当于使用piso算法。当然增加额外的计算机开销用于更多的外迭代可以提升你的结果,但是很多时候是否需要进一步提升你的结果是一个很重要的决定。
祝好
Awais
Djub:
你好,Awais。非常感谢你的建议。但是我没有掌握任何事情。
"在某些sudo瞬态算例时"。"sudo"是什么意思?
我的目标是模拟非常大雷诺数的问题:大概在1e-5或者1e-6。因此,一直保证低库朗数会超过我的计算机能力范围。今天,我在库朗数接近1的情况下运行。以库朗数为5和nOuterIterations为1运行Tjunction案例。因此这个案例实际上是使用的piso算法?
我觉得使用库朗数为5(比如这个案例)和nOuterIterations为1(不仅使用了piso算法而且使用了真的pimple算法)。你是否认为是这样?
其他方面:我对"final"求解器的概念不是很熟悉。目前(原贴为For the momment,疑为:for
the moment),我使用的还是"通常的"那一个:
Quote:
p {solver
PCG; preconditioner DIC; tolerance 1e-06; relTol 0.1;
}
pFinal {
solver PCG; preconditioner DIC; tolerance 1e-06; relTol 0;
}
"(U|k)" {
solver PBiCG; preconditioner DILU; tolerance 1e-05; relTol 0;
}
"(U|k)Final" { solver
PBiCG; preconditioner DILU; tolerance 1e-05; relTol 0;
}
这样可以吗?或者这样是没有意义的?或者这样只是浪费CPU?
Owayz:
你好 Julien
对于Sudo
Transient(伪瞬态),我的意思是物理现象是稳态的,你是用像pimpleFoam这样的瞬态求解器去求解。想要看具体操作,你也可以看一下rhoPimpleFoam/ras目录下的angleDuct案例。这个案例的库朗数为10.
但是如果你使用大涡模拟,你需要时间平均的解。在该流动结构中的脉冲时间尺度也是很重要的。
如果你要做雷诺平均模拟的话,你就需要按照你刚才说的那样去设置(比如库朗数为5,nouterIteration为1)。,但是在瞬态模拟中你可能对流场的平均值感兴趣,因此思考一下,在那个时间步长下能否捕捉到整个流场的波动。
我的理解是当你的流场是非常短暂比如绕流产生涡街,你应该保持库朗数小于1(特别的)。如果时间步长过大,我们可能会错失许多波动模式并且反映在我们的平均值上(或者花更多的时间去得到一个时间平均解)。
关于pFinal和Ufinal,我认为这些是对于最后在pimple算法循环方程当中的迭代严格的标准以便得到最好的数值敏感性。
祝好
Awais
Akidess:
Quote:
Originally Posted by
Djub View Post
"as in
some sudo transient cases" . What means "sudo" ?
小的旁注—他可能是想写'伪的'。
Owayz:
感谢指出这点
祝好
Awais
Djub:
大家好
我运行了一些Pimple的算例。它让我震惊!
对比一个运行的PISO算例,在fvsolution当中仅有的变化是关于nOuterIterations。在我的算例中,我令nOuterItreations等于2。你也可以选择final求解器,我假想为最后迭代。
但是PIMPLE允许允许在controlDict中使用adjustTimeStep yes。在这个算例中你可以直接控制CFL(入口最大库朗数)。我现在正以最大库朗数为10运行着!并且它是稳定的和真实的。当然也非常快!
在这个算例当中,你的时间步长不再是常数因此你可能更愿意用writeControl
adjustableRunTime(而不是timestep)。在这个算例中writeInterval是短时间。
Djub
Sdharmar:
如果你增加库朗数到大于1不会是问题吗?
Br,
Suranga.
Djub:
Pimple算法是一种隐式数值方法(参考https://en.wikipedia.org/wiki/Explicit_and_implicit_methods),你可以使用大于1的库朗数。对于显式方法,库朗数需要小于1(https://en.wikipedia.org/wiki/Courant–Friedrichs–Lewy_condition)。
顺便说一下,如owayz说的,我非常关心我正在进行的大涡模拟的时间尺度。
在我的算例中,当库朗数为10的时候,没有问题。不过,库朗数到了100,就崩溃掉了,同时,库朗数为50或者30时,计算结果不能令人满意。因此(在我的方柱绕流算例中,对涡脱落的估算)库朗数的限制范围为10到30。
大家好
最后可能最愚蠢的问题来了。
我已经不止一次阅读了讨论,但是我仍然没有明白这些不同求解器的用法。
谁能根据实际情况给我解释一下这些求解器的优点/缺点?
加入这里有一个管流(L > 5000mm, W =250mm, H =
20mm,工质是水,原点位于管道中间)...
- 在入口为小雷诺数(100-200),没有障碍物(比如棒或者方块)在管道的中间。
- 在入口为小雷诺数(100-200),有障碍物(比如具有侧边20mm的方块)在管道的中间。
- 在入口为大雷诺数(>3000),没有障碍物在管道的中间。
- 在入口为大雷诺数(>3000),有障碍物(比如具有侧边20mm的方块)在管道的中间。
对于这些算例你们会采用哪种求解器?为什么?
如果为了向我展示一个特定求解器的有点,你也可以改变其中一个算例的物理设置。
先感谢了!
Aylalisa
如果你的障碍物没有任何运动,那么对于你对求解器的选择不会有任何影响。我认为你可以使用pimpleFoam求解器解决所有的算例。你也可以通过使用simpleFoam求解器设置大时间步长(从而节约一些计算时间)解决高雷诺数的算例。
Aylalisa:
什么样的流动使你分别选择pisoFoam求解器和icoFoam求解器?
Djub:
icoFoam求解器是针对层流的,而pisoFoam可以处理湍流。