As the name suggests, this software originated as a solver for fluid flow problems, to test methods developed in the authors PhD Thesis. Over time though it evolved, and the same low level routines were reused to build solvers for other problems as well.

All linear equation systems are solved by modern preconditioned iterative methods, based on multi-level/multi-grid ideas.

Although the code is written entirely in C, it uses ideas from object oriented programming to a certain degree, to combine advantages of both worlds.

Key features

The code currently implements unstructured meshes of triangular elements (P1 and P2) in two dimensions, unstructured meshes of tetrahedral elements (P1 and P2) in three dimensions, with adaptive refinement or uniform h-refinement. The data structures and code layout are intended to allow easy extension other types of elements (e.g. quadrangles, hexahedra).

From the beginning, the code was meant to support shape optimisation. For this purpose in 2D it allows boundary sections defined by Bezier-splines, and is able to compute the derivatives of functionals that depend on the solution of a PDE with respect to those spline parameters. This is done efficiently by means of the discrete adjoint method (see the authors PhD thesis), with a cost roughly equivalent to one additional solve of the primal problem. This derivative is in some sense a shape-gradient of the functional, which can be used for optimisation.
In 3D shape optimisation is not implemented yet, but should be possible with similar techniques.

Problem specific features:
Poisson Equation
  • mainly meant for testing various components for other problems
  • BPX-preconditioner and V-cycle-multigrid as preconditioners for CG
  • no shape gradient yet
  • P1 and P2 elements in 2D and 3D
  • adaptivity, using Bänsch green refinement and a ZZ error estimator (currently only in 3D)
  • stationary case only
Lame-Equation of linear elasticity
  • BPX-preconditioner and V-cycle-multigrid as preconditioners for CG
    solving 35,419,650 DOFs for P2 elements to 1e-6 in 733 seconds on a single core of a Intel Xeon 5160 @ 3.0 GHz
  • shape gradient available in 2D (upcoming release also in 3D)
  • P1 and P2 elements in 2D and 3D
  • adaptivity, using Bänsch green refinement and a residual error estimator (in 2D) or ZZ error estimator (2D and 3D)
  • stationary case only
  • efficient eigenvalue analysis with P1 elements in 3D (upcoming release also P2 elements)
Incompressible Navier-Stokes
  • Newton- or Picard-linearisation
  • Fp-preconditioner for GMRES ([Kay, Loghin, Wathen, 2002] and [Elman, Loghin, Wathen, 2003]) with multigrid preconditioned GMRES for solving the subproblems within the preconditioner.
    solving 37,769,219 DOFs to 1e-9 in 8.6 hours on a single core of a Intel Xeon 5160 @ 3.0 GHz
  • shape gradient available
  • Taylor-Hood elements (P2 for velocities and P1 for pressure)
  • no adaptivity yet
  • stationary case only


This finite element solver is released as free software under GNU GPL Version 3. However, if this is too restrictive for your purposes, please contact the author Rene Schneider , and a less restrictive license may be agreed.


The code itself is documented fairly well, but a central guide is only available in form of the README.TXT. The README provides support up to the point that you can build the code and run an example that comes along with it. It should be fairly easy to start from there. If you have questions, please contact me: Rene Schneider .