← 回到首页 Skip to main content

引言


计算流体力学(CFD)的历史始于20世纪70年代初。大约在那个时期,CFD成为一个缩写词,用来指代物理学、数值数学以及在一定程度上的计算机科学的结合——这些学科共同用于模拟流体流动。CFD的起步得益于越来越强大的大型主机的出现,而CFD的发展至今仍与计算机技术的演进紧密相连。CFD方法最早的应用之一,是通过求解非线性势方程来模拟跨声速流动。进入20世纪80年代,首先二维(2D)而后又三维(3D)的Euler方程求解变得可行。随着超级计算机速度的快速提升,以及多重网格(multigrid)等多种数值加速技术的发展,计算无粘流动成为可能:既可以计算绕完整飞机外形的外流,也可以计算涡轮机械内部流动。到了20世纪80年代中期,研究重点开始转向由Navier-Stokes方程控制、计算需求显著更高的粘性流动模拟。与此相伴,发展出了多种湍流模型,它们在数值复杂度与精度方面各不相同。湍流建模的前沿是直接数值模拟(direct numerical simulation)与大涡模拟(LES)。

随着数值方法(尤其是隐式格式)的进展,到20世纪80年代末,需要真实气体模型的流动问题也变得可解。在最早的大规模应用中之一,研究者计算了再入飞行器(如欧洲HERMES航天飞机)的三维高超声速绕流,先采用平衡化学模型,随后又采用非平衡化学模型。大量研究活动曾经、并且仍然致力于燃烧的数值模拟,尤其是火焰建模。这些工作对开发低排放燃气涡轮与发动机极其重要。此外,蒸汽的建模,特别是蒸汽凝结,也成为设计高效蒸汽涡轮的关键因素。

由于对流动模拟复杂性与逼真度的要求持续提高,网格生成方法也变得越来越复杂。其发展最初从相对简单的结构网格开始,这类网格可由代数方法构造,或通过求解偏微分方程生成。但随着构型几何复杂度的增加,网格必须被划分为若干拓扑上更简单的块(多块方法,multiblock approach)。下一步合乎逻辑的发展,是允许网格块之间出现非匹配接口,以减轻单块网格生成所受的约束。最后,引入了能够处理相互重叠网格的求解方法(Chimera技术)。例如,这使得对包含外部燃料箱与助推器在内的整套航天飞机构型的绕流模拟成为可能。然而,为复杂几何生成结构化多块网格,至今仍可能需要数周才能完成。因此,研究也转向了非结构网格生成器与流动求解器的开发,它们有望在仅需很少用户干预的情况下显著缩短前处理时间。非结构方法的另一项重要特征,是具备基于解的网格自适应能力。最早的非结构网格完全由各向同性四面体组成,这对由Euler方程控制的无粘流动已经足够。然而,在较高Reynolds数下求解Navier-Stokes方程需要在剪切层内使用高度拉伸的网格。尽管这类网格也可由四面体单元构造,但在粘性流动区域使用棱柱体或六面体、在外部区域使用四面体更为可取。这不仅提高了解的精度,也减少了单元、面与边的数量,从而显著降低模拟的内存与运行时间需求。

如今,CFD方法已在飞机、涡轮机械、汽车与船舶设计等领域得到常规应用。此外,CFD也被用于气象学、海洋学、天体物理学、生物学、采油以及建筑学。许多为CFD发展出的数值技术,也被用于求解Maxwell方程或用于气动声学。因此,CFD已成为工程中的重要设计工具,同时也是多种科学研究中不可或缺的工具。随着数值求解方法与计算机技术的进步,即使在PC或PC集群上也能运行几何与物理上复杂的算例。在当今的超级计算机上,在由数千万个单元组成的网格上完成粘性流动的大规模模拟,只需要几个小时。然而,如果认为CFD如今已经是一项成熟技术(例如固体力学中的有限元方法那样),那将完全错误。并非如此:湍流与燃烧建模、传热、粘性流动的高效求解技术、既鲁棒又精确的离散方法、自动化网格生成器等,仍有许多开放问题。CFD与其他学科(如固体力学)之间的耦合也需要进一步研究。此外,利用CFD进行设计优化也带来了新的机遇。

