吾生有涯 学海无涯
析模有界 知识无界

CFD模拟中的各种误差来源

内容纲要

本文描述CFD计算过程中的各种误差来源。

1 建模误差

建模误差(modeling errors)有时也称为模型误差。

流体流动及相关过程通常由表示基本守恒定律的积分方程或偏微分方程来描述。这些方程可视为问题的数学模型。尽管纳维-斯托克斯方程可以被认为是精确的,但对于大多数工程学感兴趣的流体来说,求解这些方程是不可能的。如果要直接模拟湍流,对计算机资源的要求非常高;其他现象如燃烧、多相流、化学过程等,也很难精确描述,此时不可避免地需要引入建模近似。牛顿定律和傅立叶定律本身只是模型,尽管它们是以许多流体的实验观测结果为坚实基础的。即使基础数学模型近乎精确,流体的某些性质也可能无法精确获知。所有流体性质都与温度、组分浓度以及可能的压力密切相关;这种相关性经常被忽视, 从而带来额外的建模误差(例如,自然对流中使用布森斯克近似值,低马赫数流体中忽略可压缩性效应等)。

方程需要初始条件和边界条件。这些条件通常很难精确指定。在其他情况下,由于种种原因,我们不得不对其进行近似处理。通常情况下,本应是无限的求解域被视为有限域,并应用了人为的边界条件。我们经常需要对解算域的入口以及侧向和出口边界的流动情况做出假设。因此,即使控制方程是精确的,边界的近似值也会影响解法。

最后,几何图形可能难以精确表示;通常我们不得不忽略难以生成网格的细节。如果不简化几何体,许多使用结构网格或块结构网格的代码就无法应用于非常复杂的问题。

因此,即使我们能够精确地求解方程和指定的边界条件,由于模型假设中的误差,结果也无法精确地描述流动。因此,我们将建模误差定义为:在指定的几何形状、流体特性、初始条件和边界条件下,实际流动与数学模型精确解之间的差值

2 离散误差

离散误差(Discretization Errors)。

此外,我们很少能够精确地求解控制方程。每种数值方法都会产生近似解,因为必须进行各种近似,才能得到可以在计算机上求解的代数方程系。例如,在有限体积法中,我们必须对表面积分和体积积分、中间位置的变量值以及时间积分进行适当的近似。显然,空间和时间离散网格单元越小,这些近似值就越精确。使用更好的近似值也能提高精度,但这并不是一件小事,因为更精确的近似值更难编程,需要更多的计算时间和存储空间,而且可能难以应用于复杂的几何体。通常情况下,用户在编写代码之前会选择近似值,因此空间和时间网格分辨率是用户控制精度的唯一参数。

同样的近似值可能在流动的某一部分非常准确,但在其他部分却不准确。统一的间距(空间或时间)很少是最佳选择,因为流动可能在空间和时间上都有强烈的局部变化;如果变量的变化很小,误差也会很小。因此,在离散元素数量和近似值相同的情况下,计算结果的误差可能相差一个数量级或更多。由于计算量与离散元素的数量成正比,因此离散元素的合理分布和大小对计算效率(达到规定精度的成本)至关重要。

离散误差定义为控制方程的精确解与离散近似精确解之间的差值

3 迭代误差

迭代误差(Iteration Errors)

离散过程通常会产生一组耦合的非线性代数方程。由于直接求解通常成本过高,因此这些方程通常会被线性化,并通过迭代法求解线性化方程。

任何迭代过程都必须在某个阶段停止。因此必须定义一个收敛标准,以决定何时停止迭代过程。通常情况下,迭代要持续到残差水平降低到一个特定的量为止;可以证明这等同于误差也降低了类似的量。

即使求解过程收敛且迭代时间足够长,我们也永远无法获得离散方程的精确解;计算机有限算术精度导致的舍入误差将为误差提供一个下限。通常情况下,直到求解误差接近计算机的算术精度时,舍入误差才会成为问题,而这一精度远远超过通常所需的精度。

迭代误差定义为离散方程的精确解与迭代解之间的差值。虽然这种误差与离散本身无关,但随着离散网格单元数量的增加,将误差减小到给定大小所需的努力也在增加。因此,必须选择一个最佳的迭代误差水平--与其他误差相比足够小(否则无法评估),但又不能更小(因为代价会大于必要)。

4 编程和用户误差

人们常说,所有计算机代码都有bug--这可能是真的。代码开发人员有责任设法消除它们;我们将在这里讨论这个问题。通过研究代码很难找出编程错误,更好的办法是设计测试问题,在这些问题中可能会出现由bug引起的错误。在将代码应用于日常应用之前,必须仔细检查测试计算的结果。我们应该检查代码是否以预期的速度收敛,误差是否以预期的方式随离散元素数量的增加而减少,以及解法是否与分析或其他代码得出的公认解法一致。

代码的一个关键部分是边界条件的实施。必须对结果进行检查,以确定所应用的边界条件是否真正满足;发现不满足边界条件的情况并不少见。Peri ́c(1993 年)讨论了自然对流中绝热边界的一个相关问题。另一个常见的问题来源是紧耦合项的近似值不一致;例如,在静止气泡中,自由表面上的压降必须由表面张力来平衡。已知分析解的简单流动对于验证计算机代码非常有用。例如,可以通过移动内部网格来检验使用移动网格的代码,同时保持边界固定,并使用静止流体作为初始条件;流体应保持静止,不应受到网格移动的影响。

求解的准确性不仅取决于离散方法和代码,还取决于代码的使用者;即使代码很好,也很容易出现错误结果!虽然大多数用户错误导致的错误属于上述三类之一,但重要的是要区分系统误差(方法中固有的错误)和可避免错误(代码中的错误或代码使用不当或不正确)。

许多用户错误是由于输入数据不正确造成的;错误往往是在进行多次计算后才发现,有时甚至从未发现!经常出现的错误是在使用无量纲方程时,几何比例或参数选择造成的。另一种用户错误是由于数值网格不佳造成的(网格点分布不当会使误差增加一个数量级或更多,或者根本无法求解)。

注:本文译自《Computational Mehtods for Fluid Dynamics》。


(完)

本篇文章来源于微信公众号: CFD之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《CFD模拟中的各种误差来源》
文章链接:https://www.topcfd.cn/37695/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册