jInv - A Flexible Flexible Julia Package for PDE Parameter Estimation
Build status
jInv
is a flexible framework for solving PDE parameter estimation problems using Julia. Problems of this sort arise in various applications such as geophysical or medical imaging. They are typically ill-posed and computationally challenging and developing robust and fast inversion algorithms is an active field of research. jInv
aims at advancing this field by providing efficient and easy-to-extend core functions commonly used for solving real-world problems.
Package Structure
The source code of jInv
is divided into five submodules:
Mesh
- regular and tensor meshes in 2D and 3D as well as differential operators.LinearSolvers
- interfaces to sparse and (if installed) direct linear solvers that can be used for solving the discretized PDEs.InverseSolve
- methods commonly used in inverse problems such as misfit functions, regularization and numerical optimization.ForwardShare
- methods for solving forward problems in parallel.Vis
- visualization and plotting (requires)
Utils
- utility functions
Basic Installation
To install jInv
start a Julia session and type in the REPL (we currently support Julia versions 0.5.x):
INFO: Cloning jInv from https://github.com/JuliaInv/jInv.jl
julia> Pkg.clone("https://github.com/JuliaInv/jInv.jl","jInv")
ERROR: jInv already exists
julia> Pkg.build("jInv")
The above commands clone the latest version of jInv
and install the dependency KrylovMethods.jl
, which provides iterative methods for solving (sparse) linear systems. Finally, some unit tests are run.
Optional Packages for High-Performance
For better performance when solving parameter estimation problems with linear PDE constraints, jInv
automatically looks for high-end linear algebra packages. Currently, the following packages are supported:
MUMPS.jl
- wrapper for MUMPS. Used as a direct PDE solverParSpMatVec.jl
- shared memory implementation for sparse matrix vector productsPARDISO.jl
- wrapper for PARDISO solver