以下文章来源于LBM与流体力学 ,作者卢比与钢蛋
实验能否重复决定了其发现规律的可信度。而对于被我们调侃成“数值算命”的CFD,其重复性同样重要。且不说和实验对标的压力,如果两次算命的结果都完全不同,以后还有谁来相信CFD呢?
重复性真的很重要
英国著名的科学哲学家卡尔·波普尔(Karl Popper)在《科学发现的逻辑》一书中提到:“ 只有当某些事件能按照定律或规律性重复发生时,我们的观察在原则上才可能被任何人所检验。只有根据这些重复,我们才确信我们处理的并不仅是一个孤立的“巧合”,而是原则上可以在主体间相互检验的事件,因为它们有规律性和可重复性。”
“规律”之所以被称为规律,本质就是因为具有普适性。如果一个新的发现不能被其他人证实,只能被称为“偶然事件”,甚至原本就是虚假的结果。
这样的例子在学术圈和工程界都数不胜数,比如法国物理学家布朗洛的“N射线”、前苏联化学家德加奎因的“聚合水”以及日本理化学研究所小保方晴子的“STAP细胞”等等。一堆所谓的“成果”,最终都因难以通过重复实验的检验而逐渐被人们遗忘,甚至是鄙视。
仿真结果的可重复性
相对于实验的不确定性,仿真最大的优势大概就是可控。为了规避实验昂贵的成本和不确定性带来的纠结,有些设计流程足够成熟的大厂甚至会用仿真完全代替实验。
对于工程上可近似为定常过程的计算而言,对于同一个模型,保持相同的网格和计算设置,一个成熟软件的重复计算几乎会得出分毫不差的结果——除非计算机的硬件或操作系统出现了问题。
对于定常计算,即便仿真模型做了一些优化,只要保证网格和设置方法的一致性,通常也认为结果具有很高的可信度。因此但凡一个新的软件进入到了设计体系,第一步无疑是搭建“仿真技术规范”,相信各位工程界的CFDer都深有体会。
有了“仿真技术规范”,小伙伴们只要按照既定标准,进行网格处理和算例设置,便可放心大胆的提交计算了。那么对于瞬态效应较强的流动问题,还能得到同样的结论吗?
每一刻都是崭新的瞬态CFD计算
对于瞬态效应较强的流动问题,如果继续使用定常的求解方法,其真实性必然会面临很大的挑战。于是,很多小伙伴开始把目光投向了瞬态的求解方法。只是,瞬态CFD计算的每一刻都是崭新的,收敛性和重复性的困局又该如何化解呢?
理论上,如果遵循相同的初场和时间步长设置,瞬态的重复计算应该得出相同的结果。从软件本身的角度而言,可重复性并无二致。
讨论这样的重复性,对于定常计算没有问题,因为定常计算本质上可以认为是非定常计算在忽略瞬态效应的前提下,在时间维度的无限延伸。
然而,对于真正的非定常计算,每一个时间步上的流动状态都完全不同,每一刻也都是崭新的,比如下面展示的这个起落架的瞬态动画。
虽然非定常计算能够更好的还原流动的真实情况,而工程的诉求却往往是一个流场宏观表现的数值,比如汽车的风阻、升力等气动力的表现。为了得到相对稳定合理的数值,我们一般会对一段时间的数据进行平均。
非定常计算的时间困局
经常做风洞测试的小伙伴都知道,虽然流动是瞬态的,每时每刻的风阻和升力都在波动——但我们只需测量足够长的时间,舍弃初始时刻波动较大的数据,并将较稳定的数据进行平均,便可获得精确的时均特性。如下图的测试数据所示,虽然气动力一直在波动,但测量时间足够长——远远大于波动的周期,于是抹平了此波动的影响。因此即使多次测量并对数据进行平均,仍会得到一致的结果,保证了实验的可重复性。
从上述分析可见,增加测试时间是保证气动力测量的可重复性的关键手段——这对实验来讲并不难,相对于实验的准备与调试时间,测试时长从10秒增大到100秒,实验成本的增加微乎其微。
不过搞仿真的小伙伴看到这个数字可能会有些头疼——计算物理时长的成倍增长,也意味着计算资源消耗的剧烈增加。虽然已经进入了21世纪的第三个十年,CFD的计算资源仍不够宽裕,尤其是对于非定常仿真计算这个消耗资源的黑洞,再多的HPC也不够往里填的。
在我们还处于瞬态CFD的初级阶段时,主要矛盾仍然是人民群众日益增长的计算资源诉求和当前算力不足之间的矛盾。既然等不到计算资源的革新,那就只能自我内卷,尽量减少计算时长,寻求计算可信度和计算资源之间的平衡。
喂,少算几秒行不行啊?
既然计算资源那么紧张,那就少算几秒吧,可是问题来了,我们并不知道不同几何或者不同方案的非定常特性,有的波动周期长而幅度大,有的周期短而幅度小。即便是两个差异很小的方案,其尾流形态也可能差别很大。所以少算几秒到底行不行呢?
这个问题没有直接的答案。不过仿真计算的优势在于,你可以随时监控计算过程中的任何信息。聪明的你可能已经想到了,或许有某些方法,通过监测计算过程中的关键参数(比如风阻系数)是否符合一定标准,来判断该计算的时长是否已经足够,而非指定固定的计算时长。
跃跃欲试的梯度法
要想让对方信服并留下来,还得拿出过硬的证据。以车辆的空气动力学为例,人们最先想到的办法就是监控风阻系数的变化。然而风阻值的瞬态数据在很短的物理时间内看上去还是波动太大,很难通过肉眼来决定计算时间是否足够。
本着“原始数据不好使,就做数学变换”的思想,学者们提出了一种工程实用的梯度法:
首先针对原始数据a进行数学平均(比如向前平均),获得较为光滑的平均曲线b
这样就可以对b求取时间的梯度,获得曲线c,用来定量衡量a的时间变化幅度
不过c的毛刺太多——因此需要进行光滑(比如窗口平均)处理获得曲线d
对曲线d按照一定的精度准则和判定区间进行实时判别,一旦其满足判定要求,则认为计算时长已经足够,便可结束计算。
实际使用过程中,我们可以选择不同的精度准则以及判定区间。如果精度准则范围越窄,而判定区间越宽,意味着判别标准越严格,需要更长的物理时间才可达标。
那么对于瞬态CFD计算,如果采用同样的计算标准,是否就意味着重复计算必定能获得完全一致的结果呢?
到底准不准还得高斯说了算
我们可以定性的认为,只要计算时间足够长,非定常计算就能够具有完全的可重复性。然而,即便是测试时间相当长的风洞实验,其重复性也是有容差范围的,比如许多汽车风洞宣称自己的测试精度为1个count。因此根据上述准则设置的非定常计算,仍具有其指定精度的置信区间。
为了摸清楚瞬态计算的结果到底靠不靠谱,我们还是先把另外一位大神——高斯和他的高斯分布请出来。我们知道,德国科学家高斯(Carolus Fridericus Gauss)由于其在数学、物理学、天文学等学科做出的巨大贡献而被印到了德国马克上。而高斯头像的傍边,正是随其命名的高斯分布。
高斯分布,又名正态分布,是一个常见的连续概率分布,其分布函数两头低,中间高,左右对称并呈钟形。高斯分布经常用在自然和社会科学来代表一个不明的随机变量。而流动的瞬态特征,也具有这种随机性。
高斯分布明确给出了指定标准差范围内的概率,那么前述的瞬态计算结果,又该如何通过高斯分布来预估其置信区间呢?
高斯分布的应用
本着公众号一如既往的“人狠话不多”的优秀品格,直接上实例。对于下图已经计算了50s之久的计算,丢弃指定的14s波动较大的结果,认为剩余36s的计算也足够长,并将其平均值当作期望值。而再把这段数据分为三段各自平均,当作三个样本,即可根据离散变量的标准差计算公式得出其标准差。
同样,如果这段数据分的更细,可获取更少采样时间的标准差。这样,我们可以得出下表。估计这会该有小伙伴要问了,过程我都看懂了,可是没搞明白这些数据能说明啥?以两秒的采样时间为例,其标准差为0.001。根据高斯分布,也就意味着2秒的瞬态计算结果有68.3%的概率落入±0.001的置信区间内,而有95.5%的概率落入±0.002的区间内。
说的更直白一点就是,对于该算例,保持相同的设置,每次计算2秒,进行100次独立的计算,则大约有95次和实际结果的偏差不超过2 counts,而只有68次和实际结果的偏差不超过1 count。
不过此时问题又来了:难道对于每辆车我都要算这么久,才能评估其期望和标准差吗?事实上非定常气动力的波动主要取决于尾部形状与尺寸,因此对于同一类型的几何,其气动力的波动大同小异,可以采用相似的规律。至此,我们终于可以放心大胆的宣布自己的非定常计算结果了。