要素メッシュの生成

メッシュ生成の機能を使うためには,有限要素法(FEM)のパッケージをロードしなければならない.

パッケージをロードする.

はじめに

数値解法の多くでは,関心領域をその領域の近似で置き換えて使う.この近似は,離散領域と呼ばれる.離散領域は,より小さい要素の集まりに分割され,これらの要素を合計すると,離散領域全体になる.この分割された離散領域は,メッシュと呼ばれる.そうすると,数値解を求めることは,より小さな要素についての解を計算してから,部分的な解をメッシュ全体の解になるように組み合せることに基づく.

NDSolveは例えば,内部で領域ElementMeshオブジェクトに変換する.このElementMeshは,数値解析が行われる領域の離散的な近似バージョンである.NDSolve等の数値関数は,記号的な領域記述の代りに,ElementMeshを入力として受け取ることができる.このことは,メッシュ生成のプロセスにおいて大きな柔軟性を与える.実際要素メッシュは,例えば外部ツールによって生成することも可能になる.

いろいろな方法でElementMeshを作成することができ,さまざまな関数がメッシュ作成のプロセス中の手助けをするために提供されている.ElementMeshを作成する主な関数として,ToElementMeshがある.ToElementMeshは,概念的に異なるさまざまなメソッドでElementMeshを作成することを可能にする.

ElementMeshをNDSolveに渡す

最初の例として,ディリクレ(Dirichlet)境界条件を持つポアソン(Poisson)偏微分方程式を標準的な方法で解く.このプロセスの間に,メッシュが内部的に生成される.次のステップでは,このメッシュがNDSolveへの引数として事前定義され与えられる.

領域を設定する.
偏微分方程式の演算子を設定する.
境界条件を指定する.
偏微分方程式を解く.
解の等高線プロットを上部の補間関数からの要素メッシュでプロットする.

NDSolveが有限要素法を利用した場合には,Interpolation関数がElementMeshを保存することに注意する.ElementMeshが補間関数とともに保存された場合には,それを抽出することができる.

ElementMeshを補間関数から抽出する.

陰的なパラメトリック領域を指定する代りに,明示的なElementMeshを指定することも可能である.これは,ToElementMeshを使って行うことができる.

4つの三角要素で明示的なメッシュを定義する.
要素メッシュのワイヤフレームを表示する.

要素メッシュの可視化についての詳細は,要素メッシュの可視化についてのチュートリアルを参照されたい.

次に,同じ偏微分方程式を解く.今回は,明示的なメッシュのみが定義されている.

偏微分方程式をElementMeshで解く.
これで解の等高線プロットが作成され,要素メッシュがプロットされる.

ほとんどの場合,4つの要素だけでは,正確な解を表すのには十分ではないことを心に留めておくべきである.

MeshOptionsを通してElementMesh作成のオプションをNDSolveに渡す

ToElementMeshToBoundaryMeshのオプションはすべて,NDSolveに直接与えることができる.

要素メッシュ生成に影響を与えるオプション付きで,偏微分方程式を解く.

代りに,要素メッシュをシミュレーションの前に生成し,NDSolveに与えることも可能である.

要素メッシュを生成し,メッシュを可視化して,偏微分方程式を解く.
要素メッシュの生成に影響を及ぼすために与えられたオプションで,時間依存の偏微分方程式を解く.

NDSolveのオプションの指定とその解法段階についての詳細は,NDSolveの「詳細とオプション」のセクションに記載されている.

NDSolveにメッシュが与えられた場合には,メッシュオプションは使っても効果がなくなる.

ElementMeshとMeshRegionを比較する

ElementMeshの機能についてさらに詳しく説明する前に,ElementMeshオブジェクトをMeshRegionオブジェクトと比べてみるとよいかも知れない.

ElementMeshのデフォルトの"MeshOrder"は,2である.

ElementMeshのメッシュ次数を調べる.

