OpenFOAM 情報2021年1月25日 | |
われを過ぎんとするものは一切の望みを捨てよ はじめにこれから OpenFOAM をちょっと試してみようかなと (無謀にも) 考えている人のための OpenFOAM 情報。 忙しい人のためのまとめOpenFOAM とは
公式サイト導入方法Linux
Windows
macOS
使い方
Q & A要するになんなの?流体の挙動を計算するプログラムを作るためのツールだよ。でも用意されているプログラムだけでも結構いけるよ。 使い物になるの?ならんの?大変なので基本的におすすめしないよ。Linux ユーザーで、CFD コードを自分で書くような人ならよいかも。 利点と欠点は?
OpenCFD 版と Foundation 版はどう違うの? どちらを使えばよいの?本家と元祖みたいなもん? OpenCFD 版を使えばいんじゃない? なにから始めたらよい?気軽に始めようとしているのなら、やめたほうがよい。どうしてもというなら、もし環境が用意できたのであれば、公式ドキュメントのチュートリアルガイドを読むとよい。チュートリアルケースを見よう見まねで遊んでみることができる人であれば、続けてユーザーガイドを読めると思う。 そもそも何なの?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" か)→本家とリリースのタイミングが合わなくてもよいようにするための処置のようである。できるだけ内容を本家とシンクロさせようとはしているらしい。 2017 年現在、OpenFOAM Foundation は開発版 OpenFOAM-dev の開発を進めている。OpenCFD 社は 6月に OpenFOAM v1706 をリリース。本バージョンで "+" の文字が消えた。OpenFOAM v1706 は OpenFOAM-dev ベースである。 2019 年現在、ESI-OpenCFD 社は OpenFOAM history を公開、OpenCFD 社の OpenFOAM こそが公式 (OpenFOAM.org 版はその fork) と主張している。...のはずだったのだけど、2020 年 8 月現在ではそこまで露骨なことは書いてない (クレームがあった?)。 何でないかOpenFOAM はいわゆる流体解析ソルバーではなく、有限体積法を中心とする偏微分方程式ソルバー開発用のクラスライブラリと、それによって作られたいくつかのソルバーおよびツール群である。自分の問題に利用するとき、一般の商用ソルバーのように必要な機能を有効にするスイッチを押すのではなく、必要な機能を持つソルバーを標準ソルバーの中から選択する。適当な機能を備えたソルバーが標準ソルバーの中にない場合は、自分でソルバーを開発する必要がある。ある意味なんでもできるが、それなりの知識と時間、場合によってはお金が必要になる。 何ができるか標準ソルバーの範囲では、以下のようなことができる。
他に、あまり一般的でない燃焼モデルを使った燃焼解析ソルバーや、遷音速・超音速を含む圧縮性流体ソルバーなどもある。粒子計算も一応可能だが、今のところ一部の特殊なソルバーが対応しているのみである。また、商用ソルバーと比べると、標準ソルバーは一般的にあまり収束性がよくないし、メッシュ品質に対するロバスト性もなく、計算を成功させること自体が難しい場合が少なくない。正直なところ、まったくもって初心者にはおすすめできないシロモノである。 対象ユーザーOpenFOAM を利用するには、問題にもよるが、既存のソルバーを修正したり新たなソルバーやライブラリを開発したりする必要性が生じることが少なくない。また、基本的に Linux 上で動作することを想定している。したがって、ユーザーは Linux の利用に慣れ、C++ によるプログラミングが可能で、数値流体力学の理論と問題の現象について知っている必要がある。そのため、主な対象ユーザーは研究者や学生、数値計算に十分な時間を割けるエンジニア (たぶんめったにいない) などになる。 オープンソース?OpenFOAM はオープンソースソフトウェアであり、無料で使える流体解析ソフトとして注目されているが、「無料」自体はオープンソースソフトウェアの性質ではない。オープンソースソフトウェアとは、ソースコードが公開されていて、ソースコードの再配布が可能なソフトウェアのことである。この性質により、たとえソフトウェアを有料にしたとしても、購入した人に無料でソースコードを再配布されてしまう可能性が高い。そのため、結果的に無料で提供されていることが多い。 オープンソースソフトウェアの利用にあたっては、以下のような制限がある。
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 はオープンソースであり、ソースコードを自由に眺めることができることが大きな特徴である。コードは適度に抽象化されており、そこそこ読みやすく書かれているため、数値流体力学の学習のためのよい教材として利用できるだろう。...というのは表面上のことで、あまり深く潜ると泥沼である。たぶん、OpenFOAM が本来売りにしている部分に期待しているのであれば、もっと他によいソフトがあるはずである。 まず何から始めるべきか(以上を読んでもまだやる気があるとして) Linux 環境を用意するのが望ましいが、Linux に慣れていないなら、Windows や Mac 上の仮想マシン (VirtualBox や VMWare など) に OpenFOAM インストール済みの Linux (DEXCS for OpenFOAM や CAELinux など) をセットアップするのが比較的手軽でよい。あるいは Ubuntu を入れて自分で OpenFOAM をインストールしてみても、それほど手間ではない。 また、Windows 10 の WSL (Windows Subsystem for Linux) が使えるなら、これを使う手もある。 OpenFOAM の環境を用意できたら、チュートリアルガイド 片手にチュートリアルケースを実行してみるところから始めるとよいだろう。 OpenFOAM の利用手段OpenFOAM を使用する方法として、つぎのような手段が考えられる。
OpenFOAM インストール済みのシステムを導入するLinux や OpenFOAM のセットアップのハードルが高い人向けに、OpenFOAM セットアップ済みの Linux 環境が用意されて
DEXCS for OpenFOAMもともとはデンソーの社内教育用システムとして開発されたもので、ADVENTURE を使用したシステムだったが、OpenFOAM 版も登場した。LiveDVD 版として提供されている。ハードディスクにインストールすることも可能。 OpenFOAM に関連するさまざまなツールが用意されている。 CAELinuxOpenFOAM だけではなく、様々な free の CAE ソフトがインストールされている Linux 環境。LiveDVD。2014 年で更新が止まっていたが、2017 年に開発を再開したらしい。 Linux マシンを用意して OpenFOAM をインストールするOpenFOAM は Linux 用に開発されているので、Linux マシンを用意するのが素直である。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 版、Foundation 版ともに OpenFOAM の Docker コンテナを提供している (OpenCFD 版)。 Linux/Windows/Mac OS X どれでも動く。コンテナの中身は Linux なので、原理的には機能をフルで使えるはずだが、Windows 版はポストをコンテナから起動できないので少し不便である。コンテナの起動時間を除けば、ソルバーの実行速度は Windows 用にコンパイルされたバイナリよりも速いように感じる。 その気になれば、Docker を使って自分好みの OpenFOAM 環境を構築することが可能である。SSH/X11 を使えば Windows でもコンテナからポストを起動することができる。ただし、環境構築が結構めんどくさい。 Windows 版を使う本来は Linux 用の OpenFOAM だが、Windows 版もあるにはある。
古い
公式OpenCFD が MinGW クロスコンパイル版と WSL 版を提供している。MinGW クロスコンパイル版は Linux 上の MinGW で Windows 向けにコンパイルしたもので、これ自体ではソルバーのコンパイルなどは行えないが、素のまま使うのであればこれで十分である。 blueCFD-Core (blueCAPE)Windows 用にビルドした OpenFOAM + α。Version 5.x。MS MPI による並列計算可能。"paraFoam" も (本物ではないけど) 機能する。ソルバーのコンパイルも可能。使い方は、インストールしてスタートメニューから "blueCFD-Core terminal" を実行するだけ。 OpenFOAM for Windows (CFD support)dev 版ベースの Windows バイナリを提供。 simFlow engine (OpenFOAM for Windows)Version 1612+, 3.0.0 などの Windows バイナリを提供。パッチも提供されている。 CaelusOpenFOAM の fork らしい。Windows バイナリを提供。 古いOpenFOAM extensions1.4 の Cygwin 版を提供している。 OpenFOAM for MS windows binary releaseOpenFOAM for MS windows binary release Windows ネイティブな OpenFOAM。1.5 ベース。いくつかのソルバーが移植済みらしい。 OpenFOAM 1.6 binary for win32Windows ネイティブな OpenFOAM 1.6。パラレルには対応していない。 OpenFOAM 1.7.0 for Win32Windows ネイティブな OpenFOAM 1.7。パラレルにも対応しているらしい。 OpenFOAM 2.1.x for Win64Windows ネイティブな OpenFOAM 2.1.x。Open MPI によるパラレルに対応。 OpenFlowWindows 用にビルドした OpenFOAM を有償で提供していた。ビルド手順とパッチが公開されている (OpenFOAM 2.2.x on Windows、OpenFOAM 3.0+ on Windows)。 関連プロジェクトOpenFOAM に関連したプロジェクト
OpenFOAM extensionsfoam-extend、OpenFOAM extensions OpenFOAM 拡張版。Git あるいは SVN を使って入手。 foam-extend
OpenFOAM Extensions
Files にバイナリパッケージもある。 OpenFOAM-IntelFoundation のプロジェクトの一部で、Xeon Phi KNL 対応プロジェクト。 PyFoamPython で OpenFOAM のデータを操作したりできる。計算中の残差の変化を gnuplot で表示するコマンドなどがある。 昔は重宝したが、今はもういらないかも? swak4Foam複雑な境界条件を設定できるツールなどが含まれる。 昔は重宝したが、今はもういらないかも? Helyx-OSOpenFOAM 用 GUI ツール。使えるソルバーが限定されるが、人によってはこれだけで十分かもしれない。 標準以外のソルバーOpenFOAM を利用したソルバー
CFDEMOpenFOAM と DEM ソルバー LIGGGHTS で CFD-DEM 連成を行うもの。 OpenQBMMOpenFOAM による Quadrature-Based Moment Methods (QBMM) を用いた多分散系混相流 (?) ソルバーの実装。 S-CLSVOF 法ソルバーS-CLSVOF 法の実装。interFoam の説明も参考になる。 EDC ソルバーEDC ソルバー。少々古いが、参考になるかもしれない。 また、simFlow-engine のリポジトリになぜか EDC ソルバーが含まれている時期がある (simFlow-engine-2.2)。 flameletFoamExtend-bazaar/solvers/combustion/flameletFoam (OpenFOAM Wiki) flamelet ソルバー。 IHFOAM海洋系のソルバー。 ソースコードを読むためのツールソルバーを使うだけなら必要ないが、ソースコードを理解したいのなら、それ専用のツールを使ったほうがよい。クラスの定義への移動などがとても楽にできる。 プロジェクト作成で、プロジェクトのディレクトリが OpenFOAM のディレクトリになるようにしてやればよい (ファイルが大量にあるので、プロジェクト作成には時間がかかる)。 コードを直接読まずに、公式ドキュメント を参照するという方法もある。個人的には 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 Foundation 版 と OpenCFD 版OpenFOAM Foundation 版 OpenFOAM と OpenCFD (ESI) 版 OpenFOAM (OpenFOAM+) の違いは、OpenFOAM v3.0+ ?? にあるように、RHEL と Fedora の違いのようなものとのことであるが、よくわからない。想像だが、好きにやりたい Weller 氏と、コミュニティの要望を入れたい ESI とで妥協した結果ではなかろうか? これがどう転ぶかは、しばらく様子を見ないとわからない。 OpenFOAM+ を RHEL に対する Fedora と見なすのは、OpenFOAM+ の新機能を検証不十分なまま先走り的に導入していると前提しているように思われる。ただ、OpenCFD は OpenFOAM+ をきちんとした検証を行った上でリリースしているようで (なにせ ESI-OpenCFD 社のほうが Foundation よりリソースはずっと多い)、そうなると OpenFOAM+ がアグレッシブに新機能を取り入れているのではなく、単に元祖 (?) OpenFOAM の開発スピードがトロいだけとも考えることができる。将来、Foundation 版のほうがユーザーに見限られる可能性も考えておいたほうがよいように思う。 2017 年 6 月、OpenCFD 社から OpenFOAM v1706 がリリースされた。"+" の文字が消えている。v1706 は OpenFOAM-dev ベースで、Foundation 版からバージョンアップのリリースがない現在、OpenCFD 社が安定版リリースの役目を負う状況になっている。 2019 年 7 月現在、OpenCFD 社は自社の OpenFOAM こそが公式であると主張している (OpenFOAM history)。...していたのだが、2020 年 8 月現在は穏当な主張になっている。 関連情報
最初の論文が OpenFOAM ユーザーにとって最重要文献。 誰が FOAM を書いたかこちら で議論になっているが、FOAM のもともとの作者は誰だろうか? FOAM のコードを見る限り (かつて入手できた時期があった)、基本的なクラスを書いているのは Weller 氏のようであり、彼がオリジナルの作者であることは間違いなさそうである。また、上の文献の著者の一人 Jasak 氏が FOAM の重要な貢献者であることも疑いようがない。それにも関わらず、OpenFOAM 公式の文書で Jasak 氏の名前を見かけることがないのは奇妙だよね、という話。 関連リンク公式
コミュニティ 参考図書OpenFOAM を利用するに当たって参考になる図書。
パタンカー本は数値流体力学を学ぶ上での基本中の基本。ただし、表現は OpenFOAM 的ではない。ファーツィガーらの本は、表現が OpenFOAM に近く、OpenFOAM を理解する上で参考になる (ただし内容は高度)。Versteeg らの本には、乱流モデルや離散化スキームについてのわかりやすい記述がある。 OpenFOAM について書かれた本としては以下のものがある。
Darwish らの本は、OpenFOAM に接近した形で有限体積法を学べるよい本。ただ、分厚いので読み通すのはちと厳しい。2番目は、OpenFOAM の基本的な使い方を日本語で一通り解説したもの。3番目は sourceflux 社の本の日本語訳で、OpenFOAM のバージョンは少し古いが、内容は意外と古く感じない。読み応えがあり、初心者向けではない。 関連記事 | |
PENGUINITIS |