OpenFOAM

OpenFOAM（英文 Open Source Field Operation and Manipulation 的縮寫，意為開源的場運算和處理軟體）是對連續介質力學問題進行數值計算的C++自由軟體工具包，其代碼遵守GNU通用公共許可證。它可進行數據預處理、後處理和自定義求解器，常用於計算流體力學(CFD)領域。該軟體由OpenFOAM基金會維護（商標OpenFOAM的擁有者矽谷圖形公司(SGI)贊助）。

## 歷史

OpenFOAM的早期開發始於1980年代末期的倫敦帝國學院，其目標是為了編寫一個相對於當時事實上的標準，FORTRAN，更為強大和靈活的通用模擬計算平台。並且因此選擇了擁有高度模塊化和面向對象特性的C++作為其程式語言。在2004年OpenFOAM以開源方式發布之前，英國Nabla有限公司曾銷售過FOAM，OpenFOAM的前身。2011年8月15日，OpenCFD宣布它被矽谷圖形公司(SGI)收購。

OpenFOAM是最早的用C++寫成的重要科學計算軟體包之一。現已成為使用多面體網格的最主要的通用計算流體力學(CFD)軟體.

## 特色

### 語法

OpenFOAM一個非常有特色的地方是它描述張量和偏微分方程的語法與被求解的方程本身非常相似，事實上便捷地在程序中表達傳統的數學記號正是其語法設計的目標。例如方程

$$\frac{\partial \rho \mathbf{U}}{\partial t} + \nabla \cdot\phi\mathbf{U} - \nabla \cdot\mu\nabla\mathbf{U} = - \nabla p$$

對應的OpenFOAM代碼是

```cpp
solve
(
     fvm::ddt(rho,U)
   + fvm::div(phi,U)
   - fvm::laplacian(mu,U)
     ==
   - fvc::grad(p)
);
```

得益於面向對象的程序設計和運算符重載，使用者可以相對容易地建立自己的求解器。然而，大量模板元編程的運用以及相應開發文檔的缺乏，使得越是深入庫底層的定製化越是困難和充滿挑戰。

### 可擴展性

由於使用了工廠方法和基類作為接口，OpenFOAM具有很好的可擴展性。使用者在建立定製化的物體或對象（例如邊界條件或湍流模型）時，無需修改或是重新編譯OpenFOAM軟體包，便可在已有的求解器上工作。OpenFOAM稱之為運行時決策(run-time selection)

## OpenFOAM的架構

OpenFOAM核心功能的實現是由大量的基礎庫完成的，其中包括：

- 張量和場操作
- 人類可讀的偏微分方程離散化語法
- 線性系統求解
- 常微分方程求解
- 高級操作的自動並行化
- 動態網格
- 通用物理模型
- 流變模型(Rheological models)
- 熱力學模型及相關的資料庫
- 湍流模型
- 化學反應和動理學模型
- 拉格朗日粒子追蹤模型
- 熱輻射傳輸模型
- 單參照系和多參照系方法

利用便捷直觀的高級語法和基礎庫提供的功能完成開發應用。通常應用可以歸為兩類：

- 求解器：執行連續介質問題的求解計算
- 實用程序：用於準備網格、設置模擬樣例、處理結果等

每個應用有其專注的功能：如應用blockMesh用於從使用者提供的輸入文件生成網格，而另一個應用icoFoam，則用來求解不可壓層流的Navier-Stokes方程。

最後，一些第三方軟體包被用來提供並行化能力（即OpenMPI）和進行圖像後處理（ParaView）。

## 功能

OpenFOAM的功能含有：

- 基本的計算流體力學求解器
- 不可壓流的雷諾平均納維－斯托克斯方程法(RANS)和大渦流模擬法(LES)求解
- 可壓流的RANS和LES求解
- 浮力流動求解器
- 直接數值模擬(DNS) 和 LES
- 多相流體求解器
- 粒子跟蹤求解器
- 燃燒問題求解器
- 耦合熱傳輸求解器
- 分子動力學求解器
- 電磁學求解器
- 剛體動力學模擬器

除以上列舉的標準求解器之外，由於OpenFOAM的語法，建立自定義的求解器也是容易的。

