# Scientific Research Codes

## Data Request Tools

- SOD: the best seismic data request tool. | Tutorial (in Chinese) | Recipes
- ObsPy: Data download, processing and visulization software written in Python
- HinetPy: Request and process Hi-net data, written in Python
- Web Service Fetch scripts: Data request scripts written in Perl | Chinese note
- IRIS DMC Web Services: IRIS Web service for requesting seismic data
- jweed: Data request client written in Java
- BREQ_FAST: Seismic data request by sending email | Chinese note
- IRIS Wilber 3: A web GUI to request waveform data of individual seismic events | Chinese note
- ROVER: A command line tool to robustly retrieve geophysical timeseries data from data centers
- StrongMotion Fetch: Download and/or process strong motion data from various networks

## Seismic Data Format Conversion

- rdseed: Convert seismic data from SEED format to other common format (SAC et al.) | Chinese notes
- sac2mseed: Convert SAC format to minniSEED format
- mseed2sac: Convert miniSEED format to SAC format
- win32tools: Convert WIN32 format used by Hi-net, to SAC format
- dataselect: Selection and sorting for data in miniSEED format
- ObsPy: Data download, processing and visulization software written in Python
- msmod: A small program to modify miniSEED header values

## Seismic Data Processing

- SAC: The most commonly used seismic data processing and plotting software | English Manual | Chinese Manual
- ObsPy: Data download, processing and visulization software written in Python
- GISMO: Data download, processing and visulization software written in Matlab
- SeisIO.jl: Data download, processing and visulization software written in Julia
- CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion cureve et al.
- Geopsy: An open source software for geophysical research and application written in C++

## Plotting

- Generic Mapping Tools (GMT): the most popular mapping tools in Earth Science
- PyGMT: Python interface of GMT (still under development)
- ObsPy: Data download, processing and visulization software written in Python
- JPlotResp: Plot amplitude and phase of instrumental responses in RESP format. | Chinese note
- MoPad: Analysis and visulization of seismic moment tensor, focal mechanism. | Chinese note
- obspy-mopad: similar to MoPad, provided by ObsPy
- pssac: GMT-style SAC trace plotting for GMT4 | pssac notes
- SeisTomoPy: Visulization of 3D tomography models and calculate traveltime in 3D model
- SubMachine: Web-Based Tools for Exploring Seismic Tomography and Other Models of Earth’s Deep Interior
- Tomoeye: a set of programs for tomographic model visualization written in MatLab 6.1 script
- 3D Focal Mechanisms: View earthquake focal mechanism symbols three dimensionally
- 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

## Traveltime Calculation/Ray Tracing

- TauP: Calculate traveltimes, ray parameters, ray paths, reflection points, piercing points of seismic phases, supporting custom Earth models | Chinese notes
- obspy.taup: TauP, rewritten in Python
- Cake: Traveltime calculation software, written in Python.
- ANISOtime: Traveltime calculation for transversely isotropic (TI) spherically symmetric models
- FM3D: 3D traveltime calculation using Fast Marching Method
- pySeismicFMM: 3D traveltime calculation using Fast Marching Method, C codes with a Python interface
- Surface Wave Ray Tracing with Azimuthal Anisotropy: Surface Wave Ray Tracing with Azimuthal Anisotropy
- iaspei-tau traveltime table package
- Arthur Snoke's version: Traveltime calculator for iasp91 and AK135 models | IASPEI | IRIS code
- B.L.N. Kennett and Ray Buland's version: Calculation of travel times and ellipticity corrections for iasp91 and AK135 models | Some revisions to compile the codes
- 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
- Ray theory: Ray-theoretical approach to the calculation of synthetic seismograms in global Earth models
- Generalized ray in CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- Asymptotic ray theory in CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- WKBJ method in seisan: Seismology at GEUS

### Reflectivity/Wavenumber integration for 1D layered Earth

- fk: Calculate synthetic seismograms in layered isotropic models, using frequency-wavenumber method | Chinese notes
- QSEIS: Calculating synthetic seismograms based on a layered viscoelastic half-space earth model
- Reflectivity method: Calculating the response of a layered uniform solid layers to excitation by a point moment tensor source using the reflectivity method
- Wavenumber integration method in CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al. | Chinese install introduction and Chinese introdution
- Discrete wavenumber method in seisan: Seismology at GEUS

