MeshFem

class MeshFem(*args)

GetFEM MeshFemオブジェクト

このオブジェクトは,メッシュ全体で定義された有限要素法を表します.

MeshFemオブジェクトの汎用的なコンストラクタ

  • MF = MeshFem(Mesh m[, int Qdim1=1[, int Qdim2=1, ...]]) 新しいMeshFemオブジェクトを構築します.

    Qdim パラメータは,有限要素法によって表されるフィールドの次元を指定します.スカラー場の場合はQdim1 = 1,サイズn以外のベクトル場の場合は Qdim1 = n ,サイズ mxn の行列場の場合はQdim1=m,Qdim2=n ... 作成されたオブジェクトのハンドルを返します.

  • MF = MeshFem('load', string fname[, Mesh m]) ファイルからMeshFemをロードします.

    メッシュ m が与えられない場合(この種類のファイルにはメッシュは保存されません),ファイル fname から読み込まれ,そのディスクリプタが第2の出力引数として返されます.

  • MF = MeshFem('from string', string s[, Mesh m]) string description からMeshFemオブジェクトを作成します.

    MeshFem.char() も参照してください.

  • MF = MeshFem('clone', MeshFem mf) MeshFemのコピーを作成します.

  • MF = MeshFem('sum', MeshFem mf1, MeshFem mf2[, MeshFem mf3[, ...]]) 2つ(かそれ以上の)MeshFemにわたるMeshFemを作成します.

    すべてのMeshFemは同じメッシュを共有する必要があります.

    使用後は, mf1, mf2 のFEMを修正しないでください.

  • MF = MeshFem('product', MeshFem mf1, MeshFem mf2) は,選択した mf1 の形状関数のすべての積と, mf2 のすべての形状関数のすべての積を網羅するMeshFemを作成します.Xfem enrichment 用に設計されています.

    mf1mf2 は同じメッシュを共有しなければなりません.

    使用後は, mf1, mf2 のFEMを修正しないでください.

  • MF = MeshFem('levelset', MeshLevelSet mls, MeshFem mf) MeshLevelSetで定義されたインプリシットサーフェスにコンフォーマルなMeshFemを作成します.

  • MF = MeshFem('global function', Mesh m, LevelSet ls, (GlobalFunction GF1,...)[, int Qdim_m]) 基底関数が ls の2つのレベルセット関数のiso値によって定義された座標系でユーザーが指定したグローバル関数であるMeshFemを作成します.

  • MF = MeshFem('partial', MeshFem mf, ivec DOFs[, ivec RCVs]) mf の自由度のサブセットのみを保持することで,制限されたMeshFemを構築します.

    RCVs が与えられた場合, RCVs に列挙されている凸にはFEMは適用されません.

adapt()

MeshFem levelset オブジェクトの場合のみに使用されます.mesh_fem オブジェクトをlevelset関数の変更に適合させます.

basic_dof_from_cv(CVids)

CVids にリストされている凸の自由度を返します.

WARNING: the Degree of Freedom might be returned in ANY order, do not use this function in your assembly routines. Use 'basic dof from cvid' instead, if you want to be able to map a convex number with its associated degrees of freedom.

また,(最初の行の凸数に関して)2列目に面番号を表示することで,凸面上の集合の基本的な自由度のリストを得ることができます.

basic_dof_from_cvid(CVids=None)

メッシュの各凸にアタッチされた自由度を返します.

CVids を省略すると,すべての凸が考慮されます( CVids = 1 ... Mesh.max_cvid() と同じです).

IDx はベクトルであり, length(IDx) = length(CVids)+1 です. DOFsCVids の各凸の自由度の連結リストを含むベクトルです. IDx の各エントリは DOFs における対応する凸点リストの位置です.従って,例えば,第2凸の点のリストは DOFs[IDx(2):IDx(3)] です.

CVids にメッシュに存在しない凸の #id が含まれている場合,点リストは空になります.

