CFD 分析通常可细分为 5 个主要步骤。其中一些步骤有时需要进行多次以获取所需的高质量结果。

1.2.1 问题定义

从工程的角度出发,数值模型应尽可能简单,并能准确地描述实际工程系统。忽略模拟问题的无关方面可以提高 CFD 分析的效率,因为它简化了物理过程,从而简化了描述它的数学模型。例如,尽管空气是可压缩的,但在某些流动状态下,模拟机翼上的流动时可以将空气视为不可压缩的流体。

1.2.2 数学建模

一旦物理过程的相关方面被独立出来,问题就需要以数学模型的形式进行描述,这在 CFD 中通常是一组偏微分方程 (PDE)。CFD 工程师必须了解用来描述不同物理现象的模型。在 OpenFOAM 框架中,用户可以在几十种求解器之间进行选择。每个求解器实现一个特定的数学模型,选择正确的数学模型对于获得模拟问题的有效解通常是至关重要的。例如在翼型绕流的问题中,采用不可压缩假设会忽略对能量方程的求解。作为另一个例子,势流只受拉普拉斯方程控制(详情可见 Ferziger 及 Peric(2002)的教材)。若需要考虑更加复杂的物理输运现象,则数学模型的复杂性也会随之增加,这通常导致更复杂的数学模型。例如用于模拟湍流使用雷诺平均 NS 方程(RANSE)。

数学模型描述了流动的细节,这意味着数值模拟最多只能近似模型的解,无法产生比数学模型本身所能描述的更多的关于流动的信息。有关 OpenFOAM 中湍流建模的更多信息可以在第 7 章中找到。关于特定数学模型的更多细节可以在流体力学教科书中找到。

1.2.3 前处理及网格生成

数学模型将物理场定义为模型方程的因变量。在 CFD 中,方程通常描述的是一个边值和初值问题。因此,在开始模拟之前需要对物理场进行初始设置 (预处理)。如果物理场在空间上变化,则可以使用不同的应用程序 (utility)来计算和预处理。有些应用程序是随 OpenFOAM 一起发布的 (例如 setFields 实用程序),或者是其它项目的一部分 (例如 swak 4 Foam 项目的 funkySetFields 实用程序)。

一些可用的预处理程序的使用将在第 8 章进行描述。

注:有关 swak 4 Foam 项目的更多信息可以在 http://openfoamwiki.net/index.php/Contrib/swk4Foam上的OpenFOAM wiki 上找到。

为了在数值上近似模型解,必须对模拟区域进行离散化。模拟域的空间离散化包括将区域分割成由不同形状的控制体积 (单元)组成的计算网格。所有这些控制体一起被称为“网格”或计算网格。通常情况下,在感兴趣的区域需要对网格进行细化:例如在出现较大的流场梯度的那些区域。此外,还必须注意数学模型的准确性和正确的选择。以空间的方式解析流动特征并不能补偿一个最初没有考虑这些特征的模型。

另一方面,瞬态模拟中增加网格分辨率可能会极大地降低模拟速度。这是因为当使用显式离散方式时,为了获得稳定的解,离散时间步长通常需要设置成较小的值。如果数值模拟不收敛,则网格可能是模拟中最有可能需要改变的部分。失败的模拟经常是由网格质量不足引起的。OpenFOAM 附带两个不同的网格生成器,即 blockMesh 和 snappyHexMesh。这两种网格生成器的用法都将在第 2 章中介绍。

此外,预处理还包括其他各种任务,例如,如果模拟是在多台计算机或 CPU 核心上并行运行,则要对计算域进行分解。

1.2.4 求解

除了网格生成外,计算求解通常是 CFD 分析中最耗时的部分。

计算求解所需的时间在很大程度上取决于数学模型、用于近似求解的数值格式以及计算网格的几何和拓扑性质。在这一步中,微分数学模型被 (线性化的)代数方程组所取代。在 CFD 中,这样的代数线性方程组通常很大,导致矩阵具有数百万或数十亿的系数。这些代数方程组是用专门为此开发的算法——迭代线性求解器来求解的。

OpenFOAM 框架支持选择多种线性求解器,尽管求解器应用程序通常有预设或理想的线性求解器和参数选择。熟练的 CFD 工程师有机会修改求解器和相应的参数。线性求解器和离散化策略的选择是影响计算速度和稳定性的重要因素。

1.2.5 后处理

在模拟成功完成之后,用户通常会有大量的数据需要分析和讨论。为了检查流动细节,必须适当地提取数据、绘制数据和/或可视化数据。通过使用诸如 paraView 之类的专用工具,可以相当容易地讨论这些数据。为了分析模拟结果,OpenFOAM 提供了广泛的后处理应用程序。

OpenFQAM 自带标准后处理工具 paraView。它是一个开源工具,可以从以下网站免费获得: www.paraview.org 。

1.2.6 验证和确认

用户必须自己决定是否信任计算结果。通常 CFD 软件非常复杂,其依赖于可配置的参数,这给错误留下了很大的空间。如果在前面的步骤中出现了错误,很有可能在验证和确认过程中被发现。

验证(Verification)保证了数值方法能正确地求解它所近似的数学模型。换句话说,验证检查数学模型的解是否被适当逼近。

确认(Validation)将仿真结果与实验数据进行比较:当涉及到仿真结果的置信度时,引入了更严格的安全系数。当与实验进行比较时,验证确保选择了正确的数学模型,其解充分反映了现实。如果模拟结果不满足要求,则必须重新进行之前的 CFD 分析步骤。