LFMat 0.1.1 review
DownloadLFMat's goal is to furnish convenient matrix tools for the finite element methods


LFMat's goal is to furnish convenient matrix tools for the finite element methods. Actually, there's a lot of libraries for linear algebra on the net, but it seems that it's still hard to find flexible and high performance free software for the required procedures (genericity, speed, adaptated storage, ...).
LFMat is a generic purpose, fully templated open source C++ matrix library. Particular attention has been furnished to get convenient storage for SIMD instructions like 3Dnow! and SSE2 on x86 processors and Altivec on PowerPC ones. It means that there's specializations for severals important types like float or double in order to get the deserving performances.
Furthermore, important routines make careful use of cache, leading  as example  to solvers up to 8 times faster than standard lapack ones in the same situation (see benchmarks).
Matrices can contain any kind of data (double, float, symbolic expressions, ...) and user can choose orientation, storage style and structure (see tutorial). Furthermore, matrices can be of fixed size (known at compilation time), allowing compilers to make additional optimizations.
Here are some key features of "LFMat":
For now, storage styles can be:
dense (n*m elements for a rectangular matrix, n*(n+1)/2 for a square symmetric matrix),
dense uncompressed (n*n for a symmetric matrix),
sky line (user gives the beginning and/or the end of each lines),
sparse, row or column compressed,
band.
Structures can be:
generic (no particular properties),
diagonal.
symmetric,
antisymmetric,
hermitian,
triangular, upper or lower,
The number of reserved elements depends on both storage and structure.
Furthermore, matrices can be:
row oriented,
column oriented,
diagonal oriented (still in progress).
Some useful procedures have been coded for different kind of matrices:
solvers (cholesky, ... see Table 1.2 ),
operators (*, ... see Table 1.3),
eigen values finders.
converter between different kind of matrices
All these procedures have been designed to be fast, using cache and SIMD instruction where possible.
LFMat 0.1.1 keywords