メッシュ次数を通して表現されたより高次の要素を取り扱えるということには,2つの明らかな利点がある.

ElementMeshでの領域の近似

ElementMeshを作成するには,完全なメッシュにToElementMeshを使う,あるいは境界メッシュ表現にToBoundaryMeshを使う方法がある.

ToElementMeshが呼び出されると,ToBoundaryMeshがまず内部で呼び出される.ToElementMeshですべてを行うことも可能であるが,完全なメッシュを生成する前に,境界メッシュをチェックすると便利なこともある. ToBoundaryMeshは特に境界上のマーカーを使う場合に有用である.

手作業のメッシュ作成

最小のElementMeshは,座標と要素からなる.次の要素が利用できる.

線分メッシュ

1Dメッシュとしては,メッシュ要素 eiLineElementである.境界要素 biPointElementである.

3つの座標と2つの線分要素を持つ線分要素メッシュを作成する.
要素メッシュのワイヤフレームを可視化する.

三角メッシュ

2Dメッシュとしては,メッシュ要素 eiTriangleElementまたはQuadElementである.境界要素 biLineElementである.

三角メッシュを作成するには,座標と三角要素が必要である.線形三角形には3つのインシデントが含まれ,要素タイプはTriangleElementである.インシデント中の整数の数がメッシュの次数を決定する.三角形の場合は,1つの要素につき3つのインシデントが線形三角形に対応し,この三角形が一次メッシュに対応する.インシデントは反時計回りに与えられなければならない.

6つの三角要素で三角要素メッシュを作成する.
メッシュ次数を調べる.
要素メッシュのワイヤフレームとインシデント番号付きの座標を可視化する.

要素と要素の接続性が要素についての近傍情報を提供する.

要素のIDを黒字で,ノードのIDを赤字で表した要素メッシュのワイヤフレームを可視化する.

第1要素の第1の辺はノード{3,2}を繋ぐもので,近傍要素を持たないので,0である.ノード2を中央のノードに繋ぐ第2の辺は,第2要素に繋がれている.第3要素は,中央のノードをノード3に繋ぐ辺を持ち,この辺は第6要素に繋がれている.第4要素以降の要素すべてについても同じように取り扱われる.

要素の接続性についての情報を抽出する.

TriangleElement等の要素コンテナは,マーカーも含むことができる.これらは,別の物質領域に印を付ける際に便利である.マーカーの数は,要素の数と同じでなければならない.

6つの三角要素を含む三角要素メッシュを作成する.
要素のマーカーを赤字で示し,要素メッシュのワイヤフレームを可視化する.

ここまでは,三角メッシュは一次であった.二次三角メッシュは,1つの要素について6つのインシデントを持つ.追加の座標は,中間のノードである.したがって,二次三角要素には,6つのインシデントが含まれる.最初の3つは線形インシデントであり,次の3つは二次インシデントである.TriangleElementを参照されたい.

二次メッシュの座標を指定する.
マーカーなしの6つの二次三角要素を指定する.
二次メッシュを作成する.
二次メッシュを可視化する.

要素メッシュの可視化の詳細は,要素メッシュの可視化についてのチュートリアルを参照されたい.

クワッドメッシュ

QuadElementメッシュは,TriangleElementメッシュとまったく同じように働く.唯一の違いは,線形クワッド要素については,1つの要素につき4つのインシデントが必要で,二次要素については,1つの要素につき8つのインシデントが必要な点である.

円形の外周上に座標を構築する.
対応するインシデント.
クワッド要素メッシュを作成する.
要素メッシュのワイヤフレームを可視化する.

マーカーをTriangleElementの場合とまったく同じ方法で与えることもできる.

2Dにおける複合要素タイプのメッシュ

2Dメッシュについては,メッシュ要素 ei は,TriangleElementQuadElementを組み合せたものでもよい.境界要素 biLineElementである.