basic_dof_nodes(DOFids=None)

基本自由度の位置を取得します.

指定した DOFids ( DOFids を省略すると,すべての基本自由度が考慮されます)の自由度 #IDs の補間点のリストを返します.

basic_dof_on_region(Rs)

Rs にリストされているメッシュ領域のいずれかにある基本自由度(任意削減前)のリストを返します.

より正確には,この関数は Rs (境界領域の場合,一部の節点自由度は正確に境界上に存在しない場合があります.たとえば, Pk(n,0) の自由度は凸の中心に存在しますが,基底関数は凸境界上でnullではありません)に #ids がリストされている領域のいずれかにおいて,サポートが非NULLである基本的な自由度を返します.

char(opt=None)

MeshFemの string description を出力します.

デフォルトでは, opt が 'with_mesh' の場合を除き,リンクされたメッシュオブジェクトの説明は含まれません.

convex_index()

FEMを持つ凸のリストを返します.

display()

MeshFemオブジェクトの簡単な概要が表示されます.

dof_from_cv(CVids)

非推奨の機能です.代わりに MeshFem.basic_dof_from_cv() を使用します.

dof_from_cvid(CVids=None)

非推奨の機能です.代わりに MeshFem.basic_dof_from_cvid() を使用します.

dof_from_im(mim, p=None)

mf と積分法 mim で計算される質量行列に大きく寄与する自由度を選択し返します.

p は積分法が作用する次元(デフォルトは p = メッシュの次元 )を表します.

重要:levelsetと交差しない凸には,有効な積分法を設定する必要があります!

dof_nodes(DOFids=None)

非推奨の機能です.代わりに MeshFem.basic_dof_nodes() を使用します.

dof_on_region(Rs)

Rs にリストされたメッシュ領域のいずれかに存在する自由度(任意削減後)のリストを返します.

より正確には,この関数は Rs (境界領域の場合,一部の節点自由度は正確に境界上に存在しない場合があります.たとえば, Pk(n,0) の自由度は凸の中心に存在しますが,基底関数は凸境界上でnullではありません)に #ids がリストされている領域のいずれかにおいて,サポートが非NULLである基本的な自由度を返します.

縮約されたmesh_femの場合,自由度は対応する形状関数のポテンシャルがこの領域でゼロでない場合に領域上にあります.拡張行列を使用して,基本自由度と縮約自由度間の対応を作ります.

dof_partition()

'dof_partition' 配列を取得します.

MeshFemの各凸に整数(パーティション番号)を関連付ける配列を返します.既定では,配列はすべてゼロです.MeshFemの各凸の自由度は,同じパーティション番号を持つ隣接する凸の自由度にのみ接続されるため,部分的に不連続なMeshFemを非常に簡単に作成することができます.

eval(expression, gl={}, lo={})

(lagrangian)MeshFemで式を補間します.

mf.eval('x*y') # interpolates the function 'x*y'
mf.eval('[x,y]') # interpolates the vector field '[x,y]'

import numpy as np
mf.eval('np.sin(x)',globals(),locals()) # interpolates the function sin(x)
export_to_dx(filename, *args)

概要: MeshFem.export_to_dx(self,string filename, ...['as', string mesh_name][,'edges']['serie',string serie_name][,'ascii'][,'append'], U, 'name'...)

MeshFemと一部のフィールドをOpenDXファイルに書き出します.

MeshFemでさまざまな凸が混在する場合(つまり,四角形と三角形),またはOpenDXで特定の要素型が処理されない(つまり,プリズム接続はOpenDXでは認識されない)場合,この関数は失敗します.

FEMは次数1のPk(またはQk)FEMにマップされます.高次FEMまたは高次幾何変換を表す必要がある場合は,Slice.export_to_dx() を使用する必要があります.

export_to_pos(filename, name=None, *args)

概要: MeshFem.export_to_pos(self,string filename[, string name][[,MeshFem mf1], mat U1, string nameU1[[,MeshFem mf2], mat U2, string nameU2,...]])

