关于工程模拟中不确定性来源的思考。
这只是一个关于计算流体动力学(CFD)领域的小思考。具体来说,我想思考工程模拟可能的不确定性来源以及哪些方面对于成功交付项目至关重要。
我将主要讨论CFD,但类似的原则也适用于其他虚拟原型学科,如有限元分析(FEA)、优化和整个计算机辅助工程(CAE)。
无可避免的问题是CFD更像是一门科学而不是计算器。更像是一种手艺而不是工具。这是一个常见的误解。这就是为什么CFD常常与失望联系在一起。
以一个典型的科学工具——计算器为例。计算器直接执行算术运算,并在精确的输入上给出确切的答案,其结果不会引发关于正确性的讨论,而工程模拟则不同。
在CFD中,总是涉及一定程度的不确定性。原因是求解的方法。所求解的是Navier-Stokes方程,这些方程从技术上讲是非抛物线非线性非均质偏微分方程。在这样一个高度动态的系统上,首先应用一组物理模型,然后必须使用各种方案在时间和空间上进行离散化,然后将其转换为线性代数问题并求解。最终结果总是一个近似值。即使一切都做得完美,也总是涉及一定程度的错误,这是几乎不可能量化的。
误差是什么?
我们将结果的误差理解为它们与完美结果的差异。在流体动力学领域,参考结果总是与物理测量(实验)相关联。也许你知道这个古老的工程笑话:
“没有人相信CFD模拟,除了制作它的人。每个人都相信测量结果,除了制作它的人。”
CFD并不完美,测量结果也不完美。但在流体动力学世界里,CFD必须追逐测量结果,而不是反过来。这是我们玩的游戏,这是规则,不管我们喜不喜欢。
总误差
首先,任何CFD工作流程都是各种技术(方法)的集 合。总误差由那些应用技术中产生的几种误差组成。让我们看看对CFD结果总误差贡献最大的几个因素。
A.CAD模型误差
让我们从最基本和最明显的误差源开始。这是模拟的非现实CAD模型。CAD模型是待模拟的实际对象的虚拟表示。问题是,模拟就绪的CAD模型总是实际对象的某种简化。它总是被模拟的模型。不是实际对象。模型必须是干净的、无漏洞的,所有微小的、不相关的和有问题的模型部分必须被移除,所有的孔都必须被封闭。CAD建模阶段是每个模拟工作流程中极其重要的部分。它设定了所有模拟的潜力和限制。它永远不应该被低估。CAD建模阶段的错误或工程质量差很难在模拟阶段和后处理阶段得到补偿。
B.数学模型误差
每个模拟项目都需要在物理和数学之间建立联系。我们称之为数学模型——它将物理理论转化为数学公式。让我们考虑以下项目示例:我们有一个医疗设备——血液泵。我们的目标是模拟泵在特定流量和转速下产生的总压力。我们必须建立我们的数学模型。必须做出一些决定。简单来说,我们可以选择1. 稳态流动 2. 不可压缩流动 3. 牛顿粘度模型 4. 非弹性流体 5. 无化学反应流 6. 标准RANS湍流 7. 光滑壁面。这意味着我们有意识地把瞬态行为、可压缩性、剪切变稀效应、血液弹性、化学反应、解析湍流、壁面粗糙度、弹性壁面等效应放在一边。所有这些决定都与得到的数学模型——特定要求解的方程有关。这个数学模型带有特定的简化,但它足够好,可以给出满足我们目标的结果。尽管血液流动要复杂得多,我们的模型仍然可以非常准确——就满足我们的目标而言——泵的总压力。在那里我们知道物理误差相对较低。另一方面,如果我们的目标是血液化学,其中反应瞬态效应至关重要,上述模型将完全不适用。数学模型极其重要,必须根据模拟的目标来创建。
C.边界条件误差
在模拟域内部,在体积中,有要求解的方程(数学模型)。在域边界上,应用边界条件。边界条件有两个主要问题。1. 边界方程的第一个问题是数量的大小(通常适用于固定、狄利克雷边界条件)和分布。2. 第二个问题(通常适用于外推(诺伊曼边界条件)和模拟数量)是它们的应用方式。在现实世界中,没有什么是完全封闭的域,边界条件只是一种简化,使得能够创建有限的欧拉区域。边界条件是每次模拟极其重要的部分。我们建议对它们给予最好的关注。我们从技术支持中知道,边界条件是CFD中大多数错误的来源。
D.离散化误差
为了使这篇文章足够简单,我允许自己将网格误差和数值方案误差放在一个称为离散化误差的部分。模拟域需要在时间和空间上进行离散化。这意味着连续函数实际上是在离散点上被虚拟地切割,因为那时可以应用数值数学。在CFD中,大多数情况下欧拉域被网格覆盖——域被分割成许多小体积。在每个单独的离散体积(单元)和每个数量(或项)上,应用数值方案,并总结在结果的标准线性方程组Ax=b中。然后可以使用精确的代数方法相对容易地求解线性系统。
再次,这里需要做出许多关键决定。1. 要制作多细的网格?2. 网格拓扑?3. 网格质量?4. 边界层?5. 数值方案?更细的网格通常(并非总是)给出更低的误差。但你为细网格付出的代价是巨大的,CPU时间随着单元格数量的增加而迅速增长。网格设置通常以足够细的网格和CPU时间之间的痛苦妥协结束。数值方案的选择也非常关键。虽然一阶方案相当稳定且不太准确,但二阶方案(和更高)更准确但稳定性差得多。此外,还有许多混合阶方案,它们在准确性和鲁棒性方面都处于中间位置。最重要的是,数学模型和网格的每种组合可能导致一组不同的合适数值方案。
E.数值误差
特别是在大型模拟(大网格导致大型线性系统)中,数值误差起作用。数值数学的问题是它进行了大量的简单操作,但即使是很小的数值误差,如果重复多次,也会传播和增长。最终,它可能会破坏你的结果。关键是实数精度(你的代码编译的方式)。我记得几年前,我们对OpenFOAM的各种精度进行了一些基准测试。单精度(32位,8位数字)非常快,但对于从几百万个单元格开始的网格,数值误差完全破坏了结果。对于生产性CFD模拟,推荐使用双精度(64位,16位数字)。大型、多百万网格用于例如适当解析的LES或DNS模拟,产生的线性系统必须使用四倍精度(128位,34位数字)。几乎不可能预先列举每个特定案例的数值误差,一个人必须依赖特殊测试和经验。总之,你可以肯定每次模拟都会涉及一些数值误差。唯一的问题是它有多大。
F.人为误差
尽管我们使用的工具不完美,但我们使用它们的方式更糟。我们是人。大自然使我们聪明,但一点也不完美。事实上,人为误差可能是CFD中最常见的痛苦来源。原因很明显。每次工程模拟都有许多参数。即使是非常简单的模拟也迫使我们做出许多决定。无论是有意识的还是无意识的。不幸的是,我们不断犯错误。出于许多原因,粗心、知识缺乏、知识过多(笑)、经验不足等。我的技术支持同事可以告诉你许多故事。其中一些很有趣,其中一些不那么有趣。是的,问题大部分时间就在屏幕前。人为误差当然是成功的真正杀手。
G.后处理误差
我个人最讨厌这个。你会惊讶地发现,原始模拟结果正确,但它们的评估或解释是错误的情况有多频繁。有时后处理包括许多复杂的数学运算,在那里很容易犯错误。听起来很疯狂,但许多时候,特别是在新的工程项目中,后处理是最具挑战性的学科。再次,后处理阶段的错误或工程质量差可能会破坏本应正确的结果。我们在过去看到过无数案例,比如:物理单位混淆、总量与静量、通量加权与面积加权平均等。
H.X因素误差
在每个新项目中,总有我们不知道的东西。你必须对新项目非常小心,因为即使你之前做过许多类似的项目,实践一次又一次地向我们展示,即使是小小的不同情况也会导致结果的巨大差异。在CFD中,比任何其他地方都多:魔鬼在细节中。每个项目都有它的X因素,必须以最大的关注来对待。
减少误差
上述所有误差都可以通过工程技能来减少。经验至关重要。没有人第一次就能获得出色的CFD结果,就像没有人第一次就能骑自行车一样。是知识、专注、训练有素的判断、耐心、奉献、开放的心态、大量的咖啡和学习新事物的意愿帮助你获得出色的结果。顺便说一下,你知道培养一位资深CFD工程师需要五年时间吗?
需要博士学位吗?
不一定。有时我在网上讨论中看到人们争论是否需要博士学位才能产生出色的结果。我是那些认为这不是条件的人之一。在我的职业生涯中,我见过没有博士学位的优秀工程师,也见过拥有博士学位的糟糕工程师。当然,我承认我见过的最好的工程师确实拥有博士学位。在我看来,博士学位更像是一种症状而不是要求。它讲述了个性和一个人处理特定问题的能力,而不是一些额外的理论知识。而这在CFD中确实很重要。
保持简单
有助于减少误差的是保持简单。为了最小化来自复杂性的各种误差,聪明的做法是不要太复杂化。阿尔伯特·爱因斯坦曾经说过:“一切都应该尽可能简单,但不要过于简单”,这完全适用于工程模拟。一条黄金法则是:所有的动作都必须是合理的,否则就放弃。
技能和经验可以内置到模拟软件中吗?
这个问题经常出现。是否有可能让一些经验丰富的工程师将他的经验以一种易于使用、健壮且足够准确的方式实现到CFD代码中,即使是对没有经验的使用者也是如此?我认为答案是肯定的,但有很多但是。但只适用于单一应用。但只适用于简单应用。但只适用于一些基本的准确性水平。但只适用于非常有限的用户选项范围。
CFD代码可以同时快速、健壮和准确吗?
总的来说,物理模型的选择加上离散化方法是关键,总是会导致某种妥协。模拟方法可以是准确或健壮的,但不能同时都是。同样,一种方法可以是快速或准确。我喜欢Tabor教授的一句话,我在互联网讨论中看到了,他曾经评论说:“模拟可以快速、健壮和准确。你可以选择其中的两个。”
CFD是一个非常复杂的领域,包括数学、物理和软件工程。这三者都不能落后。
以过来人看,基于上述所有这些,我必须以以下结论结束:CFD(CAE)更像是一门科学而不是计算器,更像是一种手艺而不是工具。