GetFEM organization

The GetFEM toolbox is just a convenient interface to the GetFEM library: you must have a working GetFEM installed on your computer. This toolbox provides a big mex-file (c++ binary callable from Octave or MatLab) and some additional m-files (documentation and extra-functionalities). All the functions of GetFEM are prefixed by gf_ (hence typing gf_ at the Octave or MatLab prompt and then pressing the <tab> key is a quick way to obtain the list of getfem functions).

Functions

  • gf_workspace : workspace management.
  • gf_util : miscellanous utility functions.
  • gf_delete : destroy a GetFEM object (gfMesh , gfMeshFem , gfMeshIm etc.).
  • gf_cvstruct_get : retrieve informations from a gfCvStruct object.
  • gf_geotrans : define a geometric transformation.
  • gf_geotrans_get : retrieve informations from a gfGeoTrans object.
  • gf_mesh : creates a new gfMesh object.
  • gf_mesh_get : retrieve informations from a gfMesh object.
  • gf_mesh_set : modify a gfMesh object.
  • gf_eltm : define an elementary matrix.
  • gf_fem : define a gfFem.
  • gf_fem_get : retrieve informations from a gfFem object.
  • gf_integ : define a integration method.
  • gf_integ_get : retrieve informations from an gfInteg object.
  • gf_mesh_fem : creates a new gfMeshFem object.
  • gf_mesh_fem_get : retrieve informations from a gfMeshFem object.
  • gf_mesh_fem_set : modify a gfMeshFem object.
  • gf_mesh_im : creates a new gfMeshIm object.
  • gf_mesh_im_get : retrieve informations from a gfMeshIm object.
  • gf_mesh_im_set : modify a gfMeshIm object.
  • gf_slice : create a new gfSlice object.
  • gf_slice_get : retrieve informations from a gfSlice object.
  • gf_slice_set : modify a gfSlice object.
  • gf_spmat : create a gfSpMat object.
  • gf_spmat_get : perform computations with the gfSpMat.
  • gf_spmat_set : modify the gfSpMat.
  • gf_precond : create a gfPrecond object.
  • gf_precond_get : perform computations with the gfPrecond.
  • gf_linsolve : interface to various linear solvers provided by getfem (SuperLU, conjugated gradient, etc.).
  • gf_asm : assembly routines.
  • gf_solve : various solvers for usual PDEs (obsoleted by the gfMdBrick objects).
  • gf_compute : computations involving the solution of a PDE (norm, derivative, etc.).
  • gf_mdbrick : create a (“model brick”) gfMdBrick object.
  • gf_mdbrick_get : retrieve information from a gfMdBrick object.
  • gf_mdbrick_set : modify a gfMdBrick object.
  • gf_mdstate : create a (“model state”) gfMdState object.
  • gf_mdstate_get : retrieve information from a gfMdState object.
  • gf_mdstate_set : modify a gfMdState object.
  • gf_model : create a gfModel object.
  • gf_model_get : retrieve information from a gfModel object.
  • gf_model_set : modify a gfModel object.
  • gf_global_function : create a gfGlobalFunction object.
  • gf_model_get : retrieve information from a gfGlobalFunction object.
  • gf_model_set : modify a GlobalFunction object.
  • gf_plot_mesh : plotting of mesh.
  • gf_plot : plotting of 2D and 3D fields.
  • gf_plot_1D : plotting of 1D fields.
  • gf_plot_slice : plotting of a mesh slice.

Objects

Various “objects” can be manipulated by the GetFEM toolbox, see fig. GetFEM objects hierarchy.. The MESH and MESHFEM objects are the two most important objects.

../_images/hierarchy.png

GetFEM objects hierarchy.

  • gfGeoTrans: geometric transformations (defines the shape/position of the convexes), created with gf_geotrans
  • gfGlobalFunction: represent a global function for the enrichment of finite element methods.
  • gfMesh : mesh structure (nodes, convexes, geometric transformations for each convex), created with gf_mesh
  • gfInteg : integration method (exact, quadrature formula…). Although not linked directly to GEOTRANS, an integration method is usually specific to a given convex structure. Created with gf_integ
  • gfFem : the finite element method (one per convex, can be PK, QK, HERMITE, etc.). Created with gf_fem
  • gfCvStruct : stores formal information convex structures (nb. of points, nb. of faces which are themselves convex structures).
  • gfMeshFem : object linked to a mesh, where each convex has been assigned an FEM. Created with gf_mesh_fem.
  • gfMeshImM : object linked to a mesh, where each convex has been assigned an integration method. Created with gf_mesh_im.
  • gfMeshSlice : object linked to a mesh, very similar to a P1-discontinuous gfMeshFem. Used for fast interpolation and plotting.
  • gfMdBrick : gfMdBrick , an abstraction of a part of solver (for example, the part which build the tangent matrix, the part which handles the dirichlet conditions, etc.). These objects are stacked to build a complete solver for a wide variety of problems. They typically use a number of gfMeshFem, gfMeshIm etc. Deprecated object, replaced now by gfModel.
  • gfMdState : “model state”, holds the global data for a stack of mdbricks (global tangent matrix, right hand side etc.). Deprecated object, replaced now by gfModel.
  • gfModel : “model”, holds the global data, variables and description of a model. Evolution of “model state” object for 4.0 version of GetFEM.

The GetFEM toolbox uses its own memory management. Hence GetFEM objects are not cleared when a:

>> clear all

is issued at the Octave or MatLab prompt, but instead the function:

>> gf_workspace('clear all')

should be used. The various GetFEM object can be accessed via handles (or descriptors), which are just Octave / MatLab structures containing 32-bits integer identifiers to the real objects. Hence the Octave or MatLab command:

>> whos

does not report the memory consumption of GetFEM objects (except the marginal space used by the handle). Instead, you should use:

>> gf_workspace('stats')

There are two kinds of GetFEM objects:

  • static ones, which can not be deleted: ELTM, FEM, INTEG, GEOTRANS and CVSTRUCT. Hopefully their memory consumption is very low.
  • dynamic ones, which can be destroyed, and are handled by the gf_workspace function: MESH, MESHFEM, MESHIM, SLICE, SPMAT, PRECOND.

The objects MESH and MESHFEM are not independent: a MESHFEM object is always linked to a MESH object, and a MESH object can be used by several MESHFEM objects. Hence when you request the destruction of a MESH object, its destruction might be delayed until it is not used anymore by any MESHFEM (these objects waiting for deletion are listed in the anonymous workspace section of gf_workspace('stats')).