モジュール asm¶
- asm_generic(mim, order, expression, region, model=None, *args)¶
概要: (...) = asm_generic(MeshIm mim, int order, string expression, int region, [Model model, ['Secondary_domain', 'name',]] [string varname, int is_variable[, {MeshFem mf, MeshImd mimd}], value], ['select_output', 'varname1'[, 'varname2]], ...)
ボリュームアセンブリまたは境界アセンブリの高水準の汎用アセンブリ手順.
積分法 mim を使用して,インデックス region (-1はメッシュのすべての要素を意味します)のメッシュ領域上で expression の汎用アセンブリを実行します.同じメッシュを積分法と,変数に対応するすべての有限要素法またはmesh_im_dataで共有する必要があります.
order は,(スカラー)ポテンシャル (order=0) ,(ベクトル)残差(order=1),または接線(行列)(order=2)のいずれかが計算されることを示します.
model はモデルのすべての変数とデータを考慮に入れることができるオプションのパラメータです.モデルのすべての使用可能な変数は,たとえ expression に存在しなくても,全体系での自由度に対応する返されたベクトル/行列の空間を占めることに注意してください.
変数と定数(データ)は,領域番号(またはオプションでモデル)の後にリストされます.変数/定数ごとに,最初に名前を指定する必要があります(アセンブリ文字列で参照されるとおり).次に,変数または定数を宣言するために,それぞれ1または0に等しい整数が必要です.次に,fem変数/定数の場合は有限要素法,積分点で定義されたデータの場合はmesh_im_data,および変数/定数の値を表すベクトルが必要です.任意の数の変数/定数を指定できます.変数と定数の違いは,試験関数は変数に対してのみ使用でき,定数に対しては使用できないことです.
select_output は出力ベクトル( order が1の場合)または行列( order が2の場合)を指定された変数の自由度まで減らすことができるオプションのパラメータです.ベクトル出力には1つの変数を指定し,行列出力には2つの変数を指定する必要があります.
複数の変数が与えられた場合,正接行列/残差ベクトルのアセンブリは,関数の呼び出しの順序を考慮して行われます(最初の変数の自由度,次に2番目の変数の自由度,というように続きます).モデルが提供されている場合,一部のモデル変数が expression に現れない場合でも,モデルのすべての自由度が最初にカウントされます.
例えば,ベクトルフィールド "u" のL2ノルムは
gf_compute('L2 norm') or with the square root of: gf_asm('generic', mim, 0, 'u.u', -1, 'u', 1, mf, U);
スカラー場の不均質Laplacian剛性行列は以下で評価できます.
gf_asm('laplacian', mim, mf, mf_data, A) or equivalently with: gf_asm('generic', mim, 2, 'A*Grad_Test2_u.Grad_Test_u', -1, 'u', 1, mf, U, 'A', 0, mf_data, A);
- asm_mass_matrix(mim, mf1, mf2=None, *args)¶
概要: M = asm_mass_matrix(MeshIm mim, MeshFem mf1[, MeshFem mf2[, int region]])
質量行列のアセンブリ.
SpMatオブジェクトを返します.
- asm_laplacian(mim, mf_u, mf_d, a, region=None)¶
Laplacian問題の行列の組み立て.
\(\nabla\cdot(a(x)\nabla u)\) ここで a はスカラーです.
SpMatオブジェクトを返します.
- asm_linear_elasticity(mim, mf_u, mf_d, lambda_d, mu_d, region=None)¶
線形(等方性)弾性問題のためのマトリックスの集合.
\(\nabla\cdot(C(x):\nabla u)\) ここで \(C\) は lambda_d と mu_d によって定義されます.
SpMatオブジェクトを返します.
- asm_nonlinear_elasticity(mim, mf_u, U, law, mf_d, params, *args)¶
概要: TRHS = asm_nonlinear_elasticity(MeshIm mim, MeshFem mf_u, vec U, string law, MeshFem mf_d, mat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', MeshFem mf_p, vec P|'incompressible rhs', MeshFem mf_p, vec P})
非線形弾性の項(接線行列と右辺)をアセンブルします.
現在の時間ステップでは解 U が必要です. law は次の中から選択することができます.
'SaintVenant Kirchhoff': 線形則,避けるべきです.この法則には,パラメータとして,lambdaおよびmuと呼ばれる2つの通常のLame係数があります.
'Mooney Rivlin': この法則にはC1,C2,D1という3つのパラメータがあります.前に 'compressible' または 'incompressible' を付けることで,特定のバージョンを強制するころができます.デフォルトでは,最初の2つの材料係数のみを必要とする非圧縮性バージョンが考慮されます.
'neo Hookean': 'Mooney Rivlin' 法の特殊なケースです.材料係数がひとつ少なくなります (C2 = 0).デフォルトでは圧縮性のバージョンが使用されます.
'Ciarlet Geymonat': この法則にはlambda,mu と gammaと呼ばれる3つのパラメータがあります.ここでgammaは ]-lambda/2-mu, -mu[ になるように選択されます.
材料法則のパラメータは,MeshFem mf_d で記述します.行列 params では,行はパラメータに対応し列は nbdof(mf_d) に対応します.
最後の引数は作成するもの,接線行列またはRHS,を選択します.非圧縮性を考慮する場合,圧縮にはMeshFem mf_p が必要です.
SpMatオブジェクト(接線行列),vecオブジェクト(右辺),SpMatオブジェクトのタプル(非圧縮接線行列),またはvecオブジェクトのタプル(非圧縮性右辺)を返します.
- asm_helmholtz(mim, mf_u, mf_d, k, region=None)¶
Helmholtz問題の行列の組み立て.
\(\Delta u + k^2 u\) = 0 ,ただし k は複素数スカラーです.
SpMatオブジェクトを返します.
- asm_bilaplacian(mim, mf_u, mf_d, a, region=None)¶
Bilaplacian問題のための行列の組み立てです.
\(\Delta(a(x)\Delta u) = 0\) ただし a はスカラーです.
SpMatオブジェクトを返します.
- asm_bilaplacian_KL(mim, mf_u, mf_d, a, nu, region=None)¶
Kirchhoff-Love 定式化を用いたBilaplacian問題に対する行列の組み立て.
\(\Delta(a(x)\Delta u) = 0\) ただし a はスカラーです.
SpMatオブジェクトを返します.
- asm_volumic_source(mim, mf_u, mf_d, fd, region=None)¶
体積ソース項のアセンブリ.
データMeshFem mf_d で定義されたデータベクトル fd を使用して,MeshFem mf_u 上で組み立てられたベクトル V を出力します. fd は実数値でも複素数値でもよいです.
vecオブジェクトを返します.
- asm_boundary_source(bnum, mim, mf_u, mf_d, G)¶
境界ソース項の構築.
G は [Qdim x N] 行列でなければなりません.ここでNは mf_d の自由度数であり,(MeshFemの作成時に設定される)Qdimは未知のuの次元です.
vecオブジェクトを返します.
- asm_dirichlet(bnum, mim, mf_u, mf_d, H, R, threshold=None)¶
h.u = r 型のDirichlet条件の集合です.
ハンドル h.u = r ここでhは(あらゆるrankの)正方行列で,その大きさは未知のuの次元と等しいです.この行列は H , mf_d の自由度ごとに1列ずつ格納され,各列には行列hの値がFortranの次数で格納されます.
\[`H(:,j) = [h11(x_j) h21(x_j) h12(x_j) h22(x_j)]`\]uが2次元ベクトルフィールドの場合.
もちろん,未知のスカラーフィールドである場合,単に H = ones(1, N) を設定する必要があります.ここでNは mf_d の自由度数です.
これは基本的に, gf_asm('boundary qu term') を H に対して呼び出し, gf_asm('neumann') を R に対して呼び出すのと同じですが,この関数は(可能な場合) 'より良い ' (より多くの対角線)制約行列を生成しようとします.
Spmat.Dirichlet_nullspace() も参照してください.
- asm_boundary_qu_term(boundary_num, mim, mf_u, mf_d, q)¶
境界qu項のアセンブリです.
q は [Qdim x Qdim x N] 配列でなければなりません.ここでNは mf_d の自由度数であり,Qdimは(MeshFemの作成時に設定される)未知変数uの次元です.
SpMatオブジェクトを返します.
- asm_define_function(name, nb_args, expression, expression_derivative_t=None, *args)¶
概要: asm_define_function(string name, int nb_args, string expression[, string expression_derivative_t[, string expression_derivative_u]])
高水準汎用アセンブリで使用できる新しい関数 name を定義します.関数には,1つまたは2つのパラメータを指定できます. expression では,汎用アセンブリの使用可能なすべての定義済み関数またはオペレーションを使用できます.ただし,一部の変数またはデータへの参照は指定できません.関数の引数は,1つのパラメータ関数の場合は t ,2つのパラメータ関数の場合は t と u です.例えば, 'sin(pi*t)+2*t*t' は1つのパラメータ関数のための有効な式であり, 'sin(max(t,u)*pi)' は2つのパラメータ関数のための有効な式です. expression_derivative_t と expression_derivative_u は t と u に関する導関数のオプション式です.指定されていない場合は,記号による微分が使用されます.
- asm_undefine_function(name)¶
高水準の汎用アセンブリに対して以前に定義された関数 name の定義をキャンセルします.
- asm_define_linear_hardening_function(name, sigma_y0, H, *args)¶
概要: asm_define_linear_hardening_function(string name, scalar sigma_y0, scalar H, ... [string 'Frobenius'])
初期降伏応力が sigma_y0 で硬化係数がHの新しい線形硬化関数をnameという名前で定義します.値が 'Frobenius' の特別な文字列引数が指定された場合,硬化関数はVon-Mises相当ではなく,入力ひずみと出力応力のFrobeniusノルムで表されます.
- asm_define_Ramberg_Osgood_hardening_function(name, sigma_ref, *args)¶
概要: asm_define_Ramberg_Osgood_hardening_function(string name, scalar sigma_ref, {scalar eps_ref | scalar E, scalar alpha}, scalar n[, string 'Frobenius'])
新しいRamberg Osgood硬化関数を,初期降伏応力を sigma_y0 ,硬化係数をHとして名前 name で定義します.値が 'Frobenius' の特別な文字列引数が指定されている場合,硬化関数は,Von-Mises相当ではなく,入力ひずみと出力応力のFrobeniusノルムで表されます.
- asm_expression_analysis(expression, *args)¶
概要: asm_expression_analysis(string expression [, {Mesh mesh | MeshIm mim}] [, der_order] [, Model model] [, string varname, int is_variable[, {MeshFem mf | MeshImd mimd}], ...])
高水準汎用アセンブリ表現を解析し,指定された表現に関する情報を出力します.
- asm_volumic(CVLST=None, *args)¶
概要: (...) = asm_volumic(,CVLST], expr [, mesh_ims, mesh_fems, data...])
体積構築の低水準汎用アセンブリ手順.
式 expr は引数(オプションのデータ)にリストされたMeshFemに対して評価され,出力引数に割り当てられます.アセンブリ式の構文の詳細については,getfemユーザマニュアル(か GetFEM のソースファイル getfem_assembling.h )を参照してください.
たとえば,フィールドのL2ノルムは次のように計算できます.
gf_compute('L2 norm') or with the square root of: gf_asm('volumic','u=data(#1); V()+=u(i).u(j).comp(Base(#1).Base(#1))(i,j)',mim,mf,U)
Laplacian剛性マトリックスは,次の式で評価できます.
gf_asm('laplacian',mim, mf, mf_data, A) or equivalently with: gf_asm('volumic','a=data(#2);M(#1,#1)+=sym(comp(Grad(#1).Grad(#1).Base(#2))(:,i,:,i,j).a(j))', mim,mf,mf_data,A);
- asm_boundary(bnum, expr, mim=None, mf=None, data=None, *args)¶
概要: (...) = asm_boundary(int bnum, string expr [, MeshIm mim, MeshFem mf, data...])
低水準の汎用境界のアセンブリです.
gf_asm('volumic') のヘルプを参照してください.
- asm_interpolation_matrix(mf, *args)¶
概要: Mi = asm_interpolation_matrix(MeshFem mf, {MeshFem mfi | vec pts})
MeshFemから別のMeshFemまたは点集合の補間行列を構築します.
行列 Mi を返します.V = Mi.U は gf_compute('interpolate_on',mfi) と等しいです.反復補間に便利です.これは単なる補間であり,ここでは基本的な積分は行われず, mfi はlagrangianでなければならないことに注意してください.より汎用的なケースでは,質量行列を介してL2投影を行う必要があります.
Mi はSpMatオブジェクトです.
- asm_extrapolation_matrix(mf, *args)¶
概要: Me = asm_extrapolation_matrix(MeshFem mf, {MeshFem mfe | vec pts})
MeshFemから別のMeshFemまたは点の集合に外挿行列を構築します.
行列Meを返します. V = Me.U は gf_compute('extrapolate_on',mfe) と等しいです.反復外挿に便利です.
Me はSpMatオブジェクトです.
- asm_integral_contact_Uzawa_projection(bnum, mim, mf_u, U, mf_lambda, vec_lambda, mf_obstacle, obstacle, r, *args)¶
概要: B = asm_integral_contact_Uzawa_projection(int bnum, MeshIm mim, MeshFem mf_u, vec U, MeshFem mf_lambda, vec vec_lambda, MeshFem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | MeshFem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])
- Uzawaアルゴリズムを用いて解くための具体的な構築手順です.
接触問題. $-(lambda - r (u_N-g))_-$ の項を $lambda$ の有限要素空間に投影します.
vecオブジェクトを返します.
- asm_level_set_normal_source_term(bnum, mim, mf_u, mf_lambda, vec_lambda, mf_levelset, levelset)¶
境界 bnum 上の mf_u 上で定義されたベクトルフィールドのlevelset関数(levelsetの法線)の勾配方向の成分と考えられる mf_lambda 上で vec_lambda で表されるソース項のアセンブリを実行します.
vecオブジェクトを返します.
- asm_lsneuman_matrix(mim, mf1, mf2, ls, region=None)¶
levelset行列のアセンブリ.
SpMatオブジェクトを返します.
- asm_nlsgrad_matrix(mim, mf1, mf2, ls, region=None)¶
nlsgrad行列のアセンブリ.
SpMatオブジェクトを返します.
- asm_stabilization_patch_matrix(mesh, mf, mim, ratio, h)¶
安定化パッチ行列のアセンブリ.
SpMatオブジェクトを返します.