# Scientific Research Codes

## Seismic Data Fetching and Processing

### Data Request Tools

- FDSN Web Services | A note in Chinese
- IRIS Data Management Center (DMC)
- ROVER: A command line tool to robustly retrieve geophysical timeseries data from data centers
- BREQ_FAST | notes in Chinese: Seismic data request by sending email
- IRIS Wilber 3 | A note in Chinese: A web GUI to request waveform data of individual seismic events
- jweed: Data request client written in Java

- IRIS-DMC: Web Services:
- SOD | Tutorial (in Chinese) | Recipes: The best seismic data request tool
- ObsPy: Data download, processing and visulization software written in Python
- SAC | Chinese Manual | English Manual | youtube | notes in Chinese: The most commonly used seismic data processing and plotting software
- FnetPy: A Python package to request seismic waveform data from F-net
- HinetPy: Request and process Hi-net data, written in Python
- obspyDMT: A Python Toolbox for Retrieving, Processing and Management of Seismological Datasets
- SeisIO.jl: Julia language support for geophysical time series data
- StrongMotion Fetch: Download and/or process strong motion data from various networks

### Seismic Data Format Conversion

- ObsPy | Waveform Import/Export Plug-ins | Supported Formats: Data download, processing and visulization software written in Python
- SAC | Chinese Manual | English Manual | youtube | notes in Chinese: The most commonly used seismic data processing and plotting software
- CubeTools | cube_conversion: Data Format conversion software for CUBE data
- dataselect: Selection and sorting for data in miniSEED format
- GIPPtools: A collection of software utilities for initial pre-processing of recorded data
- libmseed: A miniSEED library that provides a framework for manipulation of SEED data records
- msmod: A small program to modify miniSEED header values
- mseed2sac: Convert miniSEED format to SAC format
- sac2mseed: Convert SAC format to minniSEED format
- win32tools: Convert WIN32 format used by Hi-net, to SAC format
- rdseed | IRIS | notes in Chinese: Convert seismic data from SEED format and other formats

### Seismic Data Processing

- SAC | Chinese Manual | English Manual | youtube | notes in Chinese: The most commonly used seismic data processing and plotting software
- ObsPy: Data download, processing and visulization software written in Python
- CPS330 | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- Geopsy: An open source software for geophysical research and application written in C++
- GISMO: Data download, processing and visulization software written in Matlab
- hinet_decon: Deconvolve Hi-net velocity record by its seismometer response by using inverse filtering technique
- SeisIO.jl: Julia language support for geophysical time series data

## Plotting and Visualization

### Plotting

- Generic Mapping Tools (GMT):
The most popular mapping tools in Earth Science
- GMT China Community | Reference Manual (in Chinese)
- try-GMT:
Try
`GMT`

,`PyGMT`

, and`GMT.jl`

online! All in one place! - pssac | notes (in Chinese) | pssac2: GMT4-style SAC trace plotting

- PyGMT: Python interface of GMT (still under development)
- GMT.jl: GMT Library Wrapper for Julia
- matplotlib: A comprehensive library for creating static, animated, and interactive visualizations in Python
- ObsPy: Data download, processing and visulization software written in Python
- obspy.imaging.scripts.mopad: MoPaD command line utility
- MoPad | A note in Chinese: Moment tensor Plotting and Decomposition
- 3D Focal Mechanisms: View earthquake focal mechanism symbols three dimensionally
- EMC-DesktopTools
- EMC-ParaView: A set of Python programmable filters/sources to allow ParaView open-source, multi-platform data analysis and visualization application to display EMC netCDF/GeoCSV models along with other auxiliary Earth data

- EMC visualization tools
- SeisTomoPy: Visulization of 3D tomography models and calculate traveltime in 3D model
- SubMachine: Web-based tools for the interactive visualisation, analysis, and quantitative comparison of global-scale, volumetric (3-D) data sets of the subsurface
- Tomoeye: A set of programs for tomographic model visualization written in MatLab 6.1 script

### Visualization

- MATLAB for Analyzing and Visualizing Geospatial Data
- Ghostscript | Releases: An interpreter for the PostScript language and PDF files

## Traveltime and Ray Tracing

- TauP | Tutorials (in Chinese): Calculate traveltimes, ray parameters, ray paths, reflection points, piercing points of seismic phases, supporting custom Earth models
- obspy.taup: TauP written in Python
- ANISOtime | GitHub: Traveltime calculation for transversely isotropic (TI) spherically symmetric models
- Cake: Traveltime calculation software, written in Python.
- fast_methods: N-Dimensional Fast Methodswritten in C++
- FM3D | iEarth: 3D traveltime calculation using Fast Marching Method in spherical coordinates written in Fortran
- Lapo Boschi: Software | SPICE: Surface Wave Ray Tracing with Azimuthal Anisotropy
- pykonal: 2D/3D traveltime calculator using Fast Marching Method for eikonal equation in Cartesian and spherical coordinates
- pySeismicFMM: 2D/3D travel time calculation in based on the Fast Marching Method written in Python
- pyekfmm: A python package for 3D fast-marching-based traveltime calculation and its applications in seismology
- RSTT: Regional Seismic Travel Time
- scikit-fmm: Fast marching method in Cartesian coordinates written in Python
**iaspei-tau**traveltime table package- Arthur Snoke’s version at IASPEI or IRIS: Traveltime calculator for iasp91 and AK135 models
- B.L.N. Kennett and Ray Buland’s version | A revised version: Calculation of travel times and ellipticity corrections for iasp91 and AK135 models
- George Helffrich’s version: Traveltime calculator for iasp91, AK135, PREM etc.

## Synthetic Seismograms

