有限體積法

有限體積法（英文：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