有限体积法

有限体积法（英文：finite volume method）是一种以数值方法解偏微分方程的计算方式。在有限体积法中，将要描述的物理实体切分为网格单元来描述，并使用发散定理，将所有包含发散项的偏微分方程中的体积积分转换为表面积分。然后将每个网格的项加总，便成为每个有限体积表面的通量。因为进入给定体积的通量与离开相邻体积的通量相同，所以这些方法是守恒的。该方法用于许多计算流体动力学软件。

有限体积法常被拿来与有限元素分析做比较，后者使用节点值来近似导数，或者使用有限元方法来使用局部数值来逼近解的局部近似值，并通过将它们加总在一起来形成全域近似值。另一方面，有限体积法会计算某个体积中的网格解之平均，然后使用此平均值来决定单元内解的近似值。

## 举例

一维平流问题：

$$\quad (1) \qquad \qquad \frac{\partial\rho}{\partial t}+\frac{\partial f}{\partial x}=0,\quad t\ge0.$$

$\rho=\rho \left( x,t \right) \ $在这里代表状态变量， $f=f \left( \rho \left( x,t \right) \right) \ $代表的通量或流量$\rho \ $。习惯上，$f \ $正值代表向右流动，而$f \ $负值代表向左流动。如果假设式（1）表示恒定面积的流动介质，则可以空间域 $x \ $，细分为数个网格单元，以每个网格单元所占的有限体积以$i \ $作为标记。对于特定的单元$i \ $，我们可以定义该体积某物理量（压力、温度等）之通量或流量平均值${\rho }_i \left( t \right) = \rho \left( x, t \right) \ $在时间${t=t_1}\ $和${ x \in \left[ x_{i-\frac{1}{2}}, x_{i+\frac{1}{2}} \right] }\ $，如式（2）

$$\quad (2) \qquad \qquad \bar{\rho}_i \left( t_1 \right) = \frac{1}{ x_{i+\frac{1}{2}} - x_{i-\frac{1}{2}}} \int_{x_{i-\frac{1}{2}}}^{x_{i+\frac{1}{2}}} \rho \left(x,t_1 \right)\, dx ,$$

而在时间${t = t_2}\ $时式（2）可写为：

$$\quad (3) \qquad \qquad \bar{\rho}_i \left( t_2 \right) = \frac{1}{x_{i+\frac{1}{2}} - x_{i-\frac{1}{2}}} \int_{x_{i-\frac{1}{2}}}^{x_{i+\frac{1}{2}}} \rho \left(x,t_2 \right)\, dx ,$$

此处$x_{i-\frac{1}{2}} \ $和$x_{i+\frac{1}{2}} \ $分别代表上游和下游面或网格单元的交界面位置$i^{th} \ $。

将式（1）积分，可得：

$$\quad (4) \qquad \qquad \rho \left( x, t_2 \right) = \rho \left( x, t_1 \right) - \int_{t_1}^{t_2} f_x \left( x,t \right)\, dt,$$

当$f_x=\frac{\partial f}{\partial x}$。

为了得到在时间$t=t_{2} \ $ 的有限体积平均值$\rho\left(x,t\right)$，在此积分位于整个有限体积的所有网格的流量$\rho\left(x,t_2 \right)$，并$\left[ x_{i-\frac{1}{2}}, x_{i+\frac{1}{2}} \right]$并将计算结果除以$\Delta x_i = x_{i+\frac{1}{2}}-x_{i-\frac{1}{2}}$，即可得：

$$\quad (5) \qquad \qquad \bar{\rho}_{i}\left( t_{2}\right) =\frac{1}{\Delta x_i}\int_{x_{i-\frac{1}{2}}}^{x_{i+\frac{1}{2}}}\left\{ \rho\left( x,t_{1}\right) - \int_{t_{1}}^{t_2} f_{x} \left( x,t \right) dt \right\} dx.$$

我们可以逆向积分的顺序。同样，请记住，流量垂直于单元的表面。现在，因为一维$f_x \triangleq \nabla \cdot f$，我们可以应用散度定理，即$\oint_{v}\nabla\cdot fdv=\oint_{S}f\, dS$，并用的值代替散度的体积积分$f(x) \ $在网格单元表面计算（某单元与其他单元之前后交界面$x_{i-\frac{1}{2}} \ $和$x_{i+\frac{1}{2}} \ $）的有限体积如下：

$$\quad (6) \qquad \qquad \bar{\rho}_i \left( t_2 \right) = \bar{\rho}_i \left( t_1 \right) - \frac{1}{\Delta x_{i}} <pre> \left( \int_{t_1}^{t_2} f_{i + \frac{1}{2}} dt </pre> - \int_{t_1}^{t_2} f_{i - \frac{1}{2}} dt \right) .$$

