OpenFOAM 情報

2016年10月25日

われを過ぎんとするものは一切の望みを捨てよ

はじめに

これから OpenFOAM をちょっと試してみようかなと (無謀にも) 考えている人のための OpenFOAM 情報。

忙しい人のためのまとめ

公式サイト

OpenFOAM とは

  • OpenFOAM: 流体解析ソルバー開発用ツールボックス (C++)
  • ライセンス: オープンソース (GPL)
  • 動作環境: Linux、Docker、Windows (非公式)、Mac OS X (非公式)

導入方法

Linux

  • Ubuntu: 公式バイナリあり。
  • その他: 自力でコンパイル、非公式バイナリ (RheologicRemix など)、あるいは Docker (OpenFOAM+)。

Windows

  • blueCFD-Core がおすすめ。インストール方法は こちら
  • OpenFOAM+ が Docker で動く。Docker で非公式 OpenFOAM イメージを利用する手もある。

Mac OS X

  • 知らない。Virtual Box でも使えばいいんじゃないの。

使い方

そもそも何なの?

OpenFOAM (Open source Field Operation And Manipulation) とは、GNU General Public License (GPL) のもとで公開されているオープンソースの数値流体力学 (Computational Fluid Dynamics: CFD) ツールボックスである。オブジェクト指向プログラミング言語 C++ で開発された偏微分方程式ソルバー開発用のクラスライブラリであり、C++ のシンタックスをフルに活用して高い記述性と拡張性を実現している。たとえば、スカラー輸送方程式を解くコードは次のように記述できる。

solve
(
    fvm::ddt(T)
  + fvm::div(phi, T)
  - fvm::laplacian(DT, T)
);
このように、数値流体力学のの知識があればなんとなく意味がわかるような表現で場 (field) の方程式のソルバーを記述できるのが特徴である。

また、OpenFOAM は上述のクラスライブラリを利用して書かれた標準ソルバーやツールを多数備えている。標準ソルバーの中には、問題によってはすぐに実用可能なレベルのものも含まれる。

経緯

もともと英国 Imperial College で開発されたものを Nabla 社が "FOAM" という名で販売していたものが、2004 年、OpenCFD 社から "OpenFOAM" としてオープンソースで公開された。2011 年 8 月、OpenCFD 社は Silicon Graphics 社 (SGI) に買収されたが、OpenFOAM は非営利団体 OpenFOAM Foundation から引き続きオープンソースとして公開されることになった。2012 年 9 月、OpenCFD 社はさらに ESI Group に買収された。"OpenFOAM" は OpenCFD 社の商標登録である。

2015 年 3 月、OpenFOAM の (というか "FOAM" の) 生みの親たる Henry Weller 氏は OpenCFD 社から出て CFD Direct という会社を起ち上げ、OpenFOAM Foundation/OpenFOAM プロジェクトメンバーの立場で OpenFOAM の開発を行っているようである。

2016年現在、OpenFOAM の権利保有者による「公式」リリースとして、OpenFOAM Foundation による OpenFOAM と、OpenCFD 社 (ESI) による OpenFOAM+ とがある。これについて CFD Online で議論されている (OpenFOAM v3.0+ ??)。OpenFOAM を RHEL とすると OpenFOAM+ は Fedora のようなもの? (逆じゃないのか…?) 7 月現在、OpenFOAM 4.0 に対して "OpenFOAM v1606+" となっているので、本家バージョンに並行していくことを諦めた? (もはやただの "fork" か)→本家とリリースのタイミングが合わなくてもよいようにするための処置のようである。できるだけ内容を本家とシンクロさせようとはしているらしい。

何でないか

OpenFOAM はいわゆる流体解析ソルバーではなく、有限体積法を中心とする偏微分方程式ソルバー開発用のクラスライブラリと、それによって作られたいくつかのソルバーおよびツール群である。自分の問題に利用するとき、一般の商用ソルバーのように必要な機能を有効にするスイッチを押すのではなく、必要な機能を持つソルバーを標準ソルバーの中から選択する。適当な機能を備えたソルバーが標準ソルバーの中にない場合は、自分でソルバーを開発する必要がある。ある意味なんでもできるが、それなりの知識と時間、場合によってはお金が必要になる。

