はじめに
MacでFSIをしたい!ということで、その方法をまとめたものです(未完、随時更新中)。
なお、先の記事をベースに執筆していますので重複している箇所が先の記事と多々ありますこと、ご承知おきください。
なお、OpenFOAMはFoundation版、ESI版の両方が使いたいということで、Foundation版をベースにDocker Imageのカスタマイズを行うという、回りくどいことをやっております。
FSIだけに注力するのであれば、ESI版のイメージをもってきた方が良いです。
OFv9のMacへのインストールの詳細はこちらのQiitaページやこちらのcfdengineのページも参考になると思います。
Dockerのインストール
Dockerサイトから,Docker Desktopをダウンロード,インストールします。ここでは特筆事項はありません・・・(楽でいいですよね)。
インストールが終了しましたら,Docker Desktopを起動します。こんな感じで右上にクジラマークが現れます。
OpenFOAMv9のインストール
FoundationにあるFoundationに従ってインストールします。openfoam
というディレクトリを作成し,その中で,以下のコマンドを打ち込みます。
sudo curl --create-dirs -o /usr/local/bin/openfoam9-macos http://dl.openfoam.org/docker/openfoam9-macos
sudo chmod 755 /usr/local/bin/openfoam9-macos
OpenFOAMコンテナ
openfoam
のディレクトリ内で以下のコマンド(スクリプト)を実行することにより,OpenFOAMの環境が立ち上がります。
openfoam9-macos
これでblockMeshやsolversが使えるようになっています。
イメージのカスタマイズ方法
まず,イメージのIDを確認します。
docker images
この__Image ID__をメモしておきます。その後,rootでImageを立ち上げます。
docker run -it -u=root <Image ID>
スクリプトで立ち上げた場合は,aptなどでアプリをインストールしても,記録されません。が,rootで起動した場合はカスタマイズや各種設定変更はコンテナに記録されます。この状態で自分の所望のアプリをインストールします。
FSIを行うのに必要なアプリ・パッケージは後述します。
その後,コンテナを停止(ログアウト),__Container ID__を確認します。
docker ps -a
変更を加えたコンテナをイメージにcommitさせます。
docker commit <container ID> <Repository>
Repository
ですがデフォルト設定を活かし,openfoam/openfoam8-graphical-app
としておくのが良いです。ここでRepository
を自分の好きな名に変えることも可能ですが,その際は起動スクリプト/usr/local/bin/openfoam8-macos
内のDOCKER_IMAGESを修正する必要があります。
たとえば,Repositoryをopenfoam8としたいのであれば,
docker commit <container ID> openfoam8
DOCKER_IMAGE='openfoam8'
とします。
FSIの追加パッケージリスト
個人的には,lv
, gmsh
,git
, htop
, python3.8
, ffmpeg
, cmake
, gfortran
, python3-pip(numpy, pandas, torch, tensorflow, scikit-learn, Pillow, matplotlib)
1, などがあると良いと思います。
そのうえで、FSIを行うためのパッケージは、
それでは個別にインストール方法を見ていきます。
calclulix
Ubuntuのパッケージライブラリに登録されていますので、aptをするだけでインストールできます。
apt install caculix-cgx calculix-cxx
apt install libarpack2-dev libspooles-dev libyaml-cpp-dev
なお、rootでDockerイメージを立ち上げた際は、sudo
は不要です。
calculixの結果ファイルfrdをvtk形式に変換する場合は、
apt install mono-complete
をインストールしたのち、
mcs -out:frdToVTKConverter.exe frdToVTKConverter.cs
でコンバーターを作成します。実際にデータ変換する場合は、
mono frdToVTKConverter.exe /path/to/frdFile.frd
とすればvtkファイルが得られます。
preCICE
preciceのインストールはQuickstartが参考になります。
wget https://github.com/precice/precice/releases/download/v2.3.0/libprecice2_2.3.0_focal.deb
apt install ./libprecice2_2.3.0_focal.deb
openfoam-adapter
preciceのOFアダプターのコンパイルに必要なパッケージをまずはインストールします。
apt install build-essential pkg-config cmake git
ESI版OFの環境にしたうえで、
git clone --branch=master --depth 1 https://github.com/precice/openfoam-adapter
cd openfoam-adapter
./Allwmake
これでadapterが出来上がります。
quickstart tutorial
OpenFOAM / preciceの連携がとれているかの確認のチュートリアルを動かしてみます。
具体的には、c++で作成されたrigid body solverとOpenFOAMとの連携を行います。
まずはチュートリアルファイルをダウンロードします。
git clone --branch=master --depth 1 https://github.com/precice/tutorials.git
cd tutorials/quickstart
次いで、c++のrigid body solverをコンパイルします。
cd solid-cpp
cmake . && make
あとは実際に実行するだけですが、FSI実行には2つのターミナルを立ち上げる必要があります5。
片方のターミナルで
cd solid-cpp
run.sh
としたうえで、他方のターミナルで
cd fluid-openfoam
run.sh
とするとカップリング計算が開始されます。
計算結果をParaviewで可視化すると、
のような結果がえられます。
最後に
OpenFOAMのDockerイメージのカスタマイズし、FSIができるような環境構築の方法をまとめてみました。
かならい回りくどいやり方をしております。簡単な方法がありましたら、お教えいただければと思います。