HHO (Hybrid High-Order) 法用ツール

HHO法は,メッシュの要素上と分離近似を表す要素の面上の両方に自由度を持つという意味でハイブリッド法です.HHO法は,要素と面の自由度の両方が問題の主な未知(lagrange乗数が導入されていない)を表すという意味で,原始的な方法です. [Di-Er2015][Di-Er2017] で最初に開発されたこれらの手法の興味深い点は,特に要素形状とロックフリー特性に関して,その精度と優れた堅牢性です.さらに,非線形問題(超弾性については [AB-ER-PI2018] を,塑性については [AB-ER-PI2019] を,接触問題については [ca-ch-er2019] を参照)の近似にも容易に拡張できます.

HHO法は任意の形状要素に適用できます.しかし, GetFEM での実装は,現時点では標準的な要素に限定されています.さらに,この実装はまだ実験的であり,最適のふりをしません.現時点では,内部自由度を自動的に圧縮するツールはありません.

HHO要素

HHO要素は,要素の内部に対して多項式近似空間を持ち,要素の各面に対して多項式近似を持つ複合要素である.さらに,これは不連続近似であり,要素内部の近似と面上の近似との間には,要素の2つの異なる面上の近似の間にも,連続性が規定されていないという意味である.ただし,2つの隣接する要素が面を共有している場合,この面の近似は2つの要素によって共有されます. GetFEM は,単純に FEM_HHO(fem_int, fem_face1, fem_face2, ...) と呼ばれる特殊な方法を提供します.これは,標準的な有限要素空間からハイブリッド法を構築することを可能にします.たとえば,三角形の場合,次のようにしてHHO法を取得できます.

getfem::pfem pf = getfem::fem_descriptor("HHO(FEM_SIMPLEX_IPK(2,2), FEM_SIMPLEX_CIPK(1,2))");

FEM_HHO(...) の最初の引数は要素の内部に対するfemです.不連続FEMでなければならないが, FEM_SIMPLEX_IPK(2,2) 法は要素内部の厳密な自由度を有する不連続法であり,dof同定を行わないことを保証します.2番目の引数は,面のfemです(1つの方法しか指定されていない場合は,すべての面に適用されますが,面ごとに異なる方法を指定することもできます.).与えられた手法が不連続型(実際,面の自由度は内側の自由度で識別されるため, FEM_HHO(FEM_PK(2,2), FEM_PK(1,2)) のような方法は FEM_PK(2,2) と変わりません.)であるという事実についての検証ではありません.

現時点では,内側と面の付加要素は - FEM_SIMPLEX_IPK(n,k) : 次元nの単体に対する次数kの内側PK要素( FEM_PK_DISCONTINUOUS(n,k,0.1) と同等)です.-FEM_QUAD_IPK(n,k) :次元nの4辺形に対する次数kの内部PK要素.- FEM_PRISM_IPK(n,k) :次元nのプリズムの次数kの内部PK要素.- FEM_SIMPLEX_CIPK(n,k) :単体上の内部PKエレメントで,追加で接続可能です.HHOエレメント面に使用するように設計されています.- FEM_QUAD_CIPK(k) :追加接続可能な4角形上の内部PK要素.HHO要素面に使用するように設計されています.

再構築演算子

変数 u について,要素 \(T\) の内部における \(u_{T}\) の値と, \(T\) (2つの異なる近似に対応する)の境界における \(u_{\partial T}\) の値に注目します.再構成演算子は,セクション 初等変換 で説明されているように,基本変換として|gf|で実装されます.

再構築された勾配

第1の再構成演算子は再構成勾配である.ある多項式空間 \(V_G\) が与えられると,再構築された勾配 \(G(u)\) は,局所問題の解になるでしょう

\[\int_T G(u):\tau dx = \int_T \nabla u_T : \tau dx + \int_{\partial T} (u_{\partial T} - u_{T}).(\tau n_T) d\Gamma, ~~~ \forall \tau \in V_G\]

\(n_T\)\(\partial T\)\(T\) に垂直な外向きの単位です. u がスカラーフィールド変数(この場合, \(G(u):\tau\)\(G(u).\tau\) に縮小されます.)である場合,空間 \(V\) はベクトル値の単位であり, u がベクトルフィールド変数である場合,行列値の単位であることに注意してください.

この演算子に対応する基本変換を使用するには,まず次のコマンドでモデルに追加する必要があります.

add_HHO_reconstructed_gradient(model, transname);

transname はGWFL(汎用弱形式言語)で変換を指定する任意の名前です.そして, transname="HHO_grad" の場合,可変 u のGWFLへの再構成された勾配を Elementary_transformation(u, HHO_grad, Gu) として参照することが可能である.変換 Gu の第3パラメータは有限要素法変数またはモデルのデータであるべきです.この変数はそれ自体では使用されませんが,再構築の有限要素空間(空間 \(V_G\) )を決定します.

これは,Pythonインタフェースを使用して2次元の三角形メッシュ m を作成する例です.

mfu   = gf.MeshFem(m, 1)
mfgu  = gf.MeshFem(m, N)
mfu.set_fem(gf.Fem('FEM_HHO(FEM_SIMPLEX_IPK(2,2),FEM_SIMPLEX_CIPK(1,2))'))
mfgu.set_fem(gf.Fem('FEM_PK(2,2)'))

md = gf.Model('real')
md.add_fem_variable('u', mfu)
md.add_fem_data('Gu', mfgu)