### Ray Theory for 1D Layered Earth

- aser: Calculate synthetic seismograms based on Generalized Ray Theory
- Asymptotic ray theory in CPS330 | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- CRT: Complete ray tracing subroutine package
- Generalized ray in CPS330 | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- Ray theory: Ray-theoretical approach to the calculation of synthetic seismograms in global Earth models
- WKBJ method in seisan at Seismology at GEUS: Seismological software
- RaySum: Ray-theoretical modelling of teleseismic waves in dipping, anisotropic structures
- PyRaySum: https://github.com/paudetseis/PyRaysum

### Reflectivity/Wavenumber Integration for 1D Layered Earth

- fk | A tutorial (in Chinese): Calculate synthetic seismograms in layered isotropic models using frequency-wavenumber method
- Discrete wavenumber method in seisan at Seismology at GEUS: Seismological software
- grtm: The generalized reflection and transmission coefficient method
- grtm (VTI media): Calculate synthetic seismograms in stratified vertically transversely isotropic media using the generalized reflection and transmission coefficient method
- multitel3: A hybrid method of ray theory and haskell matrix to calculate teleseismic body wave Green’s functions in RTZ components
- QSEIS: Calculating synthetic seismograms based on a layered viscoelastic half-space earth model
- ANIMATIVITY: Reflectivity Algorithm for body Wave propagation through layered anisotropic media written in MATLAB
- Reflectivity method: Calculating the response of a layered uniform solid layers to excitation by a point moment tensor source using the reflectivity method
- rf_respknt: Reflection matrix approach to computing the seismic response of a cylindrically symmetric medium
- RMATRIX: Calculate the frequency-dependent transmission coefficients written in Fortran
- Syn_seis: Compute synthetic seismograms for an incidence P or SV wave to 1-D layered structure
- telewavesim: Calculate teleseismic body-wave synthetics using the matrix propagator method written in Python and Fortran
- Wavenumber integration method in CPS330 | Python wrapper: PyLayeredModel | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.

### Modal Summation Method for 1D Layered Earth

- Modal Summation in CPS330 | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.

### Reflectivity/Wavenumber Integration for 1D Layered Spherical Earth

- yaseis: Calculate synthetic seismograms in spherically layered isotropic models

### Normal Modes Summation for 1D Layered Spherical Earth

- Mineos: Computes synthetic seismograms in a spherically symmetric non-rotating Earth by summing normal modes
- Colleen Dalton’s Mineos:
All the tools one should need to compile and run the MINEOS program
- Matlab to MINEOS: Wrapper scripts for running MINEOS through MATLAB
- MINEOS_synthetics: Calculate dispersion tables and synthetic seismograms for layered models using MINEOS and idagrn6 housed within MATLAB wrappers

`DISPER80`

: Calculation of normal modes, which is a very old fortran code.- Generalized Eigenproblem Spectral Collocation
- Normal modes: Normal-mode based computation of seismograms for spherically symmetric Earth models
- QSSP: Calculating complete synthetic seismograms of a spherical earth using the normal mode theory
- specnm: Spectral element normal mode code

### Direct Solution Method for 1D Layered Spherical Earth

- DSM | An updated version: Computing synthetic seismograms in spherically symmetric transversely isotropic (TI) media using the Direct Solution Method
- DGRFN: Calculate synthetic seismograms in a spherically layered model
- GEMINI: Calculation of synthetic seismograms for global, spherically symmetric media based in direct evaluation of Green’s functions (The files seem wrong)

### Boundary Element Methods

- AstroSeis: Asteroid seismic wavefield modeling written in MATLAB

### Discontinuous Galerkin Method

- NEXD: high order simulation of seismic waves using the nodal discontinuous Galerkin method
- SeisSol: numerical simulation of seismic wave phenomena and earthquake dynamics

### Finite Difference Methods

- SOFI2D | GitLab | A note (in Chinese): 2-D viscoelastic and elastic wave simulations for P- and SV-waves
- SOFI2D_sh | GitLab: 2-D viscoelastic and elastic wave simulations for SH-waves
- SOFI3D | GitLab: 3-D viscoelastic, elastic, and acoustic wave simulations
- FD1D | 1DFD_DS | 1DFD_DVS | 1DFD_VS: 1D finite-difference seismic simulation using the displacement-stress (DS), displacement-velocity-stress (DVS), and velocity-stress (VS) staggered-grids
- 2DFD_DVS: Computation of seismic wavefields in 2D heterogeneous structures
- FD: 2-D P-SV elastic second-order finite difference
- FD2D: A very simple training code for 2D finite difference
- FD3S: 3D finite-difference seismic wave simulation in a spherical section
- FDSim3D: Computation of seismic wavefields in 3D heterogeneous surface geological structures
- OpenSWPC: 2D/3D finite-difference seismic wave simulation
- SEISMIC_CPML: 2D/3D finite-difference seismic wave simulation with Convolutional or Auxiliary Perfectly Matched Layer (C-PML or ADE-PML) conditions
- SW4: 3D finite-difference seismic wave simulation (4th order)

### Finite Element Methods

### Pseudo-Spectral Methods

- Ps2D: A very simple code for elastic wave simulation in 2D using a Pseudo-Spectral Fourier method

### Spectral Element Methods

