*[[表面メッシュからプリズムメッシュの作成(vmtk)]] [#a59dbce3]

オープンソースの血管モデリング・ツール[[vmtk:http://www.vmtk.org/index.html]](ver 1.2)を使用して、表面の三角形メッシュからプリズムメッシュを作成し、管内をテトラメッシュで埋めます。

**表面メッシュ [#f371650d]

使用する表面メッシュは、以下のような血管の一部のメッシュを使用します。
使用する表面メッシュは、以下のような血管の一部のメッシュです。(メッシュデータは、このページの一番下のvessel_surf_without_capping.zipにあります。)流体計算用の境界条件として、inletとoutletの位置は絵のように仮定します。

#ref(vessel_surf_without_capping.png,center,nowrap,60%,vessel_surf_without_capping);

enGridを起動しましたら、メニューバーから
vmtkで境界層メッシュを作成する場合は、入口、出口は閉じていない表面メッシュを使用します。

Import >> VTK >> vtkPolyData
**vmtkのコマンド実行 [#b0d8e541]

と進みます。ファイル指定ダイアログボックスでvessel_surf.vtpを指定しますと、下図のような管状の表面メッシュが表示されます。
以下、vmtkはインストールされているものと仮定します。

以降、境界名は、図のように"inlet"、"outlet"、"wall"とします。
vmtkを起動し、PypePadのコマンド編集欄に以下のコマンドを打ち込みます。

#ref(vessel_surf.png,center,nowrap,40%,vessel_surface);
>vmtksurfacereader -ifile vessel_surf_without_capping.vtp --pipe vmtkcenterlines -endpoints 1 -seedselector openprofiles --pipe vmtkdistancetocenterlines -useradius 1 --pipe vmtkmeshgenerator -elementsizemode edgelengtharray -edgelengtharray DistanceToCenterlines -edgelengthfactor 0.3 -boundarylayer 1 -thicknessfactor 0.1 -sublayers 4 -sublayerratio 0.5 -boundarylayeroncaps 0 -ofile result.vtu

**境界名の指定 [#l36f077f]
#ref(command.png,center,nowrap,60%,command);

enGridでは、境界にboundary codeという番号を割り振り、各境界を区別します。
メニューバーから

まず、inlet面にboundary codeを設定します。画面上でカーソルをinletになる面に合わせ、キーボードの"p"を押します。すると、下図のように、カーソルに一番近い三角形の中心に赤い球が表示されます。
Run > Run all

#ref(boundary_code_inlet1.png,center,nowrap,40%,boundary_code_inlet);
をクリックしてコマンドを実行します。

メニューバーの
**境界番号の指定 [#l36f077f]

Mesh >> set boundary code
コマンドが実行されますと、メッセ―ウィンドウに

から、"set boundary code"ダイアログボックスを開きます。下図のように、"Boundary Code"に1を指定して"OK"します。
Cappint surface.

#ref(set_boundary_code_inlet.png,center,nowrap,80%,set_boundary_code_inlet);
のメッセージがでて、ビューアが立ち上がります。ビューアを見ますと、血管の入口、出口にそれそれ"1"と"0"が表示されているのが分かります。

3Dビューア上で左クリックすると、boundary codeを指定した面が非表示になります。
#ref(viewer_for_boundary_id.png,center,nowrap,60%,viewer_for_boundary_id.);

#ref(boundary_code_inlet2.png,center,nowrap,40%,boundary_code_inlet_after);
vmtkでは、基本的に、ビューアの左下にある指示にしたがって進みます。ここでは、下のようにして、入口に"1"と出口に"2"を指定します。

同様にして、outletとwallにもboundary codeをそれぞれ"2"、"3"で設定します。"set boundary code"のダイアログボックスの設定はそれぞれ下図のようにします。
① 表面メッシュの絵に問題がないようでしたら、キーボードから"q"をたたきます。

#ref(set_boundary_code_other.png,center,nowrap,80%,boundary_code_others);
② "Please input list of inlet profile ids:_"と出ますので入口の番号として、"1"を記入して、Enterします。

inlet、outlet、wallに全てboundary codeが割り振られますと、画面からすべての面が見えなくなります。
③ "Please input list of outlet profile ids(leave empty for all all available profiles):_"とでますので、"0"を記入して、Enterします。

次に、各boundary codeに対応する境界名をつけます。メニューバーから
**テトラメッシュ [#w5a52a43]

Simulation >> Edit Boundary conditions
境界番号を指定すると、入口、出口がキャッピングされ、プリズム層の最も内側と出入口からなる閉じた領域が生成されます。さらに、[[TetGen:http://wias-berlin.de/software/tetgen/]]がこの閉じた領域にテトラメッシュを埋めます。
結果のメッシュは、result.vtuファイルに出力されます。

へと進み、"edit boundary conditions"ダイアログボックスを開きます。"Boundary conditions"タブ内のテーブルに下図のように、"inlet"、"outlet"、"wall"を書き込みます。
この結果ファイルは、ParaViewで表示することができます。プリズム層のあるテトラメッシュが作成されたことがわかります。境界番号のつき方がやや変ですが、、

#ref(set_boundary_names.png,center,nowrap,60%,set_boundary_names);
#ref(tetra_prism.png,center,nowrap,60%,tetra_prism);

また、流体領域にも名前を付けます。"edit boundary conditions"ダイアログボックスの"new volume"にfluidと記入し、"add"ボタンを押します。

#ref(set_fluid_name.png,center,nowrap,60%,set_boundary_names);

最後に、"OK"ボタンを押して、"edit boundary conditions"ダイアログボックスを閉じます。

**境界面の表示 [#cbbf4718]

境界面にboundary codeを指定しますと、画面から表面メッシュが見えなくなります。これらを再表示するためには、3Dビューア上で左クリックした後、キーボードから"v"を押し、"select boundary codes"ダイアログボックスを開きます。

"select boundary codes"ダイアログボックス上で表示したい境界にチェックを入れ、"OK"します。"outlet"と"wall"にチェックを入れてると下図のようになります。

#ref(select_boundary_codes.png,center,nowrap,35%,select_boundary_codes);

**プリズムメッシュの生成 [#yf2b2dcc]

wallから内側に向かって境界層となるプリズムメッシュを一層だけ作成します。メニューバーから

Mesh >> create prismatic boundary layer

に進み、"create prismatic boundary layer"ダイアログボックスを開きます。下図のように、"wall"にチェックを入れ、volumesリストから"fluid"をクリックします。デフォルトの設定のまま"OK"ボタンをクリックすると、プリズムメッシュの生成が開始されます。

#ref(prismatic_boudary_settings.png,center,nowrap,60%,prismatic_boudary_settings);

プリズムの生成が終了しましたら、GUIの右の"Display options"の"enable volume elements"にチェックを入れ、"enable surface elements"のチェックを外し、"redraw"ボタンを押すと、画面に作成されたプリズムメッシュが描画されます。

#ref(prismatic_boudary.png,center,nowrap,35%,prismatic_boudary);

**テトラメッシュの生成 [#kcf6746e]

押し出されたプリズムメッシュの面と"inlet"、"outlet"で囲まれた流体領域をテトラメッシュで埋めます。メニューバーから

Mesh >> create/improve volume mesh (NETGEN)

と進み、ダイアログボックスを開き、"fluid"を選択し、"OK"ボタンを押すと、テトラメッシュが生成されます。

#ref(tetra_prism_mesh.png,center,nowrap,35%,tetra_prism_mesh);

**プリズムメッシュの分割 [#e0263a7f]

作成されたプリズムメッシュは一層しかないので、内部を分割します。メニューバーから

Mesh >> divide prismatic boundary layer

と進み、"divide boundary layer"ダイアログボックスを開きます。"volumes"リストで"fluid"を選択し、下図の設定になっていることを確認してから、"OK"ボタンを押します。

#ref(divide_prism_mesh.png,center,nowrap,60%,divide_prism_mesh);

プリズム内の分割が終了しますと、下図のようになります。


#ref(divided_prism_mesh.png,center,nowrap,35%,divided_prism_mesh);

**OpenFOAM形式への出力 [#a63062ed]

作成されたメッシュをOpenFOAM形式に出力します。メニューバーから

Export >> OpenFOAM >> OpenFOAM (grid only)

へと進み、出力するディレクトリを指定しますと、作成したメッシュが保存されます。

出力されたメッシュは[[ParaView:http://www.paraview.org]]でも、可視化することができます。そのためには、ダミーの.foamファイルを作成します(例えば、vessel_surf.foam)。

ParaViewからvessel_surf.foamを指定すると、作成されたメッシュを確認できます。

#ref(paraview_prism_mesh.png,center,nowrap,50%,paraview_prism_mesh);

**ダウンロード [#uf5cec30]
データファイル:
#ref(vessel_surf.zip)
#ref(vessel_surf_without_capping.zip)



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS