首页/文章/ 详情

信任需要验证:CFD验证与确认(2)

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
5月前浏览11183

摘要

本文探讨了计算流体力学(CFD)中的验证与确认(V&V)过程,旨在确保模拟的准确性和可靠性。文章区分了验证与确认的不同点,并提出了提高CFD分析可靠性的关键步骤,包括选择合适的仿真模型、进行网格独立性分析、验证时间步长独立性、检查数值设置准确性以及进行边界条件和计算域独立性分析。此外,文章还介绍了实用工具和方法,并强调输入数据质量对模拟结果的重要性。这套全面的V&V策略旨在帮助CFD研究者提升模拟质量,增强对结果的信心。


正文

接上文:信任需要验证:CFD验证与确认

既然我们已经明确了验证与确认(V&V)在CFD中的重要性。本文将深入探索此主题。我们将专门针对CFD研究,探讨实用的最佳实践。准备好发掘确保模拟准确性和可靠性的关键策略、工具和方法,让您的CFD工作提升到新的高度。

“巧妙伪造数据”还是“计算流体力学”——这是每个CFD研究者都面临的终极困境。

在之前的讨论中,我们深入探讨了 "验证与确认 "这一引人入胜的领域,通过对稳态一维对流扩散方程简单而深刻的探索,揭开了其中的复杂性。我们层层剖析,揭示了如何通过细致的网格敏感性分析加强数值解的完整性,为稳健和精确的模拟奠定基础。同时,验证过程突显了将我们的虚拟现实与现实世界实验数据对齐的艰巨挑战,特别是在Navier-Stokes方程那些解析解难以捉摸的神秘领域中。尽管存在固有的挑战,但创新策略为穿越验证与确认的迷宫提供了有希望的途径。验证关注的是数值方法的正确性,而确认则专注于模拟在反映现实世界现象方面的准确性。

在本期文章中,我们将深入探讨进行可靠可信的 CFD 分析的基本要素。从选择合适的模拟模型到仔细检查网格的独立性,从微调瞬态模拟的时间步长参数到验证数值设置和流动物理特性,我们将对每个方面进行细致的探讨。

为了确保可靠的CFD分析,有几个关键步骤必不可少:

  1. 选择合适的仿真模型。
  2. 网格独立性。
  3. 瞬态仿真的时间步长独立性。
  4. 检查质量和连续性误差。
  5. 边界条件敏感性分析/计算域独立性。
  6. 数值设置或流动物理的验证。

1   选择合适模型

在CFD中,选择合适的仿真模型至关重要,因为它直接影响所需的计算资源和结果的准确性。对于处理诸如湍流、多相流和组分传输等各种现象,必须进行深入的研究,才能确定适合特定案例的模型。

例如,如果追求高保真度的结果,直接数值模拟(DNS)是一种可行的选择。然而,这种方法由于其需要解析流动的所有尺度以接近物理现实,因此需要巨大的计算资源。相反,雷诺平均纳维-斯托克斯(RANS)模拟则提供了一种计算上更经济的选择。然而,它们代表的是固有不稳定现象的稳定状态,可能会限制其适用性,尤其是在涉及涡流脱落的情况下。

在进行CFD研究时,考虑以下几个关键点尤为重要:

  • 对于低雷诺数的数值研究,首选直接数值模拟(DNS)或层流模拟。DNS能精确解析所有流动尺度,提供准确结果。
  • 在中等雷诺数情况下,大涡模拟(LES)既能解析大尺度流动结构,又能通过模型处理近壁或亚网格尺度特性,从而在两者之间取得平衡。
  • 面对非常大的雷诺数时,由于计算限制,推荐使用雷诺平均纳维-斯托克斯(RANS)仿真来高效处理湍流。
  • 在LES中,亚网格尺度模型的选择至关重要。OpenFOAM中提供了动态k-方程、Smagorinsky模型等多种选择。
  • 像延迟分离涡模拟(DDES)和改进的延迟分离涡模拟(IDDES)这样的混合RAS-LES方法,为湍流建模提供了额外选项。

选择合适的仿真模型取决于计算网格分辨率和计算资源可用性等因素,这强调了CFD仿真所涉及方法的复杂性和深度。

2 网格独立性分析

对于如一维对流扩散这类方程,网格独立性分析可能看似简单明了,但面对二维或三维等更复杂的模拟时,任务就变得更为复杂。无论是处理内部还是外部流动,确保网格独立性或执行网格敏感性分析都是至关重要的。在深入了解网格独立性的具体细节之前,我们先来了解最小网格尺寸或第一层网格尺寸的概念。这指的是紧邻任何表面的初始网格尺寸,其决定了根据所选的网格纵横比来扩展网格。

