OpenFOAM-2.1.0 がリリースされ、AMI(Arbitary Mesh Interface)が使えるようになったとの事で、チュートリアルケース(pimpleDyMFoam/propeller)を調べてみた。
Allrun はすんなり動いた。
- 4並列の計算で、数時間かかって計算は終了。paraviewで可視化すると、ちゃんとプロペラ(船のスックリューか?)が回転している。しかもメッシュはsnappyHexMeshで切っている!
し、しかし・・・
- 並列数や、並列分割方法を変えて計算しようとすると、数ステップ計算した後発散。並列計算のみならず、単体計算をやっても同じ。困った・・・
そこで、あれこれ試行錯誤
- 回転数を変えてみる
- 計算の解法パラメタをいじってみる
- デフォルト(4並列)計算結果の途中結果からリスタートする
- などしてやれば、並列数や方法を変えても動くようになってきた。
- 本ソルバーに限らず、特に並列計算をやっているとよくあることなんだが、正常に計算していて、ある時、突然何の前触れもなく、異常に大きな値が出力され、次のステップで異常終了してしまう場合があり、しかも再現性がある。但し、処理系(計算機)を変えると、そのタイミングでは生じないなど。
- 本ケースはその逆のケースと言ったらよいのか・・・よくわからないが、まぁ、多分、それでもちゃんと計算できてはいるようだ。
並列性能
- コア数を倍にすると、約1.5倍のスピードアップ。自宅のマシンでは4並列までしか性能が出せないが、会社のクラスターでやったら、かなりの数までスケールすることも確認できた。
- 分割方法はhierarchicalか、simpleがベストで、scotchはやや遅い。