MeshFemと一部のフィールドをposファイルに書き出します.

FEMおよび幾何学的変換は,1次アイソパラメトリックPk(またはQk)FEM(GMSHはより高次の要素を処理しないため)にマッピングされます.

export_to_vtk(filename, *args)

概要: MeshFem.export_to_vtk(self,string filename, ... ['ascii'], U, 'name'...)

MeshFemと一部のフィールドをvtkファイルに書き出します.

FEMおよび幾何変換は,次数1または2のアイソパラメトリックPk(またはQk)FEM(VTKでは上位の要素を処理できないため)にマッピングされます.高次FEMまたは高次幾何変換を表す必要がある場合は Slice.export_to_vtk() を考慮する必要があります.

export_to_vtu(filename, *args)

概要: MeshFem.export_to_vtu(self,string filename, ... ['ascii'], U, 'name'...)

MeshFemと一部のフィールドをvtuファイルに書き出します.

FEMおよび幾何変換は,次数1または2のアイソパラメトリックPk(またはQk)FEM(VTK(XML)では上位の要素を処理できないため)にマッピングされます.高次FEMまたは高次幾何変換を表す必要がある場合は Slice.export_to_vtu() を考慮する必要があります.

extend_vector(V)

与えられたベクトルVにMeshFemの縮約行列を乗算します.

extension_matrix()

オプションの拡張行列を返します.

fem(CVids=None)

MeshFemで使用されるFEMのリストを返します.

FEMsCVids で与えられた凸にあるすべてのFemオブジェクトの配列です. CV2F が出力引数として指定された場合 CVids にリストされている各凸に対し, FEMs 内の対応するFEMのインデックスが含まれます.

メッシュの一部でない凸,またはFEMを持たない凸については CV2F の対応エントリを-1に設定します.

has_linked_mesh_levelset()

mesh_fem_level_setかどうかを確認します.

interpolate_convex_data(Ucv)

メッシュの各凸で指定されたデータをMeshFemの自由度に補間します.MeshFemはlagrangianである必要があり,不連続である必要があります(通常は FEM_PK(N,0) または FEM_QK(N,0) を使用する必要があります).

入力ベクトルUcvの最後の次元には Mesh.max_cvid() の要素が必要です.

使用例: MeshFem.interpolate_convex_data(Mesh.quality())

is_equivalent(CVids=None)

MeshFemが等価かどうかをテストします.

MeshFem.is_lagrangian() を参照してください.

is_lagrangian(CVids=None)

MeshFemがLagrangianであるかどうかをテストします.

Lagrangianとは,各基底関数 Phi[i] が, Phi[i](P[j]) = delta(i,j) となることを意味します.ここで P[j] は,j番目の基底関数の自由度位置であり,i==jなら delta(i,j) = 1 であり,そうでなければ0です.

CVids を省略すると,メッシュ内のすべての凸状がLagrangianの場合に1を返します. CVids を使用すると,Lagrangianである( CVids に関する)凸インデックスを返します.

is_polynomial(CVids=None)

すべての基本関数が多項式であるかどうかをテストします.

MeshFem.is_lagrangian() を参照してください.

is_reduced()

オプションの縮約マトリックスが自由度に適用される場合は1を返します.

linked_mesh()

mf にリンクされたメッシュオブジェクトへの参照を返します.

linked_mesh_levelset()

mesh_fem_level_set の場合はリンクされた mesh_level_set を返します.

memsize()

mesh_fem オブジェクトが使用するメモリ量(バイト単位)を返します.

この結果では,リンクされたメッシュオブジェクトは考慮されません.

mesh()

mf にリンクされたメッシュオブジェクトへの参照を返します( Mesh.linked_mesh() と同一です).

nb_basic_dof()

MeshFemの基本自由度(dof)の数を返します.

nbdof()

MeshFemの自由度(dof)の数を返します.

