/tlm_adjoint

A library for high-level algorithmic differentiation, primarily for use with FEniCS or Firedrake

Primary LanguagePythonGNU Lesser General Public License v3.0LGPL-3.0

tlm_adjoint is a library for high-level algorithmic differentiation, primarily
for use with FEniCS (https://fenicsproject.org) or Firedrake
(https://firedrakeproject.org).

The library can be installed via e.g.

    pip install .

run in the tlm_adjoint root directory.

The library is used via, e.g., the Python code

    FEniCS backend:

        from fenics import *
        from tlm_adjoint.fenics import *

    Firedrake backend:

        from firedrake import *
        from tlm_adjoint.firedrake import *

    NumPy backend:

        import numpy as np
        from tlm_adjoint.numpy import *

tlm_adjoint is currently targeting FEniCS 2019.1.0, and the Firedrake Git
master branch.

tlm_adjoint requires:

    All backends:
        NumPy
        SymPy

    FEniCS or Firedrake backends:
        UFL
        mpi4py
        petsc4py

    FEniCS backend:
        DOLFIN
        FFC

    Firedrake backend:
        Firedrake

tlm_adjoint optionally uses

    SciPy, for gradient-based optimization and interpolation equations
    h5py, with the 'mpio' driver for parallel calculations, for HDF5 storage
    petsc4py and slepc4py, for eigendecomposition functionality
    H-Revolve, for H-Revolve checkpointing schedules
    more-itertools
    Numba

License: GNU LGPL version 3