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)


OpenNL offers the following set of functionalities:

  • Efficient sparse matrix data structure (for non-symmetric and symmetric matrices)
  • Iterative builder for sparse linear system
  • Iterative builder for sparse least-squares 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 non-amazing) screen-shot is here. The result is displayed with Graphite.

Featured projects with OpenNL

OpenNL is used by Ceemple
OpenNL is used by 3D-Coat
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.


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 OpenNL from Inria GForge