- SPECFEM1D: A small code that allows users to learn how a spectral-element program is written
- Specfem1d: An implementation of Spectrum Element Method for 1-D wave equation
- SPECFEM2D: Simulates seismic wave propagation in a 2D heterogeneous medium, using spectral element method (spherical coordinate system)
- SPECFEM3D: Simulates seismic wave propagation in a 3D heterogeneous medium, using spectral element method (Cartesian coordinate system)
- SPECFEM3D_GLOBE: Simulates seismic wave propagation in a 3D heterogeneous medium, using spectral element method (spherical coordinate system)
- AxiSEM: A parallel spectral-element method to solve 3D wave propagation in a sphere with axisymmetric or spherically symmetric visco-elastic, acoustic, anisotropic structures
- AxiSEM3D
- Instaseis | Brief Introduction in Chinese: The Python interface of AxiSEM
- RegSEM: Simulates seismic wave propagation in a 3D heterogeneous media using spectral element method at the regional scale (1 km to 90 degree)
- 2DSPEC: A parallel/serial 2d spectral element code for wave propagation and rupture dynamics
- sem2dpack: A spectral element package for 2D wave propagation and earthquake rupture dynamics

### Hybrid Methods

- FK-SPECFEM2D: Ping Tong
- Hybrid Methods in SPECFEM3D:
The coulping can be found in
`specfem3D/couple_with_injection.f90`

**FK-SEM**: FK is not an external code, it is now called internally**DSM-SEM**|**AxiSEM-SEM**: within`EXTERNAL_PACKAGES_coupled_with_SPECFEM3D`

- SEM-DSM-coupling: A hybrid method to efficiently compute teleseismic synthetics with 3D seismic strucure at source side (SEM) and 1D strucure outside the source region (DSM)
- PSV Hybrid Method | GitHub: Calculating synthetic seismograms involving two-dimensional localized hetergeneous structures based on GRT-FD hybrid method

### Surface waves in 3D structures

- Couplage: Modelling of propagation of surface waves in 3D structures by mode coupling method

### Waveform Forward Modelling

- Yehuda Ben-Zion: Downloads: Model point/line dislocation in fault zone

## Seismic Source

### Earthquake Detection

- REAL |
A tutorial (in Chinese):
**R**apid**E**arthquake**A**ssociation and**L**ocation written in C - S-SNAP:
**S**eismicity-**S**canning based on**N**avigated**A**utomatic**P**hase-Picking - Match&Locate: Detect and locate small events from continuous seismic waveforms using templates
- GPU-MatchLocate1.0: An improved match and locate method using GPU
- FastMatchedFilter: An efficient seismic matched-filter search for both CPU and GPU architectures
- dynamic_earthquake_triggering: Detecting dynamic earthquake triggering written in Python
- FAST: End-to-end earthquake detection pipeline via efficient time series similarity search
- EQcorrscan: Detection and analysis of repeating and near-repeating earthquakes written in Python
- RT-EQcorrscan: Real-time implementation of EQcorrscan method
- Harmonic tremor extraction and transient signal detection
- MESS: A Matched filter earthquake detector with GPU acceleration
- PAL:
An earthquake detection and location architecture including phase
**P**icking, phase**A**ssociation, event**L**ocation. - REDPy: Repeating Earthquake Detector written in Python

### Earthquake Location

- GrowClust | GrowClust3D.jl: Relative relocation of earthquake hypocenters based on waveform cross-correlation data
- HypoDD | A tutorial | hypoDDpy: Double-difference earthquake location
- HypoRelocate: High-resolution earthquake relocation method
- HYPOINVERSE2000: Locate earthquakes and determine magnitudes in a local or regional seismic network
- AmplitudeSourceLocation: Estimate source locations of seismic events written in Fortran
- NonLinLoc Probabilistic, non-linear, global-search earthquake location in 3D Media
- location-pt: Multiple earthquake location via parallel tempering and principal component sampling
- PhaseLink: A deep learning approach to seismic phase association
- Velest | A modified version in REAL: 1-D inversion of velocities and hypocenter locations

### Focal Mechanism

- gCAP | Oh My CAP | Chinese note: Focal mechanism inversion using cut and paste method
- CAPjoint | CAPjoint examples: Joint Inversion of Moderate Earthquake Source Parameters
- gCAPjoint: Full Moment Tensor Inversion of Moderately Strong Earthquakes with Local and Teleseismic Waveforms
- CAPsf: Invert source mechanisms for single‐force events
- CPS330 | A tutorial (in Chinese) | Moment Tensor Workshop (2012): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- Moment-Tensor Inversion
- W Phase: W Phase source inversion
- HASH: Determine double-couple earthquake focal mechanisms based on P-wave polarity and S/P amplitude ratios
- focmec: Determining and displaying double-couple earthquake focal mechanisms
- FPFIT: Calculate and plot fault-plane solutions from first-motion data
- hybridMT: Moment tensor inversion and refinement written in MATLAB
- fociMT: A stand-alone command line application for seismic moment tensor inversion, which is an integral part of hybridMT
- FOCI: A stand-alone Windows GUI application for performing the seismic moment tensor inversion and source parameters assessment
- lsforce: A Python-based single-force seismic inversion framework for massive landslides
- ISOLA: Retrieve isolated asperities from regional or local waveforms based on multiple-point source representation and iterative deconvolution
- MTfit: Bayesian Moment Tensor Fitting
- MT_DECOMPOSITION: Moment tensor decomposition written in MATLAB
- PCA-DECOMPOSITION: Principal Component Decomposition of seismic traces for extracting the common wavelet written in MATLAB
- pyTDMT: Time Domain Moment Tensor Inversion
- RPGEN: Calculates P-wave, S-wave, SH-wave and SV-wave radiation pattern using shear-tensile source model

### Seismicity

- CLUSTER2000: Identify clusters (e.g., aftershocks) in an earthquake catalog
- GR_EST: An OCTAVE/MATLAB toolbox to estimate Gutenberg–Richter law parameters and their uncertainties
- sd:
**S**tochastic**d**eclustering based on the space-time ETAS model - ZMAP: A GUI to analyse catalogue data

