1. 课程导入与守恒律概览

在计算流体力学、传热学、多孔介质流动乃至电磁场仿真中,我们经常面对同一类问题:一个物理量在空间中如何分布、如何随时间演化,并且必须满足某种“总量不变”的约束。有限体积方法(Finite Volume Method,FVM)正是为这类问题而生的一种离散方法。它的出发点不是去逼近微分方程本身,而是直接对守恒律的积分形式做离散——这一点决定了它与有限差分、有限元在哲学上的根本差异。

一、从守恒律到积分形式

以一维标量守恒律为例,其微分形式可写为

∂u/∂t + ∂f(u)/∂x = 0

其中 u 是守恒量(例如质量浓度、能量密度),f(u) 是通量。微分形式要求 u 处处可微,这在激波、间断、材料界面处往往不成立。于是我们退一步,在一个控制体 [xi-1/2, xi+1/2] 上对微分方程积分,得到

d/dt ∫ u dx + f(u<sub>i+1/2</sub>) − f(u<sub>i-1/2</sub>) = 0

这个式子表达的含义非常朴素:控制体内守恒量的变化率,等于流入通量减去流出通量。它不要求 u 在控制体内部光滑,只要求界面上的通量有定义。有限体积方法就是在这个积分式上做文章:把计算域剖分成若干互不重叠的控制体(网格单元),在每个单元上维护一个单元平均值,用数值通量近似界面通量,从而把连续的守恒律转化为一组关于单元平均值的常微分方程组。

核心思想一句话:不追踪点上发生了什么,而是追踪每个小体积内“存了多少、进出多少”,并保证相邻单元在公共界面上的通量大小相等、方向相反——这就是守恒性的离散体现。

二、守恒性的两层含义

“守恒”在有限体积方法中有两层含义,初学者容易混淆。第一层是物理守恒:所求解的方程本身来自守恒律,控制体内总量的变化只由边界通量决定,没有源汇时总量不变。第二层是离散守恒:数值格式在离散层面也保持这一性质。具体来说,若单元 i 的右界面通量记为 Fi+1/2,那么单元 i 的流出量恰好等于单元 i+1 的流入量,二者使用同一个数值通量值。把所有单元方程相加,内部界面通量两两抵消,只剩下最外侧边界通量——离散总量因此严格守恒。

这一点非常关键。有限差分方法若直接对微分方程逐点离散,通常不具备这种“内部通量自动抵消”的性质,除非特意构造守恒型格式。而有限体积方法只要保证界面通量唯一,守恒性就是格式的结构性属性,不依赖于网格是否均匀、格式是否高阶。这也是它在激波捕捉、多相流、守恒型输运问题中被广泛采用的根本原因。

控制体剖分与界面通量守恒 计算域 单元 i−1 单元 i 单元 i+1 单元 i+2 平均值 Ui−1 平均值 Ui 平均值 Ui+1 平均值 Ui+2 界面 i−1/2 界面 i+1/2 界面 i+3/2 同一数值通量 Fi+1/2:流出 = 流入 离散守恒 内部界面通量两两抵消 总量仅由边界通量决定 单元方程相加 → 内部通量抵消 → 全局守恒

三、一个可手算的守恒性示例

为了把“离散守恒”落到实处,我们做一个极简的示例。设一维计算域长度为 4,剖分为 4 个长度 Δx = 1 的均匀单元,初始时刻各单元平均值分别为 U = [1.0, 2.0, 3.0, 4.0],总量为 10.0。采用一阶迎风数值通量,速度 a = 1(向右流动),时间步长 Δt = 0.2,满足 CFL 条件 aΔt/Δx = 0.2 ≤ 1。

界面通量取上游单元值:Fi+1/2 = Ui。左边界给定入流 U0 = 0.5,右边界为出流。按显式格式更新:

U_i^{n+1} = U_i^n − (Δt/Δx)·(F_{i+1/2} − F_{i−1/2})

逐单元计算:单元 1 的流入通量为 0.5、流出通量为 1.0,更新后为 1.0 − 0.2×(1.0 − 0.5) = 0.9;单元 2 流入 1.0、流出 2.0,得 2.0 − 0.2×1.0 = 1.8;单元 3 得 3.0 − 0.2×1.0 = 2.8;单元 4 得 4.0 − 0.2×1.0 = 3.8。新总量为 0.9 + 1.8 + 2.8 + 3.8 = 9.3。总量减少了 0.7,恰好等于右边界流出 4.0×0.2 = 0.8 减去左边界流入 0.5×0.2 = 0.1,即 0.7。这说明离散格式严格保持了“总量变化 = 边界净通量”的关系,内部界面通量在求和中完全抵消。

这个手算示例建议读者亲自用纸笔或表格复算一遍。它规模很小,却能同时验证三件事:单元更新公式的符号方向、界面通量的共享方式、以及全局守恒的核对方法。后续章节中更复杂的格式,守恒性核对都沿用同一思路。

四、课程地图与学习路径

本课程共 30 章,整体按“概念—格式—实现—验证—应用”的脉络推进。前几章建立守恒律积分形式、控制体剖分、单元平均值与数值通量的基本概念;随后进入通量格式的设计,包括中心格式、迎风格式、Riemann 求解器思路与高阶重构;再讨论时间推进、稳定性条件与边界条件处理;之后进入二维/三维非结构网格上的实现要点、源项与对流扩散耦合;最后通过若干典型算例完成从公式到代码、从代码到结果判读的闭环。

学习路径上,建议把握三条主线。第一条是守恒主线:任何格式都要能回答“它守恒吗、守恒到什么程度”。第二条是精度主线:从一阶到二阶再到高阶重构,理解精度提升带来的通量修正与限制器作用。第三条是实现主线:网格数据结构、面通量存储、边界条件注入、时间循环组织,这些工程细节决定了方法能否真正跑起来。三条主线交织推进,而不是孤立记忆公式。

阶段 主要内容 关键产出
基础概念(第 1–6 章) 守恒律积分形式、控制体、单元平均值、数值通量 能写出单元半离散方程并解释守恒性
通量格式(第 7–14 章) 中心/迎风、Riemann 思路、高阶重构、限制器 能为给定问题选择合适的界面通量格式
时间与边界(第 15–20 章) 显式/隐式推进、CFL 条件、边界条件离散 能判断稳定性并正确施加边界
实现与验证(第 21–30 章) 非结构网格、源项耦合、算例实现与结果判读 完成从公式到可运行程序再到结果分析的闭环

五、学习本节后应能回答的问题

在进入后续章节之前,请先自检:能否说清微分形式与积分形式各自成立的条件;能否解释为什么有限体积方法天然具有离散守恒性;能否对一个简单的一维算例手动完成一步更新并核对总量;能否画出控制体、界面与通量方向的关系图。如果这四点都能独立完成,说明你已经抓住了有限体积方法最核心的骨架,后续的格式设计与工程实现都将建立在这个骨架之上。

需要提醒的是,守恒性并不自动等于准确性。一个格式可以严格守恒,却可能因为数值耗散过大而把激波抹平,也可能因为色散产生非物理振荡。守恒是底线,精度和稳定性是另外两条必须同时关注的坐标轴。本课程后续会在保持守恒的前提下,逐步讨论如何提升精度、控制振荡、处理复杂边界,最终形成一套可落地、可验证的有限体积离散方法知识体系。