OpenFOAMの掲示板にて表題のメッシュ作成方法に関するQAがあったのですが、これもSwiftツールを使って簡単に出来る格好の例題でした。ここにやり方とケースファイルを公開しておきます。
ケースファイルの説明
ダウンロードしたケースファイルを解凍すると、以下のファイル構成で、2つのケースファイルから成っています。
- 左端最下行の2つのファイルが、掲示板にて公開されている2つのstlファイル
- この2つのファイルをBlenderへstlインポートして、回転領域を指定する円柱データを追加して1つのstlファイルに合体(円柱データの追加方法と、合体方法は後述)、blender形式で保存したのが、meshAのmodelA.blend。
- タンク部の上端位置を伸長、上記合体したstlファイルとは別オブジェクトにて、blockMesh領域を設定する為の矩形データ(上端位置が開口部と一致すべく)を追加し、Blenderファイルとして保存⇒meshBのmodelB.blend
- 上記Blenderファイルにて、Swiftツールを使って、blockMeshパラメタと、snappyHexMeshパラメタの設定を織り込んだもの(具体的な設定方法は後述)⇒modelA(またはB)Swift.blend
- 上記modelA(またはB)Swift.blendから各Swiftツールのwriteボタンを押して自動出力されたパラメタファイルを赤枠で示してあります。
- 但し、snappyHexMeshDictファイルだけは、一部手修正が施してあります。(下図、赤枠部:cellZone, faceZone 指定パラメタ)
実行方法
- blockMeshを実行し、引き続きsnappyHexMeshを実行するだけです。
- メッシュ作成例(meshA)
- メッシュ作成例(meshB)
円柱データの追加方法
- 視方向は上面(または下面)から見た状態
- 追加 ⇒ メッシュ ⇒ 円柱
- 左側ツールシェルフ中に、円柱のスペックを指定できるようになるので、サイズや位置を決める。深度だけは適当な値にしておいて、後で詳しく指定する。
- 視方向を横(前・後・左・右のどちらでも良い)にして、編集モードにて、上端面を選択し、高さ(z座標)を指定する。
- 同様に下端面の座標値を指定して完成
複数オブジェクトの合体方法
- オブジェクトモードにて、どれか一つのオブジェクトを選択(下図では外枠のタンクを選択)した状態にて、Shiftキーを押しながら他のオブジェクトを選択(右ボタンクリック)。⇒最初に選択したオブジェクト以外はやや濃いオレンジ色となって全オブジェクトを選択した状態にする。
- メニューのオブジェクト⇒接続を選択
- 全て同一色となって、一つのオブジェクトに合体される
SwiftSnappの具体的設定方法
- フィーチャーエッジの作成方法やメッシュ制御点の設定方法は割愛(別途講習資料を参照下さい)
- (2013/1/4 補足) 追加情報を記載しました→記事
- ここでは、STLのパーツ毎に名前や細分割レベルを変更する為の具体的手順を示します。
- まずは編集モードの面編集モードにて、全選択状態にしておく「下図)。
- SwiftSnappツールのPatch settingsのメニューにて、名前を指定し、SetPatchのボタンを押せば、設定が反映される。この時点で、tankというパッチ名で、タンク以外の部分も選択されてしまっているが、この後のプロセスで別の名前に変更する。
- 視方向を横からの方向にして、Aキーを押して、非選択状態。
- Bキーを押して、ブロック選択状態にて、回転領域を選択。
- 回転領域(+回転体)が選択されたら、名前(blade_area)を付け、細分割レベルを指定して、Set Patch ボタンを押す。この時点で回転体(blade)そのものを選択されているが、後のプロセスで別の名前に変更する。
- 再度、全非選択状態にて、表示拡大し、回転領域と回転体が識別できる状態にしておく
- 「ビュー」メニューから、ボーダーでクリッピングを選択
- 回転体だけを範囲選択する
- マウスボタンを話すと。指定範囲だけがクリッピングされる
- 視方向を上または下に切り替える。
- ブロック選択を、数回繰り返せば、回転体(blade)だけを選択できるようになるので、
- 選択できたら、名前()を付け、細分割レベルを指定して、Set Patch ボタンを押す。
- 以上で完了。下図はオブジェクトモード、で全体の半分領域をクリッピングして、ソリッドで表示確認したもの。
補足
- modelASwift.blend では、さらにタンク容器の上面だけを別の名前に変更している
- mashAのケースで使用しているblockMeshDict は公開しているものをそのまま使用している。
- 一方、SwiftSnappにて、Make base mesh(下図)にチェックマークを付けてWriteボタンを押すと、対象モデル全体を包含するblockMeshDictを自動作成してくれる。(meshA/system/blockMeshDict)
- しかし、このblockMeshDictを使って作成した基礎メッシュ(下図参照)を用いてsnappyHexMeshを作成することもできるのだが、何故かfeaturesや、refinementSurfacesの指定が有効になってくれない。
- 基礎メッシュのサイズはとモデルサイズよりも、ある程度の余裕が必要ということなのか・・・詳細は不明。
- meshAの方法と、meshBの方法の一番の相違点は、基礎メッシュ(blockMesh)端面をpatchとして使用しているかどうかの違いです。
- meshBの方法(基礎メッシュ端面をpatchとして使用)で作成した場合、基礎メッシュ端面の近くに、ごく一部ですがメッシュの凹凸が出来てしまっています。これが一般解なのかどうか、本ケースに特有な事例であったのかもしれないが、詳細は不明。