Tree-Cotree gauge
解析対象の空間を離散化されたメッシュ上のノード点において、離散数学のグラフ理論でそれらをTree [木]とCotree [補木]とに分け、木に含まれるエッジ要素を消去し、補木のエッジ要素のみにして解析をする方法が提唱された[1]。 この方法によって連立一次方程式の自由度が大きく減らすことができる。一方、CG法などの収束性がよくないという問題も生じている。 ただこの収束性は木の作り方によって異なるらしい。
Gmshでは、このTree GaugeのためのTree構造を自動的に作成してくれる機能が組み込まれている。 実際、OneLabサイトにあるほとんどのGauging例がこれを用いている。
計算モデル
ここでは、前章と全く同じモデルを、Coulombゲージでは無く、Gmshに組み込まれたTree-Gaugeを用いて解析する。 このゲージは、弱形式の方程式に組み込むのでは無く、FunctionSpace命令として組み込む。 そのFunctionSpaceで使われるConstraintやGroupを予め定義しなければならない。
Constraint
ゲージングされたベクトルポテンシャルにConstraintを与えるために、導体表面[SkinDomainC]と計算領域の表面[Surf_FixedM\ VP]にSurf_a_NoGaugeと名付ける。
そしてGaugeCondition_aと言う名のConstraintを定義し、先のSurf_a_NoGaugeで値がゼロであるように指定する。
Group { Surf_a_NoGauge = Region [ {Surf_FixedMVP, SkinDomainC} ] ; } Constraint { { Name GaugeCondition_a ; Type Assign ; Case { { Region DomainCC ; SubRegion Surf_a_NoGauge ; Value 0. ; } } }
FunctionSpace
FunctionSpaceで、Basis関数の係数に対し、有限要素のEdge要素を繋いで木を生成し、補木のEdgeに対し、GaugeCondition_aの制限をかして解くことを指定する。
FunctionSpace { // Magnetic vector potential a (b = curl a) { Name Hcurl_a_3D ; Type Form1 ; BasisFunction {// a = a_e * s_e ... } Constraint { ... { NameOfCoef ae ; EntityType EdgesOfTreeIn ; EntitySubType StartingOn ; NameOfConstraint GaugeCondition_a ; } } }
Formulation
Formulationでは、先ほどのクーロンゲージのためのポテンシャル$\xi$の項が無くなっている。
Formulation { { Name MagStaDyn_av_js0_3D ; Type FemEquation ; Quantity { { Name a ; Type Local ; NameOfSpace Hcurl_a_3D ; } { Name v ; Type Local ; NameOfSpace Hregion_u_3D ; } } Equation { Galerkin { [ nu[] * Dof{d a} , {d a} ] ; In Domain ; Jacobian Vol ; Integration II ; } Galerkin { DtDof[ sigma[] * Dof{a} , {a} ] ; In DomainC ; Jacobian Vol ; Integration II ; } Galerkin { [ sigma[] * Dof{d v} , {a} ] ; In DomainC ; Jacobian Vol ; Integration II ; } Galerkin { [ -js0[], {a} ] ; In DomainS ; Jacobian Vol ; Integration II ; } Galerkin{ DtDof[ sigma[] * Dof{a}, {d v} ] ; In DomainC ; Jacobian Vol ; Integration II ; } Galerkin{ [ sigma[] * Dof{d v} , {d v} ] ; In DomainC ; Jacobian Vol ; Integration II ; } } } }
計算結果