数值求解方法应该具有某些特性。数值方法最重要的特性包括:一致性、稳定性、收敛性、守恒性、有界性、可实现性及精度等。
2.5.1 一致性
当网格间距趋于零时,离散应该变得精确。离散方程与精确方程之间的差异称为截断误差(truncation error)。它通常是通过用泰勒级数扩展取代离散化近似中的所有节点值来估计的。其结果是恢复原来的微分方程加上一个余项,该余项代表截断误差。当网格间距和/或时,截断误差必须为零。截断误差通常与网格间距和/或时间步长的幂成正比。如果最重要的项与或成正比,我们称该方法为阶近似;为保持一致性,要求。理想情况 下,所有的项都应该用相同阶数的近似离散化;然而,一些项(例如,高雷诺数流动中的对流项或低雷诺数流动中的扩散项)可能在特定的流动中占主导地位,以比其他项更精确的方式处理它们可能是合理的做法。
一些离散化方法导致截断误差,这些误差是与之比的函数。在这种情况下,一致性要求只是有条件地得到满足:和必须以允许适当比率归零的方式减少。在接下来的两章中,我们将证明几种离散格式的一致性。即使近似一致,也不一定意味着离散方程组的求解在小步长的极限下会成为微分方程的精确解。要做到这一点,求解方法还必须是稳定的。
2.5.2 稳定性
如果一种数值求解方法不放大数值求解过程中出现的误差,就可以说它是稳定的。对于时间相关的问题,稳定性保证了当精确方程的求解有界时,该方法能够产生有界的解。对于迭代方法,稳定的方法是不发散的方法。稳定性可能很难研究,特别是当边界条件和非线性问题存在时。由于这个原因,通常要研究没有边界条件的恒定系数的线性问题的方法的稳定性。经验表明,以这种方式获得的结果往往可以应用于更复杂的问题,但也有明显的例外。
研究数值格式稳定性最常用的方法是von Neumann方法。我们将在第6章对其中一个格式进行简要描述。本书中要描述的大多数求解格式都进行了稳定性分析,我们将在描述每一个格式时陈述重要的结果。然而,在求解具有复杂边界条件的复杂非线性耦合方程时,稳定性结果很少,因此可能不得不依靠经验和直觉。许多求解方法要求时间步长小于某个极限值或要求使用欠松弛。我们将在第六章、第七章和第八章讨论这些问题,并给出时间步长和欠松弛参数值的选择准则。
2.5.3 收敛性
如果离散方程的解随着网格间距趋于零而趋向于微分方程的精确解,则称该数值方法是收敛的。对于线性初值问题,Lax等价定理(Richtmyer和Morton 1967年,或Street 1973年)指出,"给定一个适当的线性初值问题和一个满足一致性条件的有限差分近似,稳定性是收敛的充要条件"。显然,除非求解方法收敛,否则一致性格式是没有用的。
对于受边界条件影响较大的非线性问题,方法的稳定性和收敛性是难以证明的。因此,收敛性通常用数值实验来检验,即在一系列连续的细化网格上重复计算。如果该方法是稳定的,并且在离散化过程中使用的所有近似值都是一致的,我们通常会发现,求解确实收敛到一个与网格无关的解。对于足够小的网格尺寸,收敛速度由主要截断误差分量的阶数所制约。这使我们能够估计出求解的误差。我们将在第3章和第5章中详细描述这一点。
2.5.4 守恒性
因为要求解的方程是守恒方程,数值格式也应该在局部和全局基础上遵循这些定律。这意味着,在稳定状态下和没有源的情况下,离开封闭体积的守恒量等于进入该体积的量。如果使用强守恒方程和有限体积法,这对每个单独的控制体积和整个解域都是有保证的。如果在选择近似值时注意,其他离散方法也可以保证守恒。对源项或汇项的处理应该是一致的,这样域内的总源或汇就等于通过边界的守恒量的净通量。
这是求解方法的一个重要性质,因为它对求解误差有一个约束。如果质量、动量和能量的守恒得到了保证,那么误差只能在解域上不适当地分布这些量。非守恒格式可以产生人为的源和汇,从而改变局部和全局的平衡。然而,非守恒格式可以是一致和稳定的,因此在非常细的网格的限制下可以得到正确的解。在大多数情况下,只有在相对较粗的网格上,非守恒格式造成的误差才可见。问题是很难知道在哪个网格上这些误差是足够小的。因此守恒格式是首选。
2.5.5 有界性
数值解应该位于适当的范围内。物理上的非负量(如密度、湍流动能)必须总是正的;其他量,如浓度,必须位于0%和100%之间。在没有热源的情况下,一些方程(如没有热源时温度的热方程)要求在域的边界上找到变量的最小值和最大值。这些条件应该被数值近似所继承。
有界性通常很难保证。我们将在后面说明,只有一些一阶格式能保证这一特性。所有的高阶格式都可能产生无界的解;幸运的是,这通常只发生在太粗的网格上,因此具有下冲和过冲的解通常表明解的误差很大,网格需要细化(至少是局部)。问题是容易产生无界解的格式可能操作稳定性和收敛性问题。如果可能的话,应该避免使用这些方法。
2.5.6 可实现性
对于那些过于复杂而无法直接处理的现象(如湍流、燃烧或多相流),其模型的设计应能保证物理上的真实解。这本身不是一个数值问题,但不可实现的模型可能会导致非物理解或导致数值方法的发散。我们不在本书中处理这些问题,但如果想在CFD代码中实现一个模型,就必须注意这个特性。
2.5.7 精度
流体流动和传热问题的数值解只是近似解。除了在求解算法的发展过程中可能引入的误差外,在编程或建立边界条件时,数值解总是包括三种系统误差:
-
建模误差(Modeling error),定义为实际流动与数学模型精确求解之间的差异; -
离散误差(Discretization error),定义为守恒方程组的精确解与通过离散这些方程组得到的代数方程组的精确解之间的差异; -
迭代误差(Iteration error),定义为代数方程组的迭代解和精确解之间的差异。
迭代误差通常被称为收敛误差(本书的早期版本就是如此)。然而,收敛一词不仅与迭代求解方法中的误差减少有关,而且还经常与数值解向不依赖网格的解收敛有关(非常恰当),在这种情况下,它与离散误差密切相关。为了避免混淆,我们将坚持上述误差的定义,在讨论收敛问题时,总是指出正在谈论哪种类型的收敛。
意识到这些误差的存在是很重要的,更重要的是要努力把它们区分开来。各种误差可能会相互抵消,所以有时在粗网格上得到的解可能比在更细的网格上得到的解更符合实验结果--根据定义,后者应该更准确。
建模误差取决于在推导变量的输运方程时所作的假设。当研究层流时,它们可能被认为是可以忽略的,因为NS方程代表了足够精确的流动模型。然而,对于湍流、两相流、燃烧等,建模误差可能非常大--模型方程的精确解可能在量上是错误的。通过简化解域的几何形状、简化边界条件等也会引入建模误差。这些误差是事先不知道的;它们只能通过比较离散化和迭代误差可以忽略的解与精确的实验数据或更精确的模型获得的数据(例如,直接模拟湍流的数据等)来评估。在对物理现象的模型(如湍流模型)进行判断之前,控制和估计迭代和离散误差是非常重要的。
我们在上面提到过,离散近似引入的误差随着网格的细化而减小,并且近似的阶数是衡量精度的一个标准。然而,在给定的网格上,相同阶数的方法可能产生相差一个数量级的求解误差。这是因为阶数只告诉我们误差随着网格间距的减小而减小的速度--它没有提供关于单个网格上误差的信息。我们将在下一章中说明如何估计离散误差。
迭代求解和舍入引起的误差更容易控制;我们将在第五章中看到如何做到这一点,其中将介绍迭代求解方法。有许多求解格式,CFD代码的开发者可能很难决定采用哪一种。最终的目标是以最少的努力获得所需的精度,或者以现有的资源获得最大的精度。每次我们描述一个特定的格式时,我们将指出它在这些标准方面的优点或缺点。
注:以上内容翻译自《Computational Methods for Fluid Dynamics》 第2.5节“数值求解方法的特性”
”
这本书相当的经典,目前最新版是第4版,不过似乎世图没有引进版权,国内买的话有点儿贵,而且购货时间很长。新版更新了一些新的内容,真要看的道友可以百度搜搜看,应该是可以找到PDF版本的。
(完)
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册