md.add_HHO_reconstructed_gradient('HHO_Grad')
md.add_macro('HHO_Grad_u', 'Elementary_transformation(u, HHO_Grad, Gu)')
md.add_macro('HHO_Grad_Test_u', 'Elementary_transformation(Test_u, HHO_Grad, Gu)')

マクロ定義では,弱定式内の変数の勾配を通常どおり使用できます.たとえば,Laplace方程式に弱項を追加する場合,次のように簡単に記述できます.

md.add_linear_term(mim, 'HHO_Grad_u.HHO_Grad_Test_u')

2つの完全な使用例がテストプログラム interface/tests/demo_laplacian_HHO.pyinterface/tests/demo_elasticity_HHO.py に与えられます.

再構築された対称化勾配

対称化勾配はベクトル場変数に対してのみであり,加えてベクトル場次元が領域次元と同じ場合である.これは通常,弾性の問題などに当てはまります.前の節と同じ表記法で,再構築された勾配 \(G^s(u)\) が局所問題の解決になるでしょう

\[\int_T G^s(u):\tau dx = \int_T \nabla^s u_T : \tau dx + \int_{\partial T} (u_{\partial T} - u_{T}).(\tau^s n_T) d\Gamma, ~~~ \forall \tau \in V_G\]

where \(\nabla^s u_T = (\nabla u_T + (\nabla u_T)^T)/2\) and \(\tau^s = (\tau + \tau^T)/2\).

この演算子に対応する基本変換は,次のコマンドでモデルに追加できます.

add_HHO_reconstructed_symmetrized_gradient(model, transname);

transname="HHO_sym_grad" の場合は Elementary_transformation(u, HHO_sym_grad, Gu) というGWFLに変換され, Gu が再構成空間を決定します.

再構築された変数

高次の再構成は,内部の近似とフェースの近似の両方を使用して行うことができます.再構成された変数 \(D(u)\) は,選択された空間 \(V_D\) 上の局所Neumann問題の解になります

\[\int_T \nabla D(u). \nabla v dx = \int_T \nabla u_T . \nabla v dx + \int_{\partial T} (u_{\partial T} - u_{T}).(\nabla v n_T) d\Gamma, ~~~ \forall v \in V_D\]

追加の拘束を使用して

\[\int_T D(u) dx = \int_T u_T dx\]

対応する基本変換は,次のコマンドでモデルに追加できます.

add_HHO_reconstructed_value(model, transname);

そして,もし transname="HHO_val" ならば, ud が再構築空間を決定する Elementary_transformation(u, HHO_val, ud) として,GWFLに使われます.

対称化された勾配を持つ再構築された変数

変数の再構成の変形は,対称化された勾配を使用するものである.ベクトルフィールド変数にのみ使用でき,さらにベクトルフィールドの次元がドメインの次元と同じ場合にも使用できます.再構成された変数 \(D(u)\) は,選択された空間 \(V_D\) 上の局所Neumann問題に対する解であるだろう

\[\int_T \nabla^s D(u). \nabla^s v dx = \int_T \nabla^s u_T . \nabla^s v dx + \int_{\partial T} (u_{\partial T} - u_{T}).(\nabla^s v n_T) d\Gamma, ~~~ \forall v \in V_D\]

追加の拘束を使用して

\[ \begin{align}\begin{aligned}& \int_T D(u) dx = \int_T u_T dx\\ &\int_T \mbox{Skew}(\nabla D(u)) dx = \int_{\partial T} (n_T \otimes u_{\partial T} - u_{\partial T} \otimes n_T)/2 d\Gamma\end{aligned}\end{align} \]

ここで, \(\mbox{Skew}(\nabla D(u)) = (\nabla D(u) - (\nabla D(u))^T)/2\) である.

対応する基本変換は,次のコマンドでモデルに追加できます.

add_HHO_reconstructed_value(model, transname);

そして,もし transname="HHO_val" ならば, ud が再構築空間を決定する Elementary_transformation(u, HHO_val, ud) として,GWFLに使われます.

安定演算子

安定化演算子は,ある意味で近似の不連続性を測定する演算子です.この演算子を用いてペナルティ項により安定化が得られます.安定化演算子 \(S(u)\) は,要素の境界空間 \(V_{\partial T}\) 上で次の式で定義されます.

\[S(u) = \Pi_{\partial T}(u_{\partial T} - D(u) - \Pi_{T}(u_T - D(u)))\]

\(D(u)\) は変数に使用される有限要素空間より1高次の多項式空間上の再構成演算子であり, \(\Pi_{\partial T}\) は面近似の空間への \(L^2\) 投影であり, \(\Pi_{T}\) は要素の内部の空間への \(L^2\) 投影である.

領域と同じ次元を持つベクトル場変数に対して,対称化勾配を用いた安定化演算子も存在します.

\[S^s(u) = \Pi_{\partial T}(u_{\partial T} - D^s(u) - \Pi_{T}(u_T - D^s(u)))\]

対応する基本的な変換は,次の2つのコマンドでモデルに追加できます.

add_HHO_stabilization(model, transname);
add_HHO_symmetrized_stabilization(model, transname);

そして transname="HHO_stab" ならば Elementary_transformation(u, HHO_stab) としてGWFLに使用されます.3番目の引数はターゲット(ほほ)空間を指定するオプションです(デフォルトは,変数自体の1つです.).使用例は,テストプログラム interface/tests/demo_laplacian_HHO.py および interface/tests/demo_elasticity_HHO.py にも示されています.