OpenNL (Open Numerical Library) is a library for solving sparse linear systems, especially designed for the Computer Graphics community. The goal for OpenNL is to be as small as possible, while offering the subset of functionalities required by this application field. The Makefiles of OpenNL can generate a single .c + .h file, very easy to integrate in other projects. The distribution includes an implementation of our Least Squares Conformal Maps parameterization method.
New version: OpenNL 3.2.1, includes support for CUDA and Fermi architecture (Concurrent Number Cruncher and Nathan Bell's ELL formats)
[Download]
OpenNL offers the following set of functionalities:
 Efficient sparse matrix data structure (for nonsymmetric and symmetric matrices)
 Iterative builder for sparse linear system
 Iterative builder for sparse leastsquares problems
 Iterative solvers: conjugate gradient, BICGStab, GMRES
 Preconditionners: Jacobi, SSOR
 Iterative solver on the GPU (Concurrent Number Cruncher and Nathan Bell's ELL)
 Sparse direct solvers: OpenNL can be linked with SuperLU
 Simple demo program with LSCM (Least Squares Conformal Maps)
The traditional (but nonamazing) screenshot is here. The result is displayed with Graphite.
Featured projects with OpenNL

OpenNL is used by Ceemple


OpenNL is used by 3DCoat


OpenNL was integrated in the Blender 3D modeler by Brecht Van Lommel and Jens Ole Wund, more details given here and here . 

A special version of OpenNL is integrated into CGAL / Parameterization Package (with Laurent Saboret and Pierre Alliez)


OpenNL is used by SILO, more details given here. 
Philosophy
Why is it developped in C rather than C++ ? Some answers can be found here: we try to make it as simple as possible for the user. Next release will probably be in C++, but we will keep the same C API.
Download
Download OpenNL from Inria GForge
