24GetFEM++コントリビュート2019C++オブジェクト指向有限要素法FEMGetFEM++はじめにGetFEM++は、共同開発をベースにしたオープンソースライブラリーです。有限要素法を解くための最も柔軟なフレームワークを提供することを目的としています。システムを呼び出すことができます。2019年のGetFEM++プロジェクトへの貢献について報告します。新しいコントリビューターがドキュメントを翻訳するための推奨方法は、TransifexのGetFEM翻訳チームに参加することです。投稿はtransifexでアカウントを作成し、リクエスト言語と記入フォームをクリックしてください。翻訳後、transifex-clientを使用して翻訳されたpoファイルをサイトからプルします。transifexサイトで入手できるapiトークンが必要です。設定します(Sphinxで現在サポートされている言語を参照してください。トラブルが発生するため、Transifexにはプッシュしないでください。チームページでファイルを1つずつアップロードできます。LANGUAGEに設定します。language=\$(LANGUAGE)その後、次のコマンドを実行して、htmlの地域化されたドキュメントを作成できます。Internationalizationを参照してください。自動的に表示されます。チュートリアルこのセクションでは、リポジトリに追加したチュートリアルについて説明します。問題は半径1.0の円の中にLapacianと呼ばれる微分方程式を仮定します。\Omega$$$\Omega$は円の中の面積を意味します。方程式のRHSは$1.0$です。これは円の上に荷重があることを意味します。$\partial\Omega$を計算する$\Omega$側のuの値は0です。\Omega$$最初に、MesherObjectを使用して円のジオメトリを作成します。ジオメトリの形および座標の中心として文字列'ball'と半径の大きさを引数に設定します。設定する必要があります。MeserObjectは負の値を設定できません。そこで、まずは中心が$(1.0、1.0)$であるメッシュを作成します。要素の次数は2に設定します。1.0)MesherObjectを使用してMeshオブジェクトを作成できます。2)メッシュを作成した後、translateメソッドを使用して中心座標を$(0.0、0.0)$に移動します。-1.0])FemオブジェクトをMeshオブジェクトにリンクし、MeshFemオブジェクトをMeshオブジェクトと節点の自由度によって作成します。次に、set_classical_femメソッドを使用して古典的Lagrange要素を設定します。2mfu.set_classical_fem(elements_degree)mfrhs.set_classical_fem(elements_degree)また,積分法をMeshオブジェクトにリンクし,MeshImオブジェクトを作成する。pow(elements_degree,2))境界条件を設定するために、外側境界領域を設定します。outer_facesメソッドを使用して外側の面を取得します。flst)Modelオブジェクトを作成し、連立方程式を作成します。gf.Model('real')連立方程式の未知変数としてMeshFemオブジェクトを設定します。mfu)PDE、RHSと条件の項をModelオブジェクトに加えます。DIRICHLET_BOUNDARY)Modelオブジェクトを作成した後、連立方程式を解きます。uの値をエクスポートします。md.variable('u')この問題の理論的な解は次の通りです。\frac{1-x^2-y^2}{4}$$evalメソッドを用いて理論解を計算することができます。mfu.eval('(1-x*x-y*y)/4')GetFEM++の結果は以下になります。時刻歴解析の陽解法に一般的に使用されます。GetFEM++では、Modelオブジェクトに分布質量のブリックを追加できます。集中質量ブリックを追加することはできません。そこで、lumped_mass_brick_for_first_orderオブジェクトを追加しました。ブリッククラスの継承関係は、下図を参照してください。このブリックを変数に追加するには、C++のAPIの場合、次のようにします。&varname);実装は次の通りです。}asm_real_tangent_termsを計算するために、関数asm_lumped_mass_matrix_for_first_orderも追加しました。この関数では,整合質量ブリックを計算し,単位ベクトルを乗算して集中質量の対角項を計算します。この方法は1次の要素に対してのみ有効です。そこで、名前に_for_first_orderを追加しました。ソースコードは以下の通りです。過渡応答解析を積分するためのschemeを追加しました。これは次のような問題です。u_{n-3}$$ここで、$dt$は時間ステップ、$M$はDot2_uの質量マトリックスです。$C$はDot_uの減衰行列、$K$はuの項の剛性行列です。この方法をHoubolt法と呼びます。Affine依存関係は次のようになります。u}$に適用すると、Affine従属変数Dot_u、Dot2_uがModelオブジェクトに追加されます。これは、変数の1階および2階の時間微分を表し、ブリックで追加した要素に対し使用できます。