複合要素メッシュを作成する.
要素メッシュのワイヤフレームを可視化する.

複合要素メッシュのすべての要素は,同じ次数でなければならない.一次三角要素と二次クワッド要素を同じメッシュに持つことは不可能である.

複合タイプの要素メッシュもマーカーを持つことができる.

上の要素から要素インシデントを抽出し,整数マーカーを加える.

要素の接続性は,マーカー境界についての情報を保つ.2つの繋がれている要素のマーカー値が異なる場合は常に,その要素の要素接続性エントリは負である.

上のグラフィックスでは,マーカー1を持つ要素番号2が,マーカー2を持つ要素番号4と繋がっている.このマーカー地におけるジャンプの要素接続性は,負の符号に保存される.

要素接続性を抽出する.

境界層メッシュとしても使える2D複合要素メッシュの例は,偏微分方程式のモデルコレクションに記載されている.

2Dにおける境界メッシュ

境界メッシュは,完全なメッシュを生成する場合に有用である.2Dでは,境界要素 biLineElementである.

6つの座標と1つの境界線を持つ境界メッシュ.
境界メッシュを可視化する.
境界メッシュを完全なメッシュに変換し,可視化する.
6つの座標,1つの境界線,1つの分割を持つ境界メッシュ.
境界メッシュを可視化する.
分割を尊重し,可視化して,境界メッシュを完全なメッシュに変換する.

境界メッシュには,メッシュの一部になるように,境界領域内に任意の点を加えることができる.

境界座標と円上に置かれるいくつかの点を作成する.
境界メッシュを作成する.
与えられるすべての座標は,参照された点要素である.
境界メッシュと点要素を可視化する.
完全なメッシュを可視化する.

四面体メッシュ

三次元の手作業によるメッシュ作成は,一次元や二次元の場合と同じような手順を踏む.

マーカー付きの線形四面体要素メッシュ.
それぞれの位置で座標の指標を可視化する.
メッシュを作成する.
メッシュを要素のマーカーとともに可視化する.

六面体メッシュ

円形の外周上の座標を構築する.
線形インシデント.
六面体要素メッシュを作成する.
境界要素メッシュのワイヤフレームを可視化する.

3Dにおける複合要素タイプのメッシュ

3Dメッシュについては,メッシュ要素 ei は,TetrahedronElementHexahedronElementのいずれでもあり得るが,PrismElementでそれらが繋がれていない限り,どちらもであることはない.

3Dにおける境界メッシュ

境界メッシュは,完全なメッシュを生成するのに有用である.3Dでは,境界要素 biTriangleElementQuadElementである.

以下は,3D空間内の座標である.
境界要素としてのクワッド要素.
境界メッシュを作成する.
完全なメッシュを可視化する.

記号領域

記号領域の表現の使用と,その表現からElementMeshへの変換は,簡単である.任意のグラフィックスプリミティブを使って記号領域が表現できる.

Diskの記号領域を作成する.
その記号領域をElementMeshに変換する.
メッシュを可視化する.
3Dの記号領域からメッシュを作成して可視化する.

記号領域のブール結合も可能である.

領域の差からメッシュを作成し可視化する.

ToBoundaryMeshToElementMeshにあるその他の多くの例を参照されたい.

数値領域

NumericalRegionは,記号的な領域表現と境界,および完全な要素メッシュを組み合せるためのものである.これは,現在自動化されているメッシュ生成を超える柔軟性を追加してくれる.例えば,ToBoundaryMesh"MaxBoundaryCellMeasure"オプションを使うと,最大境界セルの大きさを制御することが可能であるが,このオプションでは境界の一部だけを細分化することはできない.そうすると,境界全体を細分化することによって,不要なメッシュ要素が数多く生成されてしまうこともある.この問題を回避する一つの方法に,手動で境界メッシュを生成する方法がある.さらに,領域の記号的表現があれば,最小要素を含む高品質な二次メッシュを生成することが可能である.

