Author: Leonardo Uieda1
1 Department of Earth, Ocean and Ecological Sciences, School of Environmental Sciences, University of Liverpool, UK
Inverse problems abound in geophysics. It is the primary way in which we investigate the subsurface of the Earth, which is largely inaccessible to us beyond the first dozen or so kilometers. From measurements acquired on land, sea, air, and from space, geophysicists tease out the inner structure of the Earth - from a few meters to thousands of kilometers deep in the inner core. Observations of disturbances in the Earth's gravity field are one of the key elements used by geophysicists to investigate the crust-mantle interface, the large-scale structure of sedimentary basins (which are reservoirs for water and hydrocarbons), and even the mass balance of the world's ice sheets. However, the gravity inverse problem is particularly challenging due to the physics of potential fields. Unique solutions are difficult to come by and only exist under strict assumptions, which often don't hold for real world scenarios. For these problems, regularization plays a critical role and has been the focus of much research in the past 20 years.
In this tutorial, we will work together to solve a 2D gravity inverse problem in Python. Our code will estimate the shape of a sedimentary basin from gravity observations. This non-linear inverse problem will allow us to visually explore the effects of different types of regularization from a geometric perspective (smoothness, equality constraints, and more). We will discuss the challenges involved in real world applications and the difficulties of quantifying the uncertainty in the solutions. The main goal of this tutorial is to impart theoretical and practical skills that can be easily transferred to other domains.
This course is designed to empower you to:
- Learn/revise the mathematics of non-linear inverse problems
- Translate mathematical knowledge into code
- Apply non-linear inversion theory to a real geophysical problem
- Analyze the effects of regularization on geophysical models
I will assume that you:
- Are comfortable with linear algebra (matrix and vector operations, norms, inverses, linear systems, etc)
- Have an understanding of basic calculus (partial derivatives, gradients, Taylor series expansions)
- Are able to program a computer to build and manipulate matrices and vectors, solve linear systems, and make graphs/plots (in any language but Python or Matlab would be best)
You can run and experiment with the code for this tutorial on Binder (click on the badge):
WARNING: Binder sessions won't save your progress and may disconnect at any point. Download and backup your notebook frequently if you want to keep your changes. Alternatively, see below to setup your own computer and run the code locally.
Since there is large component of live coding, participants will have to set up their computers before the workshop. It's extremely important that everyone has a working Python environment ahead of time as there will not be enough time to sort out individual problems during the workshop.
- Download and install the Anaconda Python Distribution. Please follow the instructions here: https://carpentries.github.io/workshop-template/#python
- Make sure your installation works by opening JupyterLab through
the Anaconda Navigator app (on Windows) or by running
jupyter lab
in a terminal (Mac/Linux). You browser should open with JupyterLab. - Download a zip archive of this repository and unzip it.
- In JupyterLab, navigate to the place where you unzipped the archive
and open the
gravity-inversion.ipynb
notebook.
We will be using Jupyter Notebooks to run our Python code and the libraries numpy, scipy, and matplotlib. Anaconda already comes with all of these installed.
The forward modelling and some plotting utilities are in the
cheatcodes.py
file. It's very important that this file is in the
same folder as the notebooks!
All of the code and notes for this workshop are (or will be) uploaded to this repository. In here, you'll find:
cheatcodes.py
: The ready-made Python functions for forward modelling and plotting.gravity-inversion.ipynb
: Jupyter notebook with the code that I wrote live in the workshop (not including solutions to exercises).gravity-inversion-solution.ipynb
: Same as the above but with the exercise solutions.notes.pdf
: Notes and mathematical derivations.
You may also want to brush up on your coding skills with Software Carpentry's Introduction to Python lesson.
All Python source code in this repository is free software: you can redistribute it and/or modify it under the terms of the MIT License. A copy of this license is provided in LICENSE.txt.
All other materials, including text and images, are distributed under the CC-BY 4.0 license (except where otherwise noted).
Originally developed for a short course on geophysical inversion at RWTH Aachen University graduate school IRTG-2379 Modern Inverse Problems.