有限体积法
第一步:从物理守恒定律到积分形式
有限体积法的核心思想源于物理守恒定律(如质量、动量、能量守恒)。这些定律在连续介质中通常表述为:控制体内某物理量随时间的变化率,等于通过其边界面的净通量与体内源汇项之和。数学上,对于一个任意形状的控制体 \(\Omega\),守恒律的积分形式为:
\[\frac{d}{dt} \int_{\Omega} u \, dV + \oint_{\partial \Omega} \mathbf{F}(u) \cdot \mathbf{n} \, dS = \int_{\Omega} Q \, dV \]
其中:
- \(u\) 是守恒物理量(如密度、能量密度)。
- \(\mathbf{F}(u)\) 是通量向量,描述该物理量通过单位面积单位时间的流动(如质量流、热流)。
- \(\partial \Omega\) 是控制体 \(\Omega\) 的边界。
- \(\mathbf{n}\) 是边界外法向单位向量。
- \(Q\) 是源项(如热源、力)。
有限体积法直接对这一积分方程进行离散,这是它与基于微分方程弱形式的有限元法,或基于微分方程近似导数的有限差分法在出发点上的根本区别。它对任意复杂的几何形状有天然的适应性。
第二步:计算区域的离散——生成网格与控制体
要将积分方程数值求解,首先需将整个计算区域划分为许多互不重叠的小控制体,即生成网格。
- 网格类型:常见的有结构化网格(如矩形、六面体,逻辑排列整齐)和非结构化网格(如三角形、四面体,适应复杂几何)。有限体积法对两者都能很好处理。
- 控制体定义:在结构化网格中,控制体常取网格单元本身。在非结构化网格中,常采用以网格节点为中心(称为顶点型)或以单元形心为中心(称为单元型)来构造控制体。
- 基本要素:每个控制体 \(\Omega_i\) 有明确的体积 \(V_i\),其边界由一系列面 \(f\) 组成。对于每个面,我们需要知道它的面积 \(A_f\) 和单位法向量 \(\mathbf{n}_f\)。
这个离散过程确保了整个区域的守恒性,因为相邻控制体共享的界面,对两个控制体而言,其法向量方向相反。
第三步:离散积分方程——建立半离散格式
对第 \(i\) 个控制体 \(\Omega_i\) 应用积分守恒律。假设在控制体内物理量是均匀的,用其平均值 \(u_i \approx \frac{1}{V_i} \int_{\Omega_i} u \, dV\) 代表该控制体的状态。
将积分方程离散:
- 时间导数项:
\[ \frac{d}{dt} \int_{\Omega_i} u \, dV \approx V_i \frac{du_i}{dt} \]
。
2. 面积分项(关键):
\[ \oint_{\partial \Omega_i} \mathbf{F} \cdot \mathbf{n} \, dS \approx \sum_{f \in \partial \Omega_i} \mathbf{F}_f \cdot \mathbf{n}_f A_f \]
。这里 \(\mathbf{F}_f\) 是物理量在界面 \(f\) 上的数值通量。它是整个方法的核心和难点,必须通过相邻控制体的物理量值 \(u_i\) 和 \(u_j\) 来构造,并尽可能精确地反映真实的物理流通。
3. 源项:
\[ \int_{\Omega_i} Q \, dV \approx Q_i V_i \]
。
得到每个控制体上的半离散方程:
\[V_i \frac{du_i}{dt} + \sum_{f \in \partial \Omega_i} \mathbf{F}_f(u_L, u_R) \cdot \mathbf{n}_f A_f = Q_i V_i \]
这是一个关于时间的常微分方程组。其中 \(u_L, u_R\) 分别代表界面两侧(左和右)重构出的物理量值。
第四步:界面通量计算——数值通量函数与格式
计算 \(\mathbf{F}_f \cdot \mathbf{n}_f\) 是有限体积法的灵魂。这分为两个子步骤:
- 界面变量重构:从控制体平均值 \(u_i\) 来估算界面上的值 \(u_L, u_R\)。最简单的是一阶迎风或中心差分(用相邻单元平均值直接赋值)。为提高精度,需要进行高阶重构,例如在控制体上假设 \(u\) 为分段线性函数,利用周围多个单元的平均值通过最小二乘等方法拟合梯度,从而得到界面处更精确的 \(u_L, u_R\)。这类似于在局部“重建”物理量分布。
- 求解黎曼问题:界面两侧的值 \(u_L\) 和 \(u_R\) 通常不相等,形成一个间断,这被称为一个局部黎曼问题。数值通量函数 \(\mathbf{F}_f(u_L, u_R)\) 的目标就是近似求解这个黎曼问题,给出通过界面的净通量。根据方程类型:
- 对流主导问题(如双曲型方程):常用通量格式包括迎风格式(考虑信息传播方向)、Roe格式(基于局部线性化精确求解)、HLL/HLLC格式(基于波速估计的近似黎曼解)以及高阶无振荡的ENO/WENO格式。
- 扩散主导问题(如抛物型方程):通量通常与物理量梯度相关(如傅里叶热传导定律 \(\mathbf{F} = -k \nabla u\))。此时需要计算界面处的梯度,常用方法是基于相邻单元中心值的线性插值或最小二乘梯度重构。
一个格式的好坏,决定了方法的精度、守恒性、稳定性和激波捕捉能力。
第五步:时间积分与算法实现
获得空间半离散系统 \(\frac{d\mathbf{u}}{dt} = \mathbf{L}(\mathbf{u})\) 后,需要选用时间积分方法推进求解。
- 显式方法(如显式欧拉、Runge-Kutta):计算简单,但受稳定性条件限制(CFL条件),时间步长必须很小。
- 隐式方法(如隐式欧拉、Crank-Nicolson):无条件稳定(对线性问题),允许大时间步长,但每步需要求解大型非线性方程组,计算量大。
- 混合方法:如对对流项用显式、扩散项用隐式的IMEX方法。
最终,算法流程为:初始化 -> 循环每个时间步 -> 对每个控制体进行界面重构和通量计算 -> 组装成右端项 -> 时间积分更新解 -> 直至达到最终时间。
第六步:方法特性与总结
有限体积法的主要优点:
- 严格的局部和全局守恒性:这是由积分方程离散方式自然保证的,对于守恒物理量(如质量、能量)的计算至关重要。
- 几何灵活性:易于处理复杂区域和非结构化网格。
- 物理直观:直接基于守恒律,通量计算与物理过程联系紧密。
其挑战在于:
- 高精度实现复杂:二阶以上精度需要精心设计重构和通量格式。
- 非结构网格上的梯度计算:对扩散问题,在扭曲网格上获得高精度梯度是一项挑战。
- 计算成本:高阶格式和隐式求解通常计算量较大。
有限体积法是计算流体力学、传热学、等离子体物理等领域的主流方法之一,尤其擅长处理包含激波、接触间断等复杂流动问题,因为它能自然地保持物理量的守恒性。