### Modal Summation method for 1D layered Earth

- Modal Summation in CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al. | Chinese install introduction and Chinese introdution

### Reflectivity/Wavenumber integration for 1D layered spherical Earth

- yaseis: Calculate synthetic seismograms in spherically layered isotropic models, using frequency-wavenumber method

### Normal modes summation for 1D layered spherical Earth

- Mineos: Computes synthetic seismograms in a spherically symmetric non-rotating Earth by summing normal modes
- 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
- DISPER80: Calculation of normal modes, which is a very old fortran code. You have to ask for it from someone who conducts surface-wave studies.

### Direct solution method

- DSM: Computing synthetic seismograms in spherically symmetric transversely isotropic (TI) media using the Direct Solution Method
- GEMINI: Calculation of synthetic seismograms for global, spherically symmetric media based in direct evaluation of Green's functions
- DGRFN: Calculate synthetic seismograms on a radially stratified model

### Finite Difference Methods

- SOFI2D: 2D finite-difference seismic P-SV simulation
- SOFI2D_sh: 2D finite-difference seismic SH-wave simulation
- SOFI3D: 3D finite-difference seismic wave simulation
- FD2D: A very simple training code for 2D finite difference
- FD3S: 3D finite-difference seismic wave simulation in a spherical section
- FD1D
- 2DFD_DVS: Computation of seismic wavefields in 2D heterogeneous structures with planar free surface due to linear double-couple source or linear single force or plane-wave incidence
- FDSim3D: Computation of seismic wavefields in 3D heterogeneous surface geological structures with planar free surface due to surface and near-surface point double couple sources or by a vertically incident plane wave.
- SEISMIC_CPML: 2D/3D Finite-Difference Seismic Wave Simulation + CPML
- SW4: 3D Finite-Difference Seismic Wave Simulation (4th order)
- OpenSWPC: 2D/3D Finite-Difference Seismic Wave Simulation

### 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
- 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)
- DSM-SEM & AxiSEM-SEM can be found in
`EXTERNAL_PACKAGES_coupled_with_SPECFEM3D`

- FK is not an external code, it is now called internally
- The coulping can be found in
`specfem3D/couple_with_injection.f90`

- DSM-SEM & AxiSEM-SEM can be found in
- SPECFEM3D_GLOBE: Simulates seismic wave propagation in a 3D heterogeneous medium, using spectral element method (spherical coordinate system)
- SEM_DSM_hybrid: A hybrid method to efficiently compute teleseismic synthetics with 3D seismic strucure at source side (SEM) and 1D strucure outside the source region (DSM).
- RegSEM: Simulates seismic wave propagation in a 3D heterogeneous media, using spectral element method at the regional scale. Regional scale means distances ranging from about 1 km (local scale) to 90 degree (continental scale).
- AxiSEM: A parallel spectral-element method to solve 3D wave propagation in a sphere with axisymmetric or spherically symmetric visco-elastic, acoustic, anisotropic structures.
- Instaseis: The Python interface of AxiSEM
- AxiSEM3D
- NEXD: Nodal Discontinuous Galerkin Method | 1D | 2D | 3D
- 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

### Discontinuous Galerkin Method

- SeisSol: a scientific software for the numerical simulation of seismic wave phenomena and earthquake dynamics

### Surface waves in 3D structures

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

### Hybrid method

- PSV Hybrid: Calculating synthetic seismograms involving two-dimensional localized hetergeneous structures based on GRT-FD hybrid method.

## Earthquake detection

- REAL: Rapid Earthquake Association and Location
- Match&Locate: Template detecting and locating of small earthquakes
- GPU-MatchLocate1.0: A GPU version of Match&Locate
- FastMatchedFilter: An efficient seismic matched-filter search for both CPU and GPU architectures.
- EQcorrscan: A python package for the detection and analysis of repeating and near-repeating earthquakes
- REDPy: Repeating Earthquake Detector, written in Python
- FAST: End-to-end earthquake detection pipeline via efficient time series similarity search

## Earthquake location

- GrowClust: Relative relocation for earthquake hypocenters
- HypoDD: Double-difference earthquake location
- HypoRelocate: High-resolution earthquake relocation method
- HYPOINVERSE2000: Locate earthquakes and determine magnitudes in a local or regional seismic network
- NonLinLoc: Probabilistic, Non-Linear, Global-Search Earthquake Location in 3D Media.
- REAL: Rapid Earthquake Association and Location
- Velest: 1-D inversion of velocities and hypocenter locations
- This code is modified to be used in REAL

