公開コンサル案件にて、四角柱周りの流れを計算したいとの依頼があったので、このところ注力中のSwiftBlockを使ってメッシュ作成に挑戦してみました。
caseファイルと使用法の説明
- caseファイルは上のように展開されるはず(2Dの場合)
- pillar2DRSwift.blend をblenderで開く(3Dの場合はpillar3DSwift.block)
- SwiftBlockのメニューからwriteボタンを押してblockMeshDictを作成する
- blockMeshDictの出力先は、constant/polyMesh の下
- (メッシュの分割数やグレーディングを変更したい場合は、上記blockMeshDictを直接編集して下さい)
- blockMeshの実行
- (0フォルダの下のFiledファイルはSwiftBlockにて設定したpatch名と整合済。境界条件は便宜的に設定しただけなので、流入条件などを変更したければ、直接編集にて変更して下さい)
- (constant および system フォルダの下にある各種設定ファイルは、tutorials/incompressible/pimpleFoam/Tjunction にあったものをそのまま流用しています。適宜変更して使って下さい)
- pimpleFoamの実行
- SwiftBlockによるpatch定義をする前の状態のブロックモデルも同梱してあるので、SwiftBlockの設定を変更したい場合には、こちらから始めて下さい。
ブロック作成例(2D)
- サイズは適当に作っただけですが、この程度の作業であれば10分もあれば十分に可能。
メッシュ作成例(2D)
- メッシュ数
nPoints: 3160
nCells: 1468
計算結果例(2D)
ブロック作成例(3D)
メッシュ作成例(3D)
- メッシュ数
nPoints: 48040
nCells: 43632
計算結果例(3D)
補足
本稿を見て、ブロックの作成方法に「何でこの形?」という疑問を持たれた方も居ると思います。たとえば、2Dの場合だと、以下のような形
のほうが、よほど簡単でチュートリアルにふさわしいと思われるしょう。これは実際にこのモデル(pillar2D.blend)も同梱してあるので試してもらうのが良いと思うし、現実に最初に試したのはこのモデルでした。しかしどうしてもメッシュがうまく作れませんでした。うまく作れないの意味は、中央の四角柱部分までメッシュが出来てしまうという事です。
まぁ、後はblockMeshDictを手修正でやれないこともなかったんですが、これはSwiftBlockのバグかもしれないと思い、作者へフィードバックすべきかどうか考えるうちに、これはバグではなく、仕様であるとの結論に至りました。
つまり、SwiftBlockがblockMeshDictを生成する原理は、線画の構造体の中から六面体構造を検出して、その部分をblockMeshDictの作法に則ってblock定義出力しているにすぎない、という事です。(あくまで推測ですが・・・)
なので、四角形柱部分を六面体構造で定義してあるので、block定義されてメッシュが作られてしまうという事です。
そこで、四角柱部分をデータ構造としては六面体構造でない形で定義する、2Dの場合五角形柱、3Dの場合には六角形柱になるようにしてブロック図を作成してみたら、予想通りうまくいった・・・という訳です。
3次元のブロック構造を作るに際しても、面の引き伸ばしでブロックを拡張していくと、内部格子点間での線情報が欠落する場合があり、そうなるとメッシュが出来ないということになります。メッシュが予想通りに切れない場合は、本観点でもって作成したブロックの線情報を見直す、というのが最優先の着眼点でしょう。
caseファイル
- 2D用 四角柱周りの流れ(2D)
- 3D用 四角柱周りの流れ(3D)