何ができるか

標準ソルバーの範囲では、以下のようなことができる。

  • 非圧縮性流体の定常/非定常乱流解析
  • 圧縮性流体の定常/非定常熱対流解析
  • 流体・固体伝熱 (CHT) 解析
  • 混相流解析 (界面追跡法/多流体モデル)

他に、あまり一般的でない燃焼モデルを使った燃焼解析ソルバーや、遷音速・超音速を含む圧縮性流体ソルバーなどもある。粒子計算も一応可能だが、今のところ一部の特殊なソルバーが対応しているのみである。また、商用ソルバーと比べると、標準ソルバーは一般的にあまり収束性がよくないし、メッシュ品質に対するロバスト性もなく、計算を成功させること自体が難しい場合が少なくない。正直なところ、まったくもって初心者にはおすすめできないシロモノである。

ちなみに、固体のみの熱伝導解析でよければ、OpenFOAM なんかよりも Salome-Meca のほうがずっと簡単でおすすめである。

対象ユーザー

OpenFOAM を利用するには、問題にもよるが、既存のソルバーを修正したり新たなソルバーやライブラリを開発したりする必要性が生じることが少なくない。また、基本的に Linux 上で動作することを想定している。したがって、ユーザーは Linux の利用に慣れ、C++ によるプログラミングが可能で、数値流体力学の理論と問題の現象について知っている必要がある。そのため、主な対象ユーザーは研究者や学生、数値計算に十分な時間を割けるエンジニア (たぶんめったにいない) などになる。

オープンソース?

OpenFOAM はオープンソースソフトウェアであり、無料で使える流体解析ソフトとして注目されているが、「無料」自体はオープンソースソフトウェアの性質ではない。オープンソースソフトウェアとは、ソースコードが公開されていて、ソースコードの再配布が可能なソフトウェアのことである。この性質により、たとえソフトウェアを有料にしたとしても、購入した人に無料でソースコードを再配布されてしまう可能性が高い。そのため、結果的に無料で提供されていることが多い。

したがって、有料のオープンソースソフトウェアもありえる。個人で買えないような値段 (たとえば 1 千万円とか) をつけてしまえば、再配布を実質的に防ぐことができる。特に、OpenFOAM のような専門性の高いソフトウェアの場合、これが現実的に可能である。また、ソースコードの内容について秘密保持契約を結んでしまえば、確実に再配布を封じることができる。

オープンソースソフトウェアの利用にあたっては、以下のような制限がある。

  • 無保証である。
  • ソースコードを改変して作ったソフトウェアを提供する場合は、提供先に対してソースコードを公開しなければならない (GPL の制限)。

2 番目の制限は、OpenFOAM を含む Linux をはじめとした多くのオープンソースソフトウェアで採用されているライセンスである GNU General Public License (GPL) の制限である (正確には「GPL のソフトウェアを改変して提供する場合は、そのソフトウェアを GPL で提供しなければならない」。この制限を「汚染」だとか「呪い」などと揶揄する人もいる)。

つまり、ただ自分で利用する分には制限はない。ただし、無料で無保証であるため、自助努力が求められる。使い勝手がよくない、あるいは特殊であるオープンソースソフトウェアも少なくない (OpenFOAM も例外ではない)。それは「文句があるなら商用ソフトウェアを使え」ということではなく、「気に入らないなら自分で改善してプロジェクトに貢献してくれ」ということである。利用のための情報が整理されていないことも多く (これまた OpenFOAM も例外ではない)、Web 上の断片的な情報やソースコードから必要な情報を入手する必要がある。自分自身の手で問題を解決しないと気が済まないという気概を持つような人でないと、OpenFOAM を含むオープンソースソフトウェアの利用は難しい。

利用における自助努力についてのコスト (時間なども含む) が、無料であるという金銭的なメリットを上回って余りある場合も考えられる。「高価な」商用ソフトウェアのほうが現実的な選択肢となる場合もあるため、OpenFOAM の利用については十分な事前検討が必要である。

ちなみに、「無料!」には心理学的に抗いがたい力があるらしいことがわかっている (※1)。理性的な判断がお望みなら、その点も考慮に入れておく必要があるだろう。

