ESS 412/512 – Introduction to Seismology
Course Description
ESS 412/512 is a foundational seismology course that teaches the fundamental principles of wave propagation and their applications to Earth imaging and earthquake phenomenology. Students learn elastic wave theory, ray tracing, body and surface waves, and how seismic waves are used to understand Earth’s structure and earthquake processes. The course combines theoretical derivations with hands-on Python exercises using real seismic data, covering topics including stress-strain relationships, travel time analysis, global seismic phases, surface wave dispersion, and ambient noise methods.
Graduate students (ESS 512) complete additional exercises requiring deeper mathematical treatment, algorithm implementation, statistical analysis across multiple events, and present a research paper connecting course methods to published seismological research.

Learning Objectives
By the end of this course, students will be able to:
- Apply elastic wave theory to seismic wave propagation problems
- Analyze seismic waveforms using Python and ObsPy
- Implement ray tracing and travel time calculations
- Measure and interpret surface wave dispersion
- Download and process real seismic data from global networks
- Differentiate between body waves (P, S) and surface waves (Love, Rayleigh)
- Apply signal processing techniques to seismological data
- Connect computational exercises to state of the art seismological research (ESS 512)
Prerequisites
- Physics fundamentals (waves, mechanics)
- Linear algebra and calculus
- Basic programming experience (Python recommended but not required)
- ESS 512 students: Additional mathematical maturity and research experience expected
Resources
- Textbook: Peter M. Shearer, Introduction to Seismology (Cambridge University Press)
- GitHub Repository: github.com/UW-geophysics-edu/ess-412-512-intro2seismology
- Canvas: Course materials, assignments, and discussion board
- Key Software: Python 3.9+, ObsPy, NumPy, Matplotlib
Course Structure
The course is structured as a 10-week quarter with:
- Weekly lectures covering theoretical foundations
- Computational labs using Jupyter notebooks
- Assignments (4-6 hours for ESS 412, 6-9 hours for ESS 512)
- Final projects applying learned methods to real-world problems
All exercises use real seismic data from IRIS DMC and SCEDC, accessed via ObsPy’s FDSN client.
Weekly Schedule
| Week | Topic | Notebook | Content |
|---|---|---|---|
| 1 | Stress and Strain | 01_Stress_and_Strain.ipynb | Elastic constants, stress-strain relationships, Lamé parameters, introduction to Python/ObsPy |
| 2 | Seismic Data & Signal Processing | 02_Data_FourierTransform.ipynb | Seismic data formats, instrument response, Fourier analysis, filtering techniques |
| 3 | Ray Tracing & Body Waves | 03_RayTracing_BodyWaves.ipynb | Ray parameter, travel time curves, Snell's law, P and S waves |
| 4 | Global Seismic Phases | 04_Global_Phases.ipynb 07_ComputerProgram1_Assignment.ipynb |
Phase identification, real data analysis, TauP toolkit, first graded assignment |
| 5 | Surface Waves – Theory | 05_SurfaceWaves_Theory_Analysis.ipynb (Part 1) | Love waves, Rayleigh waves, dispersion theory |
| 6 | Surface Waves – Analysis | 05_SurfaceWaves_Theory_Analysis.ipynb (Part 2) | Group velocity, phase velocity, dispersion measurement techniques |
| 7 | Ambient Noise Methods | 06_Noise_CrossCorrelation.ipynb | Ambient noise seismology, cross-correlation, virtual sources, Green's function extraction |
| 8 | Student Projects | Various notebooks | Application of learned methods to real seismological problems |
| 9-10 | Final Projects | — | Project presentations and reports ESS 512: Paper presentations on research applications |
ESS 412 vs ESS 512 Differentiation
Undergraduate (ESS 412)
- Complete core exercises in each notebook (typically 3-4 questions)
- Use provided functions and code templates
- Focus on interpretation and physical understanding
- Single event/station analysis
- Estimated time: 4-6 hours per week on computational exercises
Graduate (ESS 512)
- Complete all ESS 412 exercises plus additional graduate questions (5-7 total)
- Implement algorithms from scratch where specified
- Statistical analysis across multiple events/stations
- Error propagation and uncertainty quantification
- Literature connection exercises
- Paper presentation: Present one research paper connecting computational methods to published work
- Optional: Computer Programs in Seismology (CPS) integration for surface waves
- Estimated time: 6-9 hours per week on computational exercises + paper preparation
Data Sources
All exercises use real seismic data from:
- IRIS DMC (Incorporated Research Institutions for Seismology Data Management Center)
- SCEDC (Southern California Earthquake Data Center)
Data is accessed programmatically via ObsPy’s FDSN client—no authentication required.
Assessment
- Weekly Computational Exercises: 50%
- Computer Program 1 (Week 4): 15%
- Final Project: 25%
- Participation & Quizzes: 10%
- ESS 512 Paper Presentation: Additional component
Getting Started
Installation
# Clone the repository
git clone https://github.com/UW-geophysics-edu/ess-412-512-intro2seismology.git
cd ess-412-512-intro2seismology
# Create conda environment
conda env create -f environment.yml
conda activate ess412
# Launch Jupyter Lab
jupyter lab
See the INSTALL.md for detailed setup instructions.
First Steps
- Start with
01_Stress_and_Strain.ipynbto review elastic fundamentals - Follow notebooks in numerical order (01 → 07)
- Each notebook includes theory, demonstrations, and exercises
- ESS 512 students should complete additional graduate-level exercises marked in each notebook
Contact
Instructor: Marine Denolle
Course: ESS 412/512, University of Washington
Canvas: Course materials and discussion board
GitHub Issues: For repository-related questions
Last updated: January 2026