計算モデル
図1に示すように、2次元モデルで、領域は矩形で、内部に二つの境界を含む問題を挙げる。 内部の2つの境界と、外側の境界にディレクレ条件として境界値を設定した問題をGetDPで解くことを目指す。
モデルの作成:Gmsh
Gmshでのモデル作成手順は、形状を1次元、2次元、そして3次元と順々に定義していく方式をとっている。
まず、Gmshを立ち上げる。
図2にあるように、Modules→Geometry→Elementary entities→Addには、Parameterからいろいろな幾何学的オブジェクトが並んでいる。 ユーザはこのなかからクリックすることで選択し、ソフトウェアの右のグラフィック画面かポップアップダイアローグに座標数値をいれることによって設定していく。 以降、モデルの作成について順に説明していく。
まず最初にファイルを指定する。 メニューバーから、File→New Fileを選択し、 electrode.geoと入力する。
さて、次はモデルのカド点を入力していこう。
Pointデータを入力する前に、Parameterを定義する。 ここで定義したParameterは、座標の数字の代わりに入力出来るので便利である。 まずここでは、lcというParameterを定義する。 これは、Pointの属性で、計算格子をどのくらいの大きさにするかを指示するためのものである。 値はメートルで入力する。
Add→Parameterをクリックすると、ポップアップダイアローグが現れるので、Nameはそのままで、ValueもそのままにしてAddボタンを押下する。
次にAdd→Pointをクリックすると図3に示すポップアップダイアローグが現れる。 ユーザはここに座標を入力していく。 全て入れ終わったら、"e"をタイプして最後のデータを確定した後、終了を示す"q"をタイプするとダイアローグが消える。 入力するデータは、
0, 0, 0 1,1,0 0,1,0 0.2, 0.7, 0 0.2, 0.3, 0 0.3, 0.3, 0 0.3, 0.7, 0 0.7, 0.7, 0 0.7, 0.3, 0 0.8, 0.3, 0 0.8, 0.7, 0
である。また、ダイアローグのPrescribed mesh size at pointに、先ほどParameterで指定したlcを入力する。 これを指定することによって、この定義した点の当たりでは、0.1メートルを基準に計算格子が生成される。
さて、ここで、サイドメニューの Modules→Geometry→Edit Scriptを選択すると、設定されたデータが以下のように表示される
//+ lc = DefineNumber[ 0.1, Name "Parameters/lc" ]; //+ Point(1) = {0, 0, 0, lc}; //+ Point(2) = {1, 0, 0, lc}; //+ Point(3) = {1, 1, 0, lc}; //+ Point(4) = {0, 1, 0, lc}; //+ Point(5) = {0.2, 0.7, 0, lc}; //+ Point(6) = {0.2, 0.3, 0, lc}; //+ Point(7) = {0.3, 0.3, 0, lc}; //+ Point(8) = {0.3, 0.7, 0, lc}; //+ Point(9) = {0.7, 0.7, 0, lc}; //+ Point(10) = {0.7, 0.3, 0, lc}; //+ Point(11) = {0.8, 0.3, 0, lc}; //+ Point(12) = {0.8, 0.7, 0, lc};
次に点から線、つまりLineを定義していく。
サイドメニューからPointの下のStraight lineを選択する。 グラフィック画面で線の最初と終わりの点をクリックして定義していく。 最初のテント最後の点を指定することによって、Straignt Lineが定義されていく。 全部指定し終わると、図1が表示される。
次は計算領域である2次元面を指定するために、境界を指定していく。 Gmshではこの閉じた曲線(2次元の場合)の指定を、Plane surfaceで行う。 サイドメニューから選択し、画面上で指定する境界の一部をクリックすると、選択された境界が黒から赤に変化して選択領域を示してくれる。
全ての境界(今回は3個所)を指定し終わったら、次は計算領域を指定する。 2次元の計算領域を指定するのは、Surface fillingである。 今回のように領域内部に穴がある場合、これを設定するときには順序が重要である。 まず、計算領域を含む領域の境界を選択する。すると境界が赤くなる。 次に穴の領域の境界を順次選択していく。 画面にも表示されるが、最初に指定された境界から、その後の領域は、領域内部の「穴」として除外されていく。
以上で、形状の定義そのものは終了した。 GetDPで解析するためには、さらに、Physical Regionを指定していかなければならない。 サイドメニューから、Geometry→Physical groups→Addから、Lineを選んで境界を指定していく。
ここで注意が必要なのは、ここで指定していく境界は、物理的な意味でも共通なグループを指定していくという事である。 つまり、電位の値が0である境界、1である境界、ということを注意してライングループを選択していく。
ここでは、外側の4辺、内側の左の穴まわりの4辺、右の穴周りの四辺をそれぞれ一つのグループとしてしていし、それぞれ、ポップアップダイアログ(図4)ID番号を2000,2001,2002と指定する。
そして、最後に、Surfaceを
全て設定し終わると、electrode.geoは、
... //+ Line(1) = {4, 1}; //+ Line(2) = {1, 2}; //+ Line(3) = {2, 3}; //+ Line(4) = {3, 4}; //+ Line(5) = {5, 6}; //+ Line(6) = {6, 7}; //+ Line(7) = {7, 8}; //+ Line(8) = {8, 5}; //+ Line(9) = {9, 10}; //+ Line(10) = {10, 11}; //+ Line(11) = {11, 12}; //+ Line(12) = {12, 9}; //+ Line Loop(1) = {1, 2, 3, 4}; //+ Line Loop(2) = {5, 6, 7, 8}; //+ Line Loop(3) = {9, 10, 11, 12}; //+ Surface(1) = {1, 2, 3}; //+ Physical Line(2000) = {4, 1, 2, 3}; //+ Physical Line(2001) = {5, 8, 7, 6}; //+ Physical Line(2002) = {9, 12, 11, 10}; //+ Physical Surface(1000) = {1};