These are some the classes I’ve taught or am teaching at the moment. Most have GitHub repositories with open-source teaching resources (lecture slides, code for computer practicals).
This list does not cover all of my teaching activities, only the ones with more reusable teaching resources. See my CV for a full list.
University of Liverpool
Lithosphere dynamics
ENVS398 Global Geophysics and Geodynamics • University of Liverpool
Teaching resourcesAbout
Lithosphere dynamics is approximately half of the ENVS398 module, the other half being the mantle and core covered by Andy Biggin. In my section, we take a look at the Earth's lithosphere from a geophysical point of view. We cover available global datasets (gravity, magnetics, topography/bathymetry, heat flow, seismic) and geophysical models that seek to explain these observations.
The teaching resources include short lectures and computational practicals using Python to explore real data and generate model predictions. The slides for lectures are create with reveal.js so they can be easily kept under version control and shared with students in HTML form (hosted on GitHub Pages). The practicals are organized into Jupyter notebooks with annotations and the prerequisite code. During delivery of the practicals, I start with a blank version of the notebook and type out the code while I explain what I'm doing. This helps control my pacing and make sure students are engaged following along.
Gravimetry
ENVS258 Environmental Geophysics • University of Liverpool
Teaching resourcesAbout
Gravimetry is taught as a 2-week section of the ENVS258 module, focusing on the practical aspects and handling of real data (the theory is covered in a prerequisite module). My take on this was to generate simulated raw data (from an open-access dataset) and walk them through applying gravimeter corrections, calculating absolute gravity by tying to a base station, and removing the effects of the Normal Earth and topography (Bouguer correction).
The teaching resources include short lectures and computational practicals using Python to process synthetic data. The slides for lectures are create with reveal.js so they can be easily kept under version control and shared with students in HTML form (hosted on GitHub Pages). The practicals are organized into Jupyter notebooks with annotations and the prerequisite code. During delivery of the practicals, I start with a blank version of the notebook and type out the code while I explain what I'm doing. This helps control my pacing and make sure students are engaged following along.
Remote sensing
ENVS258 Environmental Geophysics • University of Liverpool
Teaching resourcesAbout
The first 4 weeks of the ENVS258 module are a crash-course on satellite remote sensing, including multispectral images, LiDAR and DEMs, and InSAR. There is a practical focus and students learn how to manipulate these data using standard scientific Python tools. The highlight of this part of the module is the report they have to produce by choosing their own study region, downloading public domain imagery, processing it in Python, and writing up their results. Some of the reports are truly inspiring (I've incorporated some into the practicals) and they are always a pleasure to read and provide feedback.
The teaching resources include short lectures and computational practicals using Python to process synthetic data. The slides for lectures are create with reveal.js so they can be easily kept under version control and shared with students in HTML form (hosted on GitHub Pages). The practicals are organized into Jupyter notebooks with annotations and the prerequisite code. During delivery of the practicals, I start with a blank version of the notebook and type out the code while I explain what I'm doing. This helps control my pacing and make sure students are engaged following along.
Machine learning
ENVS386 Geophysical Data Modelling • University of Liverpool
Teaching resourcesAbout
This is a very brief hands-on introduction to machine learning. It will cover some of the common nomenclature, principles, and applications.
It's taught as a 2 hour live-coding workshop as part of a larger geophysical inversion module. The GitHub repository contains instructions for running the live session as well as an expected learner profile.
Workshops and short courses
A geophysical tour of mid-ocean ridges
Transform 2022
Teaching resources RecordingNote: You can also read the tutorial directly on this website at "A geophysical tour of mid-ocean ridges".
About
This is a 2h online workshop delivered for the Software Underground's yearly festival of open geoscience: Transform.
Description
Mid-ocean ridges are the places where the oceanic crust and lithosphere are born. They are large mountain ranges in the deep ocean, stretching all around the globe and with heights rivalling that of the tallest mountains on land. Ridges are also a key part of plate tectonics, a major component of the biogeochemical cycle of the oceans, and the home of unique biological communities.
In this tutorial, we'll study the mid-ocean ridges through the lens of geophysics. We'll use open geophysical data (gravity, bathymetry, lithospheric age) and open-source Python tools to try to answer questions like: How do ridges stay so tall? Are they in isostatic equilibrium? Why do ocean basins get deeper as they age? Along the way, we'll also learn how to translate into code the physical models of the cooling of the lithosphere so that we can compare their predictions with our data.
The Generic Mapping Tools (GMT) for Geodesy
2019-2021 UNAVCO Short Courses
Teaching resources RecordingAbout
This is our 2-day course covering the use of Generic Mapping Tools (GMT) in geodesy using UNIX shell scripting. Lectures and exercises will be given to teach the basic conventions of using GMT, such as plotting grids, images, and vector data (points, lines, polygons). Labs will include both processing and mapping of various data sets relevant to geodesy.
The short course is taught by the GMT team: Paul Wessel, Joaquim Luis, myself, Dongdong Tian, Xiaohua Xu, and Meghan Jones.
We've been teaching this workshop yearly since 2019 and have done both in person and online versions. Below you'll find links to material for individual iterations.
- 2021: GenericMappingTools/2021-unavco-course (online)
- 2020: GenericMappingTools/2020-unavco-course (online)
- 2019: GenericMappingTools/2019-unavco-course (in person)
From scattered data to gridded products using Verde
Transform 2020
Teaching resources RecordingAbout
This tutorial was a part of the Software Underground's Transform event, an online series of open-access and open-source tutorials about coding and geoscience. The live video was streamed on YouTube and participants asked questions on the Slack workspace, where volunteers would help them along and pass on any feedback to me. The format worked quite well and the video because a useful reference for novices getting into Fatiando a Terra.
Description
This tutorial will be a hands-on tour of Verde, a Python package for processing and gridding geophysical/geospatial data with a twist of machine learning. We'll start with a real dataset and work our way towards producing one or more gridded products. The way there will take us through:
- Loading some data
- Generating and handling coordinates and projections (using pyproj)
- Splitting training and testing data for validation
- Data decimation with blocked means/medians to avoid aliasing
- 2D trend estimation
- Gridding with bi-harmonic splines
- Combining everything into a data processing pipeline
- Cross-validation of data distributed spatially on the Earth (including parallel execution with Dask)
Let's build a geophysical inversion with Python
RWTH Aachen University graduate school IRTG-2379 Modern Inverse Problems
Teaching resourcesAbout
I taught this short online course (3 hours) for the Aachen graduate school on invitation by Prof. Florian Wellman. I tried to give it a very hands-on spin where we attempted to code a non-linear gravity inversion live. It worked out much better than I expected!
Description
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 transfered to other domains.
Best practices for developing and sustaining your open-source research software
AGU Fall Meeting 2019
Teaching resourcesAbout
This is the second edition of our open-source best practices workshop at AGU. Follwing the success of the 2018 workshop, we proposed it again with slight modifications. This year's workshop was organized by Rene Gassmoeller, Lindsey Heagy, Lion Krischer, myself, and Bane Sullivan.
Description
Modern research software is the basis of scientific progress in geophysics by supporting data collection, data analysis, and numerical simulation. These codes span the range from small one-off scripts developed by individual researchers up to large packages with thousands of users. While there is increasing awareness about best programming practices, scientists are rarely prepared to scale their codes into team projects developed by larger communities. However, growing a sustainable software project and the community of practice that surrounds it is a prerequisite to make scientific software development more efficient and research more reproducible.
The open-source community has established modern best-practices for developing reliable software, publishing that software, forming communities around the code, and finding sustainable ways to maintain them over time. This hands-on half-day workshop is aimed at scientists currently developing their own software of any size. The participants will apply a workflow for developing and managing open-source research codes following best-practices. We will discuss licensing and privacy considerations for open-source projects in a scientific context, briefly review version control with git and hosting projects online, and teach how to automatically test and efficiently document code. Furthermore, we will discuss how to grow projects and manage communities around it. The course material is independent of programming language or scientific discipline. By the end of this workshop participants will be able to apply the gained knowledge directly to their own projects and create more sustainable research software.
Learning objectives
Our aim with this workshop is for participants to:
- Learn about modern best-practices for developing, testing, documenting, and publishing research software that promote accessibility, reusability, and reproducibility.
- Gain hands-on experience with open-source software development tools available to researchers including Jupyter, git, GitHub, ReadTheDocs, and Travis CI.
- Learn basic concepts of software project management like the life cycle of scientific software, defining a target audience, developing a project mission and vision, building a welcoming community, and approaching scientists uncomfortable with sharing their research software.
Introduction to Python for Earth Science
2019 Earth Sciences REU program (University of Hawaiʻi at Mānoa)
Teaching resourcesAbout
This workshop provided a hands-on introduction to the Python programming language to the undergraduate REU students visiting the University of Hawaiʻi at Mānoa.
Best practices for modern open-source research codes
AGU Fall Meeting 2018
Teaching resourcesAbout
This half-day workshop was taught at the 2018 AGU Fall Meeting in Washington DC, USA. It was organized by myself, Lindsey Heagy, Lion Krischer, and Florian Wagner. Our goal was to help people who are already programming and want to take the next step towards developing open-source software.
Description
Modern science increasingly relies on code, ranging from small scripts to workflows with many interacting parts. Reproducibility and extension of studies employing these codes require that they are accessible. The open-source community has established modern best-practices for making software available, usable, and maintainable. In this workshop, we will demonstrate a workflow for publishing research code following these best-practices. We will cover open-source licenses, version control, automated testing, documentation, and continuous integration. The workshop will be hands-on: participants will work to set up a project using sample code provided by the instructors. By the end, participants will have the knowledge needed to continue learning independently and apply these practices to their own research code. These resources can be applied to any programming language or scientific discipline.
Learning objectives
Our aim with this workshop is for participants to:
- Gain awareness of tools available to researchers within the open-source ecosystem including Jupyter, git, ReadTheDocs, continuous integration services (for testing), etc
- Learn modern best-practices for structuring a repository for research software that promotes accessibility, reusability, and reproducibility
- Learn about the tools available for testing, publishing documentation, and versioning that can be immediately applied to their own codes
Universidade do Estado do Rio de Janeiro
Métodos numéricos e programação
Matemática Especial • Universidade do Estado do Rio de Janeiro
Teaching resourcesAbout
Introduction to programming and numerical methods for oceanography majors. This course is the first contact the students have with computer programming (using the Python language). I also taught them Git and GitHub and made use of the GitHub Classroom platform.
Ementa
Introdução ao estudo da computação. Conceito de algoritmo e programação estruturada. Linguagens de programação. Procedimentos, funções e módulos. Erros nas aproximações numéricas. Resolução numérica de equações algébricas e transcendentes. Interpolação. Diferenciação e integração numérica. Resolução numérica de equações diferenciais. Resolução de triângulos esféricos. Solução numérica de sistemas lineares. Aplicações à oceanografia.
Sismologia e sísmica
Geofísica 2 • Universidade do Estado do Rio de Janeiro
Teaching resourcesAbout
Introduction to geophysics for geology majors. This is a follow up to Geofísica 1 and covers seismics, seismology, electric and electromagnetic methods. This content was all created and delivered in Portuguese.
Ementa
Método Sísmicos: stress e strain, ondas elásticas, geometria dos caminhos da onda, ondas direta, refratada e refletida, interface, equipamentos para aquisição de dados. Sísmica de refração: refração crítica e head-waves, gráfico tempo-distância (T-X), interfaces horizontais e mergulhantes, aplicações em geologia. Sísmica de reflexão: velocidades sísmicas, Normal-moveout (NMO), Dip-moveout (DMO), empilhamento (stacking), migração, levantamentos 2D e 3D, aplicações na exploração de hidrocarbonetos. Geofísica de Poço (well-log): introdução, perfuração de poços e seus efeitos nas rochas, metodologias mais aplicadas na atualidade, usos na indústria do petróleo e na exploração mineral. Métodos Geoelétricos: equações de maxwell, resistividades de minerais e rochas, aquisição de dados tipos de arranjos geoelétricos, Potencial espontâneo, polarização induzida, exemplos de aplicações em geologia.
Gravimetria e magnetometria
Geofísica 1 • Universidade do Estado do Rio de Janeiro
Teaching resourcesAbout
Introduction to geophysics for geology majors. This is the first contact of the students with geophysics. Covers gravimetry and geomagnetism. This content was all created and delivered in Portuguese.
This was the first full module that I taught. I had the chance to design the content from scratch, which was both exhausting and rewarding.
Ementa
Comportamento radiométrico de rochas e sua importância no mapeamento geológico e prospecção mineral. Radiação. Levantamentos radiométricos, gamaespectometro. Método gravimétrico: Lei da atração gravitacional, densidade de minerais e rochas, gravimetro, reduções aplicadas aos dados. Método magnetométrico: magnetismo de minerais e rochas, fontes do campo magnético, o IGRF, reduções aplicadas aos dados, campo magnético produzido por corpos de forma geométrica simples e seus equivalentes geológicos; transformações do campo de anomalias: continuação, derivadas, redução ao pólo. Interpretação das anomalias: problema direto; problema inverso e a não unicidade da solução.