記号領域を指定する.
メッシュを生成する.
メッシュ全体を調べる.

この場合には,メッシュ生成過程において,領域中央の小さな穴を細分化することができなかった.PrecisionGoal 増やすことによって解決可能であるが,必ずしも最適の解決法とは限らない.

より高いPrecisionGoalを使って小さな特徴の問題を解決する.
メッシュ全体を調べる.

メッシュ要素の数が大幅に増えた.これを回避する一つの方法に,記号領域の記述を組み合せて,手動で境界メッシュを生成し, それらを最終的なメッシュのNumericalRegionに組み合せる方法がある.NumericalRegionは,ToNumericalRegionで生成される.

NumericalRegionを記号領域表現から生成する.

手動で境界メッシュを生成するということは,領域の各部分を別々に生成してから,新しい境界メッシュでそれらを組み合せるということである.

2つの領域について境界メッシュを生成する.
それらの境界メッシュから境界要素を抽出する.

新しい境界メッシュは,両方のメッシュからの座標を結合してから新しい境界要素のリストを構築することにより生成する.新しい境界要素リストは,1つ目の境界メッシュからの境界要素と,2つ目の境界メッシュからの境界要素の指標を移動させたものを組み合せたものである.この場合,2つ目のメッシュの座標が1つ目のメッシュの座標の後ろに隠れてしまうので,指標は移動させる必要がある.

手動で境界メッシュを生成する.
境界メッシュと,その境界メッシュを拡大した領域を可視化する.
数値領域を新しい境界メッシュと連結させる.
数値領域内の記号領域を調べる.
数値領域内の境界要素メッシュを調べる.
数値領域から完全なメッシュを生成する.境界要素は一次であるが,数値領域が必要な中点ノードを正しく配置するので,要素を二次にすることができる.

同じ近似品質でもメッシュ要素の数はかなり少なくなる.

ワイヤフレームメッシュを調べる.
メッシュが二次メッシュであることを確かめる.

境界要素メッシュを結合させることは,境界要素メッシュが分かれている場合に最もうまくいく.交点は通常大丈夫だが,2Dにおいて重複している辺あるいは3Dにおいて重複している面については,問題になることがある.このアプローチは,部分領域の大きさの違いが大きい場合に使うとよい.その他の場合には,部分領域の作成は, 次のセクションで説明するように,ブール演算を"RegionHoles""RegionMarker"オプションと組み合せた形で処理する方がよい.

特別な目的のメッシュ

領域の積

2Dおよび3Dのメッシュを作成するもう一つの方法に,領域の積を利用することがある.1Dメッシュに別の1Dメッシュを掛けると2Dメッシュが作成され,2Dメッシュに1Dメッシュを掛けると3Dメッシュが作成される.

1Dメッシュを作成する.
2つの1Dメッシュの領域の積を形成する.
2D領域の積を可視化する.

領域の積は,記号領域からも作成できる.

アニュラスの粗いメッシュを作成し可視化する.
2Dメッシュに粗い1Dメッシュを掛けた領域を作成する.

グレーデッドメッシュ

関数ToGradedMeshは,1Dのグレーデッドメッシュを生成する.グレーデッドメッシュは,ノードが非一様に分布するメッシュである.

左に座標が集中するグレーデッドメッシュを作成する.
メッシュを可視化する.

左にノードがより集中していることに注目されたい."Right""BothEnds""Central""Uniform"等,その他の形式のアラインメントも可能である.またカスタムのアラインメント関数を与えることもできる.

グレーデッドメッシュは,数多くの状況に役立つ.無限の範囲を模倣するために,比較的大きな領域をモデル化して,1つの部分にだけノードが集中するようにできる.これは,ToGradedMeshの関数ページのにある通りである.グレーデッドメッシュが便利である別の分野には,材料の境界が不連続である場合がある.問題のある領域においてノードが集中しているグレーデッドメッシュを生成すると,解の近似の質が向上し,ときにはかなり向上することもある.

