gf_asm¶
概要
{...} = gf_asm('generic', mesh_im mim, int order, string expression, int region, [model model, ['Secondary_domain', 'name',]] [string varname, int is_variable[, {mesh_fem mf, mesh_imd mimd}], value], ['select_output', 'varname1'[, 'varname2]], ...)
M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2[, int region]])
L = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a[, int region])
Le = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d[, int region])
TRHS = gf_asm('nonlinear elasticity', mesh_im mim, mesh_fem mf_u, vec U, string law, mesh_fem mf_d, mat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', mesh_fem mf_p, vec P|'incompressible rhs', mesh_fem mf_p, vec P})
A = gf_asm('helmholtz', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec k[, int region])
A = gf_asm('bilaplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a[, int region])
A = gf_asm('bilaplacian KL', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a, vec nu[, int region])
V = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec fd[, int region])
B = gf_asm('boundary source', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec G)
{HH, RR} = gf_asm('dirichlet', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat H, vec R [, scalar threshold])
Q = gf_asm('boundary qu term',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat q)
gf_asm('define function', string name, int nb_args, string expression[, string expression_derivative_t[, string expression_derivative_u]])
gf_asm('undefine function', string name)
gf_asm('define linear hardening function', string name, scalar sigma_y0, scalar H, ... [string 'Frobenius'])
gf_asm('define Ramberg Osgood hardening function', string name, scalar sigma_ref, {scalar eps_ref | scalar E, scalar alpha}, scalar n[, string 'Frobenius'])
gf_asm('expression analysis', string expression [, {mesh mesh | mesh_im mim}] [, der_order] [, model model] [, string varname, int is_variable[, {mesh_fem mf | mesh_imd mimd}], ...])
{...} = gf_asm('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])
{...} = gf_asm('boundary', int bnum, string expr [, mesh_im mim, mesh_fem mf, data...])
Mi = gf_asm('interpolation matrix', mesh_fem mf, {mesh_fem mfi | vec pts})
Me = gf_asm('extrapolation matrix',mesh_fem mf, {mesh_fem mfe | vec pts})
B = gf_asm('integral contact Uzawa projection', int bnum, mesh_im mim, mesh_fem mf_u, vec U, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | mesh_fem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])
B = gf_asm('level set normal source term', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_levelset, vec levelset)
M = gf_asm('lsneuman matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls[, int region])
M = gf_asm('nlsgrad matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls[, int region])
M = gf_asm('stabilization patch matrix', @tm mesh, mesh_fem mf, mesh_im mim, real ratio, real h)
{Q, G, H, R, F} = gf_asm('pdetool boundary conditions', mf_u, mf_d, b, e[, f_expr])
説明 :
一般的なアセンブリ機能.
以下の関数の多くは,複数のmesh_femを使用します.メインのunknownに使用されるメインのmesh_fem(mf_u)と,データに使用されるdata mesh_fem(mf_d)です.mf_dのQdimは常に1とみなされます.mf_dを使用してベクトルまたはテンソルデータを記述する場合は,必要な数のスカラーフィールドを(fortranの次数で) "stack" するだけです.
コマンドリスト
{...} = gf_asm('generic', mesh_im mim, int order, string expression, int region, [model model, ['Secondary_domain', 'name',]] [string varname, int is_variable[, {mesh_fem mf, mesh_imd 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);
M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2[, int region]])
質量行列のアセンブリ.
spmatオブジェクトを返します.
L = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a[, int region])
Laplacian問題の行列の組み立て.
\(\nabla\cdot(a(x)\nabla u)\) ここで a はスカラーです.
spmatオブジェクトを返します.
Le = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d[, int region])
線形(等方性)弾性問題のためのマトリックスの集合.
\(\nabla\cdot(C(x):\nabla u)\) ここで \(C\) は lambda_d と mu_d によって定義されます.
spmatオブジェクトを返します.
TRHS = gf_asm('nonlinear elasticity', mesh_im mim, mesh_fem mf_u, vec U, string law, mesh_fem mf_d, mat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', mesh_fem mf_p, vec P|'incompressible rhs', mesh_fem 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[ になるように選択されます.
材料法則のパラメータは,mesh_fem mf_d で記述します.行列 params では,行はパラメータに対応し列は nbdof(mf_d) に対応します.
最後の引数は作成するもの,接線行列またはRHS,を選択します.非圧縮性を考慮する場合,圧縮にはmesh_fem mf_p が必要です.
spmatオブジェクト(接線行列),vecオブジェクト(右辺),spmatオブジェクトのタプル(非圧縮接線行列),またはvecオブジェクトのタプル(非圧縮性右辺)を返します.
A = gf_asm('helmholtz', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec k[, int region])
Helmholtz問題の行列の組み立て.
\(\Delta u + k^2 u\) = 0 ,ただし k は複素数スカラーです.
spmatオブジェクトを返します.
A = gf_asm('bilaplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a[, int region])
Bilaplacian問題のための行列の組み立てです.
\(\Delta(a(x)\Delta u) = 0\) ただし a はスカラーです.
spmatオブジェクトを返します.
A = gf_asm('bilaplacian KL', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a, vec nu[, int region])
Kirchhoff-Love 定式化を用いたBilaplacian問題に対する行列の組み立て.
\(\Delta(a(x)\Delta u) = 0\) ただし a はスカラーです.
spmatオブジェクトを返します.
V = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec fd[, int region])
体積ソース項のアセンブリ.
データmesh_fem mf_d で定義されたデータベクトル fd を使用して,mesh_fem mf_u 上で組み立てられたベクトル V を出力します. fd は実数値でも複素数値でもよいです.
vecオブジェクトを返します.
B = gf_asm('boundary source', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec G)
境界ソース項の構築.
G は [Qdim x N] 行列でなければなりません.ここでNは mf_d の自由度数であり,(mesh_femの作成時に設定される)Qdimは未知のuの次元です.
vecオブジェクトを返します.
{HH, RR} = gf_asm('dirichlet', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat H, vec R [, scalar threshold])
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 に対して呼び出すのと同じですが,この関数は(可能な場合) 'より良い ' (より多くの対角線)制約行列を生成しようとします.
gf_spmat_get(spmat S, 'Dirichlet_nullspace') も参照してください.
Q = gf_asm('boundary qu term',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat q)
境界qu項のアセンブリです.
q は [Qdim x Qdim x N] 配列でなければなりません.ここでNは mf_d の自由度数であり,Qdimは(mesh_femの作成時に設定される)未知変数uの次元です.
spmatオブジェクトを返します.
gf_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 に関する導関数のオプション式です.指定されていない場合は,記号による微分が使用されます.
gf_asm('undefine function', string name)
高水準の汎用アセンブリに対して以前に定義された関数 name の定義をキャンセルします.
gf_asm('define linear hardening function', string name, scalar sigma_y0, scalar H, ... [string 'Frobenius'])
初期降伏応力が sigma_y0 で硬化係数がHの新しい線形硬化関数をnameという名前で定義します.値が 'Frobenius' の特別な文字列引数が指定された場合,硬化関数はVon-Mises相当ではなく,入力ひずみと出力応力のFrobeniusノルムで表されます.
gf_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ノルムで表されます.
gf_asm('expression analysis', string expression [, {mesh mesh | mesh_im mim}] [, der_order] [, model model] [, string varname, int is_variable[, {mesh_fem mf | mesh_imd mimd}], ...])
高水準汎用アセンブリ表現を解析し,指定された表現に関する情報を出力します.
{...} = gf_asm('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])
体積構築の低水準汎用アセンブリ手順.
式 expr は引数(オプションのデータ)にリストされたmesh_femに対して評価され,出力引数に割り当てられます.アセンブリ式の構文の詳細については,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);
{...} = gf_asm('boundary', int bnum, string expr [, mesh_im mim, mesh_fem mf, data...])
低水準の汎用境界のアセンブリです.
gf_asm('volumic') のヘルプを参照してください.
Mi = gf_asm('interpolation matrix', mesh_fem mf, {mesh_fem mfi | vec pts})
mesh_femから別のmesh_femまたは点集合の補間行列を構築します.
行列 Mi を返します.V = Mi.U は gf_compute('interpolate_on',mfi) と等しいです.反復補間に便利です.これは単なる補間であり,ここでは基本的な積分は行われず, mfi はlagrangianでなければならないことに注意してください.より汎用的なケースでは,質量行列を介してL2投影を行う必要があります.
Mi はspmatオブジェクトです.
Me = gf_asm('extrapolation matrix',mesh_fem mf, {mesh_fem mfe | vec pts})
mesh_femから別のmesh_femまたは点集合の外挿行列を構築します.
行列Meを返します. V = Me.U は gf_compute('extrapolate_on',mfe) と等しいです.反復外挿に便利です.
Me はspmatオブジェクトです.
B = gf_asm('integral contact Uzawa projection', int bnum, mesh_im mim, mesh_fem mf_u, vec U, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | mesh_fem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])
- Uzawaアルゴリズムを用いて解くための具体的な構築手順です.
接触問題. $-(lambda - r (u_N-g))_-$ の項を $lambda$ の有限要素空間に投影します.
vecオブジェクトを返します.
B = gf_asm('level set normal source term', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_levelset, vec levelset)
境界 bnum 上の mf_u 上で定義されたベクトルフィールドのlevelset関数(levelsetの法線)の勾配方向の成分と考えられる mf_lambda 上で vec_lambda で表されるソース項のアセンブリを実行します.
vecオブジェクトを返します.
M = gf_asm('lsneuman matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls[, int region])
levelset行列のアセンブリ.
spmatオブジェクトを返します.
M = gf_asm('nlsgrad matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls[, int region])
nlsgrad行列のアセンブリ.
spmatオブジェクトを返します.
M = gf_asm('stabilization patch matrix', @tm mesh, mesh_fem mf, mesh_im mim, real ratio, real h)
安定化パッチ行列のアセンブリ.
spmatオブジェクトを返します.
{Q, G, H, R, F} = gf_asm('pdetool boundary conditions', mf_u, mf_d, b, e[, f_expr])
pdetool境界条件のアセンブリ.
B はpdetoolによってエクスポートされた境界行列, E はエッジ配列です. f_expr はボリューム項のオプションの式(またはベクトル)です.戻り値 Q, G, H, R, F (Q と H は行列です)には,PDETOOLからASSEMB関数によって返されるものと同様に,アセンブルされた境界条件が含まれます.