Python GetFEM インターフェイス

はじめに

GetFEM は,スクリプト言語 Python へのインターフェイスを提供します. Python はクロスプラットフォームでフリーな言語です.numpyパッケージの追加により,pythonはMatlab機能のサブセット(すなわち密配列)を提供します.VTK ツールキットはpythonインタフェース(または MayaVi )を介して視覚化ツールを提供し, OpenDX のデータファイルをエクスポートすることができます.ただし,このガイドでは,結果を視覚化するために,Gmsh ポスト処理フォーマットにエクスポートします.疎行列ルーチンはgetfemインタフェースによって提供されます.

pythonインタフェースはpythonモジュールgetfem.pyを介して使用できます.インターフェースを使用するには,次のようにロードする必要があります.

import getfem
m = getfem.Mesh('cartesian', range(0, 3), range(0,3))

または

from getfem import *
m = Mesh('cartesian', range(0, 3), range(0,3))

getfem.py (と内部の _getfem.so) モジュールが標準の場所にインストールされていないと,環境変数 PYTHONPATH をその場所に設定する必要があります.次に例を示します.

import sys
sys.path.append('.../getfem/getfem++/interface/src/python/')

並列版

現時点では,mpiベースのGetfem並列版をインターフェースしているのはPythonインターフェースだけです. GetFEM のMPI並列化 を参照してください.

メモリ管理

Matlabインターフェースの優れた利点は,使用されなくなったオブジェクトを明示的に削除する必要がなく,自動的に削除されることです.しかし,getfemワークスペースの内容は, getfem.memstats() 関数で調べることができます.

文書化

getfem モジュールについては多くの文書があります.このドキュメントは APIリファレンス に展開されています.getfem-matlabのユーザーガイドも使用できますが,これは,このガイドの内容の95%がPythonに直接変換されているためです(ただし,matlabに固有の描画関数は例外です).

Python GetFEM 構成

python-interfaceの一般的な構成は次のとおりです.

  • matlabインターフェースの各クラスは,Pythonインターフェースに対応するクラスを持っています.PythonのMeshクラスでは, gfSlice が getfem.Slice などになります.

  • matlabインターフェースの各getおよびsetメソッドは,Pythonインターフェースの対応するクラスのメソッドに変換されています.次に例を示します.

    gf_mesh_get(m, 'outer faces');
    gf_mesh_get(m, 'pts');
    

    次のようになります.

    m.outer_faces();
    m.pts();
    

    曖昧さがあったときに名前が変更されたメソッドもあります.例えば gf_mesh_set(m, 'pts', P)m.set_pts(P) です.

  • もう1つのgetfem-matlab関数には,対応するPython関数への非常に単純なマッピングがあります.

    gf_compute(mf,U,'foo',...)

    getfem.compute_foo(mf,U) または getfem.compute('foo',...)

    gf_asm('foobar',...)

    getfem.asm_foobar(...) または getfem.asm('foobar',...)

    gf_linsolve('gmres',...)

    getfem.linsolve_gmres(...) または getfem.linsolve('gmres',...)

../_images/hierarchy1.png

python-getfem インタフェースメインオブジェクトの階層.

class CvStruct(self, *args)

凸構造オブジェクトの記述子は凸構造の形式情報(凸の構造である点の数,面の数)を格納します.

class GeoTrans(self, *args)

幾何変換オブジェクト(凸の形状/位置を定義する)記述子.

class Mesh(self, *args)

メッシュ構造(節点,凸,各凸の幾何変換)記述子.

class Fem(self, fem_name)

FEM(有限要素法)オブジェクトの記述子(1つの凸ごとに PK, QK, HERMITE, などがあります).

class Integ(self, *args)

積分法オブジェクトの記述子(正確な求積公式 ldots ).GeoTransに直接リンクされているわけではありませんが,通常,積分法は特定の凸構造に固有です.

class MeshFem(self, *args)

メッシュにリンクされたオブジェクトの記述子です.メッシュの各凸にはFEMが割り当てられています.

class MeshIm(self, *args)

メッシュにリンクされたオブジェクトの記述子です.各凸には積分法が割り当てられています.

class Model(self, *args)

model オブジェクトの記述子で,モデルのグローバルデータ,変数,および記述子を保持します. GetFEM のバージョン4.0では model state および model brick オブジェクトが進化しました.