第 1 章:引论(Introduction)
1.1 What Is Computational Fluid Dynamics (CFD)
本节从一个历史性引语切入:Cray Research 董事长兼 CEO John Rollwagen 在 Supercomputing 89 开幕主旨演讲中宣称,计算机仿真作为与实验和数学理论并列的第三种科学方法分支,正成为日常工具、推动科学与工程新发现。作者承认这类"仿真工具与技术的进步"的陈述虽然常见,但事实上仿真工具如今已在众多日常技术中扮演着技术赋能者的关键角色。
作者随即进入 CFD 的历史与现状。CFD 的发展最早由航空航天业内的部分部门推动,后来扩展到汽车、电力、化工、核能、船舶等设计密集型行业。过去十年又有更多行业加入 CFD 重度用户的行列:电子行业用 CFD 优化电子设备的能源系统与散热;生物医学行业把 CFD 作为医学应用的核心开发与验证工具;建筑行业则在 HVAC(暖通空调)、火灾模拟、空气质量评估中广泛使用 CFD。
作者随后指出两个时间锚点:从 Rollwagen 那次演讲至今不过二十余年,而自 1970 年代初 Brian Spalding 在帝国理工的 CFD 小组提出具有开创性意义的 SIMPLE 算法算起则已四十余年。CFD 是后来走入主流的计算机辅助工程工具之一,加入了自 1980 年代中期就已成为工程设计循环一环的有限元分析(FEA,针对固体力学与振动)。作者解释这一延迟源于 CFD 待解方程的复杂性——其核心是 Navier-Stokes 方程,而该方程竟然能精准地模拟从湍流或层流单相不可压流、可压全速流直到多相流的一整类流动现象。在 CFD 所采用的各类数值方法中,有限体积法扮演了独特而关键的角色——由此自然过渡到 1.2 节。
1.2 What Is the Finite Volume Method
本节给出 FVM 的精确定义:有限体积法是一种数值技术,它把代表守恒定律的偏微分方程(针对微分体积)转换为针对有限体积(或单元、网格元)的离散代数方程。与有限差分法或有限元法的求解过程类似,第一步是几何区域离散化:在 FVM 中,区域被划分为不重叠的单元或有限体积;接着对每个离散单元积分,把偏微分方程离散/转化为代数方程;最后求解代数方程组,得到每个单元因变量的值。
作者接着强调 FVM 区别于其他方法的三项核心属性。第一,严格守恒:守恒方程中的部分项被转化成面通量并由有限体积面来求值,由于流入某一给定体积的通量与流出相邻体积的通量完全相同,FVM 天然守恒。这一固有守恒特性使 FVM 成为 CFD 中的首选方法。第二,几何灵活性:FVM 可以在物理空间中针对非结构多边形网格直接表述。第三,边界条件易处理:在 FVM 中,未知变量定义于体积单元的形心而非边界面上,因此各类边界条件可以非侵入式的方式实现。
作者总结道,这些特性使 FVM 非常适合涉及流体流动与热量、质量传递的应用仿真;FVM 的发展与 CFD 的进展紧密交织。从诞生时只能处理简单物理与几何、限于结构化网格的有限能力出发,FVM 现已能应对各种复杂物理与应用。这一段为后续章节中详尽展开 FVM 各项技术埋下伏笔。
1.3 This Book
本节是一份"书的自述",交代全书的内容定位、写作风格、教学路线与章节结构。
关于内容与写作风格:本书围绕有限体积法与计算流体力学展开,凝聚作者们近三十年工作的基本心得。作者在术语上谨慎斟酌,凡可能处均使用矢量记号以保证全书各话题的简洁一致;推导采用逐步展开的方式,配以大量插图澄清概念,并给出若干例题与练习。每章末尾设置名为 "Computational Pointers" 的小节,专门讲解两个代码实现层面的细节:第一个是作者自研的、基于 Matlab 的非结构 FVM 教学代码 uFVM;第二个是开源、C++ 写的、能处理工业级问题的有限体积代码 OpenFOAM。每章的数值内容一般先在一维网格上演示,再向二维、三维非结构网格推进,以便引入难点技术。
关于使用方式:本书的素材适合多种用途——可作为高年级本科生课程的教材,覆盖有限体积离散化基础;亦可作为研究生课程的教材,侧重有限体积法的应用与 CFD 中的使用;同时也是 CFD、数值传热、输运现象领域工作者的便捷参考。
章节结构:全书共 20 章,分四组:
- 基础(Foundation):第 2–7 章
- 数值方法(Numerics):第 8–14 章
- 算法(Algorithms):第 15、16 章
- 应用(Applications):第 17–19 章;第 20 章为结语。
配套资源:uFVM Matlab 程序、作者为本书开发的 OpenFOAM 例程及配套讲义可从书籍主页下载:https://feaweb.aub.edu.lb/research/cfd。
1.3.1 Foundation
基础部分(第 2–7 章)为引入 FVM 提供必要背景。
- 第 2 章:简要介绍线性代数要素,包括向量、矩阵、张量及其运算,并复习矢量分析的基本定理。
- 第 3 章:概述支配流体流动及相关输运现象的守恒原理,导出连续性方程、动量方程、能量方程(合称 Navier-Stokes 方程);进一步发展出针对一般标量、矢量、张量量的通用守恒方程——它构成后续数值方法章节展开的基石。该通用方程由瞬态项、对流项、扩散项、源项组成,每个项的离散化将在单独章节展开。
- 第 4 章:总结离散化流程的各步骤:(i) 对几何区域与物理现象建模;(ii) 把建模后的几何区域离散为网格系统;(iii) 把偏微分方程离散为等价于计算域每个单元的代数方程组;(iv) 求解该方程组。
- 第 5 章:把偏微分方程转化为一系列半离散方程,并对 FVM 的数值议题给出宽泛综述,为后续章节打下基础。
- 第 6 章:专门讨论有限体积网格——先讲网格离散化(用不重叠单元集合替代几何区域),再讲对计算网格各实体几何信息与拓扑信息(描述各实体的排列与相互关系)的计算。
- 第 7 章:概述塑造两套 CFD 代码(uFVM 与 OpenFOAM)实现的设计决策:先介绍两套代码的数据结构与内存管理方案,再给出一个样例测试用例,最后详细说明两套代码各自生成的方程组格式。
1.3.2 Numerics
数值方法部分(第 8–14 章)的每一章专注于离散化通用守恒方程中的某一项(除第 10 章专讲代数方程组的线性求解器外)。
- 第 8 章:扩散项离散化。先在结构化笛卡尔网格上演示,再推进到非正交非结构网格,解释作者对非正交交叉扩散项的处理;讨论插值型线及离散代数方程系数应满足的规则;详细给出边界条件实现以及高度非线性问题所需的亚松弛过程。
- 第 9 章:给出在一般网格拓扑上计算梯度的若干技术——Green-Gauss 与最小二乘两种路线,并给出把梯度插值到单元面的方法。
- 第 10 章:代数方程组求解器。介绍直接求解器与迭代求解器,重点放在迭代求解器(CFD 应用中很少使用直接求解器)。直接法包括高斯消元与 LU 分解;迭代法讨论了预条件概念,回顾 Jacobi、Gauss-Seidel、不完全 LU 分解、共轭梯度等方法的性能与局限;并介绍代数多重网格法——通常与迭代求解器联用以加速收敛。
- 第 11 章:在已知流场前提下推进对流项离散化。指出对称线性型线用于对流项离散化的不足,并提出以迎风型线为对策;指出迎风格式扩散误差过高的缺点,进而推荐迎风偏置高阶格式。
- 第 12 章:延续对流格式的发展,讨论如何处理高阶(HO)格式中由色散误差(插值型线的无界性)带来的问题——通过对 HO 型线施加对流有界性准则(CBC)得到一组高分辨率(HR)格式。介绍构造 HR 格式的两大框架:归一化变量形式(NVF) 与 总变差缩减(TVD);通过 NVF 下的归一化变量图(NVD) 与 TVD 下的 Sweby 图解释两类方法的共通性,许多具体格式同时在两种形式下给出。给出 HR 格式在结构化与非结构网格上的实现技术。
- 第 13 章:关注瞬态问题仿真中产生的非稳态项离散化。给出两条不同路线——其一用泰勒展开的有限差分近似;其二把有限体积法用于时间单元上(与对流项的处理方式类似)。
- 第 14 章:讨论若干"小"但对收敛行为有"大"影响的数值细节:解相关源项的线性化、代数方程亚松弛的显式与隐式技术、收敛判据。
1.3.3 Algorithms
前序章节在假定流场已知的前提下离散通用守恒方程。一般情况下流场是未知的,必须求解,这正是第 15、16 章的主题。
- 第 15 章:讨论不可压流预测。压力与速度强耦合、且缺少压力方程的困难由 SIMPLE 算法配合压力修正方程推导得以解决。引入 Rhie-Chow 插值以在同位网格上实现流场求解。最后详细给出若干常见边界条件的实现。
- 第 16 章:把 SIMPLE 算法扩展到可压流。密度对压力、温度的依赖通过密度修正纳入压力修正方程,产生一个对流型项,从而把方程的数学性质从不可压情形的椭圆型变为双曲型。同样给出若干边界条件的实现细节。
1.3.4 Applications
应用部分描述前序章节所发展数值技术的实现与应用。
- 第 17 章:把这些数值技术用于求解湍流问题,引入若干双方程湍流模型,并详细讨论近壁区的处理。
- 第 18 章:回顾 OpenFOAM 中边界条件的实现,并给出在代码中新增边界条件所需的信息;以无滑移壁面边界条件为例做了较详细的说明。
- 第 19 章:勾勒一个参考算例的求解过程——把前述求解器与边界条件用于求解一个湍流不可压流问题。
- 最后,第 20 章给出全书结语。
1.4 Closure
本章讨论了 CFD 作为一整类应用核心设计工具的日益重要角色,对 FVM 给出总体概览;明确了本书的目的、预期用法与内容概要。下一章将简要回顾后续章节将反复使用的数学工具。
本章个人批注
第 1 章本质是"书的引论"而非"领域的引论",但 Moukalled 等人写得相当克制——只用了 Rollwagen 1989 年的 Supercomputing 89 引语作为时间锚点,随即转入 CFD 行业版图与 FVM 的三项核心属性。读完后我最大的体感是:这本书把"严格守恒、面通量、形心变量"这三点作为 FVM 在 CFD 中胜出的根本理由讲清楚了;这也是后续章节(第 8 章扩散项离散化、第 11 章对流项离散化)反复回扣的逻辑起点。
我个人对第 1.3 节"本章内容"这种逐章预告的结构印象不错:相当于在读者心中先建立一张骨架地图,后面读每一章时可以反复对照"它属于 Foundation/Numerics/Algorithms/Applications 哪一块、要解决什么问题"。但也要警惕——预告往往简化了章节内部的逻辑,比如第 12 章短短一段预告里同时塞进了 NVF/TVD/NVD/Sweby 四种记号,要真正理解必须等到那章本身。
几点本章留下的待查问题,记到 questions.md:(1) Rollwagen 1989 那次演讲的原始文献出处?(2) SIMPLE 算法在 Imperial College 的"早期 70 年代"开发——具体是 1972 年 Patankar 与 Spalding 的论文吗?(3) uFVM 在 feaweb.aub.edu.lb 主页上现在还能下载到吗?需要补一个版本快照。
与上下章的衔接(一段话)
作为全书首章,本章承担三个功能:(a) 把读者从行业层面的 CFD 现状带入 FVM 的方法学定位(§1.1–1.2);(b) 给出本书的写作哲学、教学路线与章节全景图(§1.3 系列);(c) 提示下一章将做什么(§1.4 末句)。它在叙事上向上不接任何前文——这是全书开端;向下则明确预告第 2 章"将给后续章节反复用到的数学工具做简要回顾",因此 §1.4 的衔接句把读者直接送到第 2 章(线性代数要素 + 矢量分析基本定理)。值得注意的是,第 2 章标题虽是"Review of Vector Calculus",但 §1.3.1 同时提到它会涵盖"线性代数要素"——这一双线布置是为了让第 3 章推导 Navier-Stokes 方程与第 5 章推导半离散方程时所需的算子、积分定理、张量记号一应俱全。