ユーザーガイド 1.5系 - 5.3 blockMeshユーティリティを使ったメッシュ生成
出典: OFWikiJa
[編集] 5.3 blockMeshユーティリティを使ったメッシュ生成
このセクションでは、OpenFOAMとともに供給されるメッシュ生成ユーティリティのblockMeshについて説明します。 blockMeshユーティリティは階層付けされている曲がった辺でパラメトリックメッシュを作成します。
メッシュはケースのconstant/polyMeshディレクトリに位置するblockMeshDictという辞書ファイルから生成します。 blockMeshはこの辞書を読み込んでメッシュを生成し、同じディレクトリのpoints, faces, cellsおよびboundaryファイルにメッシュ・データを書き出します。
blockMeshがよりどころとする原則は、1つあるいは複数の3次元の6面体のブロックに領域を分割することです。 ブロックの辺は、直線、円弧またはスプラインであるかもしれません。 メッシュは、ブロックの各方向の多くのセルとして表面上指定され、これはblockMeshがメッシュ・データを生成するのに十分な情報です。
各ブロックの幾何形状は8つの頂点、6面体の各隅のひとつによって定義されます。 頂点はラベルを使用することで各頂点にアクセスできるようにリストに書かれています。 OpenFOAMは常にC++の慣習に従って、リストの最初の要素をラベル‘0'とします。 リストに従って、各頂点に番号付けがされているブロックの例を図5.5に示します。 頂点1と5を接続する辺は、blockMeshで曲がった辺を指定できるのを読者に思いおこさせるために曲がっています。
セクション5.3.3で説明されるように、1組以上の頂点をお互いの上で潰すことによって8つ未満の頂点を持つブロックを生成することが可能です。
各ブロックは、右手系である局所座標系構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): (x_{1}, x_{2}, x_{3}) を持ちます。 右手系の軸群は、Oz軸を見下ろしたとき、Ox軸上の点からOy軸上への円弧が時計回りとなるように定義されます。 局所座標系は以下に従ってブロックの定義で提示された頂点の順序に従って定義されます。
- 軸の原点はブロックの定義における最初の入力です。私たちの例では頂点0です。
- 構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{1}
の方向は、頂点0から頂点1まで動くことによって示されます。
- 構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{2}
の方向は、頂点1から頂点2まで動くことによって示されます。
- 頂点0、1、2、3は構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{3}=0
の平面を定義します。
- 頂点4は頂点0から構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{3}
方向に動くことによって、見つけられます。
- 頂点5、6、および7は、頂点1、2、および3からそれぞれ構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{3}
の方向に動くことで、同様に見つけられます。
図5.5 ひとつのブロック
| キーワード | 説明 | 指定するデータ |
| convertToMeters | 頂点座標の倍率 | 0.001 scales to mm |
| vertices | 頂点座標のリスト | (0 0 0) |
| edges | arcもしくはsplineの辺を書くために使用 | arc 1 4 (0.939 0.342 -0.5) |
| block | 頂点ラベルとメッシュサイズの順序リスト | hex (0 1 2 3 4 5 6 7) (10 10 1)
simpleGrading (1.0 1.0 1.0) |
| patches | パッチのリスト | symmetryPlane base
( (0 1 2 3) ) |
表5.5 blockMeshDictに使用するキーワード
[編集] 5.3.1 blockMeshDictファイルの記述
blockMeshDictファイルはTable5.5で説明されたキーワードを使用する辞書です。 convertToMetersキーワードは、メッシュ記述におけるすべての頂点の座標に掛けられる尺度因子を指定します。 例えば、
convertToMeters 0.001;
は、すべての座標に0.001をかけることを意味します。 すなわち、blockMeshDictファイルで引用された値がmmになります。
[編集] 5.3.1.1 頂点
メッシュのブロックの頂点は、verticesと名づけられた標準のリストとして以下のように与えられます。 例えば図5.5での私たちの例のブロックに関しては、頂点は以下の通りです。
vertices ( ( 0 0 0 ) // vertex number 0 ( 1 0 0.1) // vertex number 1 ( 1.1 1 0.1) // vertex number 2 ( 0 1 0.1) // vertex number 3 (-0.1 -0.1 1 ) // vertex number 4 ( 1.3 0 1.2) // vertex number 5 ( 1.4 1.1 1.3) // vertex number 6 ( 0 1 1.1) // vertex number 7 );
[編集] 5.3.1.2 辺
2頂点をつなぐ辺のそれぞれは、デフォルトでまっすぐであると仮定されています。 しかしながら、どんな辺も、edgesと名づけられるリストにおける入力で曲がるように指定されるかもしれません。 そのリストはオプションです。 幾何形状がどんな曲がった辺も含んでいないなら、それは省略されるかもしれません。
曲がった辺のための各入力は、表5.6に挙げられているものからカーブのタイプを指定するキーワードとともに始まります。
| キーワード選択 | 説明 | 備考 |
| arc | 円弧 | 単一補間点 |
| simpleSpline | スプライン曲線 | 補間点リスト |
| polyLine | 線群 | 補間点リスト |
| polySpline | スプライン群 | 補間点リスト |
| line | 直線 | -- |
表5.6 blockMeshDict辞書で使用可能なエッジタイプ
そして、キーワードの後には辺が接続する2つの頂点のラベルが続きます。 それに続いて、辺が通り過ぎる内挿点を指定しなければなりません。 arcには、円弧が横切ることになる単一の内挿点が必要です。 simpleSpline、polyLine、およびpolySplineに関しては、内挿点のリストが必要です。 line辺は、デフォルトとして実行されるオプションと全く同等であり、内挿点を全く必要としません。 line辺を使用する必要は全くありませんが、それが完全性のために含まれていることに注意してください。 図5.6での私たちの例のブロックでは、内挿点(1.1, 0.0, 0.5)を通して以下のように頂点1と5をつなぐarc辺を指定します。
edges ( arc 1 5 (1.1 0.0 0.5) );
[編集] 5.3.1.3 ブロック
ブロックの定義はblocksと名づけられたリストに含まれています。 各ブロックの定義は、セクション5.3で示された順序を持つ頂点ラベルのリストから成る複合入力です。 ベクトルが各方向に必要なセルの数、タイプ、および各方向のセル拡大比のリストを与えます。
そして、ブロックは以下の通り定義されます。
blocks ( hex (0 1 2 3 4 5 6 7) // vertex numbers (10 10 10) // numbers of cells in each direction simpleGrading (1 2 3) // cell expansion ratios );
それぞれのブロックの定義は以下の通りです。
- Vertex numbering OpenFOAM-1.4/cellModelsファイルに定義されているように、最初の入力がブロックの形状識別子です。いつもブロックが六面体であるので、いつも形はhexです。ページU-130で説明された方法で並べられた頂点番号のリストが従います。
- Number of cells 2番目の入力はそのブロックの構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{1}
構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{2}
と構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{3} それぞれの方向のセルの数を与えます。
- Cell expansion ratios 3番目の入力はブロックにおける各方向へのセルの拡大比を与えます。
拡大比は、メッシュが指定された方向に段階的なものにするか、または精製されるのを可能にします。 比率は図5.6に示すように、ブロックのひとつの辺に沿った終わりのセルの幅構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): \delta_{e} の、辺に沿った始めのセル幅構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): \delta_{s} への比です。 以下のキーワードのそれぞれはblockMeshで利用可能な段階付けの仕様の2つのタイプのひとつを指定します。
- simpleGrading 簡単な記述で、局所的な構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{1}
構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{2}
と構文解析失敗 (texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。): x_{3} 方向それぞれに一様な拡大比を、3つの拡大比だけで指定します。例えば
simpleGrading (1 2 3)
- edgeGrading 完全なセルの拡大比の記述は、図5.5に矢印で「最初のセルから最後のセル」の方向を表したスキームに従って番号付けられたブロックの各辺に比率を与えます。
例えば、このようなものです。
edgeGrading (1 1 1 1 2 2 2 2 3 3 3 3)
これは、辺0-3に沿ったセル幅の比率が1、辺4-7に沿った比率が2であり、辺8-11に沿った比率が3であるということであることを意味しており、上述したsimpleGradingの例にまったく同等です。
図5.6ブロックの辺に沿って段階わけされたメッシュ
[編集] 5.3.1.4 パッチ
patchesというリストでメッシュのパッチを与えます。 リストにおける各パッチは以下を含む複合記入です。
- パッチタイプ、いくつかの境界条件が適用されている一般的なパッチか、表5.1にリストアップされていてセクション5.2.2で説明される特定の幾何的条件のどちらか。
- パッチを作るブロックの面のリスト、便利にパッチを特定できる名前が推奨されるものの、名前はユーザーの選択に任されます。例えば、quoteTextinlet; この名前は、境界条件をフィールドデータファイルに設定するための識別子として使用されます。
blockMeshはpatchesリストから省かれるどんな境界パッチからも面を集め、それらにdefaultFacesと呼ばれるemptyタイプからなるデフォルトパッチを割り当てます。 これは、2次元の幾何形状において、それらが必要に応じてemptyパッチに集められるのを知りながら、ユーザーは2次元平面にあるブロック面を省略する選択ができることを意味します。
図5.5での例のブロックに戻って、もし左面に流入があり、右面における流出があり、他の4つの表面が壁であるならば、以下の通りパッチは定義できるでしょう。
patches // keyword ( patch // patch type for patch 0 inlet // patch name ( (0 4 7 3) // block face in this patch ) // end of 0th patch definition patch // patch type for patch 1 outlet // arbitrary patch name ( (1 2 6 5) ) wall walls ( (0 1 5 4) (0 3 2 1) (3 7 6 2) (4 5 6 7) ) );
それぞれのブロック面は4つの頂点番号のリストによって定義されます。 頂点が与えられる順序は、ブロックの中から見て、どの頂点からも始めても、他の頂点を定義するために時計回りに面を回るようなものにならなければなりません。
[編集] 5.3.2 複数のブロック
1ブロック以上を使用することでメッシュを作成できます。 そのような事情では、メッシュは前述のテキストで説明されるように作成されます。 唯一の追加設定がブロック間の接続です。 そこに、2つの異なる可能性があります。
- face matching あるブロックのパッチを包括する面の組が、別のブロックのパッチを包括する面の組と全く同じ位置にあるものです。
- face merging あるブロックのパッチからの面のグループは、2つのブロックをつなげながら新しい内部の面の組を作成するために、別のブロックのパッチからの面の別のグループに関連づけられます。
face matchingで2ブロックをつなげるためには、接続を形成する2つのパッチがpatchesリストから単に無視されるべきです。blockMeshは、面が外部の境界を形成せず、同じところに位置する各組を、2ブロックからのセルを接続する、ひとつの内部面に結合するのを特定します。
もうひとつのface margingは、併合されるブロックパッチがまずpatchesリストで定義されることを必要とします。 面が併合されるパッチのそれぞれの組が、mergePatchPairsというオプションリストに含まなければなりません。 mergePatchPairsの形式は以下の通りです。
mergePatchPairs ( ( <masterPatch> <slavePatch> ) // merge patch pair 0 ( <masterPatch> <slavePatch> ) // merge patch pair 1 ... )
パッチの組は、最初のパッチはマスターになり、2番目はスレイブになると解釈されます。 併合するための規則は以下の通りです
- マスターパッチの面は元々定義されているままで、すべての頂点は元の位置にあります。
- スレイブパッチの面は、スレイブとは多少異なるマスターパッチに投影されます。
- スレイブ面のどんな頂点の位置も、面の最小許容値より短いあらゆる辺を除去するために、blockMeshによって調整されるかもしれません。
- パッチが図5.7に示されるように重なるなら、併合しない各面が、境界条件を適用しなければならない、元のパッチの外部面として残ります。
- パッチのすべての面が併合されているなら、パッチ自体は表面を全く含まないので、除去されます。
図5.7 重なったパッチを併合すること
結果的に、スレイブパッチのオリジナルの幾何形状が、併合の間必ずしも、完全に保存されるというわけではないということです。 したがって、たとえば、円筒状のブロックが、より大きいブロックにつなげられている場合では、円筒状の形が正しく保存されるように、マスターパッチを円筒状のブロックにするのが賢いでしょう。 併合手順を確実に成功させるためのいくつかの追加の推奨策があります。
- 2次元の幾何学形状では、2次元平面の外での3次元目のセルサイズは、2次元平面でのセルの幅/高さと同様であるべきです。
- 二度パッチを併合すること、すなわち、mergePatchPairsで二度それを含めるのは勧められません。
- 併合されるべきパッチが、他の併合されるパッチと共通の辺を共有するところでは、両方がマスターパッチとして宣言されるべきです。
[編集] 5.3.3 8頂点未満のブロックの作成
8つ未満の頂点でブロックを作成するために、1組以上の頂点をお互いの上で潰すことが可能です。 頂点を潰す最も一般的な例としては、セクション5.2.2で説明したwedgeパッチタイプを使用する2次元の軸対称問題のための6面のくさび型ブロックを作成する時があります。 図5.8に示す私たちの例における、ブロックの簡易型のバージョンを使用することで、過程をわかりやすく例証します。 頂点7を頂点4に、頂点6を頂点5に置いて潰すことによって、くさび型ブロックを作成したいということです。 これは、ブロック番号7を4で、6を5でそれぞれ交換することによって簡単にできます。 するとブロック番号はこのようになります。
hex (0 1 2 3 4 5 5 4)
図5.8 くさび形をしたブロックを6つの接点で作る
潰れている頂点を含むブロック面を考えることで、同じことがパッチにも適用でき、以前(4 5 6 7)だったものが、(4 5 5 4)になります。 これは面積を持たないブロック面で、polyMeshで面のないパッチを生成します。 これはboundaryファイルにおいて同様の場合でも見ることができることと同じです。 パッチはblockMeshDictで、emptyとして指定されるべきです。 そしてどんなフィールドの境界条件も結果的にemptyであるはずです。
[編集] 5.3.4 blockMeshの実行
セクション3.3で説明されたように、blockMeshを実行するためには、以下のようにすればコマンドラインで実行できます。
blockMesh
blockMeshDictファイルは、サブディレクトリconstant/polyMeshに存在しなければなりません。




