# hIPPYlib - Inverse Problem PYthon library¶

Inverse Problem PYthon library

 __        ______  _______   _______   __      __  __  __  __
/  |      /      |/       /       /     /  |/  |/  |/  |
$$|____$$/ $$|$$$|$$/$$/ $$|$$/ $$|____$$ $$|$$ |__$$|$$ |__$$|$$ \/$$/$$ |/ |$  |  $$|$$    $$/$$    $$/$$  $$/$$ |$$|$$$| $$|$$ | $$|$$$/  $$/$$$$/$$ |$$|$$ |  $$|$$ |  $$| _$$ |_ $$|$$ |          $$|$$ |$$|$$ |__$$|$$ |  $$|/$$   |$$|$$ |          $$|$$ |$$|$$    $$/$$/   $$/$$/ $$/$$/           $$/$$/ $$/$$\$/

https://hippylib.github.io


hIPPYlib implements state-of-the-art scalable algorithms for PDE-based deterministic and Bayesian inverse problems. It builds on FEniCS (a parallel finite element element library) for the discretization of the PDE and on PETSc for scalable and efficient linear algebra operations and solvers.

For building instructions, see the file INSTALL.md. Copyright information and licensing restrictions can be found in the file COPYRIGHT.

The best starting point for new users interested in hIPPYlib’s features are the interactive tutorials in the tutorial folder.

Conceptually, hIPPYlib can be viewed as a toolbox that provides the building blocks for experimenting new ideas and developing scalable algorithms for PDE-based deterministic and Bayesian inverse problems.

In hIPPYlib the user can express the forward PDE and the likelihood in weak form using the friendly, compact, near-mathematical notation of FEniCS, which will then automatically generate efficient code for the discretization. Linear and nonlinear, and stationary and time-dependent PDEs are supported in hIPPYlib. Currently, gradient and Hessian information needs to be provided by the user; our future plan includes automatic generation of this information by using FEniCS automatic differentiation capabilities for users who do not wish to derive the relevant weak forms.

Noise and prior covariance operators are modeled as inverses of elliptic differential operators allowing us to build on existing fast multigrid solvers for elliptic operators without explicitly constructing the dense covariance operator.

hIPPYlib provides a robust implementation of the inexact Newton-conjugate gradient algorithm to compute the maximum a posterior (MAP) point. The reduced gradient and Hessian actions are automatically computed via their weak form specification in FEniCS by constraining the state and adjoint variables to satisfy the forward and adjoint problem. The Newton system is solved inexactly by early termination of CG iterations via Eisenstat-Walker (to prevent oversolving) and Steihaug (to avoid negative curvature) criteria. Globalization is achieved with an Armijo back-tracking line search.

hIPPYlib offers different scalable methods to sample from the prior distribution: Krylov methods to approximate the action of a matrix square root on a vector, the conjugate gradient sampler, and finally samplers that exploit the finite element assembly procedure of the inverse covariance operator to obtain a symmetric decomposition. To sample from a local Gaussian approximation (such as at the MAP point) hIPPYlib exploits the low rank factorization of the Hessian misfit to correct samples from the prior distribution.

Finally, randomized and probing algorithms are available to compute the variance of the prior/posterior distribution.