一文说清楚Fluent常见的出错问题及解决办法

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的数据结构,尤其涉及到多相流和多组分问题时,很容易出现这样的错误

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值