tlm_adjoint is a Python 3 library for the automated derivation of higher order tangent-linear and adjoint models. This interfaces with the FEniCS system for the calculation of higher order partial differential equation constrained derivative information. Currently targetting FEniCS 2018.1.0, and also includes an experimental interface with Firedrake.

tlm_adjoint can be found in the corresponding GitHub repository.


I was the PI of the ARCHER embedded CSE eCSE03-8, "Parallel supermeshing for multimesh modelling", for which the libsupermesh parallel supermeshing library was developed. Details regarding the library can be found in the manual and in the report.

The latest version can be found in the libsupermesh Bitbucket repository.


I have previously contributed to the Spud options system. This provides a means of describing options for complex numerical models, and configuring these models using a simple graphical user interface.

The Spud system is described in Ham et al, GMD 2, pp. 33‒42, 2009. The latest version can be accessed here.


I have previously contributed to Fluidity. This is an adaptive mesh finite element computational fluid dynamics code.

Further information, including the Fluidity manual and access to the latest version, can be found here.

timestepping library

I was the developer of the "timestepping" extension to the FEniCS system, which was included with the dolfin-adjoint library. This was used to optimise time dependent finite element problems, with automated adjoining and similar optimisation of the time-dependent adjoint.

The principles used by the library are described in Maddison and Farrell, CMAME 276, pp. 95‒121, 2014. Further details can be found in the manual.

The timestepping library is superseded by the tlm_adjoint library.