OpenFOAM實用程序被細分為：

- 網格實用程序
- 網格生成: 它們通過輸入文件或幾何描述文件（如）來自動生成計算用的網格(hex-dominant, snappyHexMesh)
- 網格格式轉化：轉化其他工具生成的網格到OpenFOAM格式
- 網格處理：執行一些網格操作，如局部優化，區域定義等
- 並行處理工具：提供計算任務的分解、合併和重分發功能來實現並行計算
- 預處理工具：準備模擬樣例
- 後處理工具：處理模擬結果，包含到OpenFOAM和ParaView的插件
- 表面處理工具
- 熱物理工具

## 許可證

OpenFOAM是自由軟體和開源軟體，在GNU通用公共許可證版本3下發布。

## 優劣

### 優點

- 使用者友好的偏微分方程描述語法
- 有非結構化多面體網格的處理能力
- 自動並行化OpenFOAM高級語言寫成的應用
- 現成的涵蓋寬領域的應用和模型
- 有由開發者提供的商業支持和培訓
- 無許可證花費

### 缺點

- 缺少集成的圖形化使用者界面(GUI)（但有獨立私有軟體可選）
- 開發文檔缺乏足夠的細節，學習曲線陡峭
- 文檔缺乏維護，入門困難

## 分支和改編

### 免費軟體

- blueCFD 是改編自OpenFlow的運行在 Windows 上的OpenFOAM交叉編譯版本。該軟體包同時也含有一些有用的額外函數和工具。blueCAPE出品。
- FreeFOAM為了把OpenFOAM從它對系統的依賴中解脫出來，使其安裝更為便攜和使用者友好而建立的分支。其開發緊跟最新的OpenFOAM發布版，不附帶額外的功能，使用CMake作為編譯系統。
- OpenFlow 是一個OpenFOAM的Windows平台交叉編譯的源碼補丁。blueCFD中OpenFOAM的部分既是由它而來。Symscape出品
- OpenFOAM-extend由Wikki有限公司維護。該分支有社區貢獻的大量內容，並且當中的絕大部分貢獻可以裝入到OpenFOAM的官方版本中，而只產生最低限度的影響。它的開發與官方版OpenFOAM是並列進行的，對最新版OpenFOAM的合併可能要等到一至兩年後。

### 付費軟體

- Caedium 是Symscape出品的通用數值模擬環境。其RANS Flow的附加功能提供了用於OpenFOAM的模型建立、解操作和後處理的圖形使用者界面。
- CastNet DHCAE Tools出品的私有建模和模擬環境。其中包含一個OpenFOAM的圖形界面前端。FOAM.
- ICON FOAMpro CFD 由ICON Process & Consulting Ltd進行維護。與大眾汽車和福特汽車合作，主要圍繞著汽車應用而開發。該分支既包含社區貢獻的內容也包含ICON專有的開發。

## 替代軟體

### 開源軟體和自由軟體

- Stanford University Unstructured (SU2)
- Code Saturne (GPL)
- FreeCFD
- Gerris Flow Solver
- OpenFVM
- CLAWPACK

### 私有軟體

- ANSYS CFX
- ANSYS Fluent
- Pumplinx
- STAR-CCM+
- KIVA (software)
- RELAP5-3D
- PowerFlow
- FOAMpro

## 外部連結

### 官方資源

- Official OpenFOAM web site
- OpenFOAM official documentation
- OpenFOAM bug-reporting system

### 社區資源

- OpenFOAM Forum at CFD Online
- OpenFOAM wiki
- FOAM CFD web site, by one of the original developers of the code, who is not associated with OpenCFD.
- A Blog about OpenFOAM in Chinese
- OpenFOAM中文愛好者之家網站
- 入門課程

## 基本資料

- 域：
- 作者：Henry Weller
- 開發者：The OpenFOAM Foundation
- 發行日期：2004-12-10
- 軟體版本週期：4.1
- 程式語言：C++
- 作業系統：Unix/Linux
- 狀態：運行中
- 類型：計算流體力學
- 許可協議：GNU通用公共許可證
- 網站： www.openfoam.org