ユーザーガイド 1.5系 - 5.1 メッシュの記法
出典: OFWikiJa
[編集] 5.1 メッシュの記法
この節では、OpenFOAMのC++のクラスがどのようにメッシュを扱うか、その仕様について説明します。 メッシュは数値解析において不可欠のものであり、妥当で精密な解を得るためには一定の条件を満している必要があります。 OpenFOAMは、実行時、メッシュが妥当かどうかの一連の条件を満しているか厳しくチェックし、もしそあの条件を満していない場合には、実行を止めます。 このためOpenFOAMが実行する前に、サードパーティ製のメッシャーで生成した大規模なメッシュを修正することに疲れてしまうかもしれません。 OpenFOAM上で受けいれられるようにするために、根気良く修正する羽目に陥いることがあります。 それは残念なことではありますが、メッシュの妥当性のチェックを行わなかったら、計算が始まる前に解は発散してしまうこともあるわけですから、OpenFOAMがメッシュの妥当性を常にチェックすることは決して悪いことではありません。
通常、OpenFOAMは、任意の多角形の面に囲まれた3次元で定義される任意の多面体格子によってメッシュを定義しますので、格子の界面の数は無制限であり、その界面についても、辺の数は無制限で配列についても何の制約もありません。 このような汎用性が高いメッシュをOpenFOAMではpolyMeshと定義しています。 プログラマー・ガイドの2.3節においてより詳細に述べますが、このような形式のメッシュを用いていると、特に計算領域の幾何形状が複雑であったり、それらが何度も変更される時に、メッシュの生成やその操作においてとても大きな自由度があることだけを、ここでは述べておくことにします。 しかしながら、このようにメッシュが無条件の汎用性を持った代償として、従来のツールによって生成されたメッシュを変換するのは難しいこともあります。 そのため、OpenFOAMのライブラリは、既存の格子形状リストを元にした従来のメッシュのフォーマットを上手く扱うcellShapeツールを提供しています。
[編集] 5.1.1 メッシュの仕様と妥当性の制約
OpenFOAMのメッシュのフォーマットであるpolyMeshやcellShapeツールを説明する前に、まず、OpenFOAMにおけるメッシュの妥当性の制約について述べたいと思います。メッシュが満していなければならない条件とは以下の通りです。
[編集] 5.1.1.1 点
点というのは、3次元空間における位置であり、メートル(m)単位のベクトルによって定義されます。点の集まりはリストに蓄積され、個々の点はリストにおける位置を表わし、0から始まるラベルにより参照されます。 この点のリストには、別々の点でありながら位置が全く同一である点や、一つの界面にも属さない点が含まれることはありません。
[編集] 5.1.1.2 界面
界面は点を順番に並べたものであり、ひとつひとつの点はラベルによって参照されます。 界面における点のラベル順は、隣接した二つの点が一つの辺によって接続されるように付けられるため、界面の周囲をぐるっと廻るように点の番号を追うことになります。 点と同様に、界面の集まりはリストで管理され、個々の界面は、リストにおける位置を表わすラベルによって参照されます。 界面の法線方向ベクトルの向きは右手の法則により決まります。すなわち、図5.1のように、界面に向って見た時、点の順序が反時計廻りであったら、法線方向ベクトルはこちらを向いていることになります。
図5.1 界面における点の順序から決まる界面面積(法線)ベクトル
界面には2種類あります。
- 内部の界面
- これらの界面は必ず2つの格子に接続されており、その数が2を超えることはありません。また、内部の界面において、その法線方向ベクトルが、より大きなラベルを持つ格子に向くように、点のラベルの番号付けがなされます。つまり、格子2と格子5を接続している界面だったら、その法線は格子5を向くわけです。
- 境界の界面
- これらは領域の境界にあるので、1つの格子にしか属しません。従って、ある境界の界面を参照するのは、1つの格子と境界パッチだけです。点ラベルの番号付けは、界面の法線が計算領域の外側に向くように設定されます。
[編集] 5.1.1.3 格子
格子は、界面を任意の順序で並べたものです。 格子は以下に示す性質が必ず必要です。
- 切れ目なく連続である
- 格子群は計算領域全体を完全にカバーしており、かつ、お互いに重複してはなりません。
- 凸である
- 全ての格子は凸で、かつ、格子中心は格子の内側にある必要があります。
- 閉じている
- 全ての格子は幾何的にも位相的(トポロジー的)にも閉じていなければなりません。ここで、格子が幾何的に閉じているためには、全ての界面の面積ベクトルが格子の外側を向いているとして、それらのベクトル和が、正確にゼロ・ベクトルとなる必要があります。また、格子が位相的に閉じているためには、問題において、格子中の全ての辺が、2つの界面により使用されている必要があります。
- 直交性がある
- メッシュ内部の全ての界面に対し、中心間ベクトルというのを、隣接する2つの格子の中心間を、小さいほうのラベルの格子中心から大きいほうのラベルの格子中心への向きで結んだベクトルとして定義することができます。直交性の制約というのは、内部の全ての界面に対し、先に述べた界面の面積ベクトルと中心間ベクトルのなす角が、常に90度未満であることを言います。
[編集] 5.1.3 境界
境界というのはパッチのリスト(集合)であり、これら一つ一つは、ある境界条件が割り当てられています。 ここで、パッチというのは界面のラベルのリストであり、境界の界面のみで形成され、内部の界面を含みません。 この境界は閉じていることが条件であるので、境界における全界面面積ベクトルの和は、数値計算上ゼロ・ベクトルになります。
[編集] 5.1.4 polyMeshの記述
constantディレクトリのサブディレクトリであるpolyMeshには、そのケースのpolyMeshデータが全て収められています。 このpolyMeshの記述は界面ベースであり、既に述べましたように、内部の格子は2つの格子と接続し、境界面は格子と境界のパッチを指定します。 各界面には「保有」格子と「隣接」格子が割り当てられ、界面を通じた接続は、保有格子と隣接格子のラベルによって簡潔に記述することが出来ます。 境界の場合には、界面に接続された格子がその界面の保有者であり、隣接格子には-1のラベルが割り充てられます。 以上を踏まえた上で、以下のファイルで構成される入出力の詳細をご覧ください。
- points
- 格子の頂点を記述するベクトルのリストです。ここで、リストにおける最初のベクトルは頂点0、次のベクトルの頂点1という風に番号付けします。
- faces
- 界面のリストです。各界面は点中の頂点の番号のリストで成り立ってます。ここで、先程と同様に、リスト中の最初の界面の番号は0です。
- owner
- 保有格子のラベルのリストです。界面のリストと同じ順番に並んでますので、リストの最初のラベルは0番の界面の保有格子のラベル、次のラベルは1番の界面の保有格子のラベルということになります。
- neighbour
- 隣接格子のラベルのリストです。
- boundary
- パッチのリストです。以下のように、パッチ名の宣言で始まる各パッチに対する辞書で構成されます。startFaceはそのパッチにおける最初の界面のラベル番号です。またnFacesは、そのパッチ中の界面数です。
movingWall
{
type patch;
nFaces 20;
startFace 760;
}
備考: 計算対象にいくつ格子があるか知りたい場合には、ownerファイルのFoamFileヘッダにおけるnCellsを見てください。
[編集] 5.1.3 cellShapeツール
別の標準的(でより単純)なメッシュ形式を、OpenFOAMのライブラリで扱えるように変換する際に、特に必要となるであろうcellShapeというツールについても説明しておきたいと思います。
多くのメッシュ・ジェネレータやポスト処理システムは、実際にあり得る多面体格子の形状種類に対し、その一部だけをサポートするものがほとんどです。 それらは、メッシュを格子形状セットといった、3次元の格子幾何形状の限られた組み合わせで定義します。 OpenFOAMのライブラリには、これらの一般的な形状集の定義がありますので、上記のようなメッシュを先の節で述べたpolyMesh形式に変換することができます。
OpenFOAMによってサポートされる格子形状モデルを表5.1に示します。 これらの形状は、形状モデルにおける番号付けスキームに従って付けれらた頂点ラベルの順序によって定義されます。 点や界面、辺に対する番号付けスキームも表5.1に描いております。 点の番号付けは、形状がねじれたり、他の形状に変化することが無いようにしなければならないので、同じ点番号は1度以上は使用できないことになります。 さらに、重複した点はOpenFOAMでは使う必要はありません。 なぜなら、OpenFOAMで使用可能な形状は、6面体の変種を全てカバーしているからです。
格子の記述は、形状モデルの名前と、ラベルの順序リストという2つの部分より行ないます。 例えば、以下の点のリストを使うと、
8
(
(0 0 0)
(1 0 0)
(1 1 0)
(0 1 0)
(0 0 0.5)
(1 0 0.5)
(1 1 0.5)
(0 1 0.5)
)
六面体格子は以下のように書けます。
(hex 8(0 1 2 3 4 5 6 7))
ここで、六面体の格子形状はhexというキーワードで記述しましたが、他の形状については、表5.1に示したキーワードを使って記述できます。
(a) Hexahedron: keyword hex
(b) Wedge: keyword wedge
(c) Prism: keyword prism
(d) Pyramid: keyword pyr
(e) Tetrahedron: keyword tet
(f) Tetradehral wedge: keyword tetWedge
表5.1 cellShapesにおける頂点、界面、辺の番号付け
[編集] 5.1.4 1次元や2次元、軸対称問題
OpenFOAMは3次元の空間用に設計されており、全てのメッシュもそのように定義します。 しかしながら、OpenFOAMでは、1次元や2次元そして軸対称問題も解くことができ、それには、法線方向が意図する方向であるパッチに対して、特殊な境界条件を適用します。 具体的には、1次元や2次元問題ではemptyのパッチタイプを使い、軸対称問題ではwedgeタイプを使います。 両者の使用法については5.2.2節で触れ、軸対称問題用のwedge幾何形状の生成 法については5.3.3節において述べます。







