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 是界面数值通量。这个半离散方程清楚地表明:单元内守恒量的时间变化率,完全由左右两个界面的通量差决定。整个求解过程可以拆成三件事——重构(由单元平均值构造界面两侧的状态)、通量计算(用数值通量函数把两侧状态合成为一个界面通量)、时间推进(把通量差积分到下一时刻)。边界处理则决定了计算域两端界面通量如何给定,它直接进入同一套通量收支框架,而不是额外的补丁。
通量计算与边界处理在整体框架中的位置
把上述结构放到二维/三维非结构网格上,整体框架可以概括为"几何—重构—通量—装配—推进—边界"六个环节。几何环节建立单元与界面的拓扑关系,记录每个界面的面积矢量、法向和左右相邻单元;重构环节在单元内构造多项式(如 MUSCL 线性重构、WENO 重构),并用限制器抑制振荡;通量环节对每个内部界面调用近似 Riemann 求解器(Roe、HLLC、AUSM 等)或中心格式加耗散;装配环节把所有界面通量累加到对应单元的残差中;时间推进环节用显式 Runge-Kutta 或隐式方法更新守恒量;边界环节则为边界界面提供"虚拟状态"或直接指定通量,使边界界面与内部界面走同一套通量函数。
需要强调的是,边界处理不是孤立的后处理步骤。在有限体积法中,边界界面同样参与通量收支,若边界通量给错,误差会立刻以源项的形式注入边界单元,并向内传播。因此本课程把边界处理与通量计算放在同一框架下讲解:内部界面靠重构加 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 时间推进。这些数值属于教学示例设定,用于说明流程与判据,并非实测结果。读者实现后应观察激波、接触间断和稀疏波的位置与形状,并检查总质量、总动量和总能量在无通量边界下是否保持到机器精度量级。
接下来的章节将沿着上述框架逐层展开:先夯实守恒形式与半离散方程,再进入重构、通量与边界处理的具体实现,最后通过完整算例把各环节串成闭环。学习时建议边读边写,每完成一个模块就用简单算例单独验证,避免把所有错误堆积到最后调试。