### Stress/Strain

- Coulomb 3: Investigate Coulomb stress changes on mapped faults and earthquake nodal planes
- AutoCoulomb: Compute Coulomb stress changes induced by earthquakes
- DC3D0/DC3D: Calculate displacement, strain and tilt at depth due to a point/rectangular strike/dip/tensile source in a half-space
- MSATSI: Stress tensor inversion written in MATLAB
- SATSI:
**S**patial**A**nd**T**emporal**S**tress**I**nversion from focal mechanisms - STRESSINVERSE: An iterative joint inversion for stress and fault orientations from focal mechanisms written in MATLAB or Python

## Seismic Tomography

### Body-wave Tomography

- Adjoint-state Traveltime Tomography | A tutorial in Chinese
- Nick Rawlinson: Software
- simul2017 | SIMUL2000: Simultaneous inversion of travel-time data for 3-D velocity and hypocenters
- Haijiang Zhang’s tomoDD | linkresearcher | bilibili: Double difference tomography
- Etomo: A eikonal equaiton-based seismic tomography method for traveltime tomography
- FAST:
3-D
**F**irst**A**rrival**S**eismic**T**omography programs - LOTOS: Local earthquake tomographic inversion written in Fortran
- PyVoroTomo | A tutorial in Chinese: Poisson Voronoi cells based seismic traveltime tomography
- RAYINVR | A modified version: 2-D traveltime inversion and amplitude modeling programs

### Ambient Noise Data Processing

- CPS330 | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- CU-Boulder: Research Products
- Ambient Noise Cross-Correlation | GitHub: Ambient noise data processing code and database for processing written in C
- Seed2Cor: Seismic Ambient Noise Cross-Correlation in Parallel written in C

- Huajian Yao: Codes and Software: |
linkresearcher |
bilibili:
`NoiseCorr`

: Ambient noise cross-correlation codes for daily long SAC format data in Matlab

- Lapo Boschi: Software: Ambient-noise cross-correlation and dispersion-curve measurement in the frequency domain written in Python
- Martin Schimmel: Software
- Corr_stack | IRIS Webinar: Ambient noise processing tools written in Fortran
- PCC:
Fast and efficient
**p**hase**c**ross-**c**orrelation written in C - PCC2: Fast and efficient phase cross-correlation written in Python

- CC-FJpy | A tutorial (in Chinese): A Python Package for seismic ambient noise cross-correlation and the frequency-Bessel transform method
- MATnoise: Calculate ambient noise cross-correlations, measure phase velocities, and invert for phase velocity maps in MATLAB
- NoisePy: Fast and easy computation of ambient noise cross-correlation functions written in Python, with noise monitoring and surface wave dispersion analysis
- SeisNoise.jl: Ambient Noise Cross-Correlation in Julia

### Surface-wave Dispersion Measurement

- CPS330 | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- CU-Boulder: Research Products
- AFTAN |
GitHub |
Python package:
**A**utomatic**F**requency-**T**ime**An**alysis analysis of ambient noise cross-correlations written in Fortran

- AFTAN |
GitHub |
Python package:
- Huajian Yao: Codes and Software |
linkresearcher |
bilibili:
`TSAnalysis`

: Surface wave two-station dispersion analysis GUI software (in Matlab)- Auto_TAnaylsis_GUI: Automatic surface wave two-station dispersion analysis GUI software (in Matlab)

`EGFAnalysisTimeFreq`

: Dispersion Analysis GUI software for ambient noise cross-correlation functions in Matalb

- Lapo Boschi: Software: Ambient-noise cross-correlation and dispersion-curve measurement in the frequency domain written in Python
- Martin Schimmel: Software
- TS_PWS0_UG: Group velocity determination using phase coherence and resampling strategies

- ASWMS |
GitHub:
**A**utomated**S**urface**W**ave Phase Velocity**M**easuring**S**ystem written in MATLAB, measuring the phase and amplitude of surface waves and then generate surface-wave tomography maps using the Eikonal and Helmhotza tomography - CC-FJpy | A tutorial (in Chinese): A Python Package for seismic ambient noise cross-correlation and the frequency-Bessel transform method
- disp_codes: A collection of seismological codes imlpementing three array-based techniques for measuring multi-mode surface wave phase velocity dispersion
- DisperNet: Extracting and classifying the dispersion curves in the Frequency-Bessel dispersion spectrum
- GSpecDisp: A Matlab package for phase-velocity dispersion measurement from ambient-noise correlations
- mat-LRTdisp: Measuring multi-mode surface wave dispersion using the Linear Radon Transform (LRT) written in MATLAB
- MATnoise: Calculate ambient noise cross-correlations, measure phase velocities, and invert for phase velocity maps in MATLAB
- NoisePy: Fast and easy computation of ambient noise cross-correlation functions written in Python, with noise monitoring and surface wave dispersion analysis
- PyMASWdisp:
Calculate dispersion data from
**M**\ ulti-Channel**A**\ nalysis of**S**\ urface**W**\ aves data written in Python - SurfaceWaveMFA:
Surface Wave
**M**ultiple**F**ilter**A**nalysis - XDCpick: A simple tool for efficient picking of group velocity dispersion curves written in C

### Surface-wave Tomography

