cfMeshはsnappyHexMeshに比べて、メッシュ設定用のパラメタの数が少なく、さほど混みいった形状でない場合には、拙作のFreeCAD用マクロ(makeCfMeshSetting.py)のGUIでほとんど用が足りると思います。
そうでない場合に、その他のオプションパラメタで改善される可能性は有るということですが、そもそも設定パラメタとして何があるのか・・・先日の講習会では、以下のような一覧でまとめました。
cfMeshのマニュアル(cfMesh User Guide)にも記してありますが、これらのうち必須(Mandatory)パラメタは、
- maxCellSize
- surfaceFile
の2つだけです。その他のパラメタはすべてオプションで、指定してもしなくてもOK。上図右半分のレイヤー(boundaryLayers)とパッチの名前変更(renameBoundary)を除外すると、オプションパラメタとしては、以下8つある事になります。
- boundaryCellSize
- miniCellSize
- keepCellsIntersectingBoundary
- checkForGluedMesh(removeGluedMesh?)
- keepCellsIntersectingPatch
- removeCellsIntersectingPatch
- localRefinement
- ojectRefinements
拙作のFreeCAD用マクロ において、青字部分はGUIパネルにて設定変更が可能で、赤字部分はmeshDictにパラメタだけは記述してあり、内容をmeshDictの直接編集で追記可能な構造になっています(先に引用したパラメタ総覧での説明内容と一部異なっていますが、こちらの説明が正しい)。
本来であれば、これらのパラメタの意味をしっかり理解してマクロを作成すべきでしたが、それでもこれだけカバーしておけばそこそこ使えそうだ・・・ということで、期日の制限もあり、中途半端でしたがリリースの運びとなりました。
その後、オプションパラメタの意味を自分なりに実例を使いながら調べていますが、いまだよく判らない点は残ってはいるものの、ある程度は判ってきたので、以下にその調査結果を記しておくことにしたのと、改良版マクロ(meshDictに記述するパラメタリストに洩れが無いようにしたもの)を(近日中に)公開することとしました。
checkForGluedMesh(removeGluedMesh?)
cfMesh User Guide の10ページ目をキャプチャーしたのが上の図で、本文中にはcheckForGluedMeshとありますが、添付図(Figure 14)ではremoveGluedMeshとなっています。どっちが正しいのか? ってことです。
拙作マクロでは、removeGluedMeshを出力するようにしていましたが、どうやら間違いで、checkForGluedMeshが正しいようです(その効能は後述)。
実は、スペルミスなど間違った名前で記しても無視されるだけで、構文(カッコの位置など)さえ間違っていなければプログラム実行には支障を来たさないという、ロバスト(?)なつくりになっていることも判りました。
keepCellsIntersectingBoundary/checkForGluedMesh
上に引用したcfMesh User Guideを見ても判るように、これらは対で使います。つまり、keepCellsIntersectingBoundaryが有効(=1)の場合に、checkForGluedMeshが意味を持ち、(無効=0)の場合には、無視されるということです。
なお、これらはglobal option ということで、メッシュ全体に適用されるパラメタであり、類似の
keepCellsIntersectingPatch/removeCellsIntersectingPatch
は、同様の指定を個別のpatchで使ってもよいということです。
問題は、これらがどうやって作用するかってことですが、ようやく判りやすい具体事例をbackStepモデル(後流領域の高さのサイズは3)で作成できたので、以下に示します。
ベースのメッシュサイズ(maxCellSize)と境界面の関係が下図のようになっていて、
ベースメッシュと境界が交叉する要素(cellsIntersectingBoundary)をkeep(メッシュ作成)するかどうかってことです。模式的に描くと出来上がりメッシュが下図の格子のようになるってことです。
もちろん、実際にはこの模式図のような等間隔にはならなくて、backStepモデルで示すように、maxCellSizeを目安とした不等間隔メッシュになります。
checkForGluedMeshの効能については、maxCellSizeによって、現れる場合(backStepモデルでmaxCellSize=0.3の場合)と、現れない場合(maxCellSize=0.4の場合)もあるってことでした。
要は、keepCellsIntersectingBoundaryを1にしてメッシュ作成すると、maxCellSizeより必然的に小さなメッシュが出来て、それらは境界面にしわ寄せされることになる。そういうGlued(くっついて離れない)メッシュを取り除くかどうかってことのようです。
なお、蛇足になりますが、上述の機能、また個別のpatchで使用する際のパラメタの名前removeCellsIntersectingPatch との対比においても、removeGluedMeshであってくれた方が判りやすかったと思います。
もうちょっと実用的なサンプル
これは過去記事にある有料セミナーで実施したもので、
その時はsnappyHexMeshでメッシュ作成したのに対し、今回はcfMeshで作成しようとトライしています。
まず、空気領域のメッシュは、普通に拙作マクロを使って、以下設定。
いとも簡単にメッシュが出来ました。
問題は、固体領域です。空気領域の設定(finのcellSize 0.3)に合わせて、以下のように設定すると・・・
残念ながら、こうなってしまいます。フィンの厚さが薄いので仕方ないってことでしょうが・・・
keepCellsIntersectingBoundaryを1にしてやれば・・・
となって、お見事! めでたし、めでたしでした。
まとめ
cfMeshのオプションパラメタのうち、
- keepCellsIntersectingBoundary
- checkForGluedMesh(removeGluedMesh?)
- keepCellsIntersectingPatch
- removeCellsIntersectingPatch
について、本記事にて説明させていただきました。
- localRefinement
- boundaryCellSize
- ojectRefinements
については、説明するまでない、ほぼ自明ですね。
- miniCellSize
については、ある程度判ると思いますが、まだ良くわからない点があります⇒(公開掲示版情報を参照下さい)。現在調査中です。
その他Tips
マルチコアの環境で計算すると、CPUの負荷状況に応じてマルチスレッド処理がダイナミックに変化するためか、同一パラメタを指定してあっても、計算結果が変化する場合が多々あるようです。簡単なモデルではそうでもないですが、DEXCSの標準チュートリアル問題ではよくあることでした。
また上述したように、間違ったパラメタを指定してもエラーにはなってくれないので、パラメタを変えて実行した際に、パラメタ変更の結果なのか、マルチスレッド処理の結果変化なのか、区別できなくなってしまいまうことがあるので要注意です。
パラメタスタディをする際に、これらの事象を念頭において実施する必要があったということで、これに気づくまでかなりの回り道をしてしまいました。
とはいえ、今時シングルコアのマシンもないでしょうから、ちゃんとパラメタスタディする際には、仮想環境でシングルコアの設定にして実施するのがお勧めです。