non_conformal_basic_dof(CVids=None)

部分的にリンクされた自由度を返します.

メッシュの境界上にあるものを除き,1つの凸にのみ属する凸の境界上にある基本自由度を返します.たとえば,凸の 'a' と 'b' が共通の面を共有し, 'a' にP1 FEMがあり, 'b' にP2 FEMがある場合,面の中央の基本自由度がこの関数によって返されます(これは,古典的FEMと階層的FEMの間のインターフェースを探索するときに有用です).

non_conformal_dof(CVids=None)

非推奨の機能です.代わりに MeshFem.non_conformal_basic_dof() を使用してください.

qdim()

MeshFemによって補間されたフィールドの次元Qを返します.

デフォルトでは,Q=1(スカラー場)です.これは,自由度の番号付けに影響します.

reduce_meshfem(RM)

Set reduction mesh fem This function selects the degrees of freedom of the finite element method by selecting a set of independent vectors of the matrix RM. The numer of columns of RM should corresponds to the number of degrees of freedom of the finite element method.

reduce_vector(V)

提供されたベクトルVにMeshFemの拡張行列を乗算します.

reduction(s)

縮約/拡張マトリックスの使用を設定または設定解除します.

reduction_matrices(R, E)

縮約および拡張マトリックスを設定し,その使用を有効にします.

reduction_matrix()

オプションの縮約行列を返します.

save(filename, opt=None)

MeshFemをテキストファイル(オプションで opt が文字列 'with_mesh' の場合はリンクされたメッシュオブジェクト)に保存します.

set_classical_discontinuous_fem(k, *args)

概要: MeshFem.set_classical_discontinuous_fem(self, int k[[, 'complete'], @tscalar alpha[, ivec CVIDX]])

k次の古典的(Lagrange多項式)不連続有限要素法を与えます.

FEM_PK_DISCONTINUOUS を使用する場合を除き MeshFem.set_classical_fem() に似ています.パラメータ alpha は節点のインセット, \(0 \leq alpha < 1\) で,0は通常の自由度節点を意味し,値が大きくなると節点は重心に向かって移動し,1はすべての自由度が重心で破綻することを意味します. 'complete' オプションは,要素の形状変換が不完全なもの(例えば8節点四面体または20節点六面体)であっても,完全なLangrange多項式要素が必要です.

set_classical_fem(k, *args)

概要: MeshFem.set_classical_fem(self, int k[[, 'complete'], ivec CVids])

MeshFemに古典的な(Lagrange多項式)有限要素法次数 k を割り当てます. 'complete' オプションは,要素の形状変換が不完全なもの(例えば8節点四辺形または20節点六面体)であっても,完全なLangrange多項式要素が必要です.

simplexに FEM_PK ,parallelepipedに FEM_QK などを使用します.

set_dof_partition(DOFP)

'dof_partition' 配列を変更します.

DOFP はMeshFemの各凸に対する整数値を保持するベクトルです. "dof partition" については, MeshFem.dof_partition() を参照してください.

set_enriched_dofs(DOFs)

MeshFem 積オブジェクトのみのため.強化された自由度を設定し,MeshFem 積を当てはめます.

set_fem(f, CVids=None)

有限要素法を設定します.

FEMの fCVids に #ids がリストされているすべての凸に割り当てます. CVids が指定されていない場合,積分はすべての凸に割り当てられます.

使用可能なFEMメソッドのリストについては,FEMのヘルプを参照してください.

set_partial(DOFs, RCVs=None)

部分的なMeshFemにのみ適用できます. mf の自由度のサブセットを変更します.

RCVs が与えられた場合, RCVs に列挙されている凸にはFEMは適用されません.

set_qdim(Q)

MeshFemによって補間されるフィールドの Q 次元を変更します.

Q = 1 はMeshFemがスカラーフィールドを記述することを意味し, Q = N はMeshFemが次数Nのベクトルフィールドを記述することを意味します.