1. 课程导入与有限体积法框架

有限体积法(Finite Volume Method,FVM)是计算流体力学与传热数值模拟中最主流的离散方法之一。它的核心思想非常朴素:把连续的计算域切分成有限个互不重叠的控制体积,对每个控制体积直接写出守恒定律的积分形式,再借助高斯散度定理把体积分转化为通过控制体积界面的面积分。这样一来,物理量在单元内的变化被"记账"为穿过界面的通量收支,守恒性在离散层面天然成立——流出某个单元的量,必然等于流入相邻单元的量,不会凭空产生或消失。

理解这一点,就抓住了有限体积法与有限差分、有限元最本质的区别。有限差分从微分方程出发,用泰勒展开近似导数;有限元从变分原理或加权残量出发,追求弱形式下的逼近;而有限体积法从守恒律的积分形式出发,把"守恒"作为第一性原理保留在离散方程中。对于激波捕捉、多相流、燃烧等强对流问题,这种逐单元守恒的特性尤为重要,因为它保证了间断两侧的通量平衡,避免了非物理的源汇。

守恒形式与半离散方程

以一维标量守恒律为例,微分形式为 ∂u/∂t + ∂f(u)/∂x = 0,其中 f(u) 是通量。对第 i 个控制体积 [xi−1/2, xi+1/2] 积分,得到

d/dt ∫ u dx + f(u_{i+1/2}) − f(u_{i−1/2}) = 0
⇒ Δx_i · du_i/dt + F_{i+1/2} − F_{i−1/2} = 0

这里 ui 是单元平均值,Fi±1/2 是界面数值通量。这个半离散方程清楚地表明:单元内守恒量的时间变化率,完全由左右两个界面的通量差决定。整个求解过程可以拆成三件事——重构(由单元平均值构造界面两侧的状态)、通量计算(用数值通量函数把两侧状态合成为一个界面通量)、时间推进(把通量差积分到下一时刻)。边界处理则决定了计算域两端界面通量如何给定,它直接进入同一套通量收支框架,而不是额外的补丁。

参照约定:本文及图示统一取 x 轴向右为正,界面通量 F 以"沿 +x 方向流出"为正。因此单元右界面通量减去左界面通量即为净流出量,与上述方程符号一致。

通量计算与边界处理在整体框架中的位置

把上述结构放到二维/三维非结构网格上,整体框架可以概括为"几何—重构—通量—装配—推进—边界"六个环节。几何环节建立单元与界面的拓扑关系,记录每个界面的面积矢量、法向和左右相邻单元;重构环节在单元内构造多项式(如 MUSCL 线性重构、WENO 重构),并用限制器抑制振荡;通量环节对每个内部界面调用近似 Riemann 求解器(Roe、HLLC、AUSM 等)或中心格式加耗散;装配环节把所有界面通量累加到对应单元的残差中;时间推进环节用显式 Runge-Kutta 或隐式方法更新守恒量;边界环节则为边界界面提供"虚拟状态"或直接指定通量,使边界界面与内部界面走同一套通量函数。

需要强调的是,边界处理不是孤立的后处理步骤。在有限体积法中,边界界面同样参与通量收支,若边界通量给错,误差会立刻以源项的形式注入边界单元,并向内传播。因此本课程把边界处理与通量计算放在同一框架下讲解:内部界面靠重构加 Riemann 求解器,边界界面靠边界条件构造虚拟单元状态,二者最终都汇入同一个残差装配循环。

有限体积法求解框架:从几何到边界通量 几何与拓扑 单元/界面/法向 重构 MUSCL / WENO 数值通量 Roe / HLLC / AUSM 残差装配 Σ 界面通量 时间推进 显式 RK / 隐式 更新 uⁿ⁺¹ 边界处理 虚拟单元 / 指定通量 / 壁面条件 边界界面走同一通量函数 控制体积通量收支(一维示意) 单元 i x_{i−1/2} x_{i+1/2} F_{i−1/2} 流入 F_{i+1/2} 流出 Δx·du/dt = F_{i−1/2} − F_{i+1/2} 本课程学习路径 ① 守恒形式与半离散方程 ② 重构与限制器 ③ 数值通量与 Riemann 求解 ④ 边界条件与虚拟单元 ⑤ 时间推进与稳定性 ⑥ 实战:一维/二维算例闭环

本课程的实战目标

本课程不满足于公式推导,而是希望读者最终能独立完成一个可运行、可验证的有限体积求解器核心。具体目标包括:能够从守恒律出发写出任意单元的半离散方程;能够实现至少一种重构格式与一种近似 Riemann 求解器;能够正确设置入口、出口、壁面、对称等常见边界条件,并理解虚拟单元法与直接指定通量法的适用差异;能够用一维 Sod 激波管、二维圆柱绕流或顶盖驱动方腔等标准算例检验实现正确性,并通过通量守恒误差、残差收敛曲线和网格收敛性判断结果是否可信。

为了让学习过程可复现,课程会给出明确的示例参数。例如在一维激波管算例中,可取计算域 [0, 1],初始间断位于 x = 0.5,左右状态分别为 (ρ, u, p) = (1.0, 0, 1.0) 与 (0.125, 0, 0.1),比热比 γ = 1.4,网格数 N = 200,CFL 数取 0.4,采用 MUSCL 重构加 HLLC 通量、二阶 Runge-Kutta 时间推进。这些数值属于教学示例设定,用于说明流程与判据,并非实测结果。读者实现后应观察激波、接触间断和稀疏波的位置与形状,并检查总质量、总动量和总能量在无通量边界下是否保持到机器精度量级。

常见误区提醒:把边界条件当作"最后再补"的细节,往往导致边界单元出现非物理反射或质量泄漏。正确做法是在设计残差装配循环时,就把边界界面与内部界面统一编号、统一调用通量函数,只让"界面两侧状态从哪来"这一件事因边界类型而不同。

接下来的章节将沿着上述框架逐层展开:先夯实守恒形式与半离散方程,再进入重构、通量与边界处理的具体实现,最后通过完整算例把各环节串成闭环。学习时建议边读边写,每完成一个模块就用简单算例单独验证,避免把所有错误堆积到最后调试。