NDSolve`FEM`
NDSolve`FEM`

ToElementMesh

ToElementMesh[r]

領域 r からElementMeshオブジェクトを生成する.

ToElementMesh[r,{{xmin,xmax},}]

境界ボックス[x_(min),x_(max)]x...に制約された領域 r からのElementMeshオブジェクトを生成する.

ToElementMesh[rules]

座標と要素を指定する rules の集合からElementMeshオブジェクトを生成する.

ToElementMesh[emesh]

既存のElementMeshMeshRegionBoundaryMeshRegionのいずれかから,新しいElementMeshオブジェクトを生成する.

詳細とオプション

  • ToElementMesh[r]は,記号的である可能性のある領域 r を近似するElementMeshオブジェクトを生成する.
  • 領域 r の指定には,幾何学領域ImplicitRegionによって説明されるオブジェクトが含まれる.
  • 領域 r は,ConstantRegionQTrueを与える定数領域でなければならない.
  • 領域 r の近似を生成するには,ToElementMeshはまずToBoundaryMeshを呼び出す.
  • ToElementMesh[rules]では,rules は以下の順序で与えられなければならない.
  • "Coordinates"->{c1,c2,}座標が c1c2になるように指定する必要がある
    "MeshElements"->{e1,}メッシュの要素が e1になるように指定する必要がある
    "BoundaryElements"->{b1,}メッシュの境界要素が b1になるように指定する(必須ではない)
    "PointElements"->{p1,}メッシュの点要素が p1になるように指定する(必須ではない)
  • 1D要素メッシュでは,"MeshElements"LineElementである."BoundaryElements""PointElements"は,指定されると,PointElementである.
  • 2D要素メッシュでは,"MeshElements"は,TriangleElementでもQuadElementでもよい."BoundaryElements"は,指定されると,LineElementであり,"PointElements"PointElementである.
  • 3D要素メッシュでは,"MeshElements"は,TetrahedronElementでもHexahedronElementでもよい."BoundaryElements"は,指定されると,TriangleElementQuadElementであり,"PointElements"PointElementである.
  • ToElementMeshには,ToBoundaryMeshのオプションに,以下を加えたものが使える.
  • "CheckQuality"Automatic品質評価を計算する
    "ElementMeshGenerator" AutomaticElementMeshオブジェクトを境界のElementMeshオブジェクトから生成する関数
    "ImproveBoundaryPosition" Automatic境界ノードの位置を改善する
    "MeshElementBlocks" 1メッシュ要素のブロックの数
    "MeshElementConstraint" Automaticメッシュ要素の追加の制約条件
    "MeshElementType" Automaticメッシュの入力に使われるメッシュタイプ
    "MeshOrder" Automatic要素メッシュの次数
    MeshQualityGoalAutomaticメッシュ要素の目標品質を指定する
    MeshRefinementFunctionAutomatic2Dと3Dの要素の調整を制御する
    "NodeReordering" Automaticノードを並び替えて,最小のバンド幅の行列を生成する
    "SteinerPoints" AutomaticSteinerの点の挿入を制御する
    "RegionMarker" None領域マーカーを指定する
  • ToElementMeshのオプションのいずれかを指定することによって,さまざまな方法で,ToElementMesh[emesh,opts]を使ってElementMeshオブジェクト emesh を修正することができる.
  • ToElementMeshElementMeshを生成できない場合には,$Failedが返される.
  • EmptyRegionに対してToElementMeshを呼び出すと,EmptyRegionが返される.
  • ToElementMeshに与えられるオプションは,"MeshOptions"を指定することによってNDSolveに与えることができる. »
  • NDSolveおよび関連の関数からToElementMeshのオプションを設定することについては,有限要素のためのNDSolveオプションに説明がある.

例題

すべて開くすべて閉じる

  (4)

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

円板の要素メッシュを生成する:

要素メッシュのワイヤフレームを可視化する:

円板と矩形の和集合の要素メッシュを生成する:

境界ボックスで境界のない領域を指定する:

要素メッシュの要素を指定する:

スコープ  (29)

2つの円の間の領域においてメッシュを生成する:

BooleanRegionを使って,2つの円の間の領域にメッシュを生成する:

ImplicitRegionを明示的な境界ボックスで変換する:

RegionDistanceから計算されたImplicitRegionを明示的な境界ボックスで変換する:

GraphicsComplexを要素メッシュに変換する:

TransformedRegionを要素メッシュに変換する:

