*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 *MatLab*) and some additional
`m-files`

(documentation and extra-functionalities). All the functions of *GetFEM++*
are prefixed by `gf_`

(hence typing `gf_`

at the *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.

`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 a 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 *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 *MatLab* structures containing 32-bits integer
identifiers to the real objects. Hence the *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')`

).