在直接数值模拟(DNS)中,第一层网格尺寸由Kolmogorov长度尺度决定;而对于大涡模拟(LES)或雷诺平均纳维-斯托克斯方程(RANS)模拟方法,第一次网格尺寸通常通过Y+值或者“壁面律”来估算。对于DNS模拟中所需的Kolmogorov微观尺度可以通过一个简短的Python代码来进行近似计算:

mu = 0.000018375  # 动力粘度
rho = 1.225 # 密度
h = 0.012 # 长度尺度
Re = 1000 # 雷诺数

nu = mu/rho # 运动粘度
U_inf = (Re * nu)/h # 自由流速度
epsilon = (U_inf**3)/h # 湍动能耗散率

### Kolmogorov 长度尺度
eta = ((nu**3)/epsilon)**(1/4)

### Kolmogorov 时间尺度
tau = (nu/epsilon)**(1/2)

### Kolmogorov 速度尺度
u_k = (nu*epsilon)**(1/4)

其中,eta为Kolmogorov长度尺度,理想情况下可作为层流或DNS模拟的第一层网格间距使用。

同样地,基于Y+值为LES或RANS的第一层网格尺寸可以通过一些诸如Cadence等提供的在线工具进行估算,或者利用如下所示的简单Python脚本进行计算:

mu = 0.000018375 
rho = 1.225
h = 0.012
Re = 1000
U_inf = (Re * nu)/h

y_plus = 1 # 目标Y+值
Cf = 0.026/(Re**(1/7))
Tau_Wall = 0.5 * Cf * rho * (U_inf**2)
U_Fric = math.sqrt(Tau_Wall/rho)

Delta_S = (y_plus * nu)/U_Fric ###第一层网格尺寸

其中,Delta_Sw为基于Y+所确定的第一层网格尺寸。

一旦确定了首层网格尺寸,进行网格独立性分析就需要采用至少3个不同空间分辨率的网格。我个人建议使用4个,这些网格的精细程度逐步提高。首先,利用上述代码估算的首层网格尺寸来构建最精细的网格。随后,按照2(或更小)的比例逐步减小网格密度以得到较粗的网格。以下是一个便于执行此流程的示例Python脚本:

First_cell_Size = 6.748095902284189e-05  ### 第一层网格尺寸
Refinement_ratio = 2   ## 增长率1.2-2

Grid_1 = First_cell_Size
Grid_2 = Grid_1 * Refinement_ratio
Grid_3 = Grid_2 * Refinement_ratio
Grid_4 = Grid_3 * Refinement_ratio

print('Grid 1 = ', Grid_1)
print('Grid 2 = ', Grid_2)
print('Grid 3 = ', Grid_3)
print('Grid 4 = ', Grid_4)

根据脚本得出的结果,接下来将构建四个具有指定首层网格尺寸的网格。然后,进行模拟的同时仔细监控如阻力系数、升力系数、平均速度、湍流物理量等参数。之后,编制一个综合表格比较四个网格的阻力和升力系数,并附上多个图表展示所有网格的平均量和湍流动态特性,如下图所示。

在研究中,实现网格独立性通常需要确保百分比差异低于5%。然而,在涉及复杂流动现象或湍流模拟的情况下,这一阈值往往会设置得更低,低于1%。实质上只有当连续两个细化网格之间阻力和升力系数(或其他物理量)的百分比差异低于1%时,模拟才可被视为实现了网格独立。

3 时间步长独立性分析

流体力学包含空间和时间两个方面。网格独立性确保了空间验证,而时间步长独立性分析则是为了确保时间上的网格验证。这需要检查改变瞬态模拟的时间步长对计算结果的影响,确保关键的瞬态效应得到充分解析,并且进一步减少时间步长不会显著改变结果。在这个过程中,理解Courant-Friedrichs-Lewy(CFL)条件至关重要,它是瞬态模拟的稳定性准则。CFL条件规定,任何时间步内信息传播的距离必须小于网格单元之间的距离,确保信息只传播到相邻的网格单元而不会跳过任何网格

