blockMesh

blockMeshは メッシュを格子状に分割されるセルを
生成し点、面、セル、境界をファイルに書き出す。

メッシュ生成の指示は case ディレクトリの
constant/polyMesh/blockMeshDictという
テキストファイルで行う。
(新しく解析をする場合 チュートリアルから
blockMeshDictファイルをコピーし参考にするなど)

*blockMeshDictで 構造物を表現し メッシュを切る
ことも出来るが 現実的には単純な構造物しか
表現できない(現実的でない)。
そこで 一般的には blockMeshDictで 
別途3DCADで作成したSTLファイルを取り囲む
構造物のメッシュを切る。


  • 座標の決め方
6面体の各角に頂点を定義する。OpenFOAMは常に
リストの最初の要素がラベル '0'を持つという
C++の規約を使用している。
また節点は x3方向に右手系の順にラベリングされる。
(節点0,1,2,3↺ 4,5,6,7↺)

図1


  • blockMeshDictの中身
  1. convertToMeters: スケール変更例   0.001~スケールをmmへ
  2. vertices: 頂点座標リスト
  3. edges: 辺の湾曲指定
  4. block: 頂点ラベルとメッシュサイズの指示
  5. boundary: 境界指定
  6. mergePatchPairs: マージするパッチリスト



  • convertToMeters
メッシュの倍率を指定する。例えばmmにしたい場合
------------------------------------------------
convertToMeters  0.001;
------------------------------------------------
とする。0.001 ➡ 1 とすれば mになる。



  • vertices
6面体の頂点の座標を指定する。
上から図中の頂点 0, 1, 2, 3, 4, 5, 6, 7の
ラベルが付く
------------------------------------------------
vertices
    (
        ( 0    0    0  )
        ( 1    0    0.1)
        ( 1.1  1    0.1)
        ( 0    1    0.1)
        (-0.1 -0.1  1  )
        ( 1.3  0    1.2)
        ( 1.4  1.1  1.3)
        ( 0    1    1.1)
    );
------------------------------------------------


  • edges
頂点どおしは 指定がなければ直線で結ばれるが
曲線を指定することも出来る。
arc:円弧
spline:スプライン
polyLine:複数の直線
BSpline:Bスプライン

補間点(1.1、0.0、0.5)を通って
頂点 1と 5とを円弧で接続する場合
------------------------------------------------
 edges
    (
        arc 1 5 (1.1 0.0 0.5)
    );
------------------------------------------------

指定しなければ全ての頂点は直線で接続される。
------------------------------------------------
 edges
    (
    );
------------------------------------------------


  • blocks
頂点間の分割数と分割の勾配を指示する。
------------------------------------------------
 blocks
    (
        hex (0 1 2 3 4 5 6 7)
        (10 10 10)
        simpleGrading (1 2 3)
    );
------------------------------------------------
hex (0 1 2 3 4 5 6 7)➡各頂点に0~7のラベルを割り当てている。
(10 10 10)➡X,Y,Z方向に10等分に分割する。
simpleGrading (1 2 3)➡X方向には等分配
Y方向には 最後の分割幅が最初の分割幅の2倍になるよう分割
Z方向には 最後の分割幅が最初の分割幅の2倍になるように分割する。
等分倍にしたい場合は、simpleGrading (1 1 1)とすればよい。


  • ブロックのマルチグレーディング
ある軸に対して 単一の拡大率を指定すると
一方向に単調なグレーティングをすることが可能になる。
また 単一の拡大率で適切なメッシュを切れない場合は
ある軸に対して 複数のグレーティングを指定することが出来る

例)すべての方向に等分割する
-----------------------------
simpleGrading (1 1 1)
-----------------------------

例)
y方向に拡大率2(最初と最後の分割サイズが2倍)になるように分割する
-----------------------------
simpleGrading (1 2 1)
-----------------------------

例)
z方向に拡大率1/2(最初と最後の分割サイズが半分)になるように分割する
-----------------------------
simpleGrading (1 1 0.5)
-----------------------------

例)
X方向は 等分割
Y方向は
最初の20%は 総分割数の30%を使い 拡大率4で分割
次の60%は 総分割数の40%を使い 拡大率1で等分割
最後の20%は 総分割数の30を使い 拡大率0.25で分割
Z方向は 拡大率3で分割する
-------------------------------------------------------------------------------
blocks
(
    hex (0 1 2 3 4 5 6 7) (100 300 100)
    simpleGrading
    (
        1                  // x-direction expansion ratio
        (
            (0.2 0.3 4)    // 20% y-dir, 30% cells, expansion = 4
            (0.6 0.4 1)    // 60% y-dir, 40% cells, expansion = 1
            (0.2 0.3 0.25) // 20% y-dir, 30% cells, expansion = 0.25 (1/4)
        )
        3                  // z-direction expansion ratio
    )
);
-------------------------------------------------------------------------------



  • boundary

境界を指定する

例)
fixedWalls:境界の名前(任意)
wall:パッチ面のタイプ
(0 4 7 3):パッチ面を形成する面(節点番号)

------------------------------------------
boundary
(
fixedWalls
{
type wall;
faces
(
(0 4 7 3)
);
}
);
------------------------------------------

パッチ面のタイプには以下がある
 patch               :一般的なパッチ面(流入・流出面など)
 wall                 :個体壁面
 symmetry        :対称面(平面)
 symmetryPlane: 対称面
 empty             :2次元計算で利用する仮想境界面
 wedge             :2次元軸対象
 cyclic               :周期境界条件(メッシュ形状が一致する場合)
cyclicAMI           :周期境界条件(メッシュ形状が一致しない場合)



  • mergePatchPairs

重なる2つのパッチを結合する

例)
結合しない場合
-------------------------------
mergePatchPairs
(
);
-------------------------------

例)
パッチ1とパッチ2を結合する場合
-------------------------------
mergePatchPairs
(
(pach1 patch2)
);
-------------------------------