## Focal Mechanism

- gCAP: Focal mechanism inversion using cut and paste method | Chinese note
- CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al.
- W Phase: Moment tensor inversion using W phase
- focmec: Package for determining and displaying double-couple earthquake focal mechanisms based on polarities and amplitude ratios
- HASH: Determine double-couple earthquake focal mechanisms based on P-wave polarity and S/P amplitude ratios
- FPFIT: Calculate and plot fault-plane solutions from first-motion data
- ISOLA: Retrieve isolated asperities from regional or local waveforms based on multiple-point source representation and iterative deconvolution
- MTfit: Bayesian Moment Tensor Fitting
- pyTDMT: time-domain focal mechanism inversion, written in Python
- hybridMT: MATLAB package for moment tensor inversion and refinement
- fociMT: A stand-alone command line application for seismic moment tensor inversion, which is an integral part of hybridMT package

- FOCI: A stand-alone Windows GUI application for performing the seismic moment tensor inversion and source parameters assessment
- RPGEN: Radiation of P/S/SH/SV waves from shear-tensile source model
- MT_DECOMPOSITION: A Matlab software package for the moment tensor decomposition
- PCA-DECOMPOSITION: A Matlab software package for the Principal Component Decomposition of seismic traces for extracting the common wavelet

## Seismicity

- CLUSTER2000: Identify clusters (e.g., aftershocks) in an earthquake catalog
- ZMAP: A software package to analyze seismicity

## Stress

- Coulomb 3: Investigate Coulomb stress changes on mapped faults and earthquake nodal planes
- SATSI: Spatially and/or temporally varying stress field from focal mechanisms
- MSATSI: MATLAB package for stress tensor inversion
- STRESSINVERSE: A Matlab or Python software package for an iterative joint inversion for stress and fault orientations from focal mechanisms

## Body-wave tomography

- Nick Rawlinson's softwares
- FMTOMO: 3-D traveltime tomography based on fast marching method | FMTOMO at iEarth
- FMTT: Teleseismic tomography based on fast marching method | FMTT at iEarth

- SIMUL2000: Traveltime tomography

## Surface-wave traveltime tomography

### Teleseismic surface-wave tomography