3DのBallを要素メッシュに変換する:

3DのGraphicsComplexを要素メッシュに変換する:

3DのImplicitRegionからメッシュを作成する:

3DのBooleanRegionからメッシュを作成する:

3DのTransformedRegionを要素メッシュに変換する:

4つの座標と2つの要素から要素メッシュを作成する:

点集合については,ToElementMeshはドロネー図を返す:

1Dの線分要素メッシュ  (3)

線分要素メッシュを作成する:

領域の穴を含む1DのElementMeshImplicitRegionから作成する:

1DのElementMeshからElementMeshRegionProductを作成する:

2Dの三角要素メッシュ  (2)

三角要素メッシュを作成する:

2DのElementMeshと1DのElementMeshからElementMeshRegionProductを作成する:

2Dのクワッド要素メッシュ  (2)

クワッド要素メッシュを作成する:

クワッド要素メッシュを作成する:

ノードの番号を赤で,要素の番号を青で可視化する:

2Dの複合要素タイプのメッシュ  (1)

複合要素のメッシュを作成する:

2Dの高次要素メッシュ   (1)

二次要素で複合要素メッシュを作成する:

3Dの四面体要素メッシュ  (1)

マーカー付きの線形四面体要素メッシュ:

座標の指標を,それぞれの位置で可視化する:

メッシュを作成する:

要素のマーカー付きのメッシュを可視化する:

3Dの六面体要素メッシュ  (1)

六面体からなる要素メッシュを作成する:

画像  (2)

Imageをメッシュに変換する:

Imageを領域の穴がないメッシュに変換する:

領域マーカー  (1)

領域マーカーは,領域内の複数のものを指定するのに便利であり,「要素メッシュの生成」の「マーカー」セクションに詳しく説明されている.

領域マーカー付きの複合要素メッシュを作成する:

境界マーカー  (1)

境界マーカーは,領域境界上でNeumannValueを指定するのに便利であり,「要素メッシュの生成」の「マーカー」セクションに詳しく説明されている.

境界マーカー付きの矩形を作成する:

点マーカー  (1)

点マーカーは,領域境界上でDirichletConditionを指定するのに便利であり,「要素メッシュの生成」の「マーカー」セクションに詳しく説明されている.

点マーカー付きの矩形を作成する:

オプション  (41)

"BoundaryMarkerFunction"  (2)

境界マーカーは,領域境界上でNeumannValueを指定するのに便利であり,「要素メッシュの生成」の「マーカー」セクションに詳しく説明されている.

辺要素の座標に従って,辺の整数マーカーを計算する:

境界要素を調べる:

"PointElementMarkers"も計算された場合には,それらは,"BoundaryMarkerFunction"に与えられる関数の第2引数としてアクセス可能である.

マーカーは,クワッドメッシュ要素に指定することができる:

"BoundaryMeshGenerator"  (2)

"Continuation"メソッドは,多くの場合にコーナー,尖点,急な変化をかなりうまく処理することができる曲線継続法を使う:

"RegionPlot"メソッドは,RegionPlotからの出力を改善することに基づいており,より速い場合もある:

"BoundaryMeshGenerator"オプションの詳細は,ToBoundaryMeshのページを参照されたい.

"OpenCascade"の境界メッシュ生成器は,Graphics3Dプリミティブからなる3DのBooleanRegion式に使うのに適している.

領域を指定する:

"OpenCascade"を境界メッシュ生成器として使う:

境界マーカーの色を生成する:

境界マーカーを強調した要素メッシュを可視化する:

"ElementMeshGenerator"  (1)

内部メッシュ生成器を,カスタムメッシュ生成器に置き換える:

カスタムのメッシュ生成器に与えられた数値領域には"BoundaryMesh"が含まれる.メッシュ生成器のインターフェースが記号表現を使うので外部メッシュ生成器へのインターフェースに境界メッシュ表現が必要ないという場合は,"BoundaryMeshGenerator"->Noneと設定することによって,境界メッシュの生成を行わないようにすることができる.

"ImproveBoundaryPosition"  (1)

ImplicitRegionの近似は,一般に厳密ではない."ImproveBoundaryPosition"オプションは,境界ノードの位置を改善することを助ける:

境界ノードの平方の総和は,必ずしもすべて値1にあるわけではない:

2Dではデフォルトで自動改善が行われ,結果はよりよくなる:

"ImproveBoundaryPosition"オプションがFalseに設定されている場合には,二次要素は領域の曲線部分の境界上の中間ノードを持たない.

