OpenFOAM®とは?

OpenFOAM®とは?

OpenFOAM®の由来

FOAMはField Operation And Manipulationの略称であります。1990年代イギリスのImperial CollegeのGosman研究室の学生であったHenry, Jasak, Mattijs等により開発され始めました。当時研究室のプログラムはFortranであったため、コードの再利用が難しく、無駄になるケースが多かったです。 こんな状況を変えようと、オブジェクト指向のC++言語でCFD(Computational Fluid Dynamics)コードを書き出したのが、FOAMの発端であります。
2004年Henry, MattijsらはOpenCFD社を立ち上げ、名前をOpenFOAM®と変え、全てのソースコードを完全オープン化しました。2012年米ESI社に買収され、OpenFOAM®ロゴもESI社の登録商標となりました。OpenFOAM®はGNU GPL(General Public License)に従って開発とバージョン管理が行われています。
現在OpenFOAM®は欧米を中心に、世界中1000以上の企業と研究所・大学ユーザーがあるといわれています。日本でもこの数年間自動車・機械・精密機器・建築等の分野でユーザーが急激に増加しています。今は世界中にOpenFOAM®コミュニティーが形成され、毎年下記のユーザー会を通じて実用事例と新機能開発結果が発表されています。
◇ Open Source CFD International Conference(英国) ◇ OpenFOAM® Workshop(欧米各地 ◇ オープンCAEシンポジウム(日本)

汎用流体解析ソフトとの比較

パソコンのOSで例えれば、汎用流体解析ソフトはWindows、OpenFOAM®はLinuxに其々相当します。基本計算機能からみると、両者は大きな差はありません。
汎用流体解析ソフトは企業が多額の開発費用と技術者を導入して長時間開発され、信憑性が高く、使い易く、そして安心できる技術サポートが付いています。しかし、維持コストが高く、内部コードが非公開のためカスタマイズに制限があります。特に最近のCFD計算は増々大規模計算(数百数千CPUの並列計算)になり、そのライセンス費用は企業にとって重い負担となりつつあります。
OpenFOAM®はオープンソースであるため、ライセンス費用が無料で、カスタマイズが自由にできます。但し、GUI(Graphical User Interface)が無く説明資料も少ないため、最初の入門ハードルが高く感じます。

表1 OpenFOAM®と汎用流体解析ソフトとの比較

  OpenFOAM® 汎用流体解析ソフト
ソースコード 完全公開 非公開
大規模並列機能 有、無制限 有、ライセンス制限
カスタマイズ機能 強力 限定
ライセンス機能 無料(数、時間制限無し) 高価(数、時間制限あり)
計算機能  
ポスト処理・可視化 Paraview(無料) 付属ツール(有料)
検証事例 近年増えている 豊富
初期費用 × 調査検証費用 ライセンス費用のみ
説明資料 × 少ない 充実
便利さ × 不便、コマンド入力方式 便利、GUI有
技術サポート × 有、国内技術者少ない 有、国内技術者数多数

説明:○はOpenFOAM®のメリット、△は機能同等、×はOpenFOAM®のデメリットを表します。

基本機能

OpenFOAM®はCFDツールというイメージがありますが、正しくは偏微分方程式を解くライブラリ(Toolbox)であります。主要機能であるCFD計算機能以外にも、固体応力解析、分子動力学、DSMC等の機能が実装されています。

表2 OpenFOAM®の主なCFD機能

一般計算 圧縮性、非圧縮性、定常、非定常
格子 移動格子、AMR(格子自動細分化)、AMI(Arbitary Mesh Interface)
格子作成 blockMesh(六面体格子作成)、snappyHexMesh(STL形状対応)
乱流モデル RANS(15種類以上)、LES(18種類以上)
多相流 オイラー法、VOF法、二、三相流、表面膜、ラグランジュ粒子
熱計算 一般熱対流、輻射、流体個体間共役熱
化学反応 素反応(CHEMKIN、JANAF)、化学熱分解、予混合、粒子燃焼
並列計算 OpenMPI、HPMPI、MPICH、IntelMPI(数千CPI規模対応)
ポスト処理 可視化paraview、並列ポストツールsample等

以下、CFD計算機能の中で特徴を幾つか説明させていただきます。

解放性

格子セルが多面体で自由度が高く、汎用メッシャー(ICEM, StarCD, Pointwise, CUBIT等)で作成された格子がOpenFOAM®用格子に変換できます。 計算結果もParaview以外にも、FieldView, FLUENT, EnSight, Tecplot形式の出力も可能です。従って下記のように一個の汎用ソフトライセンスで 大規模並列計算が可能になります。

解放性

並列機能

OpenFOAM®は計算全段階(Pre-processing, Solver、Post-processing)で並列計算が可能です。このような完全並列計算機能は大規模計算において とても重要です。

並列機能

並列格子作成 OpenFOAM®の格子作成ツールsnappyHexMeshは並列で格子作成が可能です。そして、格子細分化ツールrefineMeshの並列機能を利用し数十億規模の 格子作成も可能となります。
ソルバ OpenFOAM®並列計算はMPI通信を利用しています。一般クラスタマシンは勿論スーパーコンピューターでも実績を残しています(東大T2K、名古屋 Focus、東工大TSUBAME 2.0等)。数百数千CPU並列計算でもよい並列性能が得られるとされています。
ポスト処理 格子数が数千万数十億規模に達する計算は、ポスト処理時間が計算時間より長くなったり、ポスト処理自体ができなくなったりする場合があります。 しかしOpenFOAM®のポスト処理ツールは全て並列機能をもっています。例えば、ポスト処理ツールの一つであるsampleは断面分布、等値面、流線、 2次元線分布、曲面分布等をすべて並列処理しファイルとして直接出力します。出力されたデータはファイルサイズが小さいので、保存しやすく、 paraview, Excel等で2次処理も容易であります。

カスタマイズ機能

OpenFOAM®はオブジェクト指向言語C++で開発されているため、ソースコードが解読し易く、カスタマイズも容易とされています。 例えば、下記の質量保存式 カスタマイズ機能 をOpenFOAM®で書くと次のようになります。
solve ( fvm::ddt(rho) + fvc::div(rho * U) == 0 );
ここで、rhoは密度、Uは速度、ddtは偏微分記号∂⁄∂t、divは∇∙、fvm::は陰解法、fvc::は陽解法を其々表します。プログラムから逆に質量保存式を書くことができるぐらい、OpenFOAM®は自然言語に近い書き方をしています。
また、ソースコード全体が階層化・モジュール化され、カスタマイズが便利です。各モジュールは独自の共通interfaceがあり、他のモジュールはこの共通interfaceを介してデータのやり取りをします。例えば、境界条件Aが乱流モデルBを参照しようとします。Aは直接Bへアクセスすることなく、乱流モデルの共通interfaceを通じてBを参照します。従って、参照結果はBになるが、参照方式は共通interfaceによって決まることになります。今度乱流モデルがCに変わっても、共通interfaceが変わらない限りAの参照方式は変わりませんので、境界条件Aのソースコードを修正する必要がありません。新規開発の乱流モデルでもこの共通interfaceの形式さえ満足すれば、既存の境界条件はそのまま利用できます(図1)。このように、OpenFOAM®の各種モジュールは共通interfaceで規格された部品のようなものです。
このため、新規モジュールの開発が短時間で実現可能となります。さらに、自分が開発したものは他人が簡単に再利用でき、その成果をみんなで簡単に共有できるのです。これがオープンソースであるOpenFOAM®の生命力の強さでもあります。 カスタマイズ機能

 

OpenFOAMについて、もう少し詳しく知りたい方はこちらのページを参考にしてみて下さい。

無料ダウンロード資料やOpenFOAMの機能について紹介しております。

 

詳細はこちら