为了探究时间步长调整对结果的潜在影响,必须验证这些变化不会引入显著的改变。设想一下,假设已建立网格,时间步长基于CFL值0.8(理想情况)设定。对于时间步长独立性分析,需要使用相同的网格但减小的时间步长重复进行同样的模拟。类似于网格独立性,时间步长可以通过1.2到2之间的比率进行细化,这意味着时间步长减小1.2倍或2倍。

理想情况下,时间步长独立性分析只需要两次模拟。第一次作为基础模拟,CFL值为0.8,而第二次使用更小的时间步长,对应CFL值为0.4(如果比率是2)。之后,对比两次模拟的流动结果,类似于网格独立性的做法。

4 检查质量和连续性误差

这一步主要作为一种数值设置的检查而非验证步骤。如果你使用过OpenFOAM,你可能在模拟输出中遇到过这样的行信息:

time step continuity errors : sum local = 6.11228e-09, global = 1.51821e-18, cumulative = 1.09644e-17

这里提到的“时间步连续性误差”指的是对连续性方程的违背程度。实质上,它是所有网格面上通量之和,理想情况下应等于零。鉴于数值模拟的性质,像1.09644e-17这样的数值几乎可以视为零。在整个模拟过程中,重要的是要确保这个数值不会开始上升,因为这会导致模拟发散。初始条件、求解器容差、网格正交性等因素都可能影响这些误差。

5 计算域独立性分析

验证计算流体动力学(CFD)模型的一个关键方面是确保计算域的边界足够远(特别是在模拟远场条件时),以免对计算结果产生不当影响。对边界条件远近进行敏感性分析至关重要,这通常被称为区域独立性分析。从本质上讲,这需要检验计算域的大小是否影响主要的流动特征,确保计算域大小本身不会带来的扭曲。

内部和外部流动都可能受到流出边界条件位置的影响,这可能导致数值不稳定或压力反射(称为压力反馈),从而扭曲上游流动。几乎所有的边界条件都产生数值副作用,通常与压力阻塞有关。因此,建议将边界条件置于远离关注区域的位置,以减轻这些效应对关键流动区域的影响。然而,更大的计算域意味着需要更大的网格规模和更高的计算成本,这就要求对计算域的大小做出经济合理的估计。

举个例子:

  1. Domain 1 太过紧凑,无法充分捕捉完整的流动物理现象。出口边界如此接近可能导致圆柱附近的压力积聚,引起堵塞。
  2. Domain 3 则过于广阔。尽管其规模庞大,但其结果与Domain 2相似,但计算成本要大大的多。
  3. Domain 2 代表了经过验证的最优的域大小——既经济可行,又能确保结果的准确性。

理想的计算域大小随具体的流动物理(内部或外部)而变化。建议根据特定案例查阅深入研究的文献来确定合适的计算域大小。随后,可以通过检查比建议尺寸更小和更大的计算域来进行独立性测试。这种分析通常会证实较小的计算域是不充分的,而较大的域则会产生与“恰到好处”的最优域大小相近的 结果。

6 数值设置或流动物理的验证

在验证过程中,学术界的深水区往往难以驾驭。有一条不成文的规定:“除了实验者本人,每个人都相信实验结果;除了模拟者本人,没有人相信模拟结果。”这种情绪与格言“垃圾进,垃圾出”相呼应,同样适用于CFD。输入数据的准确性,包括边界条件、设置和流动条件,极大地影响着输出的正确性。因此,CFD模型的验证变得至关重要。

如前所述,验证可以通过两种方法之一进行:将数值结果与实验数据进行比较,或将数值设置与已知实验进行比较。然而,可能在所需的参数范围内没有进行过实验。在这种情况下,可以对数值设置(包括求解器、边界条件和数值方案)进行验证。此外,为了验证,数值结果也可以与其他数值结果进行比较。在这种情况下,关键是要与解析度高于你的数值方法进行比较。例如,可以将雷诺平均纳维-斯托克斯方程(RANS)与大涡模拟(LES)或直接数值模拟(DNS)进行比较,但不能将RANS与RANS进行比较。同样,LES只能与DNS比较,反之则不行。最后,DNS与DNS之间的比较也不推荐。

总之,要牢记“垃圾进,垃圾出”的格言,强调确保输入数据有效性的关键性。对于CFD,别忘了验证与验证的重要性!

 

原文地址:https://levelup.gitconnected.com/trust-but-verify-a-guide-to-cfd-verification-and-validation-part-2-64ad6ef3de17


(完)

来源:CFD之道
OpenFOAM多相流湍流pythonUMCadence
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-26
最近编辑:5月前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2553粉丝 11191文章 726课程 27
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