"IncludePoints"  (3)

要素メッシュを作成する:

追加の点の円を指定する:

点を含めたメッシュを作成する:

"IncludePoints"を使って加えられた点は,DirichletConditionで使える.さらに,DirichletConditionの述部がTrueであれば,境界条件は加えられた点において有効となる.

含める点を四辺形メッシュに加える:

"IncludePoints"は,ToBoundaryMeshのオプションであり,ToElementMeshはオプションを渡す.しかしこのことは,ToElementMeshに境界ElementMeshが提示された場合に,その要求を満たすことができないことを意味する:

{0,0}は含まれていない.この問題を解決する策として,ToBoundaryMeshの呼出し中に"IncludePoints"を指定するか,ToElementMeshを呼び出す際に記号的領域を利用するかの方法がある.

ToBoundaryMeshの呼出し中に"IncludePoints"を使う:

あるいは,ToElementMeshの呼出しに記号的領域を使う:

"MaxBoundaryCellMeasure"  (2)

"MaxBoundaryCellMeasure"->m で境界セルの大きさが選ばれる:

境界セルとセルの大きさを指定する:

"MaxCellMeasure"  (4)

MaxCellMeasure->m で,セルの大きさが選ばれ,境界セルの大きさが埋込み次元内の高品質セルに適切なものに設定される:

最大のメッシュ要素の範囲を求める:

より小さな最大セルの大きさを設定する:

最大のメッシュ要素の範囲を求める:

最大セルの大きさは,線形要素に働く.曲線境界のより高次のメッシュの場合には,実際のセルの大きさがより大きくなることがある:

特定の長さは,MaxCellMeasure->{"Length"->len}で指定することができる:

特定の長さと範囲がMaxCellMeasure->{"Length"->len,"Area"->area}を使って指定される場合には,より厳しい必要条件が満たされる:

最大のメッシュ要素の範囲を求める:

境界上の最大のセルの大きさを設定する:

"MeshElementBlocks"  (1)

要素メッシュを作成する:

同じ領域にメッシュを掛け,要素を5つのブロックに分ける:

"MeshElementConstraint"  (2)

TriangleElementに基づく二次元のメッシュについては,最小の三角角度は,"MeshElementConstraint"オプションを通して指定できる:

デフォルトを使う:

指定された最小角度は,33度より小さくなければならない.理論的には,アルゴリズムは,22.7度より小さい最小角度を確実になくすことになっているが,実際には,33度までの最小角度でも成功することがしばしばある.

三次元のTetrahedronElementメッシュについては,四面体半径の辺の長さに対する最小割合は,"MeshElementConstraint"オプションを使って指定することができる:

デフォルト設定を使う:

半径と辺の割合は,より大きくなければならない.理論的には,アルゴリズムは,半径と辺の割合が2である場合には確実になくすことになっているが,実際には半径と辺の割合がまで下がる場合にもしばしば成功する.

"MeshElementType"  (1)

クワッドメッシュ要素で領域にメッシュを掛ける:

同じ領域に三角要素でメッシュを掛ける:

クワッド要素は現在矩形領域についてだけ生成される.

"MeshOrder"  (1)

領域について,二次の要素メッシュを作成する:

メッシュ次数を調べる:

メッシュ上で積分し,積分の確度を求める:

同じ領域に一次メッシュを掛ける:

メッシュ次数を調べる:

メッシュ上で積分し,積分の確度を求める:

"MeshOrder"オプションの詳細については,要素メッシュの生成要素メッシュの可視化のチュートリアルを参照されたい.

"MeshQualityGoal"  (1)

品質の値 は,正規のメッシュ要素については ,変化したメッシュ要素については になるように,計算される:

より規則的な三角形で三角分割する:

"MeshRefinementFunction"  (9)

特定の2D三角要素が細分化されなければならない場合に,Trueを返す関数を作成する:

細分化関数で境界メッシュの完全メッシュを作成する:

結果のメッシュを可視化する:

細分せずに生成したメッシュと比べる:

特定の2D三角要素が細分化されなければならない場合に,Trueを返すコンパイルされた関数を作成する:

細分化関数で円板のメッシュを作成する:

結果のメッシュを可視化する:

中心に近付くにつれて細かくなるメッシュを作成する:

境界に近付くにつれて細かくなるメッシュを作成する:

部分領域で細分化を行う:

メッシュを細分化の等高線とともに可視化する:

細分化関数として画像を使う:

