Ubuntu20.04(WSL2)でOpenFOAMv2112をビルドしてみた話
目次? [hide]
いくらなんでもいつもと毛色が違いすぎるだろ別サイトでやれ(挨拶)
別サイト立ててもいいんですけど、それなら写真だけ独立させてこのサイトとの関係は一切明示しないでやりますかね……。
OpenFOAMとは?
説明が難しいのでググってください()
さて、OpenFOAMというのは流体/物理シミュレーションに役立つプログラムがたくさん入っているツールボックスです。
流体解析ソフトとか言っちゃうと怒られるみたいです。用途が広いよって言いたいんですかね(適当)。
流体シミュレーションというと映像作品やゲームできれいな水面を表現するときに聞くと思うんですけど、まぁそういうこともできると思います。
ちなみに、身の回りのもの(空気、水、血液、オイル、ガス)、だいたい流体です(要出典)。つまり流体を究めれば世の中のことがだいたい分かるのです(個人の感想)。
ミレニアム問題(解けたら100万ドル)のひとつ、「ナビエ・ストークス方程式の解の存在と一意性」は流体の運動方程式のお話です。数学でも大事なテーマなんですね。
シミュレーションを通してこの問題を検討する、なんてこともできるかもしれませんね。
つまり頑張ればOpenFOAMでなんでも計算できる、というわけです(過言)。
空気を対象にすれば、F1とかモータースポーツだと空力性能を評価するための流体シミュレーション。
水を対象にすれば、船の抵抗を下げるための流体シミュレーション。
オイルだったら車・バイクのギアとか?
もっといえばエンジンの中とか?
まぁEVの時代なんでエンジンとかもうやってないかもしれないですね(適当)
ちなみに流体のシミュレーションのことはカッコよくCFD(Computational Fluid Dynamics(計算流体力学))と言ったりするそうです。
昨今はマシンスペックがガンガン向上しているので、お手元のパソコンでもそれなりのシミュレーションができてしまいます。
OpenFOAMは無料で使うことが出来ますので、その糸口になればと思ってメモ代わりに残しておきます。
必要なもの
1.Linuxというものの存在を知っていること
2.困ったらとりあえずGoogle検索して根気よく答えを探す力
頭で考える必要ないです。右から左へ。
一般的なインストール方法
まず、お手元にWSL2+Ubuntu20.04環境を用意します。(参考:https://www.kagoya.jp/howto/it-glossary/develop/wsl2_linux/)
あとはこのサイトの手順に従えばaptで簡単にインストールできます。
ビルドする場合
ビルドとは、OpenFOAMのソースコードを自分でコンパイルして自分だけのOpenFOAM(語弊あり)を作ってしまうことです。
自分の環境に合わせたバイトコードが生成されるはずので、普通に上記のaptでインストールするよりは早いかも?
ちなみにここで高速化したい場合はCPUに応じたコンパイルオプションを調査するべきです。
ビルドが必要なケースとしては、ネットワークの制限がある状況でインストールが必要なとき(会社のマシンにいれたい)とか、共用の大型コンピュータで実行してて他のユーザーが使うソフトのバージョンを勝手に変えたりすると問題になるときとか(この場合はOpenFOAMだけではなくコンパイラからビルドする必要があります)ですね。
今回は個人利用ですしネットワークの制限もないはず、なおかつWSL2は仮想マシンで簡単に環境を再構築できるのでaptをガンガン使ってみたいと思います。
参考:CentOSにOpenFOAM v2106をインストール
$ sudo apt install cmake gcc g++ bison flex m4 zlib1g-dev openmpi-bin
面倒なのでcmakeやopenmpiもaptでインストールしてしまいます。flexとかbisonが実際に必要なのかよくわかってませんが。
(もっというと、OpenMPIも自分でビルドしたほうが良いと思います。)
今回は~/OpenFOAM以下でビルドしていきます。
$ cd
$ mkdir OpenFOAM
$ cd OpenFOAM
$ wget https://dl.openfoam.com/source/v2112/OpenFOAM-v2112.tgz
$ tar zxvf OpenFOAM-v2112.tgz
$ wget https://dl.openfoam.com/source/v2112/ThirdParty-v2112.tgz
$ tar zxvf ThirdParty-v2112.tgz
$ mv ThirdParty-v2112 OpenFOAM-v2112/ThirdParty
ディレクトリ構成を整えます。
$ cd OpenFOAM-v2112
$ source etc/bashrc
で「まだOpenFOAM入ってないよ」という意味の英語の警告がでてくればOKです。
他の警告が出てきている場合はその警告に対処してください。
$ cd ThirdParty
$ ./Allwmake
$ ./makeAdios2 sources/adios/ADIOS2-2.7.1
Adios2だけmakeAdios2の中身が最新版に対応してなくてうまくインストールしてくれてないようです。
ThirdPartyの他のものをインストールしたい場合は自分でソースをダウンロードしてくる必要があります。
$ cd ../
$ ./Allwmake -j -l
-jは並列コンパイル、-lはビルドログを残すよ、というオプションです。
ビルドには数時間かかります。問題なければ
========================================
Finished compile of visualization with OpenFOAM-v2112
Gcc system compiler
linux64GccDPInt32Opt, with SYSTEMOPENMPI sys-openmpi2022-04-29 23:44:00 +0900
========================================
OpenFOAM-v2112
Gcc system compiler
linux64GccDPInt32Opt, with SYSTEMOPENMPI sys-openmpiapi = 2112
patch = 0
bin = 312 entries
lib = 152 entries========================================
と出てくれば終わってます。
最後に、次のコマンドを打って何もメッセージが出てこなければOKです。
$ source etc/bashrc
(未解決)foamInstallationTestが通らない
無事インストールできているはず、なのですが、foamInstallationTestをするとエラーが出てしまいます。
後述のチュートリアルは動作するので良いのですが、気持ちが悪いです。gccとか入ってないわけないんだが??
$ foamInstallationTest
Software Components
-------------------------------------------------------------------------------
Software Version Location
-------------------------------------------------------------------------------
flex *** not installed ***
make *** not installed ***
wmake *** not installed ***
gcc *** not installed ***
CRITICAL ERROR
g++ *** not installed ***
-------------------------------------------------------------------------------
icoFoam *** not installed ***
CRITICAL ERROR
Summary
-------------------------------------------------------------------------------
Base configuration ok.
The foam installation contains 2 critical error(s).
Review the output for warning messages and consult
the installation guide for troubleshooting.
Done
チュートリアル
OpenFOAMは結構設定が面倒です。プロが通常使うようなソフトだとマウスポチポチで設定できるところをいちいちテキストで設定しないといけません。
ゼロからやるのは大変なのでとりあえずチュートリアルを動かしてみたいと思います。
ホームディレクトリにworkというディレクトリを作って、そこで作業します。
$ cd
$ mkdir work #作業用ディレクトリを作成
$ cd work
$ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike/ ./
$FOAM_TUTORIALS以降、$の前に\がついてしまってタブ補完出来ない場合、
$ shopt -s direxpand
と打てば$FOAM_TUTORIALSが展開されてタブ保管できるようになります。(出典:Linux環境設定/Tabキーによる補完で$にエスケープ文字が追加されるのを停止する)
$ cd motorBike
$ ./Allrun
でRunning……と表示されるので、当分待つと終わります。
待ちきれない、という人は別のターミナルを立ち上げて同じ場所へ行くと
$ cd work/motorBike
$ ls
log.……というファイルが沢山できているので、実行中のコマンドのログを見れば進展がわかります。
そこでエラーがでていればインストールに失敗していた、ということになりますね。
可視化についてはparaViewを使います。
paraViewの導入はかなり煩雑なので、
このサイト
の手順に従うと良いでしょう。
このタイプの導入だとparaFoamコマンドは動かないと思いますが、無事にごちゃごちゃ可視化すると
こんな感じになります(クリックでGIFアニメ)。
ちなみにGIFアニメを作れるチュートリアルは
$FOAM_TUTORIALS/incompressible/pisoFoam/LES/motorBike/
を実行してください。これは実行に5,6時間以上かかると思います。
これが見れて何が楽しいって、いや、たのしくない?
はい。
もっといろいろなことがしたいと思ったあなたは目の前の端末でOpenFOAMと打ち込んで調べまくれば、きっと立派なCFD使いになれるでしょう。
書き疲れたのでこのくらいにしておきます。たぶん「うまくいかない!」とか「この手順おかしい」とかあると思うので、お気づきの際はコメントやTwitterなどでご連絡ください。
OpenFOAMはコミュニティが充実しているので、そういうつながりを探すのも良いと思います。
仕事でCFDやってる人は怖い人が多いんですけど(要出典)、Open系やってる人は優しい人が多い気がします(個人の感想)。
ちなみに今日は本当はツーリングに行く予定だったのですが、パンクしてたので諦めて記事書きました()。
というわけで、今日はこの辺で。
1件のコメント