※1 ダン・アリエリー 『予想どおりに不合理』 早川書房, 2013.

どのように使えるか

まず、OpenFOAM を商用ソルバーの代替として使うことが考えられるが、OpenFOAM は設定が基本的にテキストベースであり、またソルバーの開発や修正の必要が生じることもあるため、一般的な商用ソルバーよりもかなり手間が増えることを覚悟する必要がある。商用ソルバーのライセンス費と OpenFOAM の利用によって増える人件費や時間を天秤にかけて判断したほうがよい。「フリー」は時間でお金を買うところがある。お金で時間を買ったほうがよい場合もある。

商用ソルバーではライセンス費用が膨大になりがちである大規模並列解析に OpenFOAM を利用することも考えられる。現状、OpenFOAM 利用の費用よりも大規模並列用の商用ライセンスのほうが圧倒的に高くつくため、大規模並列解析で OpenFOAM を利用する価値は高い。

ある製品の設計など、問題を限定できるのであれば、それについてのソルバーと簡易インターフェイスを整備して、専用の設計ツールとして利用することも考えられる。もちろん初期投資は必要だが、一度作ってしまえばほぼ無料で利用し続けられるため、商用ソルバーを利用した場合を考えれば初期投資はすぐに回収できる。

そもそも商用ソルバーを買えないために OpenFOAM を利用するということも考えられるが、これについてはあまりおすすめしない。しかし、現実的にこれしか選択肢がない場合もある。その場合は、独学でどうにかする気概が必要である。

最後に、OpenFOAM はオープンソースであり、ソースコードを自由に眺めることができることが大きな特徴である。コードは適度に抽象化されており、そこそこ読みやすく書かれているため、数値流体力学の学習のためのよい教材として利用できるだろう。

まず何から始めるべきか

(以上を読んでもまだやる気があるとして) Windows 環境に慣れているなら、まず blueCFD-Core を試すのがよい。また、Windows や Mac 上の仮想マシン (VirtualBox や VMWare など) に OpenFOAM インストール済みの Linux (DEXCS for OpenFOAM や GeekoCFD など) をセットアップするのも比較的手軽でよい。あるいは Ubuntu を入れて自分で OpenFOAM をインストールしてみても、それほど手間ではない。

OpenFOAM の環境を用意できたら、ユーザーガイド片手にチュートリアルケースを実行してみるところから始めるとよいだろう。

OpenFOAM の利用手段

OpenFOAM を使用する方法として、つぎのような手段が考えられる。

  • OpenFOAM インストール済みのシステムを導入する。
  • Linux マシンを用意して OpenFOAM をインストールする。
  • Docker を使う。
  • Windows 版を使う。

OpenFOAM インストール済みのシステムを導入する

Linux や OpenFOAM のセットアップのハードルが高い人向けに、OpenFOAM セットアップ済みの Linux 環境が用意されている。

  • DEXCS for OpenFOAM
  • GeekoCFD
  • CAELinux

DEXCS for OpenFOAM

DEXCS

もともとはデンソーの社内教育用システムとして開発されたもので、ADVENTURE を使用したシステムだったが、OpenFOAM 版も登場した。LiveDVD 版として提供されている。ハードディスクにインストールすることも可能。

OpenFOAM に関連するさまざまなツールが用意されている。

GeekoCFD

GeekoCFD

OpenFOAM を中心とした CFD 関連ソフトがインストールされた Linux 環境。LiveUSB および仮想マシンとして提供されている。

CAELinux

CAELinux

OpenFOAM だけではなく、様々な free の CAE ソフトがインストールされている Linux 環境。LiveDVD。2014 年で更新が止まっている模様。

Linux マシンを用意して OpenFOAM をインストールする

OpenFOAM は Linux 用に開発されているので、Linux マシンを用意するのが素直である。Linux を導入する方法として、つぎのようなものが考えられる。

  • Linux 専用マシンを用意する。
  • デュアルブート環境にする。
  • 仮想マシンにインストールする。
  • CD/DVD 起動の Linux を使う。
  • USB メモリ起動の Linux を使う。

