snappyHexMesh(2.2.x vs 2.3.x)

最新版のOpenFOAM(2.3.x)の標準チュートリアルの全ケースを実行した結果の中から、計算時間が前ヴァージョン(2.2.x)と大きく違ったケースについて検証した結果の第2弾です。

OpenFOAM-2.3.0のリリースノートの筆頭にsnappyHexMeshに関する改良点の記述があったのと、実際にpropellerチュートリアル(incompressive/pimpleDyMFoam/propeller)にて明らかな速度向上(下図参照)が見られたので併せて他のケースも調べてみたのですが・・・結論から先に書いてしまうと、期待はずれ・・・チュートリアルケースのレベルでアナウンスされた効能を確認することは出来ませんでした。

計算時間の比較

 

propellerチュートリアル以外、Dict内容はほとんど同一

propellerチュートリアル以外では目立った速度変化もなかったので、逆に言えば上に見られた速度向上は、snappyhexMeshDict内容の変化に依存した可能性があり、まずはそれを調べた。

範囲を選択_391

snappyhexMeshDict内容の実質的な変化点は上に示した2箇所であり、nFeatureSnapIterの回数が少なくなっている点と、implicitFeatureSnapがtrueになっている点。

そこで、これらのパラメタを変えてメッシュ作成をやり直して、計算時間だけでなくメッシュ品質も併せて結果を比較してみた(下表)。

範囲を選択_393

ここに横方向は、

  • case1 — 2.2.x標準チュートリアル
  • case2 — 2.3.x標準チュートリアル
  • case3 — 2.2.xのsnappyHexMeshDictを用いて2.3.xで実行
  • case3 — 2.3.x標準チュートリアルにてnFSI(nFeatureSnapIter)の値のみ変更
  • case5 — 2.3.xのDictを用いて2.2.xで実行

であり、縦方向にはcheckMeshを実行して得られる諸結果を抜粋した。

case1とcase2の標準チュートリアルの比較において、最下行のメッシュ作成時間(2回実行してバラツキも調べた)が短くなったのみならず、(max aspect ratio はやや悪化したものの)メッシュのnon-orthogonalityやmax-skewnessの値においても改善が見られたので、当初の期待は大きかったのですが・・・

細かな数字の違いはあって、その有意差をどう見るかという点はありますが、case1とcase2の変化点(特に赤字部分)に比べると、case1とcase3、case2とcase5の違いはほとんど無い・・・といって良いんじゃないでしょうか。また、case4においても、計算時間の主要因はnFeatureSnapIterであったと言ってよさそうです。

つまり、propellerチュートリアルの性能変化は、snappyHexDictの設定内容が変化したことによるもので、メッシャー(snappyHexMesh)の性能変化によるものではなかったということです。2.3.xを使わなくとも、Dictパラメタさえ変更してやれば、2.2.xでほぼ同等のメッシュが得られたということです。

implicitFeatureSnap

なお、implicitFeatureSnapの有無(true/false)に関して、数字面での差異ははっきりしませんでしたが、メッシュの見栄えは、明らかに違いがありました(下図)。

範囲を選択_394

但し、このパラメタに関しては2.3.xで使えるようになったということではなく、これまであまり意識して使い分けしていなかったもので、今回の調査で、trueにして使ったほうが良さそうだと、認識を改めたということです。

その他のケース

snappyHexMeshに関しては、propellerチュートリアル以外にも6つのケースがあるので、この際、これらに関しても調べてみた。結果をざっくりとまとめると以下のような表になった。

範囲を選択_395

総じて、

  • メッシュ品質はやや向上(変わらないものもある)。
  • メッシュ作成時間はやや増加(わずかに減少したものもある)。

と解釈しているが、これだけではあまりに主観的なので、数値データも以下に掲載しておく。図表中、朱字で記した部分が2.2.xと2.3.xとの比較において優れている箇所。また、2.3.x’とあるのは、2.2.xのsnappyHexMeshDictを用いて2.3.xで実行した結果である。

範囲を選択_396

範囲を選択_397

範囲を選択_398

範囲を選択_399

範囲を選択_400

範囲を選択_401

その他の所見

  • snappyHexMeshDictの記述方式として、#include形式記述が使用されるようになった。

上のまとめ表で、Dictの差異が「僅差」となっているチュートリアルケースで使用されており、meshQuarityControlのブロックに対して、以下のようにして、必要部分のみを書き換えれば済むようになっている。ケース間のパラメタの違いも見つけやすくなるので、だんだんこうなっていくんだろうなの感。

範囲を選択_402

  • featureデータ形式が拡張された(extendedFeatureEdgeMesh)が、その効能は不明 ⇒ frange チュートリアル

最後に

調査に費やした時間の割に得られたものは少なかった。そういう事例でも公開するとなると更なる時間を費やす必要もあり、公開して得られるものを考えると滅入ってくる面が大いにあって、広島の勉強会(4/19)で発表して以来2週間以上たって、遅ればせの公開となった次第です。

 

Share

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください