Course: Data Analysis in Geosciences Supervision: E. Gayer, C. Narteau, F. Beauducel
Authors: Maxime Soares Correia & Matthieu Courcelles
Project Tsunami is an educational and research-oriented geophysics project developed as part of the Data Analysis in Geosciences course (M1 Geology, IPGP).
The goal is to:
- model tsunami propagation using shallow-water theory,
- compute travel times along oceanic great-circle paths, and
- invert for the tsunami source location and origin time using observed arrival times at stations.
Starting from:
- a global ETOPO5 bathymetric grid, and
- a dataset of tsunami arrival times at Pacific coastal stations,
the project determines the most likely source position and a physically consistent origin time.
The ASCII ETOPO5 grid is loaded using io_etopo.py, which provides:
depth(lat, lon) # returns interpolated water depth (m)Longitude wrapping, interpolation, and missing-value management are handled internally.
Propagation paths are assumed to follow geodesics on a spherical Earth.
The module geo.py provides:
- great-circle coordinates,
- arc length computations,
- spherical trigonometric tools.
This ensures physically realistic first-order propagation directions.
The project uses the classical shallow-water phase speed approximation:
where:
-
$h$ = local depth, -
$g = 9.81\ \text{m/s}^2$ .
This neglects dispersion and refraction, but remains valid for long-wavelength tsunamis propagating across the open ocean.
Propagation time is obtained via numerical integration along the geodesic:
The integrator in speed_integrator.py:
- samples the path at hundreds to thousands of points,
- evaluates depth at each point,
- computes local speed,
- integrates without requiring any coastal trimming.
Vectorization ensures efficient computation for all stations.
The inversion estimates:
- source latitude
- source longitude
-
origin time
$t_0^*$
by minimizing the physically meaningful RMS misfit:
Key features:
- adaptive grid search with progressive refinement,
-
robust estimation of
$t_0^*$ using the median of residuals, - no free-scale regression (the slope is physically fixed to 1),
- outlier clipping available.
This method ensures stability even with imperfect bathymetry and sparse station geometry.
The module diagnostics.py produces a figure comparing:
- observed arrival times,
- predicted travel times,
- regression-free and free-slope fits.
This diagnostic is essential for identifying systematic biases:
- overestimated depths,
- refractive path differences,
- early/late detection at tide gauges.
The module uncertainty introduces:
- 1D misfit profiles along latitude and longitude,
- a paraboloid-like approximation of the misfit bowl,
- uncertainty radii based on a 15% RMSE threshold.
This yields interpretable error bounds of typically:
- 0.25° in latitude,
- 0.38° in longitude,
- and ~33 km in effective spatial radius.
world_map.py creates a clean and customizable global map:
- ETOPO bathymetry with shaded colours
- station positions
- great-circle propagation paths
- inverted tsunami source
- uncertainty radius
Run the full inversion with:
python scripts/run_inversion.pyIt will:
- Load bathymetry
- Load station arrival times
- Perform source inversion
- Estimate uncertainty
- Produce diagnostics
- Render the world map
Programmatic usage:
from scripts.run_inversion import run_pipeline
results = run_pipeline(
etopo_path="data/etopo5.grd",
stations_csv="data/data_villes.csv",
lon_mode="360",
search_box=(-60, 60, 100, 290), # Full Pacific domain
)project-tsunami/
│
├── data/
│ ├── etopo5.grd
│ └── data_villes.csv
│
├── tsunami/
│ ├── geo.py
│ ├── speed_model.py
│ ├── speed_integrator.py
│ ├── io_etopo.py
│ ├── inverse.py
│ ├── absolute_inversion.py
│ └── observations.py
│
├── plotting/
│ ├── world_map.py
│ ├── diagnostics.py
│ ├── uncertainty.py
│ └── table_arrival_times.py
│
├── scripts/
│ └── run_inversion.py
│
└── outputs/
├── world_map_inversion.png
├── obs_vs_model.png
├── misfit_profiles.png
└── residuals_table.csv
Supervised by Eric Gayer, Clément Narteau, and François Beauducel as part of the Data Analysis in Geosciences course — M1 Geology, IPGP (2025).
This project is provided for academic and educational use. Reuse is permitted with appropriate citation of the authors and the IPGP course.
We thank the Institut de Physique du Globe de Paris (IPGP) for providing datasets, computational tools, and pedagogical guidance.
