Content 
FLENS
FLENS extends C++ for matrix/vector types that are ideally suited for numerical linear algebra. That's it ...
...but the consequences are immense. The simplicity of its design makes the combination FLENS/C++ a powerful tool for the development of highperformance applications and libraries in scientific computing.
Features

C++ library (requires a C++11 conform compiler)

Easy install as FLENS is headers only

FLENS gives you

Matrix/vector types for dense linear algebra

Generic implementation of BLAS (see CXXBLAS)

Generic reimplementation of LAPACK (see FLENSLAPACK)

Generic implementation means that you can use any element type for your matrices/vectors that “acts like a double”. So in particular types from the QD Library, mpfr, ...


If high performance BLAS libraries like ATLAS or GotoBLAS are available:

compile with DWITH_ATLAS or DWITH_GOTOBLAS respectively,

link against them and boost performance.
FLENS does not introduce any overhead due to abstraction. You get all the performance.


FLENSBLAS is a highlevel and easytouse BLAS interface

FLENSLAPACK is a highlevel and easytouse C++ implementation of LAPACK.

FLENS also allows using overloaded operators for accessing BLAS. Most important in this respect:

Overloaded operators come without performance penalty!

In a special debug mode you can exactly trace what is happening and how you linear algebra expressions gets evaluated through BLAS calls

More features are explained in the tutorial.


The combination C++/FLENS is not only competitive with Fortran or C: With respect to performance it is absolutely equivalent. There are not obscure runtime overheads or secretly created temporaries. You are as much in control as you would be with Fortran or C. However, life is so much easier with C++/FLENS.
Examples and Tutorial

Overview of all driver functions currently implemented in FLENSLAPACK

We just started with a tutorial:

Session 1: General matrices and dense vectors.

Session 2: BLAS, CXXBLAS, FLENSBLAS and Overloaded Operators.

Session 3: More on matrices: Triangular and symmetric matrices, matrix views, ...

Session 4: Using FLENSLAPACK.

Session 5: Using an external LAPACK implementation.

Session 6: Sparse Matrices (Experimental).

Session 7: User Defined Matrix Types.

Scope of this Branch

Support of all matrix/vector types one knows from BLAS. This means real and complex matrix types with full, band and packed storage as well as dense vector types:

Sparse matrices are experimental at the moment (but they work very well).

Our generic BLAS implementation CXXBLAS.

Support for high and multipecission types from QD Library and mpfr.

Support for native BLAS implementations like ATLAS or GotoBLAS.

FLENSBLAS and FLENSLAPACK.

Overloaded operators for BLAS working ontop of the FLENSBLAS layer.

We improved our DocTool (look at the bottom of each page for document source).
Compiler Requirements
FLENS uses some of the C++11 features and therefore requires a recent C++ compiler:
Git It/Download
You can clone a public branch from GitHub
git clone git://github.com/michaellehn/FLENS.git
or download a snapshot.
Mailing List
Join the mailing list!
Contributors

Iris Häcker

Klaus Pototzky

Alexander Stippler
FLENS Legacy (20032011)
Here's the site of the old FLENS (preC++11). It needs an update but otherwise Everything You Always Wanted to Know About FLENS, But Were Afraid to Ask (PDF) still gives a good introduction to FLENS, LAPACK and BLAS. Furthermore, it shows how FLENS can be used for the development of higherlevel numerical applications.