ElementMeshRegionProductを使うと,2Dおよび3Dのグレーデッドメッシュを作成することもできる.

"Central"の点分布を持つ1Dのグレーデッドメッシュを作成する.
"Central"の点分布と50個の要素を持つ,2つ目の1Dのグレーデッドメッシュを作成する.
領域の積を構築する.
異方性メッシュの領域の積を可視化する.
"BothEnds"の点分布と50個の要素を持ち,端点の距離が1/200である,3つ目の1Dのグレーデッドメッシュを作成する.
領域の積を作成する.
3Dのグレーデッドメッシュを可視化する.

その他の例については,ToGradedMeshおよびElementMeshRegionProductのアプリケーションセクションを参照されたい.

完全整合層のメッシュ

完全整合層(PML) は,メッシュと対応する偏微分方程式を拡張し,PML内の信号の減衰を可能にする.これは,無限に拡張された領域を模倣するが,有限サイズの領域を使うという点で便利である.これらのタイプのメッシュの作成は,特定の例を見ることによって説明すると最も分かりやすい.音響学については,時間領域におけるPML周波数領域におけるPMLの使用と作成についての説明がある.3DのPMLの電磁気の例もある.

等高線からのメッシュ

等高線があるメッシュあるいは境界線を持つオブジェクトのメッシュが必要になることもある.そのようなメッシュは流動的なシミュレーションに使われることが多い.例えば,平面等のオブジェクトの周りの流体のシミュレーションを行う場合がそうである.このセクションでは,ピコ島の周りのメッシュがどのように作成されるかを示す.データは,島の地理オブジェクトから取り出したものである.

島の位置を指定し,地理グラフィックスを可視化する.
地理グラフィックスから地理標高データを抽出する.
データを切り取り,大きさを変更する.
データをダウンサンプリングする.
"ReliefMap"テクスチャを使ってデータを可視化する.
起伏図の離散化を行う.
境界ボックスの側面と上面を作成する.

ボックスの底面は開いていることに注意する.

境界ボックスと起伏の離散化を結合する.
メッシュを作成する.
最終的なメッシュを可視化する.

次に,メッシュの一部が削除された起伏図を表す可視化を生成する.このためには,各要素の中心を計算し,最終的な可視化に表示したい要素だけを選ぶ.

各要素の中心を計算する.
最終的な可視化にどの要素を表示するかを選ぶ.
メッシュと起伏図の部分的な可視化を表示する.

領域の近似の質

LinePolygon等のグラフィックスプリミティブ,あるいはMeshRegionでは,ElementMeshに変換しても無損失である.例えば,RectangleElementMesh表現は,Rectangle自身が領域を表すのと同じぐらい厳密あるいは不正確である.近似の質を推測する1つの方法は,可能な場合に,問題の領域範囲を比べることである.

Rectangle上で数値積分を行う.
RectangleElementMesh離散化の範囲を合計する.

これを例えばDiskと比べてみよう.どれぐらい細かくメッシュが作成され,要素のメッシュ次数がどれほど高くても,離散化は近似にすぎない.

厳密値と,DiskElementMesh離散化の範囲の合計との差分.

境界点は境界に近いものであるが,相違が存在する.

境界座標の近似の質を調べる.
メッシュ次数がDiskの近似に与える影響を調べる.

Diskの場合,ElementMeshが曲線の境界メッシュ要素を持つことができるので,メッシュ次数が重要な役割を果たす.

境界上のメッシュ粒度がDiskの近似に与える影響を調べる.

また,境界の粒度は,どのくらいうまく領域が近似できるかということにおいて影響を与える.領域変換の全体的な確度は,AccuracyGoalを通して制御される.

Diskの一次近似に対してAccuracyGoalを指定する.
Diskの二次近似に対するAccuracyGoalの影響を調べる.

