有限體積法

**有限體積法**（ 英文：**finite volume method** ）是一種以數值方法解偏微分方程的計算方式。 在有限體積法中，將要描述的物理實體切分為網格單元來描述，並使用發散定理，將所有包含發散項的偏微分方程中的體積積分轉換為表面積分。然後將每個網格的項加總，便成為每個有限體積表面的通量。因為進入給定體積的通量與離開相鄰體積的通量相同，所以這些方法是守恆的。該方法用於許多計算流體動力學軟體。

有限體積法常被拿來與有限元素分析做比較，後者使用節點值來近似導數，或者使用有限元方法來使用局部數值來逼近解的局部近似值，並通過將它們加總在一起來形成全域近似值。另一方面，有限體積法會計算某個體積中的網格解之平均，然後使用此平均值來決定單元內解的近似值。

## 舉例

一維平流問題：

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

 $\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}}}\left(\int _{t_{1}}^{t_{2}}f_{i+{\frac {1}{2}}}dt-\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}}{dt}}+{\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}}{\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}}{\mathbf {f} }\left({\mathbf {u} }\right)\cdot {\mathbf {n} }\ dS={\mathbf {0} }.$

同樣的，可以通過對單元平均值進行內插或外推來重建交界面通量的值。實際的數值將取決於問題的幾何形狀和軮格結構。

有限體積方案是守恆的，因為單元平均會通過交界面通量而變化。換句話說，某個單元所損失的物理量，必定會通過交界面而被另一單元所獲得！

## 相關文獻

* **Eymard, R. Gallouët, T. R., Herbin, 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 R. Herbin, update of the article published in Handbook of Numerical Analysis, 2000
* Rübenkönig, Oliver. The Finite Volume Method (FVM) – An introduction. （原始內容存檔於 2009-10-02）. , 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