稳态求解器simpleFoam的迭代问题
-
先不考虑 endTime,这个是“宏观”上的控制。
在每一个时间步长内,求解器都要进行迭代运算。进入一个新的时间点(timestep),就会有一个初始的残差,当在这个时间点运算结束之后,会产生一个新的残差(矩阵是通过迭代,比如 Gauss-Seidel 方法,而非消元,比如高斯消元或者Cramer's rule 求解)。
这个迭代运算何时终止,只要满足一下三个条件的任何一条:
- 低于预设残差 (the residual falls below the solver tolerance, tolerance;)
- 当前迭代所得残差与初始残差的比例小于预设相对残差 (the ratio of current to initial residuals falls below the solver relative tolerance, relTol;)
- 或者迭代次数超过预设 (the number of iterations exceeds a maximum number of iterations, maxIter;)
一旦跳出迭代运算,程序就默认在当前时间点上计算收敛,然后继续在时间上推进。直到算到 endTime 为止。
continuity error 和 div(phi)的计算有关。理想状态下,面通量(face flux)的散度应该是零,某种意义上的continuity概念。
-
多谢大神的解释!
关于time step continuity errors没太懂,等我补点基础知识再来讨教。不过不好意思,还有问题。瞬态求解和稳态求解的迭代运算有什么不同。
之前看过一篇文章强调说"瞬态计算要求在每个时间步内达到收敛。若不能达到收敛,则迭代次数达到所设定的内迭代次数后进入下一个时间步,重新开启迭代计算。" 所以瞬态计算的残差监视图是锯齿状的。而稳态的曲线一般相对"平滑"。
在苏伟军博客里看的有关simpleFoam的文章,他说"这里的endTime不再是求解结束时间,而是最大迭代次数有关的量(迭代次数=(endTime-startTime)/deltaT)。如果在设定的最大迭代次数内方程收敛,程序也会自动退出计算。"
这些听起来好像稳态求解的内迭代没什么大关系。这让我有些困惑,稳态也要求在每个时间步内达到迭代吧,有什么不同呢? -
大神不敢当,我也是和你一样刚接触CFD的小白。
不好意思对于 continuity error 的问题没能讲得很明白,这是因为我对这个问题没有理解到“代码”级别,不过很多时候,这个问题没有给我带来太多麻烦,所以就停留在这个地方。如果有熟悉这方面的朋友,还希望分享一下更好的见解。
对于一个物理用瞬态求解还是稳态求解,也是一个很大的问题。可以说,我至今也没完全搞明白。不过最基本的区分,或许能帮助到你:
-
瞬态: 关注的对象是非常依赖时间的。pisoFoam 和 pimpleFoam 在此类。最好把时间上的离散用二阶以上精度。
-
稳态问题: 关注的物理量和时间无关。
我在用大涡模拟的时候就用的是pisoFoam求解器。因为旋涡脱落过程中,有一个参量叫Strouhal数是我重点考察的一个对象之一。
对于稳态计算,通常可以选择RNAS的湍流模型。一般来讲,时间步长要高于顺态求解,所以计算速度更快,计算消耗资源更小。
个人理解,对于真实的物理世界,或多或少都和时间有关系。只是我们在研究问题的时候,关注点不一样,用不同的方法,高效地处理不同的问题。
至于算法级别,归结到代码上的问题,实在无能为力。我也还在学习中。
:sad: -
-
@random_ran 能花时间写这么多已经很感谢了!
我刚接触的CFD,其实本来不太纠结瞬态稳态问题,目前稳态求解对我要研究的东西够用的。只是这两天发现simpleFoam的每个时间步长里的所有物理量都有个No Iteration,突然困惑了,难道稳态也要每步都收敛?之前看过一些文章,一直理解为时间步长内收敛是瞬态特有的,现在又蒙了... -
@aufalpen 在 稳态求解器simpleFoam的迭代问题 中说:
如果用pimpleFoam是不是差别只在于deltaT需要计算,
和谁的差别?delta t最好自行给定,在
controlDict
里面。关于你说的收敛,收敛非常多的定义,
迭代也分为各种迭代。内迭代,外迭代,矩阵迭代,时间推进,迭代内的迭代,矩阵求解器的内迭代,非常多的迭代、各种迭代。CFD整个就是个迭代。因为直接求解很浪费资源。看得越深,迭代越多。对于
simpleFoam
,最基本的迭代,就是那个时间布推进,也就是SIMPLE算法的迭代。理解到这,初级阶段应该没问题。 -
@aufalpen
感谢支持,希望母语的资料能加快大家学习的进程。不提CFD应用,CFD理论对数学要求很高。在学习的过程中可以从一维单扩散问题开始。比较简单。加上对流之后,就涉及到一些格式带来的稳定性问题了。到后来速度压力耦合就涉及到SIMPLE之类。非常复杂。压力速度算法在上世纪八九十年代非常活跃。在21世纪处,转向了各种稳定性问题。基于SIMPLE算法下各种学科内部的稳定性至今依然是计算物理领域内比较热门的话题。
可看看
Journal of Computational Physics
关注一下前沿,不需要细看。 -
此回复已被删除!