Linux 専用マシンを用意する

一番素直な方法。本格的に使いたい人向け。マシンを用意して自分で Linux をインストールする方法と、Linux プリインストールマシンを購入する方法がある。

デュアルブート環境にする

Windows あるいは Mac としても Linux としても使えるマシンを用意する。Windows/Mac マシンとしても使えるので、ムダにはならない。まっさらなハードディスクを 2 つに分け、それぞれに Windows/Mac と Linux をインストールする。すでに使用中の Windows/Mac マシンのハードディスクを分けて Linux をインストールすることも可能かもしれないが、失敗すると Windows/Mac 環境を破壊する恐れがある。

仮想マシンにインストールする

VirtualBox や VMWare などの仮想マシンを使う。そこそこ手軽で安全な方法。仮想化自体の実行負荷が高いのが難点。最近の仮想化支援機能を備えたメニーコア CPU なら快適に使えるかもしれない。SSD であればなおよい。

CD/DVD 起動の Linux を使う

お試し用。マシンはどれでもいいので CD/DVD を入れて起動すると Linux が立ち上がる。LiveCD/LiveDVD と呼ばれている。認識されていればハードディスクにデータを残すこともできる。データ保存用 USB と一緒に持ち運べば、自分専用の Linux 環境を持ち運び可能かもしれない。

USB メモリ起動の Linux を使う

USB メモリに Linux を入れて使う。USB ディスク起動が可能なマシンを準備し、USB メモリを挿して起動すると Linux が立ち上がる。LiveCD/LiveDVD を USB で実現するのだが、CD/DVD と違ってデータの保存が可能。ファイルシステム (FAT32) の関係で容量に制限がある (最大 4GB)。おそらく OpenFOAM のバージョン違いを 2 つインストールできるほどの容量はない。

USB メモリを普通のハードディスクとみなして Linux をインストールするという手もある。こちらは上記の制限はないが、Linux のインストールに慣れていないと、うっかりマシンのほうの環境を破壊してしまう危険性がある。

ディストリビューション

Linux には Red Hat, openSUSE, Ubuntu などさまざまな「ディストリビューション」(頒布パッケージ) があるが、基本的にはなんでもかまわない。ただし、OpenFOAM との相性の良し悪しはある。最近は Ubuntu 用に OpenFOAM のバイナリパッケージが配布されているので、Ubuntu が無難かもしれない。古いバージョンであれば、Ubuntu 以外に openSUSE、Red Hat Enterprise Linux、Fedora 用のバイナリがある。

問題点

Linux のインストールは、ディストリビューションやマシンとの相性次第ですんなりうまくいくこともあれば、ひどく苦労することもある。また、OpenFOAM のセットアップに関しても、問題なく済むかどうかはディストリビューションとの相性による。問題解決のために Linux のシステムの知識やプログラミングの知識が要求されることがある。そもそもLinux の使用や管理自体のハードルが高いかもしれない。

Docker を使う

Docker とは、コンテナ型仮想化技術の一つであり、VirtualBox のような仮想化に比べて動作が軽いのが特徴である。OpenCFD 社版 OpenFOAM+ が Docker コンテナとして提供されている。

Linux/Windows/Mac OS X どれでも動く。コンテナの中身は Linux なので、原理的には機能をフルで使えるはずだが、Windows 版はポストをコンテナから起動できないので少し不便である。コンテナの起動時間を除けば、ソルバーの実行速度は Windows 用にコンパイルされたバイナリよりも速いように感じる。

その気になれば、Docker を使って自分好みの OpenFOAM 環境を構築することが可能である。SSH/X11 を使えば Windows でもコンテナからポストを起動することができる。ただし、環境構築が結構めんどくさい。

Windows 版を使う

本来は Linux 用の OpenFOAM だが、Windows 版もあるにはある。

  • blueCFD-Core (blueCAPE)
  • OpenFOAM for Windows (CFD support)
  • simFlow engine (OpenFOAM for Windows)
  • Caelus

古い

  • OpenFOAM extensions
  • OpenFOAM for MS windows binary release
  • OpenFOAM 1.6 binary for win32
  • OpenFOAM 1.7.0 for Win32
  • OpenFOAM 2.1.x for Win64
  • OpenFlow