本书的目标,是为大学生提供理解当今CFD中所用数值方法的坚实基础,并通过动手实践帮助他们熟悉现代CFD代码。本书也面向刚开始从事CFD领域工作的工程师与科学家,以及正在应用CFD代码的人员。书中所用数学始终与其背后的物理相联系,以便促进对内容的理解。本文本也可作为参考手册。每一章都包含大量参考文献,可作为进一步学习研究的基础。

CFD方法关注流体运动方程的求解,以及流体与固体之间的相互作用。控制无粘流体运动的方程(Euler方程)与粘性流体运动的方程(Navier-Stokes方程)将在Chapter 2中推导。关于理想气体与真实气体的附加热力学关系也将讨论。Chapter 3介绍控制方程求解的基本原理,简要描述最重要的方法,并给出相应参考文献。第三章可与第二章配合使用,以熟悉CFD的基本原理。

过去人们为Euler方程与Navier-Stokes方程的空间离散发展了大量格式。本书的一个独特之处在于,它同时讨论结构化(第四章)与非结构有限体积格式(第五章),因为它们具有广泛的应用可能性,尤其适用于工业环境中经常遇到的复杂流动问题。书中特别关注不同类型控制体的定义,以及对流与粘性通量的空间离散方法。并将详细给出最常用的中心与迎风格式的三维有限体积表述。

控制方程的时间离散方法可分为两大类。一类是显式时间推进格式(6.1节),另一类是隐式格式(6.2节)。为提供更完整的概览,书中还讨论了基于Newton迭代的较新求解方法,以及显式Runge-Kutta格式等标准技术。

一般会遇到两类性质截然不同的粘性流动:层流与湍流。在层流情况下,求解Navier-Stokes方程不会带来根本性困难。然而,湍流模拟至今仍像以往一样是一项重大挑战。建模湍流的一种相对简单的方法,是所谓的Reynolds平均Navier-Stokes方程。另一方面,Reynolds应力模型或LES能够对湍流做出显著更准确的预测。第七章将详细介绍多种经过充分验证、并被广泛应用的湍流模型,它们的复杂度水平各不相同。

为考虑特定问题的具体特征,并获得控制方程的唯一解,必须指定恰当的边界条件。基本上,边界条件分为两类:物理边界条件与数值边界条件。第八章将在固壁、入口、出口、喷注与远场等不同情形下讨论这两类边界条件,同时还将处理对称面、周期边界与块边界。

为减少求解复杂流动问题所需的计算时间,采用数值加速技术至关重要。第九章将广泛讨论多种方法,其中包括隐式残差光顺与multigrid等。第九章还描述了另一项重要方法:对控制方程进行预条件化(preconditioning)。它使得同一种数值格式可以用于Mach数从近零到跨声速或更高的流动。最后,Chapter 9还包含一节,讨论通过不同方法实现数值计算代码并行化。

对控制方程的每一种离散都会引入一定误差——离散误差。离散格式必须满足若干一致性要求,才能确保离散方程的解能紧密逼近原始方程的解。第十章的前两部分将讨论这一问题。在实现某种数值求解方法之前,至少需要近似了解该方法会如何影响CFD代码的稳定性与收敛性。大量验证表明,Von Neumann稳定性分析可以对数值格式的性质给出良好评估。因此,Chapter 10的第三部分将针对多种模型方程讨论稳定性分析。

CFD中的一项具有挑战性的任务,是围绕复杂几何生成结构化或非结构的贴体网格。网格用于在空间上离散控制方程,因此流动解的精度与网格质量密切相关。第十一章将深入讨论生成结构化与非结构网格的最重要方法。

为展示不同数值求解方法的实践方面,本书提供了若干可下载的源代码,包括准一维Euler、以及二维Euler与Navier-Stokes的结构化与非结构流动求解器。此外,还提供了二维结构化代数与椭圆型网格生成器的源代码,以及一个将结构化网格转换为非结构网格的转换器。还提供了两个程序,用于对显式与隐式时间推进格式进行线性稳定性分析。源代码包还配有一组完整示例,包括网格、输入文件与结果。代码包还包含若干程序,用于演示并行化技术。Chapter 12将描述各目录的内容、各程序的功能,并给出使用示例。

本书最后以附录与索引收尾。附录给出以微分形式表述的控制方程及其特征性质,并讨论旋转参考系与动网格情况下的控制方程形式及若干简化形式。此外,还给出了二维与三维情况下从守恒变量到特征变量的Jacobian矩阵与变换矩阵。随后介绍用于求解线性方程组的GMRES共轭梯度方法。附录最后对张量记号作简要说明。