内部では,まずNumericalRegionが作成される.ToBoundaryMeshがその数値領域に対して呼び出されてから,完全なメッシュが作成される.これが境界上の新しいノードを取り込むことがある.二次メッシュでは,追加で中間のノードが挿入される.その後,これらの新しい境界ノードの位置を改善する関数が呼び出される.

Diskの二次近似について"ImproveBoundaryPositions"の影響を調べる.

この場合は,結果は一次近似と変わらない.

NumericalRegionには,領域の厳密な記号表現,境界ElementMeshおよび完全なElementMeshを含むことができる.記号領域が使用でき,境界ノードの厳密な位置と境界上のより高次のノードを求めることができるので,境界ノードの位置は改善される.この過程については,Numerical Regionsのセクションでさらに詳しく説明する.

境界メッシュの作成のために,2つの境界メッシュ生成器が使用できる.1つ目はRegionPlotに基づき,"RegionPlot"と呼ばれる.これは,高速の境界近似を提供する.デフォルトの境界メッシュ生成器は,"Continuation"と呼ばれ,継続法に基づく.この境界メッシュ生成器は,いくぶんゆっくりではあるが,高い確度が達成できる.

尖点を含む領域を設定する.
"Continuation"の境界メッシュ生成器を使い,メッシュを可視化する.
領域Ωの範囲を近似と比べる.

対比として,結果を高速の領域プロットメソッドと比べる.

"Continuation"の境界メッシュ生成器を使い,メッシュを可視化する.

視覚的に調べると,尖点がうまく解像されていないことが分かる."RegionPlot"の近似は,サンプル点の数を増やす(これはPlotPoints)に似ている)ことによって改善されることがある.

デフォルトの境界メッシュ生成器をより多くのサンプル点と一緒に使い,メッシュを可視化する.
領域Ωの範囲を近似と比べる.

要素メッシュの質

領域がどれほど要素メッシュによってうまく近似されているかにかかわらず,メッシュの要素自体も,数値タスクの解に影響を与える.さまざまな数値アプリケーションについて,要素メッシュに対するさまざまな制約条件が影響してくる.有限要素法では,以下が大きな離散化エラーを引き起す[4].

線分要素メッシュ

各線分要素については,メッシュの質はデフォルトで1である.

三角要素メッシュ

三角要素メッシュの質は,次の公式に従って計算される [1, 2].

ここでは, は三角形の範囲であり, 番目の辺の長さである.

最適な三角要素.
クワッド要素メッシュ

クワッド要素の質は,次の公式に従って計算される.

ここでは, はクワッドのiの範囲であり, 番目の辺の長さである.

最適なクワッド要素.四面体要素メッシュの質は,
四面体要素メッシュ

四面体要素メッシュの質は,次の公式に従って計算される [1, 3].

ここでは, は四面体の体積であり,として実装される. 番目の辺の長さである.

最適な四面体要素.
六面体要素メッシュ

六面体要素メッシュの質は,次の公式に従って計算される .

Hereここでは, は六面体の体積であり, 番目の辺の長さである.

最適な六面体要素.
参照

[1] J. R. Shewchuk, "What Is a Good Linear Finite Element? Interpolation, Conditioning, Anisotropy, and Quality Measures (Preprint)," 2002, unpublished.

[2] R. P. Bhatia and K. L. Lawrence, "Two-Dimensional Finite Element Mesh Generation Based on Stripwise Automatic Triangulation," Computers and Structures, 36, 1990 pp. 309319.

[3] V. N. Parthasarathy, C. M. Graichen, and A. Hathaway, "Fast Evaluation & Improvement of Tetrahedral 3-D Grid Quality," 1991 (manuscript).

[4] S.-W. Cheng, T. K. Dey, and J. R. Shewchuk, Delaunay Mesh Generation, Boca Raton: CRC Press, 2013.

