任意の量の補間

一旦解が計算されると,例えば後処理のための補間関数を用いて解に対する任意の量を抽出することは簡単にできます.

基本補間

getfem/getfem_interpolation.h はあるメッシュ/有限要素法から他のメッシュ/他のLagrange有限要素法上の解を補間する関数 getfem::interpolation(...) を定義しています.

getfem::interpolation(mf1, mf2, U, V, extrapolation = 0);

ここで mf1getfem::mesh_fem 型の変数でソースフィールド U が定義されている有限要素法を記述します. mf2U が補間される有限要素法です. extrapolation はオプションのパラメータです.値は外挿を許さない 0 ,境界近くの外点の外挿のための 1 ,すべての外点の外挿のための 2 (コストがかかるかもしれない)です.

U の次元は mf1.nb_dof() の倍数でなければならず,補間されたデータ V は正しいサイズ( mf2.nb_dof() の倍数)でなければなりません.

...重要:

``mf2`` should be of Lagrange type for the interpolation to make sense but the
meshes linked to ``mf1`` and ``mf2`` may be different (and this is the
interest of this function). There is no restriction for the dimension of the
domain (you can interpolate a 2D mesh on a line etc.).

同じ有限要素法の間で複数の補間を実行する必要がある場合は,次の関数を使用する方が効率的です.

getfem::interpolation(mf1, mf2, M, extrapolation = 0);

ここで, M は,補間を表す線形写像(すなわち, V = MU )を満たす行列です.行列は正しい次元( mf2.nb_dof() x mf1.nb_dof() )を持つ必要があります.この行列が構築されると,単純な行列乗算で補間が行われます.

gmm::mult(M, U, V);

汎用弱形式言語(GWFL)に基づく補間

GWFLと補間関数により,いくつかのフィールドで任意の式を抽出することが可能です.

これは特にmodelオブジェクト専用です(ただし,ga_workspaceオブジェクトでも使用できます).たとえば, md がいくつかの定義された変数 u (ベクトル)と p (スカラー)を含む有効なオブジェクトである場合, p*Trace(Grad_u) のような式をLagrange有限要素法で補間することができます.結果の式は,スカラ,ベクトル,またはテンソルになります.結果のベクトルのサイズは自動的に適合されます.

高水準の一般補間関数はファイル getfem/getfem_generic_assembly.h で定義されています.

同じメッシュ上のLagrange有限要素法の補間,点または getfem::im_data オブジェクト上の点群の補間に対応する補間関数があります.

Lagrange有限要素法は次の通りです.

void getfem::ga_interpolation_Lagrange_fem(workspace, mf, result);

workspace は異なる変数とデータを格納することを目的とした getfem::ga_workspace オブジェクトです(参照 任意の項を計算する - 高水準の汎用的な構築手順 - 弱形式言語 (GWFL) ), mfgetfem::mesh_fem オブジェクトは補間を行うLagrangeの有限要素法を表し, result は補間を格納する beot::base_vector です.workspaceには,補間される式が含まれている必要があります.

void getfem::ga_interpolation_Lagrange_fem(md, expr, mf, result, rg=mesh_region::all_convexes());

mdgetfem::model オブジェクト(変数とデータを含んでいます)であり, expr (std::string オブジェクト)は補間される式で, mf は補間を行うLagrange有限要素法を表す getfem::mesh_fem オブジェクトです. result は補間が格納されるベクトルであり, rg は任意のメッシュ領域です.

点群の補間:

void getfem::ga_interpolation_mti(md, expr, mti, result, extrapolation = 0, rg=mesh_region::all_convexes(), nbpoints = size_type(-1));

mdgetfem::model オブジェクト(変数とデータを含む)で, expr (std::string オブジェクト)は補間される式で, mti は点群を格納する getfem::mesh_trans_inv オブジェクト( getfem/getfem_interpolation.h 参照), result は補間が格納されているベクトル, extrapolation は外側の点の外側のメッシュでフィールドを外挿するオプションです. rg はオプションのメッシュ領域で, nbpoints はオプションの最大点数です.

im_data オブジェクトの(積分法のGauss点での)補間は次の通りです.

void getfem::ga_interpolation_im_data(md, expr, im_data &imd,
 base_vector &result, const mesh_region &rg=mesh_region::all_convexes());

ここで mdgetfem::model オブジェクト(変数とデータを含んでいます),(std::stringオブジェクト) expr は補間される式, imd は積分法( getfem/getfem_im_data.h 参照)を参照する getfem::im_data オブジェクト, result は補間結果が出力されるベクトル, rg はオプションのメッシュ領域です.