オープンCAEの流体解析システムと言えばOpenFOAMに注目が集まっていますが、用途を限定すれば他にも色々なシステムが公開されています。そこでプログラムも入力データもとてもコンパクトな流体解析システムReef3Dの導入と検証を説明します。
Reef3D:特徴としては、レベルセット法を採用し、自由表面流れ計算に強みがあり、直交格子を使用し、境界の取り扱いはGCIBMで、並列計算にも対応し、補間にはWENOも使える、とのことです。
■Ubuntu14.04LTSの準備
日本語版Ubuntuの公式サイト https://www.ubuntulinux.jp/download/ja-remix から、「ubuntu-ja-14.10-desktop-amd64-20141124.iso(ISOイメージ)」を入手します。
ダウンロードしたインストールファイル「ubuntu-ja-14.10-desktop-amd64-20141124.iso」を用いて、64bitシステムとして、Ubuntu14.04LTSを構築します。
ここでは仮想マシン構築ではなく、ノートPC(RAM:8GB HDD:800GB, CPU:Corei7-2640M)に、インストールDVDを作って指示通り作業を行いました。
最初の構築作業をがインストーラーの指示通り(ヂュアルブートもせず、特別な設定もせずに)に完了して、再起動したあとでログインしたら、以下の準備を行っておきます。
・システム設定→詳細→更新をインストール→ソフトウエアの更新を実行して、ソフトウエアを最新の状態にしてください。
・システム設定→画面の明るさとロック→次の時間アイドル状態が…の設定を1時間に伸ばし、ロックするをオフ、サスペンドからの復帰…のチェックを外しておきます。
・システム設定→外観→挙動→ワークスペースを有効にするをチェック入れで、4つのワークスペースを使えるようにしておきます。
・左端のランチャー最上位の検索ツールより、端末・システムモニターを起動させ、ランチャーに登録して常に使えるようにしておく。
なお、仮想マシン構築の場合は、十分なリソース(RAM:十分な量最低2GB以上、HDD:最低20GN、CPU-Core:並列計算するので2以上)を割り当ててください。
システム構築に関する準備として、コンパイラなどのツールを導入しておきます。ここではパッケージを用いて apt-get を用いて簡単に導入しておきます。
端末を開いて、sudo apt-get update して、パッケージ情報を更新しておきます。その後で、以下のツールを、sudo apt-get install で導入します。
・g++, gfortran:基本となるコンパイラー(ちなみにコマンドは、sudo apt-get insall g++ gfortran のようにしてください)
・openmpi-bin, libopenmpi-dev:並列処理を実行するためのMPI環境の実装として、OpenMPIを用います。(mpirun,mpicxxで動作確認できます)
・paraview:解析結果の可視化ツールを導入します。(起動してランチャーに登録しておきます)
■Reef3Dのシステムの構築
以下の操作は、全ての端末の中で行います。なおUbuntuの初期状態では、ホームディレクトリにあるディレクトリ名が日本語のものがあり、ln -s を用いて英語名のリンクを作っておくと便利です。
Reef3Dの公式サイトのダウンロードページ http://reef3d.wordpress.com/source-code/ より、以下のファイルを入手します。
・REEF3D-UserGuide.pdf:流体解析ツールReef3Dのユーザーガイド
・REEF3D_14.11.zip:Reef3Dのツールのソースプログラム
・Tutorial_REEF3D_14.11.zip:Reef3Dの例題の入力ファイル
・DIVEMesh-UserGuide.pdf:メッシュ生成ツールDIVEMeshのユーザーガイド
・DIVEMesh_14.11.zip:DIVEMeshのツールのソースプログラム
Reef3Dの作業用ディレクトリReef3dWorkをホームディレクトリに作り、この中に入手した3つのファイルを移動します。次に利用するファイル群を圧縮した zip ファイル3つを展開します。
$ cd ~; mkdir Reef3dWork
$ cp ~/Download/* ~/Reef3dWork
$ cd Reef3dWork
$ unzip REEF3D_14.11.zip; unzip DIVEMesh_14.11.zip(展開した結果で、REEF3D_14.11とDIVEMesh_14.11のディレクトリが作られます)
$ unzip Tutorial_REEF3D_14.11.zip -d Tutorial(指定した展開先Tutorialの中に5つの例題が保存されます)
まずメッシュ生成ツールDIVEMeshをコンパイルします。
$ cd ~/Reef3dWork/DIVEMesh_14.11
$ make(何も設定せずに、make一発でコンパイルが進みます。最後に長いmpicxxのコマンドラインが実行されて、エラーが出なければ完成です)
$ ls bin(これで、DiveMESHが表示されたらコンパイルが成功です。)
次に流体解析ツールReef3Dをコンパイルします。
$ cd ~/Reef3dWrok/REEF3D_14.11
$ make(何も設定せずに、make一発でコンパイルが進みます。最後に長いmpicxxのコマンドラインが実行されて、エラーが出なければ完成です)
$ ls bin(これで、reef3dが表示されたらコンパイルが成功です。)
コンパイルしたツールをシステムとして利用できるように移動して、コマンドパスを設定します。
$ sudo mkdir /opt/Reef3D
$ cd ~/Reef3dWork
$ sudo cp REEF3D_14.11/bin/reef3d /opt/Reef3D
$ sudo cp DIVEMesh_14.11/bin/DIveMESH /opt/Reef3D/divemesh(ツールの名称を単純にdivemeshとします)
$ ls /opt/Reef3D(これでコピーを確認します)
$ cd ~
$ vi .bashrc(以下の内容をファイルの最後に追加します)
export PATH=/opt/Reef3d:$PATH
$ source ~/.bashrc(これでどこからでもreef3d,divemeshが実行できるようになり、このsource実行は再ログイン後は不要です)
■Reef3Dの例題の動作検証
先ほど展開した例題:チュートリアルを用いて、動作検証を行います。Reef3Dの特徴は、システムがシンプルだけでなく、入力ファイルをとても簡単で理解し易いと思います。
流れの様子が立体的に見える2番の例題「6_2 Narrow Contraction」を用いて説明します。ちなみに、他の4つの例題も同様に解析可能です。
cd ~/Reef3D/Tutorial/6_2 Narrow Contraction(なおLinuxでファイル名にスペースがあるときは、そのまえに¥を入力してください。)
ディレクトリの中には、以下の2つのファイルしかありません。これなら解析条件の設定がすくに分かりそうです。なおこれらの例題は全て4CPU-Coreによる並列計算を前提としています。
control.txt:メッシュ生成ツールDIVEMeshの入力データ
ctrl.txt:流体解析ツールReef3Dの入力データ
すでに2つのツールには実行パスが通してあるので、すぐに実行できます。まず流体解析の解析空間のメッシュなどの空間的な情報を、contro.txtより生成します。
$ divemesh(/opt/Reef3Dのコピーするときの名前です)
これだけで、grid-000001.dat…grid-000004.datの4つの解析空間の入力データとflag_indicate.txtがつくられます。この4つのgridファイルが4並列処理に対応しています。
準備が出来たので、並列処理で流体解析ツールReef3Dを実行します。並列実行ツールmpirunを用いて、以下のように行います。入力ファイルctrl.txt.は設定不要です。
$ mpirun -np 4 reef3d(入力ファイルは固定でctrl.txtになっているようです)
これで、流体解析が実行されます。起動した端末にはステップ毎の情報が、流れるように表示されます。システムモニターを見ると4並列で実行していることが分かります。
計算はずっと続くので、数分待ったら、起動した端末で ctrl+cで計算を中断させます。解析結果は、REEF3Dが先頭についた7つのディレクトリに保存されています。
結果を可視化ツールParaViewで確認します。ランチャーに登録しておいたParaViewを起動します。可視化に使うデータはREEF3D_VTUのディレクトリにあるVTUデータです。
ParaViewのOpenFIleより、~/Reef3dWork/Tutorial/6_2 Narrow Contraction/REEF3D_VTUのファルダを開いて、REEF3D-..pvtuを選択して、OKで開きます。
解析結果を読み込んだら、Applyを押して、表示内容をvelocity:速度にして、ステップを進行させると、速度の変化が確認できます。
Reef3D:特徴としては、レベルセット法を採用し、自由表面流れ計算に強みがあり、直交格子を使用し、境界の取り扱いはGCIBMで、並列計算にも対応し、補間にはWENOも使える、とのことです。
■Ubuntu14.04LTSの準備
日本語版Ubuntuの公式サイト https://www.ubuntulinux.jp/download/ja-remix から、「ubuntu-ja-14.10-desktop-amd64-20141124.iso(ISOイメージ)」を入手します。
ダウンロードしたインストールファイル「ubuntu-ja-14.10-desktop-amd64-20141124.iso」を用いて、64bitシステムとして、Ubuntu14.04LTSを構築します。
ここでは仮想マシン構築ではなく、ノートPC(RAM:8GB HDD:800GB, CPU:Corei7-2640M)に、インストールDVDを作って指示通り作業を行いました。
最初の構築作業をがインストーラーの指示通り(ヂュアルブートもせず、特別な設定もせずに)に完了して、再起動したあとでログインしたら、以下の準備を行っておきます。
・システム設定→詳細→更新をインストール→ソフトウエアの更新を実行して、ソフトウエアを最新の状態にしてください。
・システム設定→画面の明るさとロック→次の時間アイドル状態が…の設定を1時間に伸ばし、ロックするをオフ、サスペンドからの復帰…のチェックを外しておきます。
・システム設定→外観→挙動→ワークスペースを有効にするをチェック入れで、4つのワークスペースを使えるようにしておきます。
・左端のランチャー最上位の検索ツールより、端末・システムモニターを起動させ、ランチャーに登録して常に使えるようにしておく。
なお、仮想マシン構築の場合は、十分なリソース(RAM:十分な量最低2GB以上、HDD:最低20GN、CPU-Core:並列計算するので2以上)を割り当ててください。
システム構築に関する準備として、コンパイラなどのツールを導入しておきます。ここではパッケージを用いて apt-get を用いて簡単に導入しておきます。
端末を開いて、sudo apt-get update して、パッケージ情報を更新しておきます。その後で、以下のツールを、sudo apt-get install で導入します。
・g++, gfortran:基本となるコンパイラー(ちなみにコマンドは、sudo apt-get insall g++ gfortran のようにしてください)
・openmpi-bin, libopenmpi-dev:並列処理を実行するためのMPI環境の実装として、OpenMPIを用います。(mpirun,mpicxxで動作確認できます)
・paraview:解析結果の可視化ツールを導入します。(起動してランチャーに登録しておきます)
■Reef3Dのシステムの構築
以下の操作は、全ての端末の中で行います。なおUbuntuの初期状態では、ホームディレクトリにあるディレクトリ名が日本語のものがあり、ln -s を用いて英語名のリンクを作っておくと便利です。
Reef3Dの公式サイトのダウンロードページ http://reef3d.wordpress.com/source-code/ より、以下のファイルを入手します。
・REEF3D-UserGuide.pdf:流体解析ツールReef3Dのユーザーガイド
・REEF3D_14.11.zip:Reef3Dのツールのソースプログラム
・Tutorial_REEF3D_14.11.zip:Reef3Dの例題の入力ファイル
・DIVEMesh-UserGuide.pdf:メッシュ生成ツールDIVEMeshのユーザーガイド
・DIVEMesh_14.11.zip:DIVEMeshのツールのソースプログラム
Reef3Dの作業用ディレクトリReef3dWorkをホームディレクトリに作り、この中に入手した3つのファイルを移動します。次に利用するファイル群を圧縮した zip ファイル3つを展開します。
$ cd ~; mkdir Reef3dWork
$ cp ~/Download/* ~/Reef3dWork
$ cd Reef3dWork
$ unzip REEF3D_14.11.zip; unzip DIVEMesh_14.11.zip(展開した結果で、REEF3D_14.11とDIVEMesh_14.11のディレクトリが作られます)
$ unzip Tutorial_REEF3D_14.11.zip -d Tutorial(指定した展開先Tutorialの中に5つの例題が保存されます)
まずメッシュ生成ツールDIVEMeshをコンパイルします。
$ cd ~/Reef3dWork/DIVEMesh_14.11
$ make(何も設定せずに、make一発でコンパイルが進みます。最後に長いmpicxxのコマンドラインが実行されて、エラーが出なければ完成です)
$ ls bin(これで、DiveMESHが表示されたらコンパイルが成功です。)
次に流体解析ツールReef3Dをコンパイルします。
$ cd ~/Reef3dWrok/REEF3D_14.11
$ make(何も設定せずに、make一発でコンパイルが進みます。最後に長いmpicxxのコマンドラインが実行されて、エラーが出なければ完成です)
$ ls bin(これで、reef3dが表示されたらコンパイルが成功です。)
コンパイルしたツールをシステムとして利用できるように移動して、コマンドパスを設定します。
$ sudo mkdir /opt/Reef3D
$ cd ~/Reef3dWork
$ sudo cp REEF3D_14.11/bin/reef3d /opt/Reef3D
$ sudo cp DIVEMesh_14.11/bin/DIveMESH /opt/Reef3D/divemesh(ツールの名称を単純にdivemeshとします)
$ ls /opt/Reef3D(これでコピーを確認します)
$ cd ~
$ vi .bashrc(以下の内容をファイルの最後に追加します)
export PATH=/opt/Reef3d:$PATH
$ source ~/.bashrc(これでどこからでもreef3d,divemeshが実行できるようになり、このsource実行は再ログイン後は不要です)
■Reef3Dの例題の動作検証
先ほど展開した例題:チュートリアルを用いて、動作検証を行います。Reef3Dの特徴は、システムがシンプルだけでなく、入力ファイルをとても簡単で理解し易いと思います。
流れの様子が立体的に見える2番の例題「6_2 Narrow Contraction」を用いて説明します。ちなみに、他の4つの例題も同様に解析可能です。
cd ~/Reef3D/Tutorial/6_2 Narrow Contraction(なおLinuxでファイル名にスペースがあるときは、そのまえに¥を入力してください。)
ディレクトリの中には、以下の2つのファイルしかありません。これなら解析条件の設定がすくに分かりそうです。なおこれらの例題は全て4CPU-Coreによる並列計算を前提としています。
control.txt:メッシュ生成ツールDIVEMeshの入力データ
ctrl.txt:流体解析ツールReef3Dの入力データ
すでに2つのツールには実行パスが通してあるので、すぐに実行できます。まず流体解析の解析空間のメッシュなどの空間的な情報を、contro.txtより生成します。
$ divemesh(/opt/Reef3Dのコピーするときの名前です)
これだけで、grid-000001.dat…grid-000004.datの4つの解析空間の入力データとflag_indicate.txtがつくられます。この4つのgridファイルが4並列処理に対応しています。
準備が出来たので、並列処理で流体解析ツールReef3Dを実行します。並列実行ツールmpirunを用いて、以下のように行います。入力ファイルctrl.txt.は設定不要です。
$ mpirun -np 4 reef3d(入力ファイルは固定でctrl.txtになっているようです)
これで、流体解析が実行されます。起動した端末にはステップ毎の情報が、流れるように表示されます。システムモニターを見ると4並列で実行していることが分かります。
計算はずっと続くので、数分待ったら、起動した端末で ctrl+cで計算を中断させます。解析結果は、REEF3Dが先頭についた7つのディレクトリに保存されています。
結果を可視化ツールParaViewで確認します。ランチャーに登録しておいたParaViewを起動します。可視化に使うデータはREEF3D_VTUのディレクトリにあるVTUデータです。
ParaViewのOpenFIleより、~/Reef3dWork/Tutorial/6_2 Narrow Contraction/REEF3D_VTUのファルダを開いて、REEF3D-..pvtuを選択して、OKで開きます。
解析結果を読み込んだら、Applyを押して、表示内容をvelocity:速度にして、ステップを進行させると、速度の変化が確認できます。