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).

`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.

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')`).