[Re:11] Reboot : ゼロから始める OpenFOAM @ windows ザ・円柱 その4(並列計算もやってみた前編)

並列計算方法

どうも計算が予想通り時間がかかるようなので、並列計算も試してみました。

そうは言っても、XSim でプロセッサー数を増やすだけですが、実行するとそうはいきませんでした。

log.pimpleFoam の終盤
[1]

[0]
[2]
FOAM parallel run exiting
FOAM parallel run exiting
FOAM parallel run exiting

[1]
[0]
[2]
job aborted:

[ranks] message
[0] application aborted

aborting MPI_COMM_WORLD (comm=0x44000000), error 1, comm rank 0
[1] application aborted

aborting MPI_COMM_WORLD (comm=0x44000000), error 1, comm rank 1
[2] application aborted

aborting MPI_COMM_WORLD (comm=0x44000000), error 1, comm rank 2
—- error analysis —–
[0-2] on LAPTOP-3P0SOHGT

pimpleFoam aborted the job. abort code 1
—- error analysis —–

log.decomposePar の末尾
–> FOAM FATAL ERROR:

Your current settings specify ASCII writing with 6 digits precision.
Your merging tolerance (1e-006) is finer than this.
Please change your writeFormat to binary or increase the writePrecision
or adjust the merge tolerance (-mergeTol).
From function int main(int, char**)
in file reconstructParMesh.C at line 542.

FOAM exiting

【翻訳】
->FOAMの致命的なエラー:
現在の設定では、6桁の精度でASCII書き込みを指定しています。 マージ許容値(1e-006)はこれよりも細かいです。 writeFormatをバイナリに変更するか、writePrecisionを増やしてください または、マージ許容値を調整します(-mergeTol)。 関数intmain(int、char **)から ファイルreconstructParMesh.Cの542行目。
FOAM修了

結論からいけば、データーの桁が足りないような警告で致命的エラーをpimplefoam がログに吐いていて、そこに、バイナリ出力を試しなさい、のようなことが書いてありました。アスキーで桁増やす、とかはないのか、と思いつつ、とりあえず、単純にバイナリ出力に設定しました。

これに先立って、流速とメッシュの限界も試さないといけないので、流速を3倍の 1 m/s、タイムステップもおまかせにして実行しました。

まずこの条件で、動作確認。動きました。

この後、3コア並列化して実行。

そのときのトラブルが上述の状況です。

相変わらず、アスキーでの解決は先送りして前へ進みます。

3 CPU 並列化の効果

さて、順調に計算も進んでいるようです。チェック用だったので、出力は少ないですが、同じ計算を実施した時間比較は以下の通りです。

 
1 CPU 3 CPU (a) 3 CPU (b)
0-1 20 19 21
1-2 21 15 14
2-3 11 11
3-4 11 11

 

またアップデートするかもしれませんが、1→3 CPU で、15 → 11 分。まぁこんな印象ですね。あ、これ、出力が 5 step 置きだったかもですが、実時間で割ってみないとだめですよね。

並列計算結果の可視化表示

これも気になるところです。というのも、シングルCPU計算とはファイル構成が異なって、各時間結果ファイル群が、振り分けられたコアごとに別フォルダーに保存されているんです。当然、そのことをpara viewが理解してくれなければ、結果は読み込めなさそうです。

これまでのように、中身空っぽの hogehoge.foam を作成して開くと、開きます。形状が表示されます。デフォルトは solid color です。選択のプルダウンメニューを開くと、予想通り物理量は表示されません。やっぱり。

    1. データーを合算する
    2. paraviewにすがる

前者は、openfoamにどうも reconstructPar というツールがついてきているようです、これを使えば、連番ディレクトリのデーターを、うまく合わせて一つにまとめてくれるようです。自分でデーター下流処理をする場合には、入力ファイルがまとまっている方が単純化できます。そういう場合には、端から一つにまとめておくほうが良いでしょう。

後者は、意外と簡単でした。とりあえずいつものように hogehoge.foam でいつものようにデーター群を開きます。その後、プロパティの最初の方にある case type の項目を、Reconstructed case  から Decomposed Case に変更します。そしていつもの apply です。そうするだけでその後はいつものように操作できます。

まとめ

今回は、時間待ちの間に、並列計算の段取りと、その場合の paraview でのデーター読み込み方法を試してみました。で、この後プチトラブルに。それは次回のお楽しみ。