当$f_{i \pm \frac{1}{2}} =f \left( x_{i \pm \frac{1}{2}}, t \right)$。

因此，对于上述问题，我们可以得出一个半离散的数值格式，其单元中心的索引为$i\ $，且单元交界面通量的索引为$i\pm\frac{1}{2}$，通过对时间对式（6）进行微分，可得：

$$\quad (7) \qquad \qquad \frac{d \bar{\rho}_i}{d t} + \frac{1}{\Delta x_i} \left[ f_{i + \frac{1}{2}} - f_{i - \frac{1}{2}} \right] =0 ,$$

通过某单元交界面通量的值$f_{i \pm \frac{1}{2}}$可以通过对单元平均值进行内插或外推来获得。式（7）对于该有限体积的平均值是精确的，因为在推导过程中未进行任何近似。

该方法也可以应用于2D形况，只要同时考虑单元四周交界面，北面、南面、东面和西面即可。

## 一般守恒法则

我们还可以考虑以下PDE代表的一般守恒定律问题。

$$\quad (8) \qquad \qquad {{\partial {\mathbf u}} \over {\partial t}} + \nabla \cdot {\mathbf f}\left( {\mathbf u } \right) = {\mathbf 0} .$$

此处 ${\mathbf u} \ $代表状态向量$\mathbf f \ $代表相应的通量张量。同样，我们可以将空间域细分为有限体积的网格单元。对于特定的网格单元$i \ $，将体积积分乘以单元的总体积 $v _{i} \ $，如式（9）。

$$\quad (9) \qquad \qquad \int _{v_{i}} {{\partial {\mathbf u}} \over {\partial t}}\, dv + \int _{v_{i}} \nabla \cdot {\mathbf f}\left( {\mathbf u } \right)\, dv = {\mathbf 0} .$$

将第一项积分可得体积平均值，然后将散度定理应用于第二项，可得：

$$\quad (10) \qquad \qquad v_{i} {{d {\mathbf {\bar u} }_{i} } \over {dt}} + \oint _{S_{i} } <pre> {\mathbf f} \left( {\mathbf u } \right) \cdot {\mathbf n }\ dS = {\mathbf 0},$$

此处$S_{i} \ $代表单元的总表面积， ${\mathbf n}$是垂直于表面并指向外的单位向量。最后，可得一般结果如式（11）。

$$\quad (11) \qquad \qquad {{d {\mathbf {\bar u} }_{i} } \over {dt}} + {{1} \over {v_{i}} } \oint _{S_{i} } <pre> {\mathbf f} \left( {\mathbf u } \right)\cdot {\mathbf n }\ dS = {\mathbf 0} .$$

同样的，可以通过对单元平均值进行内插或外推来重建交界面通量的值。实际的数值将取决于问题的几何形状和軮格结构。

有限体积方案是守恒的，因为单元平均会通过交界面通量而变化。换句话说，某个单元所损失的物理量，必定会通过交界面而被另一单元所获得！

## 相关文献

- Eymard, R. Gallouët, T. R., 拉斐尔·赫宾 (2000) The finite volume method Handbook of Numerical Analysis, Vol. VII, 2000, p. 713–1020. Editors: P.G. Ciarlet and J.L. Lions.
- Hirsch, C. (1990), Numerical Computation of Internal and External Flows, Volume 2: Computational Methods for Inviscid and Viscous Flows, Wiley.
- Laney, Culbert B. (1998), Computational Gas Dynamics, Cambridge University Press.
- LeVeque, Randall (1990), Numerical Methods for Conservation Laws, ETH Lectures in Mathematics Series, Birkhauser-Verlag.
- LeVeque, Randall (2002), Finite Volume Methods for Hyperbolic Problems, Cambridge University Press.
- Patankar, Suhas V. (1980), Numerical Heat Transfer and Fluid Flow, Hemisphere.
- Tannehill, John C., et al., (1997), Computational Fluid mechanics and Heat Transfer, 2nd Ed., Taylor and Francis.
- Toro, E. F. (1999), Riemann Solvers and Numerical Methods for Fluid Dynamics, Springer-Verlag.
- Wesseling, Pieter (2001), Principles of Computational Fluid Dynamics, Springer-Verlag.

## 外部链接

- Finite volume methods by R. Eymard, T Gallouët and 拉斐尔·赫宾, update of the article published in Handbook of Numerical Analysis, 2000
- , available under the GFDL.
- FiPy: A Finite Volume PDE Solver Using Python from NIST.
- CLAWPACK : a software package designed to compute numerical solutions to hyperbolic partial differential equations using a wave propagation approach