6.2 mesh ファイルの構造

ここは、リーバース・エンジニアリングする。

正方形領域 $ (0,1)\times(0,1)$ を次のようなコードで分割してみよう。 正方形の辺のうち、左と下にあるものに $ 1$ というラベル、 右と上にあるものに $ 2$ というラベルをつけている。
int Gamma1=1, Gamma2=2;
border Gamma10(t=0,1) { x=0; y=1-t; label=Gamma1; }
border Gamma11(t=0,1) { x=t; y=0; label=Gamma1; }
border Gamma20(t=0,1) { x=1; y=t; label=Gamma2; }
border Gamma21(t=0,1) { x=1-t; y=1; label=Gamma2; }

int m=2;
mesh Th = buildmesh(Gamma10(m)+Gamma11(m)+Gamma20(m)+Gamma21(m));

savemesh(Th,"Th.msh");
として Th.msh を作ると
9 8 8
0 0 1
0 1 2
0 0.5 1
0.5 0 1
1 0 2
0.499999999488 0.499999999488 0
0.5 1 2
1 0.5 2
1 1 2
7 8 9 0
1 4 3 0
4 5 8 0
6 8 7 0
4 6 3 0
4 8 6 0
2 3 7 0
7 3 6 0
9 7 2
7 2 2
5 8 2
8 9 2
1 4 1
4 5 1
2 3 1
3 1 1

図 2: $ m=2$ の時の三角形分割の様子 (Th.msh に対応)
\includegraphics[width=10cm]{eps/Th2.eps}
多分次のようなフォーマットになっているのであろう。

総節点数$ n$     総要素数$ m$     境界に属する辺の数 $ N$
節点 $ P_0$ $ x$ ,$ y$ 座標とラベル(0 は内点)
    $ \vdots$
節点 $ P_{n-1}$ $ x$ ,$ y$ 座標とラベル(0 は内点)
要素 $ e_0$ の3節点の節点番号と 0
要素 $ e_1$ の3節点の節点番号と 0
    $ \vdots$
要素 $ e_{m-1}$ の3節点の節点番号と 0
境界に属する辺 $ Q_0$ の両端の点の節点番号とラベル
    $ \vdots$
境界に属する辺 $ Q_{N-1}$ の両端の点の節点番号とラベル
(FreeFem++ の内部では、番号は 0 からつけるのが基本のようである。 エラーメッセージを読むときは、そのことを念頭におくこと。)

桂田 祐史
2018-01-17