その画像から距離変換を作成する:

画像の距離変換を可視化する:

画像の距離変換から補間関数を作成する:

補間関数を呼び出す,コンパイルされた細分化関数を作成する:

指定の細分化で三角メッシュを作成する:

メッシュを可視化する:

特定の2Dの三角形要素が細分化されなければならない場合にTrueを返す関数を作成する:

TrueあるいはFalseを返すコンパイルされた関数を作成する:

コンパイルされた細分化関数で境界メッシュの完全メッシュを作成する:

結果のメッシュを可視化する:

特定の3Dの四面体要素が細分化されなければならない場合には,Trueを返すコンパイルされた関数を作成する:

境界メッシュを作成する:

境界メッシュの完全なメッシュを細分化関数で作成する:

結果のメッシュを可視化する:

1Dでは,DiscretizeRegionを使って細分化を行う:

"NodeReordering"  (2)

領域からElementMeshを作成する:

メッシュ要素のインシデントを可視化する:

ノードを並び替えて,同じ領域からメッシュを作成する:

インシデントのパターンはより組織化されている:

ノードの並替えのための関数を提供することができる:

"NodeReordering" は,行列のバンド幅の縮小としても知られている.

"PointMarkers"  (1)

点マーカーは,領域境界上でDirichletConditionを指定するのに役立つものである.「要素メッシュの生成」の「マーカー」.セクションに詳しい説明がある.

メッシュに点マーカーを設定する方法はいくつかある.その一つとして,境界マーカーから点マーカーを得る方法がある.

領域にメッシュを掛け,境界マーカーから点マーカーを推測する:

曲面をブラウズする:

どの曲面から点マーカーを構築するかを選ぶ:

選んだ点マーカーの点を可視化する:

すべての曲面に繋がっている点のみを考慮するような交点を求める.IDが7の境界マーカーは,大きな円柱の曲面である:

選んだ点マーカーの点を可視化する:

"PointMarkerFunction"  (1)

点マーカーは,領域境界上でDirichletConditionを指定するのに便利であり,「要素メッシュの生成」の「マーカー」セクションに詳しく説明されている.

辺のノードの座標に従って,辺の整数マーカーを計算する:

点マーカー付きの要素メッシュを作成する:

境界要素を調べる:

二次メッシュの中間ノードの点マーカーの値は,境界要素マーカーから導き出される.ここでは何も与えられていないので,値は無作為である:

"BoundaryMarkerFunction"も計算された場合には,中間ノードは,境界要素マーカーから導き出された値を持つ:

"RegionHoles"  (4)

内部領域を持つ境界メッシュを作成する:

境界メッシュから完全なメッシュを作成する:

内部を領域の穴として指定して,境界メッシュから完全なメッシュを作成する:

真ん中に穴がある要素メッシュを作成する:

穴を含めて,領域にメッシュを掛ける:

穴の領域の座標を明示的に与えないことによって,穴ではない領域にメッシュを掛ける:

穴のある領域を作成し,可視化する:

境界メッシュから完全なメッシュを作成する:

領域の穴と領域のマーカーを指定する:

3Dの領域の穴を指定する:

境界メッシュと内側の箱内部の点を可視化する:

内側に穴がある完全な要素メッシュを作成する:

完全な要素メッシュを可視化する:

"RegionMarker"  (2)

境界メッシュを作成する:

{1/2,3/4}を含む境界要素はマーカー1を,{1/2,1/4}を含む領域はマーカー2を使うべきである:

さらに,マーカー1の領域の細分化パラメータがマーカーに与えられる:

3Dの領域を指定する:

内側の部分領域が別の細分化に従う,完全な要素メッシュを作成する:

完全な要素メッシュを可視化する:

"SteinerPoints"  (1)

2Dの三角メッシュについては,Steiner点の挿入が制御できる.この場合には,境界は境界の大きさを守り,それ以上分割を行わない:

この場合には,二次の中間のノードがまだ存在している:

一次のメッシュを使うと,中間のノードが避けられる:

アプリケーション  (2)

GeoGraphicsから川のElementMeshを作成する:

で2つのネストした半環帯の境界メッシュを生成する.それぞれの環帯は異なる部分領域を表す.1つ目の部分領域は内半径が で外半径が ,2つ目の部分領域は内半径が ,外半径が である.

まず3つの半円盤を作成し,次に3つの部分領域の和を生成し,最後に2つの環帯を作成するために最初の半円盤を内側の穴とする.