- ASWMS |
GitHub:
**A**utomated**S**urface**W**ave Phase Velocity**M**easuring**S**ystem written in MATLAB, measuring the phase and amplitude of surface waves and then generate surface-wave tomography maps using the Eikonal and Helmhotza tomography - FMST | iEarth: Traveltime tomography in 2-D spherical shell coordinates based on fast marching method
- rj-TOMO: 2-D transdimensional travel time tomography based on Reversible jump Markov chain Monte Carlo algorithm
- tomo_sp_cu_s | GitHub: Ray theoretic surface wave tomography
- MATnoise: Calculate ambient noise cross-correlations, measure phase velocities, and invert for phase velocity maps in MATLAB
- SurfwaveTomoPrograms: Finite frequency Rayleigh wave tomography programs

### Surface-wave Dispersion Inversion

- CPS330 |
A tutorial (in Chinese):
Collection of programs for calculating theorectical seismogram, receiver function,
surface wave dispersion curve et al.
- Tutorilas: Surface Waves
- srfpython: Compute, display, and invert 1D depth models based on CPS330 written in Python

- dispinversion: Surface wave dispersion inversion code written in MATLAB
- MCDisp: Surface wave dispersion inversion using Monte Carlo methohd written in Python

### Surfave-wave Tomography Workflow

- seismic-noise-tomography: Python framework for seismic noise tomography

### Direct Inversion of Surface-wave Dispersion Data

- DSurfTomo: Direct inversion of surface dispersion data based on ray tracing written in Fortran
- DRadiSurfTomo: Direct Surface Wave Radial Anisotropy Tomography written in Fortran
- DAzimSurfTomo | A tutorial (in Chinese): Direct inversion of Rayleigh wave dispersion data for 3-D azimuthal anisotropy based on ray tracing
- 3D Monte Carlo Direct Inversion | GitHub: 3D Monte Carlo tomography using both body and surface wave data

### Surface-wave Dispersion Forward Calculation

- CPS330 |
A tutorial (in Chinese):
Collection of programs for calculating theorectical seismogram, receiver function,
surface wave dispersion curve et al.
- disba: Numba-accelerated computation of surface wave dispersion that implements a subset of codes from CPS330 written in Python
- pyfwrd: A forward modelling code for surface wave, receiver functions and shear wave splitting, given tilted hexagonal symmetric media
- PyLayeredModel: Python wrappers for the CPS and Rftn libraries for layered models in seismology
- pysurf96: Python wrapper for modelling surface wave dispersion curves from surf96 in CPS330 written in Python
- srfpython: compute, display, invert 1D depth models based on CPS330 written in Python

- Geopsy: An open source software for geophysical research and application written in C++
- Generalized Eigenproblem Spectral Collocation: Solves surface-wave eigenproblem (air-solid interface seismic waves) in laterally homogeneous media with piecewise smooth elastic structure
- senskernel | GitHub: Phase/Group velocities Sensitivity Kernels
- MCMC_ANISO_FORWARD: Compute surface wave dispersion curves and receiver functions in anisotropic models with hexagonally symmetry
- TheoreticalDispersionSpectrum: Theoretical Dispersion Spectrum calculation by the Generalized Reflection and Transmission Method
- Vphase: A training code to calculation of phase velocity dispersion curves

## Seismic Imaging

### Receiver Function

- rf: Receiver function calculation in seismology written in Python
- hk | Chinese note: Receiver function package (synthetic RF, deconvolution, and H-k stacking)
- CPS330 | Python wrapper: PyLayeredModel | A tutorial (in Chinese): Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- RAYSUM | PyRaysum: Ray-theoretical modelling of teleseismic waves in dipping, anisotropic structures
- RF codes
- Charles J. Ammon’s codes
- Cheng’s codes, including Qingju Wu’s maximum entrop deconvolution method (
`burgays`

)

- Charles J. Ammon’s RF codes: An Overview of Receiver-Function Analysis
- Jeffrey Park’s RF codes:
- Recfunk21: Computation of receiver functions and harmonic decomposition analysis. It supersedes previously released recfunk09_pick and recfunk_ascii.
- rfsyn: Computes a receiver-function for a stack of anisotropic layers over an isotropic halfspace

- CCP | Chinses note: Common-Conversion-Point (CCP) stacking of receiver functions
- CrazySeismic | linkresearcher | bilibili: A MATLAB GUI-based package to process single channel seismic data (picking, McCC, PCA, Deconvolution)
- FuncLab (invalid link) | revised FuncLab: A Matlab based GUI for handling receiver functions
- h-k-c | linkresearcher | bilibili: Generalized H-k after harmonic correction on receiver functions
- IRFFM: An interactive Java program for joint interactive forward modelling of teleseismic receiver functions and surface wave dispersion
- MCMC_ANISO_FORWARD: Compute surface wave dispersion curves and receiver functions in anisotropic models with hexagonally symmetry
- processRFmatlab: MATLAB functions and scripts for working with receiver functions
- psdm | bilibili: A wave equation migration method for receiver function imaging
- PSV Hybrid RF | GitHub: Calculating synthetic RF in two-dimensional localized hetergeneous structures based on PSV Hybrid method (GRT-FD)
- pyfwrd: A forward modelling code for surface wave, receiver functions and shear wave splitting, given tilted hexagonal symmetric media
- RF_INV: Receiver function inversion by reversible-jump Markov-chain Monte Carlo written in Fortran
- RfPy: Receiver function caculcation along with post-processing (e.g., hk, harmonic decomposition, CCP) written in Python
- rj-RF: Receiver Function Inversion using Reversible jump Markov chain Monte Carlo algorithm
- RFtool: An interactive GUI tool to simulate P or S receiver functions
- SplitRFLab: A Matlab toolbox of processing receiver functions and shear wave spliting
- seispy: A Python module for processing seismological data and calculating Receiver Functions

### Rayleigh-wave Ellipticity

