1. 常见的不收敛的情况
Fluent计算收敛情况总是相似的,但是发散情况却各有各的不同。有时候与其纠结怎么样才会收敛,不如了解一下如果出现了不收敛的情况应该怎么办。
下面介绍的几种情况,很多时候并不是发散了,只是计算过程中经常出现的问题,很多同学遇到这些问题就不知道该怎么办了,不知道可不可以继续计算下去,如果继续计算下去结果是否正确?这篇文章给大家详细介绍一下。
注:本文是前几篇文章的总结,内容上完全相同,只是整合在一起。
问题1:出口回流
2.出口回流
2.1 出口回流介绍
控制台出现文本:Reversed flow on 16 faces (4.1% area) of pressure-outlet 3.
出口回流是经常会出现的情况,所谓出口回流,是指模型的出口本来应该是流体流出的,但是由于某些原因,反而有流体从模型出口流入计算域。这显然和显现实情况不符。
出现出口回流的情况一般有三种:分别是计算初期出现回流、物理模型不合理、计算发散
2.2 计算初期出现回流
刚开始进行计算,只计算几十步,这种情况出现回流是正常的,只要继续计算下去,这种现象就会消失了。
2.3 物理模型不合理
如果建模有问题也可能出现这种情况,这种情况即使是一直计算下去,回流现象还是没有消失,一般是因为物理模型的问题,比如卡门涡街的尾流区太短,在出口处仍然还有涡流存在,那么出口出现回流就是正常的现象。
此时想要解决这个问题,需要修改物理模型,如增加尾流区的长度等。
2.4 计算发散
最后一种情况就是确实发散了,计算过程中流场的速度波动太大。
此时只能逐个检查设置问题,最常见的原因如边界条件设置不合理、模型网格质量较差、数学模型选择不合适等。
3. 计算发散的排查办法
对于发散,可以参考下面一些常见的排查步骤和解决方法:
3.1检查初始条件和边界条件
确保所有初始条件和边界条件设置合理。例如,速度、压力、温度等数值在物理上应该是合理的。如果这些条件设置得过大或过小,可能会导致计算过程中的不稳定性。
尝试使用更接近实际情况的初始条件,或者用简单的初始条件开始计算,如零初始场或较为平滑的条件。
3.2 改进网格质量
检查网格的质量,尤其是网格的体积、扭曲度、最小单元大小等参数。网格质量差可能会导致计算中产生数值不稳定。
3.3 调整计算设置
如果进行瞬态计算,尝试减少时间步长,使得计算更稳定。在瞬态计算中增加每个时间步的迭代次数,以确保每个时间步都能充分收敛。
对于稳态计算,降低松弛因子来减缓计算的发散。
3.4 验证物性参数
检查并确保物性参数(如密度、粘度、导热系数等)设置合理且符合物理意义。特别是在多相流或高温高压环境中,物性参数的变化可能导致计算不稳定。
3.5 更改求解器设置
如果使用双精度求解器收敛性比较差,可以切换为单精度求解器。同样地,如果使用单精度求解器收敛性比较差,可以切换为双精度求解器。一般来说,双精度求解器通常可以提高计算精度,减少数值误差。
也可以尝试改变压力-速度耦合算法(如SIMPLE, PISO, Coupled等)来测试不同算法的稳定性。
3.6 逐步简化问题
通过简化模型,如去除物理模型、简化几何结构、减少求解的物理量来尝试是否可以增强收敛
比如,仅求解流动场,忽略热或质量传递,看看是否还会出现问题。也就是我们经常说的只计算部分方程来增强收敛性。
3.7 检查UDF
如果我们使用了UDF,出现了发散的问题,可以尝试去掉UDF,看看是否还会出现发散。如果发散消失了,那就说明是UDF的问题,需要检查UDF的代码。
问题2:湍流粘度比超限
1. 湍流粘度比超限
当文本控制台出现:turbulent viscosity limited to viscosity ratio of 1.000000e+05 in 157607 cells,则表明湍流粘度比超限。
1.1 湍流粘度比超限的理解
所谓湍流粘度比超限,其实就是指湍流粘度达到了Fluent内部设置的最大值,在Fluent内部设置粘度比最大为1.0×10⁵。
如果计算过程中湍流粘度比超过这个值,就会被限制在这个值,同时会出现信息提示。
比如上面的提示就是在计算区域的157,607个网格,湍流粘度比超过了1.0×10⁵的限制。此时的湍流流体一定是有问题的
既然只是值过大,那么有没有可能实际上的值就是如此呢??也就是说实际值就是这样,并没有计算发散。只能说微乎其微,这里的限制值已经是非常大的值了,已经大到离谱了。
打个比方,Fluent中的温度限制为1K-5000K,物理学中有没有低于1K,高于5000K的情况呢?肯定有,但是情况非常极端,或者说如果真的在这个温度范围外,Fluent来模拟已经不适用了。
1.2 计算初期出现
和出口出现回流一样,在计算初期出现湍流粘度比超限是正常的情况,一般继续计算下去就会消失,不需要采取措施
1.3 计算发散
如果是计算中期出现这个问题,那一般是计算发散了。可以从下面几个方面检查:
网格质量问题:网格质量差可能导致湍流模型计算不准确,从而产生异常高的湍流粘度比。优化网格质量,尤其是在边界层附近。
边界条件设置不当:错误的边界条件设置可能导致计算域内出现不切实际的流动情况,从而引发湍流粘度比超限。
求解器设置问题:在某些情况下,使用分离式求解器可能会导致湍流参数计算错误,可以尝试使用耦合式求解器。
模型选择不当:对于某些复杂的流动情况,可能需要使用更高级的湍流模型,如RSM(雷诺应力模型),而不是标准的k-epsilon或k-omega模型。
问题3:温度、压力超出范围
2. 温度、压力超出范围
除了湍流粘度比超限外,文本控制框还可能出现温度超限:temperature limited to 5.000000e+03 in 159201 cells on zone 4
和湍流粘度比超限的原因一样,Fluent内部对温度、压力、湍动能、湍动能耗散率等都有个范围限制,如果超出这个范围,就会有信息提示。
在Solution Controls下面的Limits界面会显示这些物理量的限制值,也可以对这些值进行更改
解决办法也和湍流粘度比超限一样,如果是计算初期出现,可以考虑是否是初始化参数设置的问题,继续计算,观察这种现象是否会消失
如果是计算中期出现,则可能的原因如网格质量问题、边界条件设置不当、求解器设置问题、模型选择不当等。参考湍流粘度比超限的解决办法即可。
也可以参考文章中的处理发散的方法:八十八、Fluent出口出现回流怎么办???
问题4:浮点溢出floating point exception
1. 浮点溢出floating point exception
1.1 浮点溢出介绍
浮点溢出是最常见的不收敛情况,此时文本控制栏会出现下面的文本:Error: floating point exception。
最后Fluent会直接停止计算,不要有任何的侥幸心理,你这次的计算是彻底的发散了,发散到Fluent都觉得没有计算下去的必要了。
1.2 为什么会出现浮点溢出?
实际上Floating point exception是一个计算机术语,指的是在执行浮点数运算时发生的错误。浮点异常通常包括以下几种情况:
a. 除以零:尝试除以零的操作会引发浮点异常。在数学上,除以零是未定义的,因此计算机在执行这样的操作时会报错。
b. 溢出:当计算的结果超出了浮点数能够表示的最大或最小值时,会发生溢出。double数可以表示的数字的绝对值范围大约是:-1.79E+308 ~ +1.79E+308
例如,一个非常大的数乘以它自身多次可能会导致溢出。
c. 下溢:当计算的结果非常接近于零,以至于无法在当前精度下表示时,会发生下溢。在这种情况下,结果可能会被设置为零。
d. 无效运算:某些运算在数学上是未定义的,比如负数的平方根,或者格式不正确的数(如NaN,即“非数字”)参与运算。
1.3 浮点溢出的解决办法
可以肯定的是出现浮点溢出一定是发散了,而且只能重新计算,不能在原来基础上继续计算。实际上,在原来的基础上你点计算也算不了。
实际上Fluent计算过程出现浮点溢出的原因并不好找,只能按照发散的方式来一点点检查设置。对于发散,可以参考下面一些常见的排查步骤和解决方法:
1. 检查初始条件和边界条件
确保所有初始条件和边界条件设置合理。例如,速度、压力、温度等数值在物理上应该是合理的。如果这些条件设置得过大或过小,可能会导致计算过程中的不稳定性。
尝试使用更接近实际情况的初始条件,或者用简单的初始条件开始计算,如零初始场或较为平滑的条件。
2. 改进网格质量
检查网格的质量,尤其是网格的体积、扭曲度、最小单元大小等参数。网格质量差(如高度扭曲的网格)可能会导致计算中产生数值不稳定。
3. 调整计算设置
如果进行瞬态计算,尝试减少时间步长,使得计算更稳定。在瞬态计算中增加每个时间步的迭代次数,以确保每个时间步都能充分收敛。
对于稳态计算,降低松弛因子来减缓计算的发散。
4. 验证物性参数
检查并确保物性参数(如密度、粘度、导热系数等)设置合理且符合物理意义。特别是在多相流或高温高压环境中,物性参数的变化可能导致计算不稳定。
5. 更改求解器设置
如果使用双精度求解器收敛性比较差,可以切换为单精度求解器。同样地,如果使用单精度求解器收敛性比较差,可以切换为双精度求解器。一般来说,双精度求解器通常可以提高计算精度,减少数值误差。
也可以尝试改变压力-速度耦合算法(如SIMPLE, PISO, Coupled等)来测试不同算法的稳定性。
6. 逐步简化问题
通过简化模型,如去除物理模型、简化几何结构、减少求解的物理量来尝试是否可以增强收敛
比如,仅求解流动场,忽略热或质量传递,看看是否还会出现问题。也就是我们经常说的只计算部分方程来增强收敛性。
7. 检查UDF
如果我们使用了UDF,出现了浮点溢出的问题,可以尝试去掉UDF,看看是否还会出现浮点溢出。如果浮点溢出消失了,那就说明是UDF的问题,需要检查UDF的代码。
要注意,上面的解决办法是出现发散的一般排除步骤,并不只针对浮点溢出问题。
问题5:Stabilizing temperature to enhance linear solver robustness.
2. 增强线性求解器的鲁棒性
文本控制栏还可能出现下面的文本
Stabilizing temperature to enhance linear solver robustness.
Stabilizing pressure using GMRES to enhance linear solver robustness.
这种文本通常还可能和浮点溢出floating point exception同时出现。
当只出现这种本文时,一般都是收敛性不够好的时候或者计算初期。可以先不必理会,先继续计算下去,观察这种情况是否就会消失。
如果一直存在这个问题,还说明收敛性不够好,但还没有达到彻底发散的地步。此时需要更改一些计算设置来增强收敛性。最常见的一些方式,如:减少时间步长、降低松弛因子等
问题6:The f1 process could not be started
1. The f1 process could not be started介绍
出现文本The f1 process could not be started,不要怀疑,你肯定做了非常过分的事情,直接让Fluent罢工了。
这里的罢工和浮点溢出不一样,浮点溢出是发散了,你还可以操作Fluent重新计算。这里是Fluent软件崩溃了,只能关闭Fluent后重新启动,你之前的cas和dat也无法保存。
类似于,浮点溢出是情侣闹矛盾了,而The f1 process could not be started是直接分手了,而且一声招呼都不打就消失了。
2. 出现The f1 process could not be started的原因
我所遇到的出现这个问题,一般有四种情况:
2.1 网络变化导致
比如在联网的情况下打开Fluent的cas后,某个时间点,网络断掉或者发生其他变化,可能会出现这个问题。
因此我们计算的时候,要保持网络连接的稳定,很多同学喜欢长时间计算时,直接断网。
2.2 电脑睡眠导致
如果我们打开Fluent,想让它一直计算,但由于长时间没有操作电脑,电脑睡眠了,那么此时Fluent可能会出现The f1 process could not be started.
解决办法很简单,就是不让电脑进行睡眠状态。具体方法如下:
控制面板--系统和安全
使计算机进入睡眠状态改为:从不
2.3 Fluent内存分配问题
如果使用了UDF,并且在UDF中使用了UDM(用户自定义内存),而在Fluent中没有对UDM进行设置,那么调用UDF时就会出现The f1 process could not be started.
比如在UDF中使用了5个UDM,而在Fluent界面只分配了4个UDM内存,此时编译UDF不会有任何的错误提示,但只要一使用这个UDF,就会直接崩溃。
因此Fluent界面中的UDM数量要大于等于UDF中使用的UDM个数。
2.4 UDF数据结构问题
还是UDF的问题,我们都知道如果在UDF中写错了代码,在Fluent编译时会出现错误提示,以便我们检查UDF代码。
但是如果UDF涉及到数据结构的问题,即使代码有问题,Fluent也不会进行任何的提示,而是编译完全通过。但是只要你一使用这个UDF(如初始化UDF,点击初始化后),Fluent就会立刻崩溃掉,并出现The f1 process could not be started。
什么算是数据结构问题??
比如对于多相流问题,DEFINE_ADJUST(name,d)宏中的d返回的是混合计算域,你现在想要获取主相的体积分数,使用C_VOF宏,C_VOF(c,t)宏中的参数t应该是主相的t,但是如果你使用d来获取t,获取到的是混合计算域的t。而混合相是没有体积分数的概念的,那么数据结构就产生了问题,软件会崩溃掉。
麻烦之处就在于整个代码没有任何的问题,Fluent也无法识别哪里出现了错误,但是就是不能使用。
如何解决呢??只能自己慢慢理解UDF的数据结构,尤其涉及到多相流和多组分问题时,很容易出现这样的错误
干货推荐
14、其他资源请关注公众号,查看历史推文;