blueCFD-Core (blueCAPE)

blueCFD-Core

Windows 用にビルドした OpenFOAM + α。Version 4.x。MS MPI による並列計算可能。"paraFoam" も (本物ではないけど) 機能する。ソルバーのコンパイルも可能。使い方は、インストールしてスタートメニューから "blueCFD-Core terminal" を実行するだけ。

OpenFOAM for Windows (CFD support)

CFD support

Version 3.0.x ベースの Windows バイナリを提供。

simFlow engine (OpenFOAM for Windows)

simFlow

Version 3.0+, 3.0.0 などの Windows バイナリを提供。パッチも提供されている。

Caelus

Caelus (Applied CCM)

OpenFOAM の fork らしい。Windows バイナリを提供。

古い

OpenFOAM extensions

OpenFOAM extensions

1.4 の Cygwin 版を提供している。

OpenFOAM for MS windows binary release

OpenFOAM for MS windows binary release

Windows ネイティブな OpenFOAM。1.5 ベース。いくつかのソルバーが移植済みらしい。

OpenFOAM 1.6 binary for win32

OpenFOAM 1.6 binary for win32

Windows ネイティブな OpenFOAM 1.6。パラレルには対応していない。

OpenFOAM 1.7.0 for Win32

OpenFOAM 1.7.0 for Win32

Windows ネイティブな OpenFOAM 1.7。パラレルにも対応しているらしい。

OpenFOAM 2.1.x for Win64

OpenFOAM 2.1.x for Win64

Windows ネイティブな OpenFOAM 2.1.x。Open MPI によるパラレルに対応。

OpenFlow

Symscape

Windows 用にビルドした OpenFOAM を有償で提供していた。ビルド手順とパッチが公開されている (OpenFOAM 2.2.x on Windows)。

関連プロジェクト

OpenFOAM に関連したプロジェクト

  • OpenFOAM extensions
  • PyFoam
  • swak4Foam
  • Helyx-OS

OpenFOAM extensions

OpenFOAM extensions

OpenFOAM 拡張版。Git あるいは SVN を使って入手。

  • Git: OpenFOAM-1.6-ext, foam-extend-3.0, foam-extend-3.1
  • SVN: OpenFOAM-1.4-dev, OpenFOAM-1.4.1-dev, OpenFOAM-1.5-dev, OpenFOAM-1.6-ext (trunk/Core の中にある)

Files にバイナリパッケージもある。

PyFoam

PyFoam

Python で OpenFOAM のデータを操作したりできる。計算中の残差の変化を gnuplot で表示するコマンドなどがある。

昔は重宝したが、今はもういらないかも?

swak4Foam

swak4Foam

複雑な境界条件を設定できるツールなどが含まれる。

昔は重宝したが、今はもういらないかも?

Helyx-OS

Helyx-OS

OpenFOAM 用 GUI ツール。使えるソルバーが限定されるが、人によってはこれだけで十分かもしれない。

標準以外のソルバー

OpenFOAM を利用したソルバー

  • CFDEM
  • OpenQBMM
  • S-CLSVOF 法ソルバー
  • EDC ソルバー
  • flameletFoam
  • IHFOAM

CFDEM

CFDEM project

OpenFOAM と DEM ソルバー LIGGGHTS で CFD-DEM 連成を行うもの。

OpenQBMM

OpenQBMM

OpenFOAM による Quadrature-Based Moment Methods (QBMM) を用いた多分散系混相流 (?) ソルバーの実装。

S-CLSVOF 法ソルバー

S-CLSVOF 法の実装。interFoam の説明も参考になる。

EDC ソルバー

EDC ソルバー。少々古いが、参考になるかもしれない。

また、simFlow-engine のリポジトリになぜか EDC ソルバーが含まれている時期がある (simFlow-engine-2.2)。

flameletFoam

Extend-bazaar/solvers/combustion/flameletFoam (OpenFOAM Wiki)

flamelet ソルバー。

IHFOAM

IHFOAM

海洋系のソルバー。

ソースコードを読むためのツール

