有限体积法
字数 3065 2025-12-23 08:03:33

有限体积法

第一步:从物理守恒定律到积分形式
有限体积法的核心思想源于物理守恒定律(如质量、动量、能量守恒)。这些定律在连续介质中通常表述为:控制体内某物理量随时间的变化率,等于通过其边界面的净通量与体内源汇项之和。数学上,对于一个任意形状的控制体 \(\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\) 是源项(如热源、力)。

有限体积法直接对这一积分方程进行离散,这是它与基于微分方程弱形式的有限元法,或基于微分方程近似导数的有限差分法在出发点上的根本区别。它对任意复杂的几何形状有天然的适应性。

第二步:计算区域的离散——生成网格与控制体
要将积分方程数值求解,首先需将整个计算区域划分为许多互不重叠的小控制体,即生成网格

  1. 网格类型:常见的有结构化网格(如矩形、六面体,逻辑排列整齐)和非结构化网格(如三角形、四面体,适应复杂几何)。有限体积法对两者都能很好处理。
  2. 控制体定义:在结构化网格中,控制体常取网格单元本身。在非结构化网格中,常采用以网格节点为中心(称为顶点型)或以单元形心为中心(称为单元型)来构造控制体。
  3. 基本要素:每个控制体 \(\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\) 代表该控制体的状态。

将积分方程离散:

  1. 时间导数项

\[ \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\) 是有限体积法的灵魂。这分为两个子步骤:

  1. 界面变量重构:从控制体平均值 \(u_i\) 来估算界面上的值 \(u_L, u_R\)。最简单的是一阶迎风或中心差分(用相邻单元平均值直接赋值)。为提高精度,需要进行高阶重构,例如在控制体上假设 \(u\) 为分段线性函数,利用周围多个单元的平均值通过最小二乘等方法拟合梯度,从而得到界面处更精确的 \(u_L, u_R\)。这类似于在局部“重建”物理量分布。
  2. 求解黎曼问题:界面两侧的值 \(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方法

最终,算法流程为:初始化 -> 循环每个时间步 -> 对每个控制体进行界面重构和通量计算 -> 组装成右端项 -> 时间积分更新解 -> 直至达到最终时间。

第六步:方法特性与总结
有限体积法的主要优点:

  1. 严格的局部和全局守恒性:这是由积分方程离散方式自然保证的,对于守恒物理量(如质量、能量)的计算至关重要。
  2. 几何灵活性:易于处理复杂区域和非结构化网格。
  3. 物理直观:直接基于守恒律,通量计算与物理过程联系紧密。

其挑战在于:

  1. 高精度实现复杂:二阶以上精度需要精心设计重构和通量格式。
  2. 非结构网格上的梯度计算:对扩散问题,在扭曲网格上获得高精度梯度是一项挑战。
  3. 计算成本:高阶格式和隐式求解通常计算量较大。

有限体积法是计算流体力学、传热学、等离子体物理等领域的主流方法之一,尤其擅长处理包含激波、接触间断等复杂流动问题,因为它能自然地保持物理量的守恒性。

有限体积法 第一步:从物理守恒定律到积分形式 有限体积法的核心思想源于物理守恒定律(如质量、动量、能量守恒)。这些定律在连续介质中通常表述为: 控制体 内某物理量随时间的变化率,等于通过其边界面的净通量与体内源汇项之和。数学上,对于一个任意形状的控制体 \( \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} \]。 面积分项(关键) :\[ \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 \) 来构造,并尽可能精确地反映真实的物理流通。 源项 :\[ \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方法 。 最终,算法流程为:初始化 -> 循环每个时间步 -> 对每个控制体进行界面重构和通量计算 -> 组装成右端项 -> 时间积分更新解 -> 直至达到最终时间。 第六步:方法特性与总结 有限体积法的主要优点: 严格的局部和全局守恒性 :这是由积分方程离散方式自然保证的,对于守恒物理量(如质量、能量)的计算至关重要。 几何灵活性 :易于处理复杂区域和非结构化网格。 物理直观 :直接基于守恒律,通量计算与物理过程联系紧密。 其挑战在于: 高精度实现复杂 :二阶以上精度需要精心设计重构和通量格式。 非结构网格上的梯度计算 :对扩散问题,在扭曲网格上获得高精度梯度是一项挑战。 计算成本 :高阶格式和隐式求解通常计算量较大。 有限体积法是计算流体力学、传热学、等离子体物理等领域的 主流方法之一 ,尤其擅长处理包含激波、接触间断等复杂流动问题,因为它能自然地保持物理量的守恒性。