Fluent浮点数溢出的原因及解决方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

floating point exception 的问题原因及处
理方法
在fluent计算中,经常会遇到floating point exception的报错,让人很头疼。

查找了一下,相关网上的原因,总结了这篇文章。

内容不全部为原创。

1.1浮点数floating point
既然说了是浮点数溢出,那么先来看下什么是浮点数。

我们都知道,fluent用的C语言写的。

好的,我们来回顾下在C语言里,数据类型有哪些。

表1C语言中的数据类型
1.2浮点数的表示方式
在计算机中,采用科学计数法来存储浮点数,不同于平时见到以10为基数,计算机中以2为基数,表示浮点数。

例如,要表示123456789 ,科学计数法表示为 1.23456789*10八8或者,12.3456789*10八7。

在计算机中,用科学计数法,并且要用规格化的形式,即小数点前只有一位非0数。

这个是为了方便运算,统一的格式适合重复运算。

1.3浮点数的表示范围
可以看到浮点数是有表示范围的,而且不仅有最大值,正数里有最小值,负数里有最小值,还有最大值。

32位浮点数的规格化数表示为:
0 1 8 9 _______ _31
第0位,表不正负
第1-8位,表示阶码E
第9-31位,表示尾数M
浮点数表示的范围,
负数-(1-2Λ-24)χ2八127 至∣J-2八-129
正数2八-129 到(1-2Λ-24)
1.4为什么会出现浮点数的溢出?
浮点数溢出的问题,最主要的问题就是除以0 ,有的人会说了,那我的这里面都有值,都给了速度,但是,如果给的值过小的话,就会导致浮点数溢出。

另外,如果网格质量差,在一些质量差的地方, 会出现极小值,导致出现溢出的情况。

1.5浮点数溢出的解决方法
常见的问题可能有边界条件设置有误,初始条件不合理,网格质量差,时间步长太大,松弛因子设置问题。

使用upwind convection schemes
引入了数值扩散,可以确保在特定的情况下收敛。

避免使用高阶项,因为更容易引起不收敛的问题。

检查边界条件
湍流动能是否为零,温度边界是否有未定义,可压缩流体中的压力是否为零。

初始化
初始化出现问题,瞬态计算的初始值设定是否合理。

如果不合理,或者报错,可以修改或者细化。

合适的步长
步长太大导致计算不收敛,在开始的时候如果步长过大,流体的流速较小,会出现报错。

使用亚松弛因子
默认的计算方式,使用新计算的值代替旧值,但是如果都用旧值,可能出现在局部收敛的情况。

亚松弛因子的原理,在新值产生之后, 不全用新值代替旧值,而是给新值和旧值个一直权重,组合来进行。

求解器
尽可能使用耦合式求解器
处理器
在串联或者并联计算的时候,使用单个求解器可能会出现浮点数
网格质量
检查所有网格的质量,确保歪斜度skewness在0.8以下。

相关文档
最新文档