Allrun の結果を収納するデータベース構築が一段落したので(といっても、まだまだやりたいことは沢山あるが)、次にAllrunの新しい計算環境を構築することした。
これには約1年前に購入したM1 Mac・・・当初はCAEの用途にはほとんど使い物にならないと放置してあった・・・ を充てがうこととした。最近になって、比較的簡単にソースビルドできるというアドバイスを頂いたので・・・
ビルドは比較的簡単というお話ではあったが、Linuxでビルドするのとは何かと要領が違うので、Macリテラシーの無い自分には、Allwmakeのビルドが正常に動き出すようになるまで半日ほどあれこれ試行錯誤することとなった。Allwmakeが動き出して昼寝が終わったらビルドも終わっていて、ようやくAllrunも動き出したという状況となった(下図)。
この先、Allrunが終了するには1ヶ月ほどかかりそうだが、動きさえすれば良いとして応急処置的な環境下で実行している。1ヶ月もするとどうやって構築したのかも忘れてしまうことは必至。とりあえず動くようになったというだけなので、懸案点も含めて備忘録として取り纏めておくこととした。
公開情報について
普通に、M1 MAC openfoam あたりで検索すると、Dockerを使ってインストールする方法がたくさん出てくるのですが、その方法でありません。基本的にはMac用のpatchを入手してビルドする方法になりますが、このパッチを掲載したサイト(たとえば、https://github.com/mrklein/openfoam-os-x)情報はチラホラ公開記事の中で目にすることが多くなってきましたが、Macリテラシーが前提になっているようで、そもそもこれをどうやって使うのかがわからない。
Linuxでビルドした経験がある人には、https://ttsyshmz.github.io/howtoFoam/post/build-openfoam-v2106-on-m1mac/あたりの記事がわかり易いと思ったので、これを足掛りに始め、最終的にはこの記事に記してある通りの方法でビルド出来たたのですが、ここにも以下に記すような多くのMacリテラシーの壁がありました。
Case-sensitive
ボリュームを大文字小文字区別できるシステムに変更する必要があるとの事。ディスクユーティリティを使って変更するのだが、このツールの起動方法(Finder⇒「ディスクユーティリティ」で検索)も使い方も知っている人にしかわからんのでは? まぁ、マニュアルを読め!ということかもしれないが。
なお、ビルドするに際しては、本オプションは必須であった。というか、最初は勘違いしてやっていたのでビルド出来ず、途中で間違いに気付いて変更したらビルドに成功した。しかし、実行するに際して必須かどうかは不明。とりあえず、Allrunは変更したボリューム上で実行しているが、デフォルトのヴォリューム上でも、全チュートリアルの部分的な実行が出来たことは確認できている。
OpenMPI
ソースファイルをコピーして、パッチも充てて、いざAllwmakeとやってみたが、mpi…なんたらのエラーで先へ進めない。要するにOpenMPIがインストールされていないということである。これを先の記事では、ThirdParthでビルドしなさい…的な事を書いてあるのだが、経験上これは厄介。調べたら、Macでは、brewを使ってインストール出来るらしい。これが出来れば、etc/bashrcのMPI設定はデフォルトのまま(export WM_MPLIB=SYSTEMOPENMPI)で使える。これも色々情報あったが、使わせていただいたのは、https://qiita.com/yjmtsmt/items/07dd58761c5405ecc703の記事。ポイントは、brewを使うのだが、コンパイラをclang でなく、gccに変更して使うということか。
但し、brewって何?brewそのもののインストールも一筋縄でなかった。
Homebrew
brew(Homebrew)というのはMac用のパッケージマネージャであるとの事。これをインストールすれば、ソースコードの入手からビルドまで一貫してやってくれるらしい。
インストールは、Homebrewのホームページに記載されているインストールコマンド(シェルスクリプト)をターミナル画面にペーストし実行(Enter)するだけなんだが、M1の場合には、その後でインストールパス($PATH)を設定する必要があったという点。
パスを通す方法については、たとえば、https://www.teamxeppet.com/macbook-m1-homebrew-install/の記事あたりに、インストールした時に表示されたコマンドをコピペして実行するだけでも良かったらしいが、気が付かなかったので以下手探りした。
環境変数
環境変数は、テンポラリで使うだけなら、端末上で以下のように設定するだけで、これはMacでも出来た。
$ export $PATH=$PATH:/opt/homebrew/bin
しかし永続的には .bashrc とかに書き込むのが普通なんだが、これもMac流がわからなかった。
シェル
そもそもMacでシェルがどうなっているのか? 調べると、Macでは、zsh か、bashが使われるとあり、デフォルトではzsh になっていたので、これをbashに変更した。これも情報は豊富(たとえば、https://algorithm.joho.info/mac/m1-zsh-to-bash/)であったが、bashに変更する必要があったのかどうかは不明。Linuxで手慣れていたので変更したというのが本音。
隠しファイル
シェルが、bashであれば、.bashrc なり、.bash_profile に上述の環境変数を定義しておけば、永続的に使えるようになるのだが、この隠しファイルの編集方法がわからない。いや、vimコマンドを使って編集しなさいという記事はあってそれはわかるのだが、いわゆるGUIでやる方法がわからなかったという事。デフォルトではFinder上には表示されないし、スクリプトエディターから、「開く」メニューを使っても、隠しファイルが表示されない。まぁ、これも調べればすぐに見つかる(たとえば、https://yama-mac.com/make_show_hide_hidden_folders_files/)んだが、Linux(というかubuntu)とは随分勝手が違うので・・・
SIP
Macでは、SIP(System Integrity Protection)と呼ばれるシステムガードが導入され、システム中枢に関わる様々なカスタマイズができない仕様となっているそうな。並列計算を実行できるようにするには、この機能を無効にする必要があるとの情報があった。またカスタマイズが終わったら戻しておくことも推奨されていた。この方法を切り替える方法についての情報も簡単に見つかるが、覚えておくことは困難なので、ここに簡単に取りまとめておく。
リカバリーモードで実施するが、そもそも普通のMacとM1Macでは、操作方法が異なる
電源ボタン長押しで起動
→オプション
→続ける
→(ボリュームを選択)
→管理者ユーザーを選択→パスワード
→メニューバーの「ユーティリティ」
→ターミナル
ターミナルが現れたら、csrutil コマンドを使う csrutil statusを入力し、「ENTER」を押すと、enabled(有効)状態かdisabled(無効)状態か確認できる。
無効にするには、
$ csrutil disable
有効にするには、
$ csrutil enable
だが、管理者パスワードが要求されるのと、設定の反映に少々時間がかかる。変更を確認できたら、再起動で良い。
その他
cp -r コマンドの挙動がLinuxとは違っていた、というのもFAQかと思いきや、あんまり情報がない。唯一、cp -Rコマンドは、Mac OS XではLinuxとは動作が異なります。というのを見つけたが、これも微妙に違うような・・・、まぁコピー後の状態を一々確認しながらやれば間違いは起こらないので良いと思うが。
全チュートリアルの実行に必要なディスクスペースは800GB以上であり、現在のマシンではこのままでは容量不足となることは必至。そこで今回は、全チュートリアルを分割して実行することとした。とりあえず、incompressible と、multiphaseを除いた状態で実行中。これだと今月中には終わるんでないかと思っているが、どうなることやら・・・
scotch, FFTW
以下、(2022/3/22)追記
上記、incompressible と、multiphaseを除いた状態の結果を確認したところ、189ケース中、34ケースでFATAL ERROR が発生していた。そのうち半数以上が、scotch分割による並列計算であった。並列計算も、分割方法がsimpleやhierarchialであれば正常に計算できていた。どうも、SIPを無効に設定したからといって、それだけでは無かったのかもしれない。あれこれ試行錯誤中に、
etc/config.sh/scotch に
export SCOTCH_ARCH_PATH=/opt/homebrew/opt/scotch
とscotchの在所を絶対パスで記述しておけば、SIPが有効なままでも、ビルド出来るとの情報を得た。ついでにFFTWも同様に、etc/config.sh/FFTW に
export FFTW_ARCH_PATH=/opt/homebrew/opt/fftw
とすることで、DNS/dnsFoam/boxTurb16 のケースの計算エラーも解消された。これでやり直してエラーになったケースを再計算中。
以下、(2022/5/25)追記
foamyHexMesh, foamyQuadMesh
今時使っている人はほとんどいないと思うが、foamyHexMesh, formyQuadMesh に係るチュートリアルも動作していなかった。これはプログラムのビルドに成功していなかったのが原因であった。プログラムは、application/utility/mesh/generation/foamyMesh にあって、Allwmakeを実行すると、CGALが必要だと云われる。これも、上のscotchやfftwと同様、etc/config/sh/CGAL中に、以下定義しておけば良いのだが、これだけでは不十分であった。
export BOOST_ARCH_PATH=/opt/homebrew/opt/boost
export CGAL_ARCH_PATH=/opt/homebrew/opt/cgal
これで、コンパイルまでは通るのだが、最後のライブラリリンクで躓く。ここは公開情報も見当たらず、試行錯誤で手間取ったが、各モジュールのMakeフォルダ中、optionsファイル中で、以下の修正(${CGAL_LIBS)}\ の削除)が必要であった。
EXE_LIBS = \
${CGAL_LIBS} \
-lconformalVoronoiMesh \
-lfileFormats \
cp -r 不具合
MacとLinuxでは、cp -r コマンドの仕様が異なる点があったが、incompressible/adjointOptimisationFoam, adjoinShapeOptimizationFoam(注記) の一連のチュートリアルはすべからく実行できていなかった。Allrun中の下記の一文を変更する必要があった。(注記、Optimisation, Optimization の表記は紛らわしいが原文の通り)
cp -rf "$resourcesDir"/meshes/<ケース名>/polyMesh/ constant/
を以下に変更。
cp -rf "$resourcesDir"/meshes/<ケース名>/polyMesh constant/
how to Allrun
Allrunを実行するには、紆余曲折あったが、最終的に
$ FOAM_DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH ./Allrun
として実行するのが良いみたいだ。
(以下、2022/9/16 追記)
OpenFOAM-v2206
Macでは、OpenFOAMのバージョンが変わる都度、何かとトラブルがあるようです。v2206については、Allrunデータベースサイトの記事に記しておいたので参考にされたい。
ピンバック: OpenFOAM-v2206 – E.Mogura's OpenFOAM®