HHO (Hybrid High-Order) 法用ツール¶
HHO methods are hybrid methods in the sense that they have both degrees of freedom located on the elements of a mesh and on the faces of the elements which represent separated approximations. HHO methods are primal methods in the sense that both the degrees of freedom in the element and on the faces represent the main unknown of the problem (no Lagrange multipliers are introduced). The interest of these methods, first developed in [Di-Er2015], [Di-Er2017] is their accuracy and their great robustness, in particular with respect to the element shapes and their locking-free properties. Moreover, they can be extended without difficulty to the approximation of nonlinear problems (see [AB-ER-PI2018] for hyper-elasticity, [AB-ER-PI2019] for plasticity and [ca-ch-er2019] for contact problems).
HHO法は任意の形状要素に適用できます.しかし, GetFEM での実装は,現時点では標準的な要素に限定されています.さらに,この実装はまだ実験的であり,最適のふりをしません.現時点では,内部自由度を自動的に圧縮するツールはありません.
HHO要素¶
HHO elements are composite ones having a polynomial approximation space for the interior of the element and a polynomial approximation for each face of the element. Moreover, this is a discontinuous approximation, in the sense that no continuity is prescribed between the approximation inside the element and the approximation on the faces, nor between the approximations on two different faces of the element. However, when two neighbor elements share a face, the approximation on this face is shared by the two elements. GetFEM provides a specific method simply called FEM_HHO(fem_int, fem_face1, fem_face2, ...) which allows to build an hybrid method from standard finite element spaces. For instance, on a triangle, a possible HHO method can be obtained with:
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) と変わりません.)であるという事実についての検証ではありません.
For the moment, the fursnished element for interior and faces are
- FEM_SIMPLEX_IPK(n,k) : interior PK element of degree k for the simplices in dimension n (equivalent to FEM_PK_DISCONTINUOUS(n,k,0.1)).
- FEM_QUAD_IPK(n,k) : interior PK element of degree k for the quadrilaterals in dimension n.
- FEM_PRISM_IPK(n,k) : interior PK element of degree k for the prisms in dimension n.
- FEM_SIMPLEX_CIPK(n,k) : interior PK element on simplices which is additionally connectable. Designed to be used on HHO element faces.
- FEM_QUAD_CIPK(k) : interior PK element on a quadrilateral which is additionally connectable. Designed to be used on HHO element faces.
再構築演算子¶
変数 u について,要素 \(T\) の内部における \(u_{T}\) の値と, \(T\) (2つの異なる近似に対応する)の境界における \(u_{\partial T}\) の値に注目します.再構成演算子は,セクション 初等変換 で説明されているように,基本変換として|gf|で実装されます.
再構築された勾配¶
第1の再構成演算子は再構成勾配である.ある多項式空間 \(V_G\) が与えられると,再構築された勾配 \(G(u)\) は,局所問題の解になるでしょう
\(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\) )を決定します.
This is an example of use with the Python interface for a two-dimensional triangular mesh 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.py と interface/tests/demo_elasticity_HHO.py に与えられます.
再構築された対称化勾配¶
対称化勾配はベクトル場変数に対してのみであり,加えてベクトル場次元が領域次元と同じ場合である.これは通常,弾性の問題などに当てはまります.前の節と同じ表記法で,再構築された勾配 \(G^s(u)\) が局所問題の解決になるでしょう
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問題の解になります
追加の拘束を使用して
対応する基本変換は,次のコマンドでモデルに追加できます.
add_HHO_reconstructed_value(model, transname);
そして,もし transname="HHO_val" ならば, ud が再構築空間を決定する Elementary_transformation(u, HHO_val, ud) として,GWFLに使われます.
対称化された勾配を持つ再構築された変数¶
変数の再構成の変形は,対称化された勾配を使用するものである.ベクトルフィールド変数にのみ使用でき,さらにベクトルフィールドの次元がドメインの次元と同じ場合にも使用できます.再構成された変数 \(D(u)\) は,選択された空間 \(V_D\) 上の局所Neumann問題に対する解であるだろう
追加の拘束を使用して
ここで, \(\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}\) 上で次の式で定義されます.
\(D(u)\) は変数に使用される有限要素空間より1高次の多項式空間上の再構成演算子であり, \(\Pi_{\partial T}\) は面近似の空間への \(L^2\) 投影であり, \(\Pi_{T}\) は要素の内部の空間への \(L^2\) 投影である.
領域と同じ次元を持つベクトル場変数に対して,対称化勾配を用いた安定化演算子も存在します.
対応する基本的な変換は,次の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 にも示されています.