OpenFOAMで並列計算を実行する
OpenFOAMは、解析を並列化して実行することができます。
早速試してみました。
解析を並列化して実行するための流れは、以下のようになります。
(1)設定ファイルをつくる。
(2)設定ファイルを読み込んで、並列計算の準備をする。
(3)LAMデーモンを起動する。
(4) mpirunを実行する。
(5)計算終了後、LAMデーモンを終了する。
以下では、それぞれの項目について具体的にみていくことにします。
ここでは、$FOAM_RUN/tutorials/icoFoamの中にあるcavityの解析を並列化することにします。
また、以下では
<root>は$FOAM_RUN/tutorials/icoFoam
を
<case>はcavity
を意味します。
(1)設定ファイルをつくる。
decomposeDictとmachinesの2つのファイルを準備します。
decomposeDict
このファイルは、解析領域をどのようにCPU(プロセス)に割り振るかを指定するためのファイルです。
作成したファイルは、
テンプレートとなるファイルが$FOAM_RUN/tutorials/interFoam/damBreak/systemのなかにあります。
今回はこれをコピーして利用します。
numberOfSubdomainsで、解析をいくつに分割して行うかを指定します。
processorWeightsで、それぞれのCPU(プロセス)にどのくらい負荷を要求するかを指定します。
今回は、numberOfSunbdomainsを4、それぞれのプロセスの負荷を1に指定します。
(つまり、変更なしです。)
machines
次に、並列計算に使えるホスト名とCPUの数を指定したファイル(ここでは、machines)をつくります。
例を示します。
例1)ローカルホストのみで計算、CPUが4つの場合
localhost cpu=4
例2)host1とhost2という2台のコンピュータで、それぞれCPUが2つの場合
host1 cpu=2
host2 cpu=2
(今回は、例1に示したほうを利用しました。)
(2)設定ファイルを読み込んで、並列計算の準備をする。
並列計算を実行するために、以下のコマンドを実行して並列計算の準備をします。
decomposePar <root> <case>
(3)LAMデーモンを起動する。
lamboot -v <machines>
(LAMとはLocal Area Multicomputerの略だそうですが、詳しいことはわかりません。並列計算を簡単にできるように助けてくれるプログラム?ていどに考えています(笑)。より詳しい情報が知りたい方は、こちらをどうぞ。)
(4) mpirunを実行する。
mpirun -np 4 icoFoam <root> <case> -parallel
(5)計算終了後、LAMデーモンを終了する。
lamhalt -d
以上の流れをおさえれば、他の解析や環境でも簡単に並列計算が実行できるとおもいます(たぶん)(笑)。