- DOP-E | GitHub: Rayleigh wave ellipticity, measurement and inversion from ambient noise written in Fortran and Python
- Quake-E: Measure Rayleigh wave ellipticity from earthquake data written in Python

### Shear Wave Splitting

- SplitLab | An updated version: Shear-wave birefringence analysis code written in Matlab
- MFAST: Multiple Filter Automatic Splitting Technique written in Fortran
- MSAT: The MATLAB Seismic Anisotropy Toolkit
- multisplit: Shear-wave birefringence analysis code
- pyfwrd: A forward modelling code for surface wave, receiver functions and shear wave splitting, given tilted hexagonal symmetric media
- SHEBA: Shear-wave birefringence analysis
- SplitPy: Teleseismic shear-wave (SKS) Splitting Toolbox written in Python
- SplitRacer: Semiautomated Analysis and Interpretation of Teleseismic Shear-Wave Splitting in MATLAB
- sws_tools: MATLAB tools for modeling and plotting of shear-wave splitting data
- ECOMAN: Software package for computing elastic and viscous mechanical properties of mantle rocks and seismic forward and inverse modelling

### Scattering and Intrinsic Attenuation

- CodaNorm: Calculating the seismic quality factor using the coda normalization method
- Coda-Q-Inversion: Coda-Q inversion written in MATALB
- MuRAT: Multi-resolution seismic attenuation tomography using Body and Coda Waves written in MATLAB
- psphoton: Monte Carlo simulation of elastic-wave scattering processes in Earth’s interior
- PSPHOTON_POSO: Model Po/So envelopes
- qopen: Separation of intrinsic and scattering Q by envelope inversion
- usattenuation: Intrinsic attenuation, scattering attenuation and site amplification for the contiguous U.S.

### Joint Inversion of Seismological Data

- Weisen Shen’s code: A workshop in Peking University in 2017 for joint inversion of surface-wave dispersion data and receiver function
- SEIS_FILO:
**SEIS**mological inversion tools for**F**lat and**I**sotropic**L**ayered structure in the**O**cean - BayHunter: McMC transdimensional Bayesian inversion of surface wave dispersion and receiver functions in Python
- Huajian Yao: Codes and Software: Inversion of Vs, Vp/Vs, and interface depth using dispersion data and Rayleigh wave ellipticity
- LitMod_seis: A joint inversion code for inverting Vs and anisotropy
- jointBSVpVs: Joint inversion of body and surface wave data for Vp/Vs
- RfSurfHmc: Joint inversion of Receiver Function and Surface Wave Disperion by Hamilton Monte Carlo Method

### Waveform Inversion

- Fault zone travel time and waveform modelling | bilibili
- MC3deconv: Bayeisan inversion to recover Green’s functions of receiver-side structures from teleseismic waveforms

### Full Waveform Inversion

- IFOS2D | GitLab: 2D elastic full waveform inversion
- IFOS3D | GitLab: 3D elastic full waveform inversion
- DENISE: 2D time-domain isotropic (visco)elastic FD modeling and full waveform inversion code for P/SV-waves
- 2DNoise_Adjoint_tomography: 2D ambient noise adjoint tomography and joint inversion of ambient noise and teleseismic body-wave
- 2DZH_Adjoint_tomography: 2D ZH Amplitude Ratios adjoint tomography
- ASKI: Seismic Full Waveform Inversion and sensitivity/resolution analysis
- Finite-frequency tomography
- FWI.jl: Solving the 2D and 3D acoustic full waveform inversion on a regular rectangular mesh written in Julia
- GERMAINE: 2D frequency-domain acoustic/SH/TE-mode FD modelling and full waveform inversion code
- LASIF:
**LA**rge-scale**S**eismic**I**nversion**F**ramework to perform adjoint full seismic waveform inversions - Salvus: A scalable software suite for waveform modeling and inversion across the scales
- SAVA: 3D seismic finite-difference modelling, Full Waveform Inversion (FWI) and Reverse Time Migration (RTM) code for wave propagation in isotropic (visco)-acoustic/elastic and anisotropic orthorhombic/triclinic elastic media
- seisDD: Double-difference adjoint seismic tomography
- SeisElastic2D: An open-source package for multiparameter FWI in isotropic-, anisotropic- and visco-elastic media
- SES3D: Simulation of elastic wave propagation and waveform inversion in a spherical section
- TOY2DAC: 2D Acoustic frequency-domain Full Waveform modeling and inversion code

### Multi-observable Modelling and Inversion of Geophysical Data

- LitMod: Multi-observable modelling and inversion of geophysical data
- LitMod_2D | A new version in Github: An interactive software to perform multi-observable forward modelling of geophysical data for 2D whole lithospheric structure of the Earth and/or other terrestrial planets
- LitMod_T: the “transient” equivalent of LitMod_2D
- LitMod_3D | A new version in Github: 3D integrated geophysical-petrological interactive modelling of the lithosphere and underlying upper mantle using a variety of input datasets: potential fields (gravity and magnetic), surface heat flow, elevation (isostasy), seismics, magnetotellurics and geochemical
- LitMod_4INV: A fully nonlinear probabilistic inversion codes in spherical coordinates for the compositional and thermal structure of the lithosphere and upper mantle

- JDSurfG: Joint Inversion of Direct Surface Wave Tomography and Bouguer Gravity

## Ambient Noise

### Ambient Noise Monitoring

- MSNoise: A Python Package for Monitoring seismic velocity changes using ambient seismic noise
- NoisePy: Fast and easy computation of ambient noise cross-correlation functions written in Python, with noise monitoring and surface wave dispersion analysis
- yam: Yet another monitoring tool using correlations of ambient noise written in Python

