概要
この記事はM2 Macbook Airにオープンソースの流体解析ソフトウェアOpenFOAMをインストールする方法、またチュートリアル(ダムブレイク)の実行方法をまとめた記事です。
はじめに
私は学生時代、土木・海岸工学分野を専攻していました。
現在はIT業界のエンジニアとして働いていますが、改めて海岸工学や土木、数値流体力学を学習したいと強く思い、アウトプットの一環として今回Qiitaに記事を投稿してみました。
私は以前windows環境でOpenFOAMを使った研究を行っていましたが、MacでもOpenFOAMを使いたいと思い、OpenFOAMのインストールを行いました。
そこで、この記事はM2 Macbook AirでopenFOAMをインストールする方法を整理します。
記事の対象読者
- OpenFOAMに関心のある方・インストールしたい方
- ITやソフトウェアに深い理解は無いが、計算できる環境を整えたい方
環境
- M2 MacBook Air
- OpenFOAM v2012 ※1
- ParaView -5.10.1 ※2
※1 以前使用していたOpenFOAMのバージョンがv2012なので、今回もv2012をインストールします。
※2 計算結果の可視化にParaViewを使用します。インストール方法は省略します。
OpenFOAMv2012のインストール
公式サイトを参考にdockerを用いてOpenFOAMをインストールします。
※今回は、dockerのインストール方法についての説明は省略します。
(Qiitaを含めて情報はたくさんありそう)
1.OpenFOAM v2012をインストールする準備
# ユーザのホームディレクトリに移動する
$ cd $HOME
# OpenFOAMの作業用ディレクトリを作成し、移動する
$ mkdir OpenFOAM
$ cd OpenFOAM
# openfoam-dockerという名前の空ファイルを作る
$ touch openfoam-docker
次に、作成したopenfoam-dockerファイルにこちらのサイト内のopenfoam-docker scriptの内容をコピーする(コピペすればOK)
2.OpenFOAM v2012をインストールする
# OpenFOAMの作業用ディレクトリに移動する
$ cd $HOME/OpenFOAM
# openfoam-dockerファイルへの実行権限を与える
$ chmod +x openfoam-docker
# openfoam-dockerファイルに対してopenfoam2012-defaultという名前のシンボリックリンクを作成する
$ ln -sf openfoam-docker openfoam2012-default
# OpenFOAM環境のイメージを起動する
$ ./openfoam2012-default
# コマンドの実行結果...なんだかうまくいってそう
---------------------------------------------------------------------------
========= |
\\ / F ield | OpenFOAM in a container [from OpenCFD Ltd.]
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
---------------------------------------------------------------------------
Release notes: https://www.openfoam.com/news/main-news/openfoam-v2012
Documentation: https://www.openfoam.com/documentation/
Issue Tracker: https://develop.openfoam.com/Development/openfoam/issues/
Local Help: more /openfoam/README
---------------------------------------------------------------------------
System : Ubuntu 20.04.3 LTS (admin user: sudofoam)
OpenFOAM : /usr/lib/openfoam/openfoam2012
Build : _269d0ffd5c-20210619 OPENFOAM=2012 patch=210618
一部省略
openfoam2012:~/
# exitと打ち込むとOpenFOAMを終了できる
openfoam$ exit
3.OpenFOAM内でnano、treeを使えるようにする (任意)
前節でOpenFOAMを使える環境を整えた。この節では、nanoエディタやtreeコマンドをOpenFOAM環境内で使えることを目標にする。
この節を飛ばして、次に進んでも計算はできます。
# OpenFOAMの作業用ディレクトリに移動し、Dockerfileを作成する
$ cd $HOME/OpenFOAM
$ touch Dockerfile
Dockerfileの中身をこんな感じにする
FROM opencfd/openfoam-default:2012
RUN apt update && apt install tree && apt install nano
Dockerfileが作成できたら、以下を実行する
# OpenFOAMの作業用ディレクトリに移動
$ cd $HOME/OpenFOAM
# 作成するイメージ名を「myopenfoam」とした。
$ docker build ./ -t myopenfoam
# コンテナの実行、「-it」オプションをつけないと動かなかった
$ docker run -it myopenfoam
# 実行結果、おそらく大丈夫だろう
---------------------------------------------------------------------------
========= |
\\ / F ield | OpenFOAM in a container [from OpenCFD Ltd.]
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
---------------------------------------------------------------------------
Release notes: https://www.openfoam.com/news/main-news/openfoam-v2012
Documentation: https://www.openfoam.com/documentation/
Issue Tracker: https://develop.openfoam.com/Development/openfoam/issues/
Local Help: more /openfoam/README
---------------------------------------------------------------------------
System : Ubuntu 20.04.3 LTS (admin user: sudofoam)
OpenFOAM : /usr/lib/openfoam/openfoam2012
Build : _269d0ffd5c-20210619 OPENFOAM=2012 patch=210618
Docker DesktopのImagesを確認してみると、myopenfoamが追加されている。
これから「myopenfoam」イメージを使用する場合は、「opencfd/openfoam-default」を削除してもOK
4.チュートリアルを実施する準備
# OpenFOAMの作業用ディレクトリに移動する
$ cd $HOME/OpenFOAM
# [前節で新たにイメージを作成した場合]
# コンテナ内のデータ(計算結果)を残すために、バインドマウントという方法を用いる
# 計算結果保存用ディレクトリcalDataをローカルに作成
$ mkdir calData
# ホストマシンのディレクトリ 「/Users/username/OpenFOAM/calData」を
# コンテナのディレクトリ 「/root」にバインドマウントをして、OpenFOAM環境のイメージを起動する
$ docker run -it -v /Users/username/OpenFOAM/calData:/root myopenfoam
# [前節で新たなイメージの作成を行っていない場合]
# OpenFOAM環境のイメージを起動する
$ ./openfoam2012-default
# チュートリアルディレクトリに移動する、$FOAM_TUTORIALSはチュートリアルディレクトリへのパス
$ cd $FOAM_TUTORIALS
# 中身を確認する
$ tree -L 1
# treeコマンドが使えない方は以下のコマンドを実行
$ pwd; find . -maxdepth 1 | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g'
# 実行結果
.
|-- Allclean
|-- Allcollect
|-- Allrun
|-- Alltest
|-- AutoTest
|-- DNS
|-- IO
|-- basic
|-- combustion
|-- compressible
|-- discreteMethods
|-- electromagnetics
|-- financial
|-- finiteArea
|-- heatTransfer
|-- incompressible
|-- lagrangian
|-- mesh
|-- modules
|-- multiphase
|-- preProcessing
|-- resources
|-- stressAnalysis
`-- verificationAndValidation
# 今回は、ダムブレイクまで移動
$ cd multiphase/interFoam/laminar/damBreak
# 計算用ディレクトリを作成
$ mkdir -p $FOAM_RUN
# ダムブレイクのチュートリアルを計算用ディレクトリにコピーする
$ cp -r damBreak $FOAM_RUN
# 計算用ディレクトリに移動、中身を確認
$ cd $FOAM_RUN
$ ls
実行結果
damBreak
# コピーしたdambreakディレクトリの名前を変更する (任意)
$ mv damBreak mydamBreak
5.チュートリアルの実施 (ダムブレイク)
無事にインストールできたか確認するためにダムブレイクのチュートリアルを行う。
早速チュートリアルを実行しようと思うが、その前にmydamBreakの中身を確認する。
ディレクトリ名、ファイル名で予想はできるが、簡単な説明を加えた。
# mydamBreakディレクトリに移動する
$ cd $FOAM_RUN/mydamBreak
# mydamBreakディレクトリの中身を確認する
$ tree -L 2
# treeコマンドが使えない方は以下のコマンドを実行
$ pwd; find . -maxdepth 2 | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g'
実行結果
|--0.orig
| |-- U #速度ベクトル場の設定
| |-- alpha.water #水相率場の設定
| `-- p_rgh #静水圧を引いた圧力場の設定
|-- Allclean
|-- Allrun
|-- constant
| |-- g #重力加速度の設定
| |-- transportProperties #流体物性
| `-- turbulenceProperties #乱流モデルの設定(中身を確認すると”laminar”と記載がある、
このチュートリアルでは乱流モデルは使用せず、層流モデルを使用)
`-- system
|-- blockMeshDict #メッシュの生成に関する設定
|-- controlDict #解析制御設定(計算時間間隔や最大クーラン数などの設定)
|-- decomposeParDict #領域分割の設定(並列計算を行う時に確認が必要)
|-- fvSchemes #離散化スキーム設定
|-- fvSolution #緩和係数の設定など
|-- sampling #波高計の設置やサンプリング間隔の設定(ダムブレイクの計測値を
触ったことが無く、詳しいことはわからない)
`-- setFieldsDict #気相・液相分布の定義(水がある領域、空気だけの領域を指定)
Allrun、Allcleanファイルの中身を確認する。これらのファイルを実行するには「./Allrun」や「./Allclean」と打ち込めば良い。
#Allrunファイルの中身を一部抜粋
#-----------------------------------------------------------------------------
#!/bin/sh
cd "${0%/*}" || exit # Run from this directory
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
restore0Dir #0.origの内容を0ディレクトリにコピーする
runApplication blockMesh #メッシュ生成
runApplication setFields #境界条件を設定
runApplication $(getApplication) #ソルバの実行、今回はinterFoam。interFoam?と思った方は
controlDictの中身を確認するといいかも
#-----------------------------------------------------------------------------
#Allcleanファイルの中身を一部抜粋
#-----------------------------------------------------------------------------
#!/bin/sh
cd "${0%/*}" || exit # Run from this directory
. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions # Tutorial clean functions
cleanCase0
#-----------------------------------------------------------------------------
いよいよダムブレイクの計算を行う。
今回は、Allrunファイルにある「runApplication 〇〇」の部分はコメントアウトし、
コマンドを直接入力する。
(もちろん コメントアウトせずに「./Allrun」と打ち込んでもOK)
また、controlDictファイルにあるdeltaT(計算時間間隔)を0.01(s)に変更し、
endTimeは3(s)に変更している。
# mydamBreakディレクトリに移動する
$ cd $FOAM_RUN/mydamBreak
# 0.origをコピーした0ディレクトリの作成など
$ ./Allrun
# メッシュの生成
$ blockMesh
# 気相・液相の初期条件を作る
$ setFields
# 計算実行、たくさんログが出るはず
$ interFoam
# ディレクトリの確認、いい感じかも
$ ls
(一部抜粋)
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.orig Allclean constant system
0.05 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85 0.95 1 Allrun postProcessing
# .foamファイルを作成 (可視化に必要)
$ touch aa.foam
ParaViewで計算結果の可視化を行う。
計算条件などの議論は置いておいて、計算はできてますね。
最後に
今回、MacにOpenFOAMをインストールしてみましたが、意外とすんなりいった?と思いました。しかし、「docker」は若干のハードルかも...。
実は、この記事を執筆する過程で海岸工学分野の研究で用いられる(私も使用していた)OpenFOAMのライブラリをインストールしようと思いましたが、なかなかうまくいかず...別記事でまとめられるといいなと思っています。