低品質要素を可視化する

低品質の要素を含むメッシュが生成される場合には,これらの要素を可視化してから,その特定の範囲における質に対処することが必要になることがある.

スペースシャトルのオービタを要素メッシュに変換する.
要素メッシュの曲面を可視化する.
要素メッシュの質を計算し,最低品質等の数量を概観する.
メッシュ要素の品質分布を可視化する.

メッシュの平均的な質を改善することは可能であるが,悪い質の推定を持つ要素が,形状のコーナーにある可能性もある.形状が形に影響するので,必ずしもこれらの要素の質を改善できるとは限らない.しかしながら,質についてわきまえておくことは大切である.

より小さな最小の辺の率を要求することによって,要素メッシュの質を改善する.これは結果としてより多くの要素を生成する.
質のデータを計算し,質の数量を概観する.

全体的な平均の質が改善されたことが分かる.しかし,メッシュにはより多くの要素が含まれることになり,数値解析に少し余計に計算時間がかかるようになった.

境界メッシュを可視化する.

一定の閾値より低い要素を可視化するためには,低品質の要素がメッシュ要素の質のリストから選ばれ,可視化される.

0.1より低い質のメッシュ要素を可視化する.
0.1より低い質のメッシュ要素を,すべてのメッシュ要素と組み合せて可視化する.

部分領域を持つ要素メッシュ

偏微分方程式が,複数の物質からなる領域とインタラクトするということがよくある.偏微分方程式の解は,メッシュ要素が内部材料の境界と交差しない場合の方が高品質のものになる.このことを示すために,変数拡散係数を持つ偏微分方程式をもう一度考慮し,2つの領域について解く(「有限要素法で偏微分方程式を解く」)を参照のこと.).1つの領域は内部境界を尊重するが,もう一つの領域はしない.

内部境界を持つ境界要素メッシュと内部境界を持たない境界要素メッシュを作成し,可視化する.

拡散係数は,でジャンプの不連続を持つ.

空間依存する拡散係数を設定する.
要素メッシュを作成し,可視化する.
偏微分方程式の演算子と境界条件を指定する.
各メッシュ上で方程式を解く.
解を可視化する.
2つの解の間の差分を可視化する.

次の例は,部分領域を持つ円上の領域を示す.部分領域の中には,穴がある.

外側の環帯と内側の領域の穴を設定する.
領域を表示する.

内側の境界を守る領域からメッシュを簡単に作るために,領域の設定はすべての内側の境界が作成されるような方法で行われる.

領域を陰的な領域として指定し,要素メッシュを作成する.

次に,部分領域内の穴の部分と穴ではない部分が,領域の穴を明示的に指定することによって,反転される.

指定の領域の穴を持つメッシュを作成する.

その後,例えば部分領域の1つをさらに細かくするということも可能である.

部分領域を細緻化する.

一点気を付けなければならないのは,DirichletConditionのような境界条件をTrueの領域述部に適用することである. Trueを述部として指定することによって,内部境界を含めたすべての境界にDirichletConditionが適用される.これは必ずしも意図される結果ではないかもしれない.その場合には,ディリクレ条件が適用されるべき境界部分を明示的に指定した方がよい.DirichletConditionの「考えられる問題」セクションも参照されたい.

部分領域を持つメッシュを作成するためには,穴のある領域を作成することを完全に避けるとよい場合もある.これは,"RegionHoles"オプションをNoneに設定することで指定できる.

領域の穴を作成しないようにして,メッシュ要素マーカーを可視化する.

三次元において材料領域を作成する方法についての追加情報は,OpenCascadeLinkに記載されている.

マーカー

マーカーは,メッシュの要素に関連付けられている正の整数番号である.メッシュにおけるマーカーの主な目的は,偏微分方程式指定において,十歳の座標から(境界)述部を切り離すことにある.つまり,偏微分方程式が指定されたときに,偏微分方程式が座標から独立するように指定することができる.この機能は,シミュレーションの領域が変化する可能性があるが,偏微分方程式は変化しないといういう場合に便利である.