### Noise HVSR

- IRIS HVSR: A set of Python scripts to compute and plot HVSR curves using MUSTANG PDF-PSD web service from IRIS
- Geopsy: An open source software for geophysical research and application written in C++
- HtoV-Toolbox: A toolbox that allows the simple calculation of H/V ratios
- HV-Inv: Forward calculation and inversion of H/V spectral ratios
- HVResPy: An open-source Python tool for Geopsy HVSR post-processing
- hvsrpy: A Python package for horizontal-to-vertical spectral ratio processing
- HV-TEST: A tool for the verification of the reliability and clarity of the H/V peak according to the SESAME criteria
- OpenHVSR: Measure and Inversion of HVSR written in MATLAB

## Earth’s interior

- FastTrip: Fast MPI-accelerated Triplication Waveform Inversion Package
- PKPprecursor | GitHub: Locating seismic scatterers in the lower mantle, using PKP precursor onsets
- ss-precursors: SS Precursor Workflow

## Seismic Data Analysis

### General Signal Analysis

- FFTW: A C subroutine library for computing the discrete Fourier transform (DFT)
- Multitaper Spectrum Estimation Library |
multitaper |
mtspec:
**M**ulti**t**aper**Spec**tral Estimation - multitaper_toolbox: Computing multitaper spectrogram implemented in MATLAB, Python, and R
- SEC_C: Super-Efficient Cross-Correlation
- SeisSound: The Audio/Video Seismic Waveform Visualization
- datamovies: A couple of demo codes for sonifying data

### Phase Picking

- Adaptive Stacking | iEarth: Adaptive stacking to estimating traveltime residual patterns across a network of seismic stations
- AIMBAT: Measuring teleseismic body wave arrival times for large seismic arrays written in Python
- CrazySeismic | linkresearcher | bilibili: A MATLAB GUI-based package to process single channel seismic data (picking, McCC, PCA, Deconvolution)
- CrazyTremor: A MATLAB GUI-based package to display and picking multi-channel seismic data
- generalized-phase-detection: Generalized Seismic Phase Detection with Deep Learning
- mccc: Determines optimum relative delay times
for a set of seismograms based on the VanDecar & Crosson
**m**ulti-**c**hannel**c**ross-**c**orrelation algorithm - PhaseNet | A tutorial (in Chinese): A Deep-Neural-Network-Based Seismic Arrival Time Picking Method
- PhasePApy: Seismic Phase Picker and Associator, written in Python
- P-Phase Picker: Detecting P-phase onset written in Java and Matlab

### Single Station Signal Analysis

- IRIS DMC Noise Toolkit: Compute power spectral densities and perform microseism energy computations and frequency dependent polarization analysis
- BCseis: a MatLab GUI and set of inline functions for performing various non-linear thresholding operations using the Continuous Wavelet Transform
- Est_noise: Analyze time-series data to quantify temporal correlations and simultaneously estimate rates, offsets, and other functional dependencies
- MUSTANG | Tutorial: A quality assurance system that provides metrics pertaining to seismic data quality
- PIQQA | An introduction: A python utility to create a simple Quality Assurance report
- Pycheron: A Python library for quality control of seismic data based on IRIS MUSTANG
- PolarGUI: A GUI polarization analysis of the three-component seismic data written in MATLAB
- Polfre: Time-Frequency Dependent Polarization written in Fortran
- PQLX: An open-source software system for evaluating seismic station performance and data quality
- Station Analysis Tools | IRIS site: A set of c routines for computation of power spectral densities, coherence, probability density functions, and a handful of other tools for monitoring the health of a station
- TF-SIGNAL: Computation and visualization of time-frequency representations of time signals using one or more of seven alternative methods of time-frequency analysis

### Array seismology

- ObsPy: Data download, processing and visulization software written in Python
- array_processing: Various array processing tools for infrasound and seismic data written in Python
- Geopsy: An open source software for geophysical research and application written in C++
- ts-PWS: Time-scale phase weighted stacking written in C

### Seismic Interferometry

- inter_source_interferometry: Inter-source interferometry by cross-correlation of coda waves written in Python
- ThreeStation: Three-station interferometry written in Python

### Seismic Data Digitization and Correction

- ATacR: Automated Tilt and Compliance Removal (for ocean bottoms seismometers) written in Matlab
- Automatic detection of clipped seismic waveform:
The code seems to be related to
**CWPAR**. - CWPAR: Clipped Waveform Pickup and Restoration written in Matlab
- DigitSeis: A digitization software for analog seismograms written in Matlab
- DLOPy | orient: Calculate OBS horizontal orientations based on Raleigh-wave arrival angle written in Python (DLOPy) or Matlab (orient)
- OBStools: Removing vertical component noise from tilt and compliance effects written in Python
- OrientPy: Estimate seismometer orientation written in Python

### Pattern Recognition and Machine Learning

- scikit-learn: Machine Learning in Python
- Detex: A Python package for subspace detection and waveform similarity clustering
- dbscan1d: An efficient 1D implementation of the DBSCAN clustering algorithm in Python
- Sequencer: An algorithm that detects one-dimensional sequences in complex datasets in Python

### Spherical Harmonics

## Seismological/Geophysical Library

### Seismological Tools/Library

- CREWES Matlab Toolbox: Numerical Methods of Exploration Seismology with algorithms in MATLAB
- Pyrocko: An open-source seismology toolbox and library written in the Python
- SEISAN: Earthquake analysis software

### Geophysical Tools/Library

- Fatiando: Open-source tools for geophysics
- UNAVCO | Software: A community of scientists, educators, and professionals working together to better understand Earth processes and hazards using geodesy

