motoBikeチュートリアルをcfMeshで実施する方法

先日の勉強会にて発表した表題の資料は、それなりに反響があったようで、アップロード先のslideshareさんからは、初めて下のような「Hot on Facebook」のお知らせを頂きました(こんなものがあるということも初めて知りました)。

範囲を選択_999(194)

 

ここでは、当日およびその後に頂いたコメントに対して検証計算した結果について報告しておきます。

検証内容は、大きく以下の2点です。

ひとつは、当日にakiyamaさんからいただいた、重複面があるモデルであっても、fmsファイルでなく、stlファイルをそのまま使えば出来るんではないか?

そこで…

  • stlファイルを使ってみた(その1)
  • stlファイルを使ってみた(その2)

もう一つは、Twitter上でいただいた下記のコメントです。

範囲を選択_999(195)

但し、このコメントの前半(格子が歪む原因)については、開発者に聞いて下さいとしか答えようがありません。また最後のmeshQuarity制限も何処をいじるのか、あまり思いつくものもないので、ここでは「分割レベル」についての検証で、

  • snappyの細分化レベルを変えてみた
  • cfMeshの細分化方案を変えてみた

結果について、以下記しておきます。

 

 

stlファイルを使ってみた(その1)

FreeCADでエクスポートしたstlをそのまま使う事は、以下の図に示した手順で簡単にできます。

範囲を選択_999(226)

ただこの方法ではFeatureEdges(輪郭線)情報を使わないので、上図、左側のfmsファイルを使った場合と比べると、輪郭線が鈍ってしまいます。

 

stlファイルを使ってみた(その2)

その1の検証で、輪郭線が鈍る件は、akiyamaさんもとっくにご存知で、輪郭線を使うのではなく、patchが分割されていればpatch境界として認識されるはずだというご指摘でした。

そこで、OpenFOAMのチュートリアルに付属のデータ($FOAM_TUTORIALS/resources/geometry/motorBike.obj.gz)を、以下の図に示す手順で検証してみました。

範囲を選択_999(227)

これで、motorBikeの面が分割されたstlファイルが作れた事になるのですが、問題は、system/meshDict です。分割されたそれぞれの面に対し、レイヤーや細分化指定してやる必要があります(下図赤枠部分)。

範囲を選択_999(229)

solidブロック(patch)が全部で67箇所もあり、ここは面倒な作業になりそうでスクリプトを作ることも考えましたが、とりあえず適当に作ったメッシュのboundaryファイルから、patchリストが簡単に取得できたので、単純なコピペ作業で出来ました。

で、苦労した後の結果ですが…

範囲を選択_999(196)

範囲を選択_999(197)

残念ながら、何度やっても途中で終わってしまいます。やはり、厚みのほとんどない部分で困っているんだろうと推察されます。

 

snappyの細分化レベルを変えてみた

snappyHexMeshでは、patchの平坦部とそうでない部分に対して、細分化のレベルを 変えることが出来ますが、cfMeshは出来ません。そこで比較の土俵を合わせるのに、snappyHexMeshでも一律同じ細分化レベルにしてやってみました(下図参照)。

範囲を選択_999(230)

 

メッシュを以下に比較します。

範囲を選択_999(231)

頭部ヘルメットのあたりで、分割方案による差異が見られますが、メッシュ数の増加はほんのわずかでした。

以下、checkMesh、計算進行状況、y+の結果もほとんど差異は見られませんでした。

範囲を選択_999(232)

 

範囲を選択_999(233)

 

範囲を選択_999(234)

cfMeshの細分化方案を変えてみた

一方、cfMeshでPatchを指定して局所的な細分化指定を出来ないと記しましたが、minCellSizeパラメタを使って、結果的に局所的な細分化が出来る場合(たとえばDEXCSフォントの例⇒資料の111ページ参照)があります。ここではその方法を使ってみました。

範囲を選択_999(237)

この設定によれば、下図に示すように、MotorBikeGroupの表面で、平坦部とそうでない部分の差異を実現することが出来ます。もっとも、運転者頭部ヘルメットのあたりでは差異が無かったんですが…

範囲を選択_999(238)

それよりも、checkMeshや全体メッシュで大きな構造変化が生じてしまいました。

範囲を選択_999(239)

範囲を選択_999(240)

 

領域全体の隅部で、minCellSizeまで細分化されています。実はかようなケースが、cfMeshに付属の標準サンプルの中にもいくつかあります。先に例示したDEXCSフォントの例では、このような結果にならないのですがね。

cfMeshのオプションパラメタに関する記事の中で述べているminCellSizeについてよく判らない点の一つでもあります。

ま、いずれにせよ、こうなってしまうと、流れ場計算そのものも、すんなりとはいかなくなります。一例を以下に示します。

範囲を選択_999(241)

 

もう少し頑張れば、収束解が得られそうな気もしますが、それを見つけたからといって、意味のない仕事になりそうなので、これ以上は調べておりません。

 

まとめと結論

cfMesh作成に際し、fms形式でなく、stl形式の領域定義ファイルを使用してみたが、板厚が極端に薄い領域を持った(重複面と見做されそうな)データについて境界面を区分するメッシュ作成は出来なかった。⇒やはり重複面と見做されそうな面は単面化の処理が必要。

cfMeshとsnappyHexMeshで、分割レベルの土俵を近づけるべく、それぞれの分割方案を変えたメッシュ作成を実施してみたが、先の結論(cfMeshはsnappyHexMeshと比較して、メッシュ生成時間・checkMesh品質は劣ったが、境界レイヤーは格段に優れていた。)を覆す結果には到らなかった。

 

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

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