Skip to content

quang-ha/hippylib

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

                        Inverse Problem PYthon library
                                 version 1.1


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

                          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) [http://fenicsproject.org/]
for the discretization of the PDE and on PETSc
[http://www.mcs.anl.gov/petsc/] for scalable and efficient linear
algebra operations and solvers.

For building instructions, see the file INSTALL. 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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 58.1%
  • Jupyter Notebook 36.1%
  • C++ 5.8%