OpenFOAM 情報

2014年2月23日

はじめに

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

そもそも何なの?

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 社の商標登録である。

何でないか

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 の利用については十分な事前検討が必要である。

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

どのように使えるか

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

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

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

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

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

まず何から始めるべきか

(以上を読んでもまだやる気があるとして) まず、Windows や Mac 上の仮想マシン (VirtualBox など) に OpenFOAM インストール済みの Linux (DEXCS for OpenFOAM など) をセットアップするのが手軽でよい。

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

OpenFOAM の利用手段

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

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

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

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

  • DEXCS for OpenFOAM
  • CAELinux
  • GeekoCFD

DEXCS for OpenFOAM

DEXCS

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

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

CAELinux

CAELinux

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

GeekoCFD

GeekoCFD

OpenFOAM を中心とした CFD 関連ソフトがインストールされた Linux 環境。LiveDVD として提供されている。

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

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

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

Linux 専用マシンを用意する

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

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

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

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

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

CD/DVD 起動の Linux を使う

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

USB メモリ起動の Linux を使う

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

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

ディストリビューション

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

問題点

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

Windows 版を使う

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

  • OpenFOAM 2.1.x for Win64
  • OpenFlow: OpenFOAM for Windows
  • blueCFD

古い

  • 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

OpenFOAM 2.1.x for Win64

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

OpenFlow: OpenFOAM for Windows

Symscape

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

blueCFD

blueCAPE

Windows 用にビルドした OpenFOAM + α を有償で提供している。シングルコア版は無料。

古い

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 extensions
  • PyFoam
  • swak4Foam
  • pythonFlu
  • SpeedIT
  • Discretizer
  • Helyx-OS

OpenFOAM extensions

OpenFOAM extensions

OpenFOAM 拡張版。

パッケージは Git あるいは SVN を使って入手。

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

PyFoam

PyFoam

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

swak4Foam

swak4Foam

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

pythonFlu

pythonFlu

OpenFOAM の Python ラッパー。

SpeedIT

SpeedIT

OpenFOAM 用 GPU ソルバープラグイン。

Discretizer

Discretizer

OpenFOAM 用 GUI ツール。

Helyx-OS

Helyx-OS

OpenFOAM 用 GUI ツール。

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

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

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

コードを直接読まずに、Doxygen の文書 を参照するという方法もある。

日本語マニュアル

マニュアルの日本語訳が「オープン CAE 学会」から提供されている。こちら から入手可能。

参考文献

関連リンク

関連記事