マーカーには3種類ある.

マーカー付きの式を評価する

ElementMarkerに依存する式を評価したい場合がある.これは関数EvaluateOnElementMeshを使って行うことができる.

マーカー付きのメッシュを作成する.
マーカー付きのメッシュを可視化する.
ElementMarkerを含む式を作成する.
メッシュ上で式を評価する.

メッシュ上で式を評価すると,他の関数と同じように使える補間関数が返される.

関数上で数値的に積分する.
積分が正しいことを確かめる.

返された補間関数は,他の補間関数と同じように振る舞う.

データ範囲外で補間関数を評価する.

この振舞いは,ElementMeshInterpolationに説明されるように変更することができる.

指定された外挿ハンドラを使って,メッシュ上で式を評価する.
データ範囲外で補間関数を評価する.

EvaluateOnElementMeshの使用は,非連続な係数のオーバーシュートまたはアンダーシュートの問題のセクションで説明されるように,オーバーシュートおよびアンダーシュートに繋がることがある.

単位

ときには,メッシュのスケールを再設定しなければならないことがある.例えば,インポートされたメッシュが正しいスケールではない場合や,許容範囲の問題を避けるためにメッシュが別のスケールで生成され,後のステップで調整しなければならない場合がある.

境界メッシュを生成する.
メッシュの長さの単位を調べる.
長さの単位を設定する.
メッシュの座標のスケールを再設定する.

しかしながら,後に行う有限要素解析で,結果の数値のよりよい安定性のために,偏微分方程式係数を再設定したほうがよいこともある.

他の関数での要素メッシュ

領域メンバーシップのテスト

ある点について,その点が領域にあるかどうかは,RegionMemberを使ってテストすることができる.

領域を作成し,点が領域内にあるかどうかをテストする.

いったん領域が指定されると,それを有限要素法で使うためには,領域をほぼ網羅する要素にそれを部分分割する,つまりメッシュにしなければならない.メッシュがすでに利用可能である場合には,ElementMeshRegionMemberが使える.

メッシュを作成し,点がメッシュ内にあるかどうかをテストする.

点の集合がメッシュにされた領域内にあるか,それとも領域外にあるかをテストする.

多くの点がメッシュにされた領域内にあるかどうかをテストする.

領域の境界に近い点については,誤った結果が出される可能性がある.これは,二次近時が連続境界を正しく表すのに十分ではない場合でさえもあり得ることである.

多数の点について,それらが領域に含まれるかどうかをテストし,厳密な領域に含まれないものを抽出する.
境界に近い点とともにメッシュを可視化する.

これについて一つ可能なことは,領域の境界を精緻化することである.

補間

NDSolveが有限要素法を通して偏微分方程式の解を計算する場合には,返されたInterpolatingFunctionには要素メッシュが含まれる.

偏微分方程式を解く.
ポアソン方程式に返されたInterpolatingFunctionからElementMeshを得る.

ElementMeshからInterpolatingFunctionを構築することも可能である.

ElementMeshを作成する.
メッシュの座標上で関数を評価する.
ElementMeshInterpolationを使って,InterpolatingFunctionを作成する.
InterpolatingFunctionを可視化する.

補間関数は,偏微分方程式の係数として使うことができる.補間関数のメッシュが偏微分方程式の解の過程のメッシュと同じである場合には,解の過程はより速くなる.

偏微分方程式と補間関数について同じメッシュが使われる場合に,偏微分方程式を解くのに必要な時間を測定する.
偏微分方程式と補間関数について同じメッシュが使われない場合に,偏微分方程式を解くのに必要な時間を測定する.

補間関数と偏微分方程式の解に同じメッシュを使うとより効率的であることが分かる.