ソルバーを使うだけなら必要ないが、ソースコードを理解したいのなら、それ専用のツールを使ったほうがよい。クラスの定義への移動などがとても楽にできる。

プロジェクト作成で、プロジェクトのディレクトリが OpenFOAM のディレクトリになるようにしてやればよい (ファイルが大量にあるので、プロジェクト作成には時間がかかる)。

コードを直接読まずに、Doxygen の文書 を参照するという方法もある。個人的には GNU GLOBAL が好み。

バージョンについて

OpenFOAM のバージョンについては、特に問題なければ最新版を用いるのがよいが、ユーザーが作成し公開しているソルバーやライブラリはバージョンが少し古いものが多いので、そういうものを利用したい場合は対応するバージョン (おそらくバージョン 2.x 系が多い) を導入する必要がある。そもそも最新版のための環境を用意できないとか、すでに古いバージョンで構築したソルバーやライブラリなどがあって、やむなく古いバージョンを使うというのもありそうだが、それでもよいと思う (余裕があれば最新のバグ情報を調べておくとよい)。

OpenFOAM のバージョンには、たとえば 2.4.0 といったものと、2.4.x といったものがある。2.4.0 のほうが公式公開版で、2.4.x はそのバグフィックス版のようである (Whats the difference of OpenFOAM-dev and OpenFOAM-2.x.x?)。特に気にならなければ公式公開版のほうを使えばよい (むしろ挙動を変えないためにもそうしたほうがよいかもしれない)。また、別に OpenFOAM-dev というものもあり、これは開発版のようである。2.4.x などや OpenFOAM-dev は GitHub リポジトリ にある。

OpenFOAM+

OpenFOAM Foundation 版 OpenFOAM と OpenCFD (ESI) 版 OpenFOAM+ の違いは、OpenFOAM v3.0+ ?? にあるように、RHEL と Fedora の違いのようなものとのことであるが、よくわからない。想像だが、好きにやりたい Weller 氏と、コミュニティの要望を入れたい ESI とで妥協した結果ではなかろうか? これがどう転ぶかは、しばらく様子を見ないとわからない。

OpenFOAM+ を RHEL に対する Fedora と見なすのは、OpenFOAM+ の新機能を検証不十分なまま先走り的に導入していると前提しているように思われる。ただ、OpenCFD は OpenFOAM+ をきちんとした検証を行った上でリリースしているようで (なにせ ESI-OpenCFD 社のほうが Foundation よりリソースはずっと多い)、そうなると OpenFOAM+ がアグレッシブに新機能を取り入れているのではなく、単に本家 OpenFOAM の開発スピードがトロいだけとも考えることができる。将来、本家のほうがユーザーに見限られる可能性も考えておいたほうがよいように思う。

関連情報

最初の論文が OpenFOAM ユーザーにとって最重要文献。

FOAM

こちら から OpenFOAM のもとになったソルバー "FOAM" が入手できる。

誰が FOAM を書いたか

こちら で議論になっているが、FOAM のもともとの作者は誰だろうか? FOAM のコードを見る限り、基本的なクラスを書いているのは Weller 氏のようであり、彼がオリジナルの作者であることは間違いなさそうである。また、上の文献の著者の一人 Jasak 氏が FOAM の重要な貢献者であることも疑いようがない。それにも関わらず、OpenFOAM 公式の文書で Jasak 氏の名前を見かけることがないのは奇妙だよね、という話。

関連リンク

公式

コミュニティ

参考図書

OpenFOAM を利用するに当たって参考になる図書。

  • スハス V. パタンカー, 熱移動と流れの数値解析, 森北出版, 1985.
  • J.H.ファーツィガー, M.ペリッチ, コンピュータによる流体力学, 丸善出版, 2012.
  • H.K.Versteeg, W.Malalasekera, 数値流体力学 第2版, 森北出版, 2011.

パタンカー本は数値流体力学を学ぶ上での基本中の基本。ただし、表現は OpenFOAM 的ではない。ファーツィガーらの本は、表現が OpenFOAM に近く、OpenFOAM を理解する上で参考になる。Versteeg らの本には、乱流モデルや離散化スキームについてのわかりやすい記述がある。

関連記事