3. 通量计算的核心概念
有限体积法(FVM)与有限差分、有限元最本质的区别,在于它并不直接离散微分方程本身,而是对控制体积做积分,把方程改写成“通量守恒”的形式。以最简单的一维标量守恒律为例:
∂u/∂t + ∂f(u)/∂x = 0, f(u) = a·u
对第 i 个控制体积 [xi−1/2, xi+1/2] 积分一个时间步,得到
u_i^(n+1) = u_i^n − (Δt/Δx)·(F_{i+1/2} − F_{i−1/2})
这里 u_i^n 是单元平均值,F_{i+1/2} 与 F_{i−1/2} 分别是单元左右界面上的数值通量。整个有限体积法的计算骨架,就是“重构界面两侧状态 → 用数值通量函数算出界面通量 → 按上述公式更新单元平均值”。因此,通量计算不是附属步骤,而是决定精度、稳定性和物理正确性的核心环节。
数值通量的定义与基本性质
数值通量是一个函数,记作 F̂(u_L, u_R),它接收界面左侧状态 u_L 和右侧状态 u_R,输出一个标量通量值。它必须满足两个基本条件:
- 相容性:当 u_L = u_R = u 时,F̂(u, u) = f(u),即退化为物理通量。否则格式会收敛到错误的方程。
- 守恒性:同一界面在左单元中作为右界面、在右单元中作为左界面,使用的是同一个 F̂ 值。这样相邻单元的贡献严格抵消,全域积分守恒自动成立。
守恒性在实现上体现为一个关键约定:界面通量只计算一次并共享。若代码中左单元用 F̂(u_L, u_R)、右单元用 F̂(u_R, u_L) 各自独立计算,且函数不满足反对称关系,就会产生虚假源项,长时间积分后总质量漂移。这是初学者最常见的错误之一。
中心格式与迎风格式的基本思想
中心格式取界面两侧状态的平均:F̂ = (f(u_L) + f(u_R))/2。它对光滑解是二阶精度的,形式简单,但完全不含耗散。对纯对流问题,中心格式会产生非物理振荡,且对时间步长要求苛刻(需满足类似 |a|Δt/Δx ≤ 1 的稳定性限制),因此很少单独用于对流主导问题。
迎风格式则依据信息传播方向选取上游状态。对 a > 0,信息从左向右传,界面通量取 F̂ = f(u_L) = a·u_L;对 a < 0 取 F̂ = a·u_R。其物理依据是:界面上真正到达的是什么,取决于特征速度的符号。迎风格式引入数值耗散,单调性好、无振荡,但只有一阶精度,会把陡峭的间断抹平。
实际工程中更常用的是近似 Riemann 通量,如 Roe 格式、HLL/HLLC 格式,它们介于中心与迎风之间:既保留迎风的信息传播方向,又通过波速估计控制耗散量。以 HLL 为例,界面通量由左右波速 S_L、S_R 加权组合:
F̂ = (S_R·f(u_L) − S_L·f(u_R) + S_L·S_R·(u_R − u_L)) / (S_R − S_L)
当 S_L = −a、S_R = a 时,该式退化为 a(u_L + u_R)/2,即中心格式;当波速取单侧时则趋近迎风。这说明中心与迎风并非对立,而是同一族通量函数在不同耗散强度下的两端。
通量计算在有限体积法中的角色
从上面的结构可以看出,通量计算承担了三重角色。第一,它是空间离散的唯一入口:单元内部不做任何空间导数近似,所有空间信息都通过界面通量进入。第二,它是稳定性与精度的调节器:数值耗散的大小直接由通量函数决定,耗散不足则振荡,耗散过量则抹平。第三,它是物理边界条件的施加点:边界条件最终都转化为边界界面上的通量值。
以边界处理为例,若左端为入流边界(a > 0),则界面外侧状态 u_L 由边界条件给定,内侧 u_R 取单元平均值,再代入通量函数即可;若为出流边界,则 u_L 取单元平均值,u_R 取外推值。可见边界处理并不需要修改更新公式,只需在边界界面上构造合适的 (u_L, u_R) 对。这正是有限体积法结构清晰的原因:内部与边界共用同一套通量计算逻辑。
最后需要强调精度与耗散的权衡。一阶迎风虽然稳健,但在长距离输运中数值扩散显著;提高精度通常通过重构界面两侧状态(如 MUSCL 插值)实现,而通量函数本身仍可采用迎风或近似 Riemann 形式。也就是说,重构决定“界面两侧给什么状态”,通量函数决定“如何把这些状态合成一个通量”,两者分工明确,共同构成有限体积法通量计算的核心。