- Huajian Yao's Lab
- Surface-wave two-station dispersion analysis GUI software in Matlab (What's the tomography method?)

- ASWMS: Automated Surface Wave Phase Velocity Measuring System, measuring two-station phase delay and then 2D phase velocity maps at each period using Eikonal and Helmhotza tomography
- Yingjie Yang's method

### Ambient noise surface-wave tomography

#### Measuring traveltime delay

- Research Products from CU-Boulder
- Huajian Yao's Lab
- Ambient noise cross-correlation codes for daily long SAC format data in Matlab
- Dispersion Analysis GUI software for ambient noise cross-correlation functions in Matalb

- NoisePy: Fast and easy computation of ambient noise cross-correlation functions written in Python, with noise monitoring and surface wave dispersion analysis
- SeisNoise: Fast and easy ambient noise cross-correlation in Julia, with noise monitoring and surface wave dispersion analysis

#### Inverting phase/group velocity maps

- tomo_sp_cu_s: Surface wave tomography based on ray theory | Research Products from CU-Boulder
- FMST: traveltime tomography code in 2-D spherical shell coordinates based on fast marching method | FMST at iEarth
- rj-TOMO: 2-D transdimensional travel time tomography based on Reversible jump Markov chain Monte Carlo algorithm

### One-step surface-wave traveltime tomography

- DSurfTomo: Direct inversion of 3-D Vs structure from dispersion data based on period-dependent ray tracing in Fortran
- 3D Monte Carlo Direct Inversion: 3D Monte Carlo tomography using both body and surface wave data

### Surface-wave dispersion calculation

- CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al. | Chinese install introduction and Chinese introdution
- Geopsy: An open source software for geophysical research and application written in C++
- senskernel: Calculate sensitivity kernal of group velocity and phase velocity
- Vphase: A training code to calculation of phase velocity dispersion curves

## Noise HVSR

- Geopsy: An open source software for geophysical research and application written in C++
- IRIS HVSR: A set of Python scripts to compute and plot HVSR curves using MUSTANG PDF-PSD web service from IRIS | IRIS website
- H/V Toolbox: A toolbox to calculate surface-wave HVSR
- HV-Inv: Inversion of HVSR and SW dispersion
- OpenHVSR: Measure and Inversion of HVSR written in Matlab
- HV-TEST: A tool for the verification of the reliability and clarity of the H/V peak according to the SESAME criteria
- HVResPy: An open-source Python tool for Geopsy HVSR post-processing

## Ambient Noise Inversion

- MSNoise: A Python Package for Monitoring seismic velocity changes using ambient seismic noise
- seismic-noise-tomography: Python framework for seismic noise tomography

## Receiver Function

### Synthetic RF

- hk: Receiver function package (synthetic RF, deconvolution, and H-k stacking) | Chinese note
- RAYSUM: Ray-theoretical modelling of teleseismic waves in dipping, anisotropic structures
- CPS330: Collection of programs for calculating theorectical seismogram, receiver function, surface wave dispersion curve et al. | Chinese install introduction and Chinese introdution
- RF software: Computes a receiver-function for a stack of anisotropic layers over an isotropic halfspace, via a reflectivity algorithm, assuming a plane wave incident from below | Manual | Some updates at JParkCodes
- RFtool: An interactive, GUI-based tool to simulate P or S receiver functions
- PSV Hybrid RF: Calculating synthetic RF in two-dimensional localized hetergeneous structures based on PSV Hybrid method (GRT-FD).

### RF measurements and inversion

- hk: Receiver function package (deconvolution and H-k stacking) | Chinese note
- RF software: Computes a receiver-function for a stack of anisotropic layers over an isotropic halfspace, via a reflectivity algorithm, assuming a plane wave incident from below | Manual | Some updates at JParkCodes
- CCP: Common-Conversion-Point (CCP) stacking of receiver functions | Chinses note
- rj-RF: Inversion of Receiver Functions using Reversible jump Markov chain Monte Carlo algorithm
- IRFFM: An interactive Java program for joint interactive forward modelling of teleseismic receiver functions and surface wave dispersion
- CrazySeismic: A MATLAB GUI-based package to process single channel seismic data (picking, McCC, PCA, Deconvolution)
- FuncLab: a Matlab based GUI for handling receiver functions (link does work) | revised FuncLab
- processRFmatlab: matlab functions and scripts for working with receiver functions
- rf: Receiver function calculation in seismology, written in Python
- SplitRFLab: A Matlab toolbox of processing receiver functions and shear wave spliting modified from Splitlab and processRFmatlab
- Some group codes for RF analysis: Ammon's & Cheng's codes

## Joint inversion of seismological data

- LitMod_seis: A joint inversion code for inverting Vs and anisotropy data (Rayleigh and Love phase and/or group velocities, ellipticity (Z/H ratio) and receiver functions) with a Markov Chain Monte Carlo method. (Released soon)
- Huajiang Yao's Lab: Inversion of Vs, Vp/Vs, and interface depth using (multimode, Rayleigh and/or Love, phase and/or) dispersion data and Rayleigh wave fundamental mode ZH data (ellipticity) based on the Neighborhood Algorithm in Fortran

## Multi-observable modelling of geophysical data

- LitMod: Multi-observable modelling of geophysical data
- LitMod_2D: An interactive software to perform multi-observable 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 3D version LitMod | Github code
- LitMod_4INV: A fully nonlinear probabilistic inversion code(s) in spherical coordinates for the compositional and thermal structure of the lithosphere and upper mantle, simultaneously inverting gravity gradients, gravity anomalies, geoid height, surface heat flow, magnetotelluric data, receiver functions, surface-wave data, absolute elevation (including both static and dynamic effects) and body-wave data, together with petrological information.

## Full Waveform Inversion

- TOY2DAC: 2D Acoustic frequency-domain Full Waveform modeling and inversion code
- ASKI: Modularized program suite for sensitivity analysis and iterative full waveform inversion
- FWI.jl: 2D/3D acoustic FWI in Julia
- IFOS2D: 2D elastic full waveform inversion
- IFOS3D: 3D elastic full waveform inversion
- DENISE-SH: 2D SH-wave full waveform modeling and inversion
- DENISE: 2D PSV-wave full waveform modeling and inversion
- GERMAINE: 2D Acoustic frequency-domain Full Waveform modeling and inversion code.
- SAVA: 3D seismic modelling, FWI and RTM code for wave propagation in isotropic (visco)-acoustic/elastic and anisotropic orthorhombic/triclinic elastic media
- SES3D: Simulation of elastic wave propagation and waveform inversion in a spherical section
- LASIF: Framework for large scale full waveform inversion
- seisDD: Double-difference adjoint seismic tomography
- Salvus: Full waveform modelling and inversion

## Shear Wave Splitting

- SplitLab: Shear-wave birefringence analysis code, written in Matlab | An updated version
- MFAST: Multiple Filter Automatic Splitting Technique written in Fortran
- multisplit: Shear-wave birefringence analysis code
- SHEBA: Shear-wave birefringence analysis code
- SplitRacer: Shear-wave splitting analysis written in Matlab

## Phase Picking

- Adaptive Stacking: Adaptive stacking to estimating traveltime residual patterns across a network of seismic stations | Adaptive stacking at iEarth
- AIMBAT: A Python/Matplotlib Tool for Measuring Teleseismic Arrival Times
- CrazySeismic: 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
- mccc: Determines optimum relative delay times for seismograms by multi-channel cross-correlation
- 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

- Station Analysis Tools: 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 | iris code site
- MUSTANG: A quality assurance system at the IRIS DMC that provides metrics pertaining to seismic data quality | Tutorial
- PQLX: An open-source software system for evaluating seismic station performance and data quality
- IRIS DMC Noise Toolkit Products
- Noise Toolkit
- PDF-PSD: Computing Power Spectral Densities (PSD) of waveform data
- microseism energy: Performing microseism energy computations from PSDs
- Polarization attributes: Performing frequency dependent polarization analysis of seismograms

- Noise Toolkit
- Est_noise: Analyze time-series data to quantify temporal correlations and simultaneously estimate rates, offsets, and other functional dependencies.
- Time-frequency analysis
- TF-SIGNAL: Computation and visualization of time-frequency representations of time signals using one or more of seven alternative methods of time-frequency analysis

- BCseis: a MatLab GUI and set of inline functions for performing various non-linear thresholding operations using the Continuous Wavelet Transform

## Array seismology

- ObsPy: Data download, processing and visulization software written in Python
- Geopsy: An open source software for geophysical research and application written in C++

## Seismic data digitization and correction

- CWPAR: Clipped Waveform Pickup and Restoration
- DigitSeis: A Digitization Software for Analog Seismograms, written in Matlab

## Source Spectrum

## Earth's interior

- PKPprecursor: Locating seismic scatterers in the lower mantle, using PKP precursor onsets

## Tectonics

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

## Geodecy

- Gravity modelling and inversion in 2D: A very simple matlab code to illustrate the basics of gravity modelling and inversion

## Geodynamics

- CitcomS: solve compressible thermochemical convection problems relevant to Earth's mantle.

## Geophysics

- distaz: Classic codes to calculate distance, azimuth and back-azimuth of any two points at the Earth's surface | Chinese note
- AFAT: Solving the Christoffel equation: phase and group velocities

## Signal analysis

- SEC_C: Super-Efficient Cross-Correlation

## Z/H Ratio

- HtoV-Toolbox: Calculate H/V ratios

## Thermodynamic modeling

- Perple_X: calculating and displaying phase diagrams, phase equilibria, and thermodynamic data. | Documentation | Thermodynamic Data Files | Glossary
- THERMOCALC
- BurnMan: A thermodynamic and geophysics toolkit for the Earth and planetary sciences

## Mathmatical library

- SHTOOLS: Spherical Harmonic Tools
- Shansyn: Spherical Harmonic ANalysis and SYNthesis
- SEISCOPE TOOLBOX: Seiscope optimization toolbox
- 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”
- The Computational Geometry Algorithms Library
- Delayed Rejection Adaptive Metropolis (DRAM) in Fortran: A simple teaching code in Fortran of the DRAM method
- rj-MCMC: A library providing routines for running Reversible Jump Monte-Carlo Markov chains for 1-D and 2-D spatial regression problems
- Malcolm Sambridge's softwares

## Seismic Library

- William Menke's codes
- libmseed: A miniSEED library that provides a framework for manipulation of SEED data records