SwiftSnap によるメッシュの作成

2012年6月19日

はじめに

Blender アドオン SwiftSnap で OpenFOAM のメッシュを作る。

使用バージョン

OpenFOAM 2.1.1, PyFoam 0.5.7, Blender 2.62

SwiftSnap の入手

SwiftSnap を ここ から入手。

Blender のセットアップ

SwiftSnap の Blender 対応バージョンが "v2.6x, with x<3" とあるので、ここ から Blender 2.62 を入手する。

パッケージを適当なところに展開。

$ tar xvjf blender-2.62-linux-glibc27-x86_64.tar.bz2 -C ~/opt

パスを通しておく。

SwiftSnap のセットアップ

SwiftSnap のパッケージを展開し、Blender のディレクトリのバージョンディレクトリの中の "scripts/addons" の中に置く。

$ tar xvzf Swiftsnap.tar.gz
$ cp -r Swiftsnap ~/opt/blender-2.62-linux-glibc27-x86_64/2.62/scripts/addons

Blender を起動

$ blender

メニュー [File]-[User Preferences...] で "Addons" を選び、"Categories" に "OpenFOAM"、その中に "OpenFOAM: SwiftSnap" という項目があればアドオンは認識されている。あとは項目にチェックを入れ、"Save As Default" ボタンを押せば起動時に SwiftSnap が有効になる。

SwiftSnap を使ってみる

Blender を起動時に設置されている Cubic を使ってメッシュを作ってみる。Cubic を選択したまま、"Object" アイコンを押す。SwiftSnap が有効になっていれば、その一番下に項目が出てくる。

ボタンを押せば設定画面が開く。

"Patch settings" でパッチの設定ができる。"Edit Mode" 面を選び、名前を設定して "Set Patch" ボタンを押すとパッチが設定される。"Add Layers" にチェックを入れておけば、レイヤー数を設定できる。

領域内部の座標を指定するために、カーソルを Cubic の内部に置いた状態で "Set locationMesh" ボタンを押す。

blockMesh によるベースメッシュのために、"Make base mesh" にチェックを入れ、"resolution" でメッシュサイズを指定する。

最後に "Write" ボタンで設定ファイルを書き出す。"snappyHexMeshDict", "triSurface", "blockMeshDict" が書き出される。

メッシュの作成

icoFoam のケースを作ってみる。

$ cp -r /opt/openfoam211/tutorials/incompressible/icoFoam/cavity square

SwiftSnap で作ったファイルをそれぞれ設定する。

$ mv snappyHexMeshDict square/system
$ mv blockMeshDict square/constant/polyMesh
$ mv triSurface square/constant

blockMesh を実行。

$ cd square
$ blockMesh

system/decomposeParDict を作る。

$ pyFoamDecompose.py --method=scotch . 4

system/decomposeParDict の "method" の "scotch" を "ptscotch" に書き換えておく。ここではパラレル実行しないので、processor* は消す。snappyHexMesh の実行。

$ rm -r processor*
$ snappyHexMesh

メッシュをチェック。

レイヤーもちゃんと設定されている。

問題なければ本番実行。

$ pyFoamClearCase.py .
$ snappyHexMesh -overwrite

境界の名前を修正。

$ sed -i 's/_Exportedfromblender//' constant/polyMesh/boundary

必要なら snapEdge を実行。

$ snapEdge -overwrite

フィールドの境界名を修正。

$ pyFoamCreateBoundaryPatches.py --verbose --overwrite --clear-unused 0/U
$ pyFoamCreateBoundaryPatches.py --verbose --overwrite --clear-unused 0/p

境界条件を設定して icoFoam を実行。

$ icoFoam