Example codes
and tutorials
The (Not-so) Quick Guide
List of tutorials/demo codes
Single-Physics Problems
Adaptivity illustrated for Poisson
Unsteady heat equation
Linear wave equation
The Young-Laplace equation
Free-surface Navier-Stokes
Axisymmetric Navier-Stokes
Solid mechanics
Beam structures
Shell structures
Multi-physics Problems
Fluid-structure interaction
Boussinesq convection
Steady thermoelasticity
Methods-based example codes and tutorials
Mesh generation
Linear solvers and preconditioners
Visualisation of the results
Parallel processing
How to write a new element
How to write a new refineable element
Default nonlinear solvers -- the sequence of action functions
FE theory and top-down discussion of the data structure
The (Not-so) Quick Guide
Comprehensive bottom-up discussion of the data structure
List of available structured and unstructured meshes
Linear solvers and preconditioners
Visualisation of the results
Parallel processing
Coding conventions and C++ style
Creating documentation
Optimisation - robustness vs. "raw speed"
Linear vs. nonlinear problems
Storing shape functions
Changing the default "full" integration scheme
Disabling the ALE formulation of unsteady equations
C vs. C++ output
Different sparse assembly techniques and the STL memory pool
Journal publications
Picture show
Download/installation instructions
Download page
FAQ & Contact
Change log
Bugs and other known problems
Completeness of the library & our "To-Do List"
Contact the developers
Get involved


Beta release!

Please note that the library has not been "officially" released. While we continue to work on the documentation, these web pages are likely to contain broken links and documents in draft form. Please send an email to

oomph-lib AT maths DOT man DOT ac DOT uk

if you wish to be informed of the library's "official" release.

Welcome to the homepage of oomph-lib

oomph-lib is an object-oriented, open-source finite-element library for the simulation of multi- (and single-)physics problems, developed and maintained by Matthias Heil and Andrew Hazel of the School of Mathematics at The University of Manchester.

The latest version of the library is revision 0.90 which was released on August 3, 2009. See the change log page for an overview of the changes made since the previous release.

All you ever wanted to know about oomph-lib

What it is (and what it is not)?

oomph-lib is: oomph-lib it is not:

You must write your own C++ driver codes to specify your problem, using oomph-lib's high-level objects. [If your C++ is a bit rusty (or non-existent) have a look at Andrew Hazel's C++ course for a quick introduction.] Once the problem is formulated, the main function can be as simple as this:

          // Create the problem object
          MyProblem problem;
          // Solve the problem, using oomph-lib's default Newton solver

oomph-lib provides the infrastructure for the problem formulation and solution. The library contains a large number of elements, meshes, timesteppers, solvers, etc. which can be combined to solve any problem.

The library is supplied with extensive on-line documentation which includes:


How much does it cost? Nothing!

How do I get it? What do I need? How do I install it?

How do I get it?

We provide gzipped tar files of the entire library (big!), and (much smaller) partial distributions in which, e.g. the online documentation and/or the demo/self-test codes and the associated validation data are excluded.

We also provide read-only access to the subversion repository of the oomph-lib project which is hosted at oomph-lib.maths.man.ac.uk. If subversion is installed on your computer you can obtain the latest snapshot of the project by issuing the command

svn checkout svn://oomph-lib.maths.man.ac.uk/trunk

See our subversion webpage for further details.

What do I need?

oomph-lib has been/is being developed in a linux environment, using standard ANSI C++. In order to minimise the dependence on external libraries we include "frozen" versions of certain external libraries (METIS, SuperLU, ...) with our distribution. The idea is that you should only have to unpack, build and install one distribution to produce the fully compiled library, the html-based documentation and working example codes.

For this purpose you must have:

The following programs are helpful but not essential:

How do I install it?

The oomph-lib distribution is built under autoconf / automake control, making the installation completely straightforward. We provide two main installation mechanisms:
  1. oomph-lib can be built/installed/tested with GNU's standard configure; make; make install; make check procedure.

  2. We also provide a customised build script, autogen.sh, that guides the "non-expert" user through the installation. The script facilitates the specification of various build options, such as optimisation levels etc.
Subject to the minimum requirements, listed above, you should be able to install and use our libraries "anywhere". However, as anybody who has ever ported any code to a different platform knows, things are rarely that simple -- even with autoconf, automake and libtool... Having said that, we have successfully installed and tested our installation on the following platforms: We welcome feedback on any problems that you encounter during your attempts to install oomph-lib on your machine. However, please check the FAQ and the instructions on the download page before you contact us!

How do I visualise the results?

An important question! As mentioned above, oomph-lib is not a "GUI package" and does not provide any built-in visualisation tools. oomph-lib's post-processing routines produce ASCII data in a format that is suitable for post-processing with tecplot -- a powerful and easy-to-use commercial plotting package. [The plots and animations shown in the examples were all produced with tecplot.] gnuplot can also display the data (in more elementary form, obviously). The trick is to specify the using option in gnuplot's plot commands -- in this mode gnuplot ignores tecplot's "ZONE" commands. Angelo Simone wrote python scripts that convert oomph-lib's output to the vtu format that can be read by paraview; see the paraview tutorial for details.

Who develops/maintains oomph-lib?

The oomph-lib "architects" are (in no particular order)


...assisted by former/current project/MSc/PhD students and collaborators who made (or are still making) signficant contributions to the development of the library (listed in reverse chronological order):

We're always looking for more help! Get in touch if you're interested in joining the team, and check out the ToDo page for capabilities/features that are planned for future releases.

Contact/Further information

You can contact the developers at

oomph-lib AT maths DOT man DOT ac DOT uk

If you wish to be kept up-to-date about revisions, bug fixes and new releases, join our (very low volume) mailing list.


We wish to acknowledge the direct and indirect support from the following people and organisations:

PDF file

A pdf version of this document is available.
Generated on Thu Aug 13 16:12:52 2009 by  doxygen 1.4.7