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

OpenFOAM
在命令列窗口中執行的OpenFOAM
原作者Henry Weller
開發者The OpenFOAM Foundation
首次釋出2004-12-10
目前版本4.1(2016年10月13日,​8年前​(2016-10-13
原始碼庫 編輯維基數據連結
程式語言C++
作業系統Unix/Linux
類型計算流體力學
特許條款GNU通用公眾特許條款
網站www.openfoam.org

歷史

編輯

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

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

特色

編輯

語法

編輯

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

 

對應的OpenFOAM代碼是

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

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

可延伸性

編輯

由於使用了工廠方法基礎類別作為介面,OpenFOAM具有很好的可延伸性。用戶在建立客製化化的物體或對象(例如邊界條件或亂流模型)時,無需修改或是重新編譯OpenFOAM軟件套件,便可在已有的求解器上工作。OpenFOAM稱之為執行時決策(run-time selection)[5]

OpenFOAM的架構

編輯

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

  • 張量和場操作
  • 人類可讀的偏微分方程式離散化語法
  • 線性系統求解[6]
  • 常微分方程式求解[7]
  • 進階操作的自動並列化
  • 動態網格[8]
  • 通用物理模型
    • 流變模型(Rheological models)[9]
    • 熱力學模型及相關的資料庫[10]
    • 亂流模型[11]
    • 化學反應和動理學模型[12]
    • 拉格朗日粒子追蹤模型[13]
    • 熱輻射傳輸模型
    • 單參照系和多參照系方法

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

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

每個應用有其專注的功能:如應用blockMesh用於從用戶提供的輸入檔案生成網格,而另一個應用icoFoam,則用來求解不可壓層流Navier-Stokes方程式

最後,一些第三方軟件套件被用來提供並列化能力(即OpenMPI)和進行圖像後處理(ParaView)。

功能

編輯

OpenFOAM的功能含有[14]

 
甲烷在空氣中燃燒的模擬。甲烷從底端噴出,同時被點燃。圖形介面是ParaView。圖中底色表示溫度,箭頭表示氣流速度,箭頭的顏色表示局部的氧氣含量。

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

OpenFOAM實用程式被細分為:

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

特許條款

編輯

OpenFOAM是自由軟件和開源軟件,在GNU通用公眾特許條款版本3下釋出。[25]

優劣

編輯

優點

編輯
  • 用戶友好的偏微分方程式描述語法
  • 有非結構化多面體網格的處理能力
  • 自動並列化OpenFOAM高階語言寫成的應用
  • 現成的涵蓋寬領域的應用和模型
  • 有由開發者提供的商業支援和培訓
  • 無特許條款花費

缺點

編輯
  • 缺少整合的圖形化用戶介面(GUI)(但有獨立私有軟件可選)
  • 開發文件缺乏足夠的細節,學習曲線陡峭
  • 文件缺乏維護,入門困難

分支和改編

編輯

免費軟件

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

付費軟件

編輯
  • CaediumSymscape出品的通用數值模擬環境。其RANS Flow的附加功能[32]提供了用於OpenFOAM的模型建立、解操作和後處理的圖形化使用者介面。
  • CastNet DHCAE Tools出品的私有建模和模擬環境。[33]其中包含一個OpenFOAM的圖形介面前端。FOAM.
  • ICON FOAMpro CFDICON Process & Consulting Ltd進行維護。[34]大眾汽車[35]福特汽車[36]合作,主要圍繞着汽車應用而開發。該分支既包含社區貢獻的內容也包含ICON專有的開發。

替代軟件

編輯

開源軟件和自由軟件

編輯

私有軟件

編輯

參考文獻

編輯
  1. ^ The OpenFOAM Foundation homepage
  2. ^ OpenFOAM Release History
  3. ^ 存档副本. [2016-08-23]. (原始內容存檔於2012-12-06). 
  4. ^ Creating solvers in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-08-07). 
  5. ^ OpenFOAM's run-time selection mechanism explained. [2012-07-17]. (原始內容存檔於2014-01-08). 
  6. ^ Linear system solvers in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-07-23). 
  7. ^ Ordinary differential equation solvers in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-08-07). 
  8. ^ Dynamic mesh in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-07-23). 
  9. ^ Rheological models in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-07-23). 
  10. ^ Thermophysical models in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-07-23). 
  11. ^ Turbulence models in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-07-23). 
  12. ^ Chemical reactions and kinetics models in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-08-07). 
  13. ^ Lagrangian particle tracking in OpenFOAM. [2012-07-17]. (原始內容存檔於2012-07-23). 
  14. ^ OpenFOAM features. [2012-07-17]. (原始內容存檔於2012-07-23). 
  15. ^ OpenFOAM incompressible flow solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  16. ^ OpenFOAM Compressible flow solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  17. ^ OpenFOAM buoyancy-driven flow solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  18. ^ Multiphase flow solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  19. ^ OpenFOAM solvers for combustion. [2012-07-17]. (原始內容存檔於2012-07-23). 
  20. ^ OpenFOAM solvers for conjugate heat transfer. [2012-07-17]. (原始內容存檔於2012-07-23). 
  21. ^ OpenFOAM molecular dynamics solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  22. ^ OpenFOAM Direct Simulation Monte Carlo solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  23. ^ OpenFOAM Electromagnetics solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  24. ^ OpenFOAM solid dynamics solvers. [2012-07-17]. (原始內容存檔於2012-07-23). 
  25. ^ http://www.openfoam.org/licence.php頁面存檔備份,存於互聯網檔案館) OpenFOAM Licensing Page
  26. ^ blueCAPE's homepage. [2012-07-17]. (原始內容存檔於2012-04-25). 
  27. ^ FreeFOAM Home Page. [2012-07-17]. (原始內容存檔於2012-06-17). 
  28. ^ OpenFlow source code patch. [2012-07-17]. (原始內容存檔於2012-07-30). 
  29. ^ OpenFOAM-extend Project Home Page. [2012-07-17]. (原始內容存檔於2012-06-17). 
  30. ^ Wikki Ltd頁面存檔備份,存於互聯網檔案館).
  31. ^ Solvers頁面存檔備份,存於互聯網檔案館), Utilities頁面存檔備份,存於互聯網檔案館), and Other contributions頁面存檔備份,存於互聯網檔案館
  32. ^ Caedium RANS Flow add-on. [2012-07-17]. (原始內容存檔於2012-07-02). 
  33. ^ DHCAE Tools homepage. [2012-07-17]. (原始內容存檔於2012-04-25). 
  34. ^ ICON FOAMpro Process. [2012-07-17]. (原始內容存檔於2012-04-25). 
  35. ^ ICON VWG SAE paper. [2012-07-17]. (原始內容存檔於2012-04-23). 
  36. ^ ICON FORD SAE paper. [2012-07-17]. (原始內容存檔於2012-04-23). 
  37. ^ SU2 homepage. [2012-07-17]. (原始內容存檔於2016-10-19). 
  38. ^ FreeCFD homepage. [2012-07-17]. (原始內容存檔於2012-07-10). 
  39. ^ Gerris homepage. [2012-07-17]. (原始內容存檔於2019-10-19). 
  40. ^ OpenFVM homepage. [2012-07-17]. (原始內容存檔於2016-07-29). 
  41. ^ [depts.washington.edu/clawpack]

外部連結

編輯

官方資源

編輯

社區資源

編輯