如今CFD在各行各业中已得到广泛的应用,然后很多人使用CFD并不是为了解决实际的工程问题,而仅仅是为了有个好看的后处理结果,从而显得的自己的研发是多么的高大上,这样悲催的局面客观上也是无法避免的。然而这并不是一个真正CFD工程师的初衷,CFDer需要通过专业能力水平的不断提高,用真实可靠的模拟结果,为工程项目提供真正有意义的服务和支持。
今天就来讨论一下CFD计算的确认与验证。
综述
本文对CFD确认与验证的基本过程做了介绍。主要目的是为了表明CFD代码/程序的精度,让大家能够在CFD仿真中自信的使用它们,且在设计中做决定的时候认为结果是可信的。
那么首先要了解代码/程序、仿真和模型的不同之处。
1、代码/程序:代码是计算机指令、数据输入和定义的集合。如CFD代码/程序(WIND、OVERFLOW、USM3D,...)就是包含了ASCII代码和文档的程序包。代码/程序根据其验证完成情况的不同可以分为三个层级:研究级(research)、Beta级(pilot)和产品级(product)。产品级的代码/程序已经对既定的设计对象进行了充分的验证,包括系统级别的验证。
2、仿真:仿真的定义是对模型的运用。对CFD分析来说,运行CFD代码/程序就是仿真。
3、模型:模型的定义是对物理系统或者过程的表示,以加强我们对其理解、预测或者控制的能力。
从本质上讲(他们存在这样的关系),将模型转化为计算机代码/程序,然后使用代码/程序来做CFD仿真,得到用于工程分析的结果。而确认与验证则是评价代码/程序和仿真结果的误差。
确认评估决定了理想模型的程序和计算实施的正确与否。它通过与理论结果的对比评价模型的数学正确性。确认评估用于评价程序的误差。
验证评估决定了计算仿真结果与真实物理的符合程度。它通过与试验结果的对比评价模型的科学正确性。
CFD仿真的确认与验证的严格过程是怎样的?这仍然存在分歧。CFD是一项成熟但处于蓬勃发展中的技术,是涉及强耦合、非线性偏微分方程求解的复杂技术,它试图将计算模型理论和试验模型用于复杂几何外形的离散域。一项详细的关于不确定性和误差评估工作应该将其与CFD的三个根本——理论、试验和计算——联系起来。随着计算资源的增加,未来CFD的应用也将快速的增长起来。
由于CFD代码/程序自身的复杂性和可能应用领域的增长,确认与验证工作也处于持续发展中。一些基本的确认应先于代码/程序发布之前进行,而针对不同的流动类型的验证应先于将程序应用于相似的流动问题。然而,随着代码/程序的发展,确认与验证工作也应继续进行。
CFD结果的使用
CFD分析所需的精度层级取决于结果的使用。概念设计阶段,可能更关注总的激波结构信息,而详细设计阶段,则需要获得精确的恢复压力。每一个待决定的量对精度都有其自身的要求。可信度的层级则根据信息需求的不同而变化。
根据需求精度的不同,CFD用于设计和分析大致可以分为三个层级:
1、给出量级信息。CFD给出试验方法所不能提供的整个流场细节,这对于了解流场中物理量的分布情况很有用。这个时候,精度要求是比较低的。
2、给出增量信息。CFD对试验结果进行修正,这相较于CFD方法得到的结果具有更高的精度。因为做差分的时候有舍入部分的误差存在。例如,有一个相对于已知基准值的设计变化,基准值叫为Pbaseline,那么P的变化可以表示为:
P=Pbaseline+dP
其中dP是由于设计变化引起的P的变化的增量。如果进行两个CFD仿真(第一个是基本构型和第二个是变化后的构型)的物理量P由于涉及变化引起的增量可以表示为:
dP=(P+E)2-(P+E)1=dPactual+dE
其中E为由CFD仿真得到P时所带来的误差。可以看出,误差的增量是dE,但该项却被忽略掉了。
3、给出绝对量。获得物理量P的绝对值所需要的精度层级最高。对精度的要求事实上是设计过程的一部分,由CFD仿真得到的精度随着量的特点的不同而发生变化,因此,没有可能将所有的物理量限定在某个精度或者误差带内。但下面关于网格收敛性研究的确认方法能够给计算提供一个误差带。
流场特性
在将CFD应用于典型的航天系统流动分析时,首先我们必须了解流场特性。我们必须了解我们验证CFD代码/程序和过程中的真实情况。如以下情况:
流场的主要特征可以用马赫数刻画。我们关注的是分析流动马赫数范围,如从0(静止)到25(高超声速)。
流场中表现高雷诺数的区域是由层流向湍流(紊流)转变的区域。沿着物体和入口物面流动产生边界层。逆向压力梯度则可能出现在内流中。在跨声速、超声速和高超声速流动中,会有激波产生。在这些情况下,边界层可能会有分离。
当流动为高马赫数时,真实气体效应会变得重要起来。这时候需要使用化学模型来描述理想气体的热量与加热,平衡气体和气体混合的化学反应。
通常几何模型是很复杂的,需要物理建模。
非定常流动特性也许会越发重要。
物理模型
CFD代码/程序中广泛使用下面的物理模型。如:
1、空间尺度。进气道几何模型使用二维或者轴对称而不是完整的三维模型。
2、时间尺度。可以假设定常流动或者尝试捕捉时间的变化。
3、N-S方程。N-S方程是连续流的控制方程,粘性和热传导效应也考虑在内。如果不考虑这些因素的话,可以使用无粘方程。
4、湍流模型。有各种各样的数值上的带有各种参数的一方程,二方程湍流模型和自由来流边界田间。也有壁面函数的选项。
5、热动力学和输运特性。热动力学和输运特性之间的关系通常是常数,代数方程或者拟合曲线的关系。
6、气体化学模型。进气道流动一般涉及由理想气体状态方程充分描述理想气体热。当温度很高时(大于700K),可能需要使用理想加热气体,平衡气体或者化学反应气体(大于2000K)模型。
7、流场边界条件。包括亚声速和超声速自由流动入口和出口。
8、吹/吸。能够当做质量流量边界或者多空边界处理。另一种方法则是将其处理为真实的几何模型孔。
9、流动控制设备。流动控制很重要且发展了一些新的技术。涡流发生器是在进气道中使用的最重要的流动控制设备。他们可以通过建模或者几何模型的近似处理。
CFD分析过程
进行CFD分析的一般过程如下所示:
1、将流动问题表示为表达式
分析的第一步是通过寻求以下问题的答案进将流动问题表示为表达式。
——分析的目的是?
——达到这些目的最简单的途径是?
——包含怎样的几何?
——来流和工作状态是怎样的?
——该使用何种空间模型(一维、准一维、二维,轴对称还是三维?)
——流域是怎样的?
——该使用何种时间模型?(定常或非定常)
——流动的粘性情况(无粘、层流还是湍流)
——该使用何种气体模型?
2、建立几何与流域的模型
进行流动分析的对象需进行建模。一般涉及CAD软件几何造型。付出合理的努力进行分析需要进行几何模型近似与简化。于此同时,应该对实施仿真的流域范围做一个确定。流域的部分边界应与几何模型曲面保持一致。其他曲面是自由边界,在自由边界上,流体流入或者流出。几何模型和流域以这样的方式建模,然后用于网格生成。这样,建模过程通常需要考虑网格生成的结构和拓扑。
3、设置边界条件与初始条件
当流域确定了的时候,需要给流域边界指定物理条件。仿真一般开始于初始条件,然后通过迭代的方式得到流场的最终解。
4、网格生成
流域离散成为网格。网格生成包括结构和拓扑确定,然后在该拓扑上生成网格。目前所有的案例都涉及多块网格和结构网格。然而,这些网格块可能是对接的,连续的,非连续的或者重叠的。网格必须满足最低的网格质量要求,如正交性(尤其是在边界上),相对网格间距(最大值不能超过15%到20%),网格扭曲率等等。最大的网格间距应该与流场重要特征的分辨率一致。边界层分辨率要求沿着物面法向的第一层网格点应恰好落在边界层的层流层内。对于湍流流动,沿着物面法向的第一层网格点必须满足y+<1的要求。
5、设置求解策略
执行仿真的策略包括以下内容:使用什么空间推进和时间推进方式,湍流或者化学模型的选择,算法的选择等。
6、设置输入参数和文件
CFD程序通常需要给定输入文件,输入文件的内容是与既定策略一致的输入参数值的列表。此外,还需要包含边界条件信息的网格文件。
7、执行仿真
仿真可以通过图形界面、批处理或者分布式的方式进行。
8、监视仿真直至完成
当仿真进行的时候,监测求解过程以确定是否得到了收敛的解,该解是一个迭代收敛解。
9、后处理得到结果
后处理的过程是从流场中提取出想获得的流场特性(如推力、升力、阻力等)的过程。
10、对结果进行比较
将求解得到的流场特性与理论分析、计算或者试验研究得到的结果进行比较,验证计算结果的可靠性。
11、重复上述过程,评价敏感性
为了了解计算结果精度可能的差异和与以下因素相关的计算表现,必须评价计算结果的敏感性。如:维度、流场条件、初始条件、推进策略、算法、网格拓扑和密度、湍流模型、化学模型、通量模型、人工粘性、边界条件和计算机系统等。
12、归档
将以上的分析整理成文档。
误差
误差是建模和模拟过程中可认知的缺陷,不是由于知识缺乏导致的。
误差的种类
CFD计算结果误差的来源一般分为四类:物理模型误差、离散误差、计算机舍入误差、程序设计误差。
(1)物理模型误差:其主要源于不精确的物理模型,也就是说,控制方程和边界条件不能充分地描述要模型化的物理现象。例如湍流模型、流动由层流到湍流的转捩模式的误差、气体状态方程与真实情况之间的误差以及边界条件表述的误差等。
(2)离散误差:其主要来源与各种数值方法对控制方程及边界条件的离散化,因空间离散和时间离散的有限精度以及有限分辨率导致数值解与所求解方程的精确解之间存在误差;空间网格及表面网格不够密和不够光滑所带来的误差。
(3)舍入误差:源于计算机数据存储字长的限制。
(4)程序设计误差:这是简单的失误,可以归为上述未提及的误差。并且一般可在使用某些方法或者在程序验证过程中发现这些错误。
(5)迭代如何判定收敛的误差。
误差的控制
在CFD计算中,当网格尺寸或时间步长减小时,离散误差随步长尺寸减小而减小,而舍入误差反而随步长尺寸减小而增加,持续减小步长尺寸并不意味着能获得更加精确的结果。事实恰好相反,在很小的时间步长处,因为舍入误差的迅速增加,计算精度反而下降。因此,为了抑制这一误差,应当避免对非常小的数字进行大量的计算。
事实上,我们无法确定数值方法中包含误差的大小。从上面的分析可以看出,离开对舍入误差的正确估计,单独的离散误差也失去了意义。为了更好的评估计算结果的精度,这里有一些使用的方法推荐:
(1)探索网格独立性。可以基于已有的经验,选择合理的网格尺寸Δx,Δy,Δz(瞬态问题选择合理的时间步长Δt),开始求解流动问题。计算结果可能看起来相对不错,但我们假设在每个方向上将网格尺寸减半,即网格尺寸为Δx/2,Δy/2,Δz/2,网格节点增加8倍后再次计算。如果计算结果与最初的网格下得到的结果没有显著地改变,那么我们可以确定离散误差处于可接受水平上。如果输运变量的值域第二次计算结果差距很大,那么数值解就是网格节点数量的函数,在所有实际算例中,网格需要通过增加节点数目得到细化,直至数值解没有明显变化位置。这表明离散误差被减少到可接受的程度,数值解与网格大小无关。
(2)CFD的主要计算通常在单精度计算机上进行,以避免占用过多的计算资源。然而,如果发现舍入误差明显存在,则在保持网格尺寸(以及瞬态问题时间步长)不变的情况下,采用双精度对流动问题重新计算,如果计算结果无明显变化,则认为在CFD求解中不存在舍入误差问题,如果计算结果变化超出预期,可以尝试通过增加网格尺寸或改变求解器精度的阶数,如采用高阶近似粗网格来估计对流项的一阶微商或守恒方程中的一阶时间微商,减小总的计算量。离散误差随网格尺寸增加而增加,因此,应当认识到这一重要的变化趋势,并且寻求某种合理的折中。
(3)选择合适的湍流模型或其它近似模型,特别是尝试将物理模型误差最小化是一项艰难的任务。由于模型控制特定流动并与流动的物理特性密切相关,因此要使模型既能充分描述物理流动问题,又做到尽量简化也不是一件容易的事情。此外,CFD中几何建模和边界条件选择的粗心大意经常会出现人为误差。
不确定度
不确定度是由于知识的缺乏,在建模和模拟过程中潜在的缺陷。
不确定度的种类
(1)模型形式不确定度:它是指数学模型描述实际物理系统的真实行为时的不确定度,也称为结构不确定度或者非参量化不确定度。这种类型的不确定度很难用概率密度函数来描述。在CFD中,湍流模拟即属此类。
(2)参量不确定度:它是CFD中某些参量(包括网格、算法中的系数)其精确的结果无法得到而产生。
不确定度的分析方法
1、非概率方法(Non-probabilistic Methods)
这里又可分为:
(1)区间分析(IntervalAnalysis)方法:给出计算值的上限和下限,从而确定不确定度。但要求可能的计算值不能遗漏。
(2)误差传播的敏感性导数(SensitivityDerivatives)方法:其基本思想是量化输出结果对输入参数微小变化的灵敏度,从而分辨出各种输入量对于输出结果不确定度的影响。
(3)模糊逻辑( FuzzyLogic)方法:模糊逻辑方法是对不精确、不完善的计算结果中输入参量的不确定范围,利用模糊逻辑和模糊规则进行推理分析,从而确定结果的不确定性。在CFD 领域现还很难使用。
2、概率方法(Probabilistic Methods)
(1)常用的是Monte-Carlo方法
该法首先假设概率密度函数计算输入参量的误差,形成样本,然后求计算样本值的确定性结果,再对确定输出结果进行统计分布(如均值、方差)给出不确定度。
Monte-Carlo方法的计算成本相当高昂,因此发展了许多修正方法。但由于输入量的概率密度函数的确定是否合宜,Monte-Carlo方法的结果仍有问题。
(2)矩量法(MomentMethod)
该法给定可用的一阶(均值)、二阶(方差)、三阶(偏度)和四阶矩(峰度)来表示概率分析的特征,然后来确定概率分布,从而确定不确定度。
3、随机微分方程方法( Stochastic Differential EquationMethod)
它是在CFD 确定性方程中加入输入量的随机变量来计算CFD 模拟过程的不确定度。随机微分方程方法已应用于结构力学问题中,但最近才开始应用于CFD 不确定度研究中。
收敛
如果某一数值方法能满足相容性和稳定性这两个重要特性,我们通常会发现该数值方法是收敛的。数值求解过程的收敛可表述为:在相同的初始条件和边界条件下,当网格尺度不断减小时,代数方程组的精确解逼近偏微分方程的精确解。
在大部分商用CFD软件中,代数方程组一般采用迭代方法求解,收敛应遵守三个重要原则:
(1)当所有离散方程(连续性方程、动量方程、能最方程等)在每个节点处达到设定的误差时,离散方程即可被认为收敛。
(2)随着迭代次数的增加,数值解不再变化。
(3)总体的质量、动量、能量等标量均获得平衡。
离散方程的不平衡量(误差),通常称为代数方程组的残差。它们在求解过程中被监测,当被监测的代数方程残差有上升趋势并超过某一限定值时,计算过程被强迫终止。在计算过程中,残差应不断减少,才能满足收敛条件。平衡量也可能增加,即残差值增大,此时,数值解被认为不稳定(发散)。
收敛的难点与欠松弛
在任何数值求解过程中,对离散方程的求解都可能发生数值求解的不稳定。质量不好的网格,不适当的求解设置,不符合物理特性的边界条件以及选择了不正确的计算模型等,都是导致数值计算不收敛的典型原因。不收敛通常表现在迭代过程中残差增加(发散)或者居高不下。残差的发散意味着守恒方程中不平衡量不断增加,这明显违反了流体流动的物理定律。不收敛的计算结果会对计算者产生误导。
然而,可以采用一些实用的修正步骤来克服上述困难以获得收敛。对于劣质网格,可以增加网格节点的数量,对流动区域进行再划分。对于长宽比过大或严重扭曲的网格,通常采用这种方法。对于要求高阶近似的情况,在计算初期采用低阶近似是明智的选择。数值计算过程中,低阶近似的扩散特性使得大的不平衡量迅速耗散,这有利于求解过程的稳定。当流动求解建立起来之后,再换到高阶近似,获得较高的数值求解精度。
另一种改进收敛性的方法是使用欠松弛因子。不良的初始流场假设或流动区域中存在未知大的梯度都可能导致迭代过程的发散。将欠松弛因子引人到代数方程组中,通过限制迭代步骤之间每一输运变量的变化量来明显地减缓迭代过程。
在多数商业软件中,欠松弛因子的默认设定通常适用于一般问题的求解,在数值计算的初期,一般推荐使用默认的欠松弛因子。然而,更可行的方法可能是通过采用更小的欠松弛因子来减少输运变量的变化,以保证收敛。CFD用户在解决CFD问题时,常常会面对如何确定最优欠松弛因子(它们通常事先是未知的)的困扰,最好的方法是从CFD实践和应用中学习设置适当的欠松弛因子。
验证与修正
通常实验是最好的验证手段,但是存在一个问题,实验过程中的参数很难与计算输入的参数完全吻合。对于实际工程问题,采用实验有时候是唯一的验证手段。一般来说,数值计算结果再工程上与实验结果误差在10%以内是被允许的。在数值计算结果与实验数据存在很大差异时,一般进行以下一些步骤的检查:
(1)检查几何模型。分析是否忽略了关键几何特征、检查边界位置是否合适。很多时候边界位置设得不合适,可能会导致计算振荡,不收敛等情况发生。同时由于不同的软件对于不同的边界组合方式处理方法存在差异,因此需要选择合适的边界组合方式。
(2)检查物理模型。是否选用了不合适的模型。每一种模型都有一定的使用范围,使用者需要对这些使用限制有深刻的认识才能更好的进行选择。例如FLUENT中,湍流模型有很多,标准K-E模型适合一般的工程流动问题,但是对于强旋流误差较大,RNG K-E模型适合旋转流动湍流计算,SA模型适合航空外流计算,K-W适合边界层计算,雷诺模型适合各向异性湍流的计算,但是计算量大不易收敛。因此在进行选择需要仔细的考虑选择的模型是否适合自己的问题,一旦模型选择错误,轻则造成大的误差,重则不收敛计算出错。
(3)检查是否忽略了不该忽略的物理现象。例如计算复杂几何模型时出现大的负压区,是否需要考虑空化。计算高压气体时,是否考虑可压缩性,是否考虑粘性热。还有一些情况下,是否考虑蒸发、冷凝等相变情况。有时候这些物理现象会导致计算的不收敛乃至计算错误。
(4)优化网格。网格质量始终是CFD工程师们的努力内容。好的网格质量能够增强收敛、提高计算精度、减少计算时间。因此在时间充足的情况下,尽可能的去提高网格质量。同时,对于流动情况复杂的区域进行网格加密处理。在计算结果达到要求后,还需要进行网格独立性验证。
(5)边界条件检查。测量精度是否满足要求?若边界信息不是通过仪器测量得出而是通过计算,那么采用的公式使用条件是否能够接受?
参考资料:
1. Guide for the Verificationand Validation of Computational Fluid Dynamics Simulations,AIAA G-077-1998
2. 计算流体力学-从实践中学习
本篇文章来源于微信公众号: 南流坊
评论前必须登录!
注册