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 代碼是

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

### 可延伸性

由於使用了工廠方法和基礎類別作為介面，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 中文愛好者之家網站（頁面存檔備份，存於網際網路檔案館）
* 入門課程