本文简单描述CFD计算过程中的收敛控制问题。
我们总是希望给对方呈现完美的残差收敛曲线,以证明计算结果的可靠性。然而工程中的仿真计算,很多时候残差曲线自己都不敢看,更不要说给别人看了。CFD计算的收敛控制的确是挺麻烦的,这里懒得提那些与计算流体力学算法相关的东西,只是摆一摆为了获得比较好的收敛性,可能采取的一些手段。影响CFD计算收敛性的因素实在太多,可以说贯穿了前处理的每一步操作。从模型简化、网格划分,离散方法、求解控制到边界条件初始条件,都会对计算收敛性造成影响。要获取收敛性好的计算模型,实在不是一件容易的事情。
这里的模型简化指的是将工程问题转化为数学方程可以描述的物理问题。在转化的过程中,不可避免的存在对物理现象的诸多假设,这些假设的合理与否直接影响了计算结果的精度,也会影响到计算过程的收敛性。Fluent中经常出现的浮点错误提示,大部分情况下是由于模型简化存在问题。当然模型简化与仿真者对问题的了解程度密切相关,也与其理论背景有密切关系。不过可以有一些大的指导思想,比如说在进行模型简化之前,可以针对工程现象,评估并回答以下的一些问题:
-
包含了哪些物理现象?流动、传热、多相流、化学反应、多物理量耦合……?(包含的物理现象越多,收敛越困难)
-
物理现象波及的范围有大概多大?(计算区域越大,计算时间越长,收敛越困难)
-
流动是层流还是湍流?(湍流要比层流难收敛得多)
-
若涉及到传热,需要考虑哪些传热形式?是否需要考虑辐射换热?(辐射计算收敛性较差)
-
是否涉及到化学反应?化学反应机理是否明确?(反应机理不明确的化学反应计算收敛性很差)
-
是否包含多相流计算?相间相互作用机理是否明确?(多相流计算收敛性通常都很差,尤其涉及到相间传质的计算)
为了提高计算的收敛性,可以先搭建简单模型,再在初始模型的基础上不断细化,使其逐渐逼近工程问题。
如计算换热,可以先不考虑辐射计算,在获取传导和对流收敛解的基础上,再增加辐射模型考虑辐射换热。
如计算湍流,可以先计算层流,待层流计算收敛之后再开启湍流计算。
如计算化学反应,可以先计算无反应的组分输运,待计算收敛后再添加化学反应。
如计算多相流,可以在先计算单相流,计算收敛后再添加其他相。
工程中经常使用这些方式以提高计算收敛性,但是有一些问题我们必须引起注意:上述采用的方式,在进行稳态计算时不存在任何问题。若采用的是瞬态计算,则需要考虑初始值的问题,并非所有时候都适用。如计算一个离心泵的空化问题,此时若考虑的是离心泵稳定运行时的空化,则可以采用稳态计算,在计算过程中可以先计算单相流场,待单向计算稳定后增加多相流模型考虑空化。但如果计算的是离心泵启动过程中叶片的空化,则不可以采用这种方式,因为如果关注启动过程,则计算初始条件是离心泵叶片静止。
模型简化对计算收敛性影响甚大,若计算不收敛,不妨回过头来审查一下模型简化是否存在问题。
按理说边界条件不应该影响计算收敛性,如果边界条件是真实的话。
然而工程计算中,很多时候获取的边界条件并不真实,有时候干脆就获取不到。简单比方,如果计算一段管道内的流动情况,此时需要输入进出口流动条件(如速度、压力、流量等),很多时候给定的是平均值,有时可能采用更精细点儿的充分发展条件,但实际工程中这些物理量并非均匀分布,要完全符合工程实际似乎也是件比较困难的事情,这对测量仪器提出了更高的要求。更麻烦的是一些边界连平均值都获取不到,这时候常采用理论假设的方式得到边界值。
输入的边界条件与实际边界条件的不相符,可能会造成计算收敛问题。
边界条件的搭配问题也可能对收敛造成影响。
如Fluent中常用的一些边界组合形式:
-
速度入口+静压出口:推荐的组合形式
-
流量入口+静压出口:可压缩流动推荐的组合形式
-
总压入口+静压出口:可用的组合形式,收敛性不如上面两种
-
速度入口+自由出流:不可压缩流动且出口信息未知的时候使用,正常情况下不推荐使用
当然还有其他的组合形式,只要物理边界是真实的,按道理应该都是可用的。不过上面的几种组合形式收敛性更加靠谱一点儿。
边界对于收敛性影响很大,一些物理条件就不收敛的边界,仿真就更别想收敛了。简单比方,给气球吹气这种只有入口的计算区域,质量方程是打死也不可能收敛的了。类似的情况还有很多。
迭代计算对于初始值较为敏感。因此初始条件指定得好不好,对于计算过程的收敛性影响很大。
-
稳态计算:在迭代计算之前,给一个与计算结果较为接近的初始值,有利于提高迭代计算的收敛性。相反,如果初始值与最终值相去甚远,则可能会造成收敛困难。
-
瞬态计算:瞬态计算的结果依赖于初始值,因此初始值不能随便乱给,应当按照实际初始条件来添加。瞬态计算要求每个时间步内达到收敛,若收敛性很差,可尝试减小时间步长以改善收敛性。
一般的CFD软件都提供了全局初始化和局部初始化的功能,灵活运用这两种方法以提供良好的初始值。
计算不收敛,很多人都赖网格不好。讲真,网格真的是背了黑锅。网格对计算收敛性的影响远不及物理模型和边界条件。但是一些极端情况下,网格也会使得迭代计算发散。网格对计算的影响主要体现在两个方面:
-
网格质量。网格质量不仅会影响到计算精度,同样也会影响到收敛过程。尤其是当计算网格中存在扭曲率非常高的计算网格时。如Fluent计算中常出现的湍流粘度比超标,很多时候是由于计算网格而引起。
-
网格分布方式。网格分布应当遵循流场分布,如在流场梯度大的区域布置更多的网格。网格走向应当与流场流向保持一致,否则会出现伪扩散,不仅会影响计算精度,同样也会影响收敛过程。最典型的处理如壁面附近布置正交性较好的边界层网格。大多数情况下六面体(四边形)网格具有比四面体(三角形)网格更好的收敛性,但一些特殊情况(如网格走向与流动方向不一致时)下可能会相反。
仔细设计并划分计算网格,有利于提高计算收敛性。
离散算法也会影响到计算收敛,通常情况下高阶算法能够获得更精确的计算结果,同时收敛性也越差。
实际计算过程中,常采用低阶算法进行初始计算,待低阶算法收敛后再切换至高阶算法得到更精确的结果。
亚松弛因子用于控制代数方程组的迭代过程,也会对收敛性产生影响。
通常当残差波动较大时,可尝试降低亚松弛因子;当残差波动较小且下降缓慢时,可尝试增大亚松弛因子。
亚松弛因子的取值范围0~1,从计算理论上讲,只要残差达到收敛,亚松弛因子的取值只会影响收敛过程,其对计算结果不会产生任何影响。该参数的调整没有可供参考的资料,仅凭经验手动调整。
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册