ソルバーの実行2020年12月23日 | |
はじめにソルバーの実行について。 使用バージョンOpenFOAM v2006、v8 ソルバーの実行ソルバーの実行は、たとえば simpleFoam を実行する場合は、ケースディレクトリの中でつぎのようにする。 $ simpleFoam 計算中の出力はとっておくと便利なことがあるため、つぎのように出力をファイルに書き出したほうがよい。 $ simpleFoam > log & 計算中の出力を継続的に表示させるには、tail を使う。 $ tail -f log 表示を止めるには Ctrl+C を入力する。 つぎのようにすれば、計算の進み具合がわかる。 $ tail -f log | grep Time 並列計算の実行並列計算を実行するには、まず領域を分割する必要がある。領域を分割するには decomposePar を使う。設定ファイルとして system/decomposeParDict を用意する。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object decomposeParDict;
}
numberOfSubdomains 2;
method scotch;
//method simple;
simpleCoeffs
{
n (2 1 1);
delta 0.001;
}
numberOfSubdomains で領域分割数、つまり並列数を指定する。method は領域分割方法で、"scotch" を指定しておけば適当に分割してくれる。OpenCFD 版だと "kahip" という同様のものも使える (コンパイルされていれば)。ただし、領域分割のせいで計算が発散することもありえる。scotch などに問題がありそうな場合は、代わりに "simple" を使うとよい。simple は simpleCoeffs の n で XYZ 方向それぞれの分割数を指定する。上の例の "(2 1 1)" では、X 方向に単純に 2 分割する。 decomposePar はつぎのように実行する。 $ decomposePar ケースフォルダ内に "processor0"、"processor1" … といったファイルが分割数分でき、それぞれに分割された領域の情報が含まれる。すでに "processor0" などのディレクトリが存在する場合は、前もって消しておく必要がある。 並列計算を実行するには、Open MPI を使う。つぎのように実行する。 $ mpirun -np 2 simpleFoam -parallel > log & オプション "-np" で並列数を指定する。"-parallel" というオプションは OpenFOAM のソルバーのオプションで、並列で実行していることを伝えるものである。 計算結果は分割された領域のそれぞれのディレクトリに格納される。これをひとつに結合するには reconstructPar を用いる。 $ reconstructPar これはすべての時刻の結果を結合しようとするが、最後の結果だけでよい場合はオプション "-latestTime" を指定する。また、一度結果を結合したあとに並列計算を実行し、再度結合したい場合は、オプション "-newTimes" を指定すれば、新しい結果だけを結合してくれる。 foamJob によるソルバーの実行直接ソルバーを実行する代わりに foamJob で実行する方法がある。 $ foamJob simpleFoam 自動的にソルバーの出力が log ファイルに書き出され、バックグラウンドで実行される。フォアグラウンドで実行するにはオプション "-screen" を使う。 $ foamJob -screen simpleFoam 並列計算を実行するには、オプション "-parallel" を指定すればよい。 $ foamJob -parallel simpleFoam decomposePar を実行しておく必要があるが、並列数を指定する必要はない。 計算を止めるには foamEndJob を使う。
$ foamJob simpleFoam
$ ps
PID TTY TIME CMD
14460 pts/1 00:00:00 bash
15193 pts/1 00:00:01 simpleFoam
15197 pts/1 00:00:00 ps
$ foamEndJob -n 15193
foamEndJob : Read from controlDict:
controlDict : ./system/controlDict
writeInterval : 50
stopAt : endTime
foamEndJob : Making backup of controlDict to controlDict_bak
foamEndJob : Changed in controlDict:
stopAt nextWrite;
writeInterval 1;
foamEndJob : Waiting for Foam job 15193 to finish ...
foamEndJob : Restoring controlDict from controlDict_bak
foamEndJob : Exiting
foamEndJob にプロセス ID を指定して実行すると、計算結果を保存してからソルバーを止める。オプションの "-n" ではつぎの時間ステップで停止する。オプションなしではつぎの計算結果の出力の時点で停止する。 | |
| PENGUINITIS | |