1つ目の環帯の内半径と外半径を定義する:

2つ目の環帯の外半径を定義する:

Circleを使って半円盤を作成する:

半円盤の和が作成されると,左の境界は自動的に和から削除される.このため,領域をもう一度繋げるために,線分が作成され,半円盤の和に繋げられる.1つ目の半円盤に穴を開けるために,和を から まで,および から まで 方向に繋げ,1つ目の半円盤を脇にのける.

2つの線分を作成する:

半円盤と線分の和を生成する:

それぞれの環帯に要素マーカーを割り当てる:

RegionMarkerを使って,定義された部分領域で要素メッシュを生成し,メッシュをに限る:

要素メッシュのワイヤフレームを可視化する:

特性と関係  (5)

ElementMeshは,NDSolveによって返されるInterpolatingFunctionの一部である:

ElementMeshNDSolveに渡す:

ElementMeshNDEigensystemに渡す:

ToElementMeshのオプションをNDSolveに渡し,定常偏微分方程式を解く:

方程式を解くのに使われたメッシュを調べる:

これは同じメッシュである:

ToElementMeshのオプションをNDSolveに渡し,時間依存の偏微分方程式を解く:to solve a time-dependent PDE:

考えられる問題  (11)

入力の記号的領域に境界がない場合には,デフォルトのからの境界ボックスが各空間方向に想定される:

明示的な境界ボックスを指定することによって,デフォルトを無効にできる:

領域のある特徴の中には,小さすぎて表せないものもある:

より小さな境界サイズを指定するとうまくいく場合がある:

ImplicitRegionでは,指定のない記号パラメータを使うことはできない:

境界ボックスが領域指定と交差する場合には,結果として低品質のメッシュが作成されることがある:

境界ボックスを拡大するとうまくいくこともある:

ElementMeshのメッシュ要素は,同じ次数のものでなければならない:

要素インシデントは,反時計回りの順に与えられなければならない:

要素メッシュ内のメッシュ要素は交差しない場合がある:

時計回りの順序と自身との交差の組合せも検知された:

MeshRegionからElementMeshへの変換が,メッシュを直接変換する形で行われるとは限らない:

これは,ToElementMeshが与えられたメッシュのオプションに沿えることができなければならないためである.MeshRegionを生成するのに使われたパラメータを推定し,ToElementMeshオプションが満たされるかどうかを確かめることは不可能である.MeshRegionを直接ElementMeshに変換することが可能な場合もある:

この場合には,ToGradedMeshElementMeshRegionProductを使うことによって,ElementMeshを直接生成することが可能である:

ToElementMeshの引数は規則として指定し,正しい順序("Coordinates""MeshElements"の順序で,次にオプショナルの規則"BoundaryElements""PointElements"を加える)で与えなければならない:

正しい順序で引数を指定する:

陰的な領域についてのメッシュ生成アルゴリズムの中には,完全には決定性ではなく,同じ入力に対して少し異なるメッシュを返すものもある:

実行間で,要素数が異なることに注意する.

おもしろい例題  (2)

画像を要素メッシュに変換するには,まず,画像を距離関数に変換する:

画像データは,抽出され,補間関数に変換される:

補間関数を要素メッシュに変換する:

スペースシャトルのオービタをElementMeshに変換する:

Wolfram Research (2014), ToElementMesh, Wolfram言語関数, https://reference.wolfram.com/language/FEMDocumentation/ref/ToElementMesh.html (2022年に更新).

テキスト

Wolfram Research (2014), ToElementMesh, Wolfram言語関数, https://reference.wolfram.com/language/FEMDocumentation/ref/ToElementMesh.html (2022年に更新).

CMS

Wolfram Language. 2014. "ToElementMesh." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2022. https://reference.wolfram.com/language/FEMDocumentation/ref/ToElementMesh.html.

APA

Wolfram Language. (2014). ToElementMesh. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/FEMDocumentation/ref/ToElementMesh.html

BibTeX

@misc{reference.wolfram_2024_toelementmesh, author="Wolfram Research", title="{ToElementMesh}", year="2022", howpublished="\url{https://reference.wolfram.com/language/FEMDocumentation/ref/ToElementMesh.html}", note=[Accessed: 05-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_toelementmesh, organization={Wolfram Research}, title={ToElementMesh}, year={2022}, url={https://reference.wolfram.com/language/FEMDocumentation/ref/ToElementMesh.html}, note=[Accessed: 05-November-2024 ]}