Slice

class Slice(*args)

GetFEM Sliceオブジェクト

メッシュスライスの作成をします.メッシュスライスは,補間が非常に高速なP1不連続メッシュ分割に非常によく似ています.スライスは,メッシュオブジェクトとスライス操作の記述により作成されます.次に例を示します.

sl = Slice(('planar',+1,[[0],[0]],[[0],[1]]), m, 5)

は元のメッシュを半空間 {y>0} で切り取ります.元のメッシュ m の各凸を単純化します(例えば,四角形は2つの三角形に分割されます).そして各単体は5回リファインされます.

スライス操作には次のものがあります.

  • 平面,球または円柱を使った切断

  • スライスの交差または結合

  • 等値面/体

  • "points", "streamlines" (下記参照)

最初の引数がMeshではなくMeshFem mf で,その後に mf フィールド u が続く場合,変形 u はスライス操作の前にメッシュに適用されます.

最初の引数はスライスにすることもできます.

Sliceオブジェクトの汎用的なコンストラクタです.

  • sl = Slice(sliceop, {Slice sl|{Mesh m| MeshFem mf, vec U}, int refine}[, mat CVfids]) sliceop 操作でスライスを作成します.

    sliceop 操作はTupleかListで指定されます.追加の括弧を忘れないでください! 最初の要素は操作の名前で,その後にスライスオプションが続きます.

    • ('none') : メッシュをカットしません.

    • ('planar', int orient, vec p, vec n) : 平面カット. pn は半空間を定義し, p は半空間の境界に属する点であり, n はその法線です. orient が -1 (または 0, +1) に等しい場合,スライス操作は半空間の "内側" (または "境界", "外側") でメッシュを切断します. orient を+2に設定すると,メッシュはスライスされますが,外側と内側の両方の部分は保持されます.

    • ('ball', int orient, vec c, scalar r) : 中心 c と半径 r の球でカットします.

    • ('cylinder', int orient, vec p1, vec p2, scalar r) : 軸が (p1, p2) 線で半径が r の円柱で切断します.

    • ('isovalues', int orient, MeshFem mf, vec U, scalar s) : (MeshFem mf で定義された)フィールド U の等値面を使用して切断します.結果は orient の値に応じて {x such that :math:`U(x) leq s}` または {x such that `U`(x)=`s}` または {x such that `U`(x) >= `s}` になります.

    • ('boundary'[, SLICEOP]) : SLICEOPの結果の境界を返します.ここで,SLICEOPはスライシング操作です.SLICEOPが指定されていない場合は,メッシュ全体(つまり, ('boundary',{'none'})) と見なされます.

    • ('explode', mat Coef) : メッシュの 'exploded' 表示を構築します.各凸が (\(0 < \text{Coef} \leq 1\)) 収縮されます.3次元凸の場合,面のみが保持されます.

    • ('union', SLICEOP1, SLICEOP2) : スライス操作の和集合を返します.

    • ('intersection', SLICEOP1, SLICEOP2) : スライスの交差操作を返します.例えば

      sl = Slice((intersection',('planar',+1,[[0],[0],[0]],[[0],[0],[1]]),
                                 ('isovalues',-1,mf2,u2,0)),mf,u,5)
      
    • ('comp', SLICEOP) : スライス操作の補完を返します.

    • ('diff', SLICEOP1, SLICEOP2) : スライス操作の差を返します.

    • ('mesh', Mesh m) : スライスされたメッシュと別のメッシュの交差部分のスライスを作成します.このスライスは,すべての単項が各メッシュの凸に厳密に含まれるものです.

  • sl = Slice('streamlines', MeshFem mf, mat U, mat S) S の列で与えられるシード点を使って,(ベクトル)フィールド U の流線を計算します.

  • sl = Slice('points', Mesh m, mat Pts) Ptsのカラムで指定された点で構成される "スライス" を返します.( 指定された疎点の集合上の補間に役立ちます. gf_compute('interpolate on',sl) を参照してください).

  • sl = Slice('load', string filename[, Mesh m]) テキストファイルからスライス(および,引数として指定されていない場合,リンクされたメッシュ)を読み込みます.

area()

スライスの面積を返します.

char()

スライスの(一意な)文字列表現を出力します.

これを使用して,2つの異なるSliceオブジェクト間の比較を実行できます.この機能は完成予定です.

cvs()

スライスに含まれる元のメッシュの凸のリストを返します.

dim()

スライスの次数(2次元メッシュであれば2など)を返します.

display()

Sliceオブジェクトの概要が表示されます.

edges()

スライスに含まれるリンクメッシュのエッジを返します.

P はすべてのエッジ頂点のリストを含み, E1P における各メッシュエッジのインデックスを含み, E2 はスライスの境界上にある各 "エッジ" のインデックスを含みます.この機能は,ポスト処理の目的以外には使用できません.

export_to_dx(filename, *args)

概要: Slice.export_to_dx(self, string filename, ...)

スライスをOpenDXに書き出します.

filename の後には,以下のオプションを使うことができます.

  • 'ascii' を使用しない場合,ファイルには(ポータブルではないが高速な)バイナリデータが格納されます.

  • 'edges' を使用すると,スライスではなくオリジナルのメッシュのエッジが書き込まれます.

  • 'append' を使用すると,opendxファイルは上書きされず,新しいデータがファイルの最後に追加されます.

複数のデータセットを書き込むこともできますが,それらを一覧表示するだけです.各データセットは次のいずれかで構成されます.

  • スライス上で補間されるフィールド(スカラー,ベクトル,テンソル)で,その後にオプションの名前が続きます.

  • mesh_femとフィールドを指定し,その後にオプションの名前を指定します.

export_to_pos(filename, name=None, *args)

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

スライスをGmshにエクスポートします.

複数のデータセットを書き込むこともできますが,それらを一覧表示するだけです.各データセットは次のいずれかで構成されます.

  • スライス上で補間されるフィールド(スカラー,ベクトル,テンソル).

  • mesh_femとフィールド.

export_to_pov(filename)

スライスの三角形をPOV-RAYに書き出します.

export_to_vtk(filename, *args)

概要: Slice.export_to_vtk(self, string filename, ...)

スライスをVTKにエクスポートします.

filename の後には,以下のオプションを使うことができます.

  • 'ascii' を使用しない場合,ファイルには(ポータブルではないが高速な)バイナリデータが格納されます.

  • 'edges' を使用すると,スライスではなくオリジナルのメッシュのエッジが書き込まれます.

複数のデータセットを書き込むこともできますが,それらを一覧表示するだけです.各データセットは次のいずれかで構成されます.

  • スライス上で補間されるフィールド(スカラー,ベクトル,テンソル)で,その後にオプションの名前が続きます.

  • mesh_femとフィールドを指定し,その後にオプションの名前を指定します.

  • Slice.export_to_vtk('test.vtk', Usl, 'first_dataset', mf, U2, 'second_dataset')

  • Slice.export_to_vtk('test.vtk', 'ascii', mf,U2)

  • Slice.export_to_vtk('test.vtk', 'edges', 'ascii', Uslice)

export_to_vtu(filename, *args)

概要: Slice.export_to_vtu(self, string filename, ...)

スライスをVTK(XML)にエクスポートします.

filename の後には,以下のオプションを使うことができます.

  • 'ascii' を使用しない場合,ファイルには(ポータブルではないが高速な)バイナリデータが格納されます.

  • 'edges' を使用すると,スライスではなくオリジナルのメッシュのエッジが書き込まれます.

複数のデータセットを書き込むこともできますが,それらを一覧表示するだけです.各データセットは次のいずれかで構成されます.

  • スライス上で補間されるフィールド(スカラー,ベクトル,テンソル)で,その後にオプションの名前が続きます.

  • mesh_femとフィールドを指定し,その後にオプションの名前を指定します.

  • Slice.export_to_vtu('test.vtu', Usl, 'first_dataset', mf, U2, 'second_dataset')

  • Slice.export_to_vtu('test.vtu', 'ascii', mf,U2)

  • Slice.export_to_vtu('test.vtu', 'edges', 'ascii', Uslice)

interpolate_convex_data(Ucv)

メッシュの各凸に指定されたデータをスライスの節点で補間します.

入力配列 Ucv は任意の数の次元を持つことができますが,その最後の次元は Mesh.max_cvid() に等しくなければなりません.

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

linked_mesh()

スライスが作成されたメッシュを返します.

memsize()

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

mesh()

スライスが作成されたメッシュを返します( 'リンクメッシュ' と同一).

nbpts()

スライス内の点の数を返します.

nbsplxs(dim=None)

スライス内の単体の数を返します.

スライスには,点(dim0の単体),セグメント(次元1の単体),三角形などが含まれる場合があるため,オプションの引数 dim が使用されている場合を除いて,結果はサイズ Slice.dim()+1 のベクトルになります .

pts()

点座標のリストを返します.

set_pts(P)

スライスの点を置き換えます.

新しい点 P は行列の列に格納されます.この関数を使用して,スライスに変形を適用したり,スライスの次元を変更したりできます( P の行数は Slice.dim() と同じである必要はありません).

splxs(dim)

次元 dim の単体のリストを返します.

出力では,Sには 'dim+1' 行があり,各列には単体の点番号が含まれています.ベクトル CV2S を使用して,スライス内に格納されている任意の凸の単体のリストを見つけることができます.たとえば, 'S[:,CV2S[4]:CV2S[5]]' とすると,第4の凸の単体のリストが得られます.