CFD误差估计:迭代误差
封面图片由腾讯混元AI生成
每种数值求解方法都不可避免地存在误差。
我们不仅要认识到误差的存在,更要理解误差的大小,以及误差在特定应用中的可接受程度。在不同情景下,可接受的误差标准可能会有极大的差异。例如,在新产品早期设计的优化研究阶段,可能更注重定性分析和系统对设计变更的反应,在这种情况下可以接受的误差范围,在其他要求更为严格的场合可能是灾难性的。因此,在获取计算结果的同时,了解这些结果的好坏同样重要。特别是在使用商业软件时,用户应当更加关注结果的精细分析以及误差的估算。这对于初学者而言可能是一项艰巨的任务,但对于经验丰富的计算流体力学(CFD)实践者来说,这是他们日常工作的一部分。
误差分析的步骤应与前文介绍误差的顺序相反。也就是说,首先应当估计迭代误差,这可以在单次计算中完成;接着是离散误差,这需要至少在两套不同的网格上进行计算;最后是建模误差,这通常需要参考实际数据,并且可能需要经过多次计算来获得。每一个级别的误差都应当比前一个级别小一个数量级,否则后续误差的估算将不够准确。
迭代误差估计
纳维-斯托克斯方程具有高度非线性特性,在求解过程中需要采用两个迭代循环:其中内层迭代主要用于求解特定变量的线性化(可能为解耦的)方程组,而外层迭代则用于更新线性方程组的系数和右侧向量。
在计算效率方面,掌握何时停止迭代过程至关重要。对于内部迭代,无需进行过多的迭代,因为在正确求解非线性耦合方程组之前,需要多次更新矩阵系数和右侧向量。在大多数情况下,将残差水平降低一个数量级就足够进行系数更新;过度迭代并不会减少所需的外迭代次数,反而会延长计算时间。然而,如果过早停止内迭代,将会需要更多的外迭代,从而导致计算工作量增加。最佳迭代次数取决于具体问题。控制外部迭代更为关键:当矩阵系数和右侧向量的更新导致的解的变化可以忽略不计时,离散化非线性方程才可视为正确的解。根据经验,外部迭代误差(有时也称为收敛误差)应至少比离散误差低一个数量级。对于大多数工程应用而言,任何变量的相对精度(与参考值相比的误差)达到三到四位有效数字就足够了。有许多方法可以估算这些误差;Ferziger 和 Perić(1996)详细分析了其中的三种方法;也可参见第 5.7 节。可以证明,在迭代初始阶段外,误差减少速率与残差以及连续迭代之间的差值减少速率相同。这在图 8.9 中得到了证明:在经过一些迭代后,残差的范数、连续迭代之间的差值的范数、估计的误差和实际迭代误差的曲线都是平行的。请注意,对于外迭代,使用线性化方程的当前解和更新的矩阵系数和右侧计算的残差是相关的(即在新内迭代循环开始时计算的残差)。通过减去两个连续循环中最后一个内迭代的值,可以得到相关解的差值。因此,如果在计算开始时知道误差水平(如果从零场开始,则误差本身就是解;如果进行了一个粗略但合理的猜测,则误差会稍低),那么可以确信,如果残差(或两个迭代之间的差值)的范数降低了 3-4 个数量级,误差将降低 2-3 个数量级。这意味着在进一步的迭代中,前两个或三个最显著的数字将不会发生变化,因此解的精度在 0.01-0.1%之间。上述说明适用于稳态问题的求解。在求解非稳态问题时,迭代误差的估算要复杂一些。对于显式方法,只需确保压力或压力修正方程的求解残差足够小,以保证质量守恒方程得到充分满足;通常将残差降低三个数量级通常就足够了。在隐式方法中,如果时间步长非常小(如 LES 模拟中的情况),则可能不需要对外部迭代提出如此严格的标准,因为从一个时间步长到另一个时间步长,解的变化并不大,因此在每个时间步长内将残差降低三个数量级可能过于严格。在这种情况下,3 次外部迭代可能足以更新非线性和耦合效应。在任何新的应用领域,都应该测试改变收敛标准的效果,以确保迭代误差足够小。一个常见的错误是观察连续迭代之间的差值大小,并在差值不超过某个小数时就停止计算。然而,差异可能很小,因为迭代正在缓慢收敛,而迭代误差可能非常大。为了估算误差的大小,我们必须对连续迭代之间的差值进行适当的归一化处理;当收敛速度较慢时,归一化因子会变得很大(见第 5.7 节)。另一方面,要求差值的范数下降三到四个数量级通常是一个安全的标准。由于大多数 CFD 方法中的线性方程求解器都需要计算残差,因此最简单的做法是监控残差范数(绝对值之和或平方和的平方根)。在离散误差较大的粗网格上,可以允许较大的迭代误差;而在细网格上则需要更严格的残差。如果收敛标准是基于残差总和而不是每个节点的平均残差,则会自动考虑到这一点,因为残差总和会随着节点数的增加而增加,从而收敛标准也会随之收紧。在开发新代码或添加新功能时,我们必须毫无疑问地证明求解过程确实收敛,直到残差达到舍入水平。通常,不收敛表明存在错误,特别是在边界条件的执行中。有时,极限值低于宣布收敛的临界值,问题可能不会被注意到。在其他情况下,程序可能更早停止收敛(甚至出现分歧)。一旦对所有新特性进行了彻底测试,就可以回到通常的收敛标准。此外,如果试图获得一个本质上不稳定的问题的稳定解(例如,在雷诺数下围绕圆柱体的流动,其中存在卡门涡街),迭代将不会收敛。由于每次迭代都可以解释为一个伪时间步长(见第 7.2.2.2 节),因此迭代过程很可能不会发散,而是残差无限振荡。如果几何形状是对称的,且稳定的对称解不稳定(例如扩散器或突然膨胀;稳定解--层流解和雷诺平均解--通常是不对称的,一侧的分离区域较大),则经常会出现这种情况。我们可以通过降低雷诺数或使用对称边界条件计算几何体一半的流动,或进行瞬态计算来检查是否存在这种问题。特别是在复杂几何体中,流动可能会在求解域的一小部分(如汽车后视镜后面)出现局部不稳定。在这种情况下,残差可能会下降到通常的收敛水平以下,但如果试图进一步降低残差,残差就会在某个阶段开始振荡。通常情况下,不稳定性非常弱,如果继续进行非稳态计算,积分量(如力、力矩、总热通量等)在时间上可能不会发生明显变化,但稳态计算却不会收敛。图 12.3 和 12.4 展示了在计算壁面障碍物周围的稳态湍流时可能遇到的问题。尝试进行稳态计算时,残差值在较高的值附近波动,没有明显的减小趋势。在经过 2000 次迭代后,我们切换到瞬态模拟。在新时间步开始时,残差仍保持在较高水平,没有显示出降低的趋势。然而,在每个时间步内,外部迭代收敛效果良好:每个时间步仅需进行 5 次外部迭代,动量方程中的残差就会下降两个数量级以上。从速度矢量(不对称)可以看出,由于障碍物后方的尾流是非稳态的,因此流体显然没有稳态解。
图 12.5 和图 12.6 揭示了稳态和瞬态模拟对障碍物产生的阻力和升力的影响。在稳态计算中,阻力系数围绕一个值波动,这个值远低于瞬态模拟中的值。在这两种情况下,升力均在零附近波动,但在稳态计算中,升力的振幅几乎是瞬态计算的两倍。展示这些图的目的是为了提醒 CFD 代码的用户:如果稳态计算中的残差开始振荡,且振荡水平高于通常的收敛标准,则说明控制方程未得到求解,不应试图通过变量的可视化或平均振荡力来解释这些图。只有切换到瞬态模拟,才能在每个时间步结束时获得可进行物理解释的有效控制方程解。现在,可以对力或其他积分参数的振荡进行平均(例如,评估平均阻力或传热系数)或其他处理(例如,获得振荡频率、围绕平均值波动的均方根值等)。
在细化网格或从低阶离散格式切换到高阶离散格式时,常会遇到收敛问题。原因在于,当流动的不稳定性较弱时,离散误差可能会引入足够的阻尼(如一阶迎风格式的数值扩散),迭代可能会收敛到稳定状态。流动的不稳定性通常与流动分离有关,而小的分离区(如机翼的吸气侧)可能只有在网格充分细化后才会出现。无论如何,如果瞬态计算中每个时间步长内的外部迭代收敛,而在稳态计算中残差振荡,则说明流动本质上是非稳态的,应按非稳态计算。如果外部迭代在瞬态模拟的每个时间步内都不收敛,可能的原因包括:
注:本文翻译自《Computional Methods for Fluid Dynamics》第4版。翻译工作由智谱清言完成,简单校对。建议看英文原版。
”
(完)
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-12-20
最近编辑:11月前
博士
|
教师
探讨CFD职场生活,闲谈CFD里外
获赞 2565粉丝 11291文章 732课程 27