# Gmm library¶

## Description¶

*Gmm++* is a template linear algebra library which was originally designed to make an
interface between the need in linear algebra procedures of *GetFEM* and existing free
linear algebra libraries (MTL, Superlu, Blas, Lapack originally). It rapidly
evolves to an independent self-consistent library with its own vector and matrix
types. It is now used as a base linear algebra library by several other projects.

However, it preserves the characteristic to be a potential interface for more
specific packages. Any vector or matrix type having the minimum of compatibility
can be used by generic algorithms of *Gmm++* writing a `linalg_traits`

structure.

A *Gmm++* standalone version is distributed since release 1.5 of *GetFEM*. It is
however developed inside the *GetFEM* project even though since release 3.0 it is
completely independent of any *GetFEM* file.

In addition to the linear algebra procedures, it furnishes also the following
utilities to *GetFEM*.

- Fix some eventual compatibility problems in
`gmm_std.h`

. - Error, warning and trace management in
`gmm_except.h`

. - Some extended math definitions in
`gmm_def.h`

.

See Gmm++ Library documenation for more details.

## Files¶

All files in src/gmm

## State¶

For the moment, *Gmm++* cover the needs of *GetFEM* concerning the basic linear algebra
procedures.

## Perspectives¶

There is potentially several points to be improved in *Gmm++* (partial
introduction of expression template for some base types of matrix and vectors,
think about the way to represent in a more coherent manner sparse sub-vectors
and sub-matrices, introduction of C++ concepts, etc.). However, since *Gmm++*
globally cover the needs of *GetFEM* and since there exists some other project like
Glas to build a reference C++ library for
linear algebra, a global change seem to be unnecessary. This part
is considered to be stabilized.

The current vocation of *Gmm++* is to continue to collect generic algorithms and
interfaces to some other packages (DIFFPACK for instance) in order to cover new needs of the whole
project. The library is now frequently used as a separate package and has also
the vocation to collect the contribution of any person who propose some
improvements, new algorithms or new interfaces.