## Geophysics/Geosciences

### Gravity

- Harmonica:
Forward modeling, inversion, and processing gravity and magnetic data
- moho-inversion-tesseroids: Fast non-linear gravity inversion in spherical coordinates with application to the South American Moho

- GRAV3D: Carrying out 3D forward modelling and inversion of gravity data
- SphGraGLQ: A fast and adaptive gravity forward computation method by Gauss-Legendre Quadrature in spherical coordinates in C
- Gravity modelling and inversion in 2D: A very simple matlab code to illustrate the basics of gravity modelling and inversion

### InSAR/GPS

- GMTSAR: An InSAR processing system based on GMT
- SDM - Geodetic finite-fault slip inversion: Inverting co-seismic surface deformation data (GPS, InSAR, etc.) for fault slip distribution written in Fortran

### Geodynamics

- CitcomS: Solve compressible thermochemical convection problems relevant to Earth’s mantle

### Mineral Physics

- GassDem: Modeling anisotropic seismic properties written in MATLAB

### Thermodynamic Modeling

- Perple_X | Thermodynamic Data Files | Glossary | A tutorial (in Chinese): A collection of Fortran77 programs for calculating and displaying phase diagrams, phase equilibria, and thermodynamic data
- HeFESTo | GitHub: Helmholtz Free Energy Self-consistent Thermodynamics
- THERMOCALC: Calculating model phase equilibria involving the HPx-eos and/or individual end-members from the Holland & Powell dataset
- BurnMan: An open source mineral physics toolbox written in Python to generate physical properties for the Earth and other planets

### Geophysics

- distaz | A tutorial (in Chinese): Calculate distance, azimuth and back-azimuth of any two points at the Earth’s surface
- PlateFlex: Estimate lithosphere elstatic thickness written in Python and Fortran

### Tectonics

- GPlates: A desktop software for the interactive visualisation of plate-tectonics

## Geophysical Inversion

### Inversion Theory

- Parameter Estimation and Inverse Problems: Example Code and Associated Subroutines: A compilation of inverse and parameter estimation code that accompanies the second edition of the textbook “Parameter Estimation and Inverse Problems”

### Linear Algebra

- BLAS:
**B**asic**L**inear**A**lgebra**S**ubprograms are routines that provide standard building blocks for performing basic vector and matrix operations - LAPACK | Working Notes | GitHub:
**L**inear**A**lgebra**PACK**age is a library of Fortran subroutines for solving the most commonly occurring problems in numerical linear algebra - LINPACK: a collection of Fortran
subroutines that analyze and solve linear equations and linear least-squares problems,
which has been largely superceded by
**LAPACK**

### Gradient Methods

- LSQR: A conjugate-gradient type method for solving sparse linear equations and sparse least-squares problems
- SEISCOPE Optimization Toolbox: A set of FORTRAN 90 optimization routines dedicated to the resolution of unconstrained and bound constrained nonlinear minimization problems
- Stanford University Systems Optimization Laboratory: optimization software

### Monte Carlo Methods

- Malcolm Sambridge: Software
- Marko Laine: MCMC codes
- DRAM: A simple teaching code in Fortran of the Delayed Rejection Adaptive Metropolis (DRAM) method
- emcee: Affine Invariant Markov chain Monte Carlo Ensemble sampler written in Python
- rj-MCMC: A library providing routines
for running
**R**eversible**J**ump**M**onte-**C**arlo**M**arkov**c**hains for 1-D and 2-D spatial regression problems - rjmcmc: Reversible-Jump MCMC written in R
- Neighborhood-Algorithm: A simple NA implementation in c++

### Numerical Library

- GNU Scientific Library: A numerical library for C and C++ programmers
- Netlib: A collection of mathematical software, papers, and databases
- The Comprehensive R Archive Network
- The Computational Geometry Algorithms Library: A software project that provides easy access to efficient and reliable geometric algorithms in the form of a C++ library

## Software Centers

### Geoscience Software Centers

- ANU Seismology & Mathematical Geophysics Research Group | Software
- Computational Infrastructure for Geodynamics (CIG) | Software
- DAS Research Coordination Network: Codes and Examples from Distributed Acoustic Sensing Research Coordination Network
- EarthByte | Software and Workflows: An internationally leading eGeoscience collaboration
- ETH Seismology and Geodynamics | Software
- German Research Centre for Geosciences (GFZ) | Wave Physics and Tool
- iEarth: A consortium of scientists from the university, government and industry sectors with interests in the development and application of inversion methodologies for the Earth Sciences
- IRIS SeisCode
- ISTI Software: Instrumental Software Technologies, Inc.
- Karlsruhe Institute of Technology (KIT) Geophysical Institute | Software | GitLab: Finite-difference numerical methods and full waveform inversion software developed by the geophysical institute of the Karlsruhe Institute of Technology
- MTNet | Codes: An international electronic forum for the free exchange of knowledge, programs and data between scientists engaged in the study of the Earth using electromagnetic methods, principally but not exclusively the magnetotelluric technique (magnetotellurics)
- NuQuake | Codes: Numerical modeling of seismic wave propagation and earthquake motion
- QUEST |
Software:
**QU**antitative**E**stimation of Earth’s Seismic Sources and**ST**ructure - Seismo-Live | GitHub: Live Jupyter Notebooks for Seismology
- Seismic wave Propagation and Imaging in Complex media: a European network software
- SW3D:
**S**eismic**W**aves in complex**3D**structures - University of South Carolina Lithospheric Seismology Program | Software
- University of Ottawau Geophysics Group | Software
- USGS Earthquake Hazards Program | Software
- William Menke | Software