《Fluent浮点数溢出的原因及解决方法.docx》由会员分享,可在线阅读,更多相关《Fluent浮点数溢出的原因及解决方法.docx(4页珍藏版)》请在优知文库上搜索。
1、floatingpointexception的问题原因及处理方法在fluent计算中,经常会遇到floatingpointexception的报错,让人很头疼。查找了一下,相关网上的原因,总结了这篇文章。内容不全部为原创。1.1 浮点数floatingpoint既然说了是浮点数溢出,那么先来看下什么是浮点数。我们都知道,fluent用的C语言写的。好的,我们来回顾下在C语言里,数据类型有哪些。表IC语言中的数据类型类型操作数类型存储长度char整数/字节8short整数/字16int整数/双字32longint整数/双字32Longlongint-2x32Char*整数/双字32Float单精
2、度浮点数32Double双精度浮点数32Longdouble扩展精度浮点数80/961.2 浮点数的表示方式在计算机中,采用科学计数法来存储浮点数,不同于平时见到以10为基数,计算机中以2为基数,表示浮点数。例如,要表示123456789,科学计数法表示为1.23456789*108或者,12.3456789*107o在计算机中,用科学计数法,并且要用规格化的形式,即小数点前只有一位非0数。这个是为了方便运算,统一的格式适合重复运算。1.3 浮点数的表示范围可以看到浮点数是有表示范围的,而且不仅有最大值,正数里有最小值,负数里有最小值,还有最大值。32位浮点数的规格化数表示为:018931S阶
3、码E尾数M第0位,表示正负第1-8位,表示阶码E第9-31位,表示尾数M浮点数表示的范围,负数-(l-2-24)2八127至J-2八-129正数2八-129到(1-2八-24)1.4 为什么会出现浮点数的溢出?浮点数溢出的问题,最主要的问题就是除以O,有的人会说了,那我的这里面都有值,都给了速度,但是,如果给的值过小的话,就会导致浮点数溢出。另外,如果网格质量差,在一些质量差的地方,会出现极小值,导致出现溢出的情况。1.5 浮点数溢出的解决方法常见的问题可能有边界条件设置有误,初始条件不合理,网格质量差,时间步长太大,松弛因子设置问题。使用upwindconvectionschemes引入了数
4、值扩散,可以确保在特定的情况下收敛。避免使用高阶项,因为更容易引起不收敛的问题。检查边界条件湍流动能是否为零,温度边界是否有未定义,可压缩流体中的压力是否为零。初始化初始化出现问题,瞬态计算的初始值设定是否合理。如果不合理,或者报错,可以修改或者细化。合适的步长步长太大导致计算不收敛,在开始的时候如果步长过大,流体的流速较小,会出现报错。使用亚松弛因子默认的计算方式,使用新计算的值代替旧值,但是如果都用旧值,可能出现在局部收敛的情况。亚松弛因子的原理,在新值产生之后,不全用新值代替旧值,而是给新值和旧值个一直权重,组合来进行。求解器尽可能使用耦合式求解器处理器在串联或者并联计算的时候,使用单个求解器可能会出现浮点数溢出。网格质量检查所有网格的质量,确保歪斜度skewness在0.8以下。