Skip to content

Salvus is a suite of software performing full waveform modelling and inversion, which aims to fuse the flexibility of research codes with the performance of production-grade software. It employs the spectral element method and works in 2D and 3D on tetrahedral, hexahedral, quadrilateral, and triangular meshes.

A particular focus of our efforts is directed at usability and the proper solution of the inverse problem.


A lot of effort goes into writing Salvus so please consider citing us. We are currently preparing a proper paper - if you want to cite us right now, please use this:

  author       = {Michael Afanasiev and Christian Boehm and Martin van Driel and Lion Krischer and Dave A. May and Max Rietmann and Andreas Fichtner},
  title        = {Salvus: An open-source high-performance package for full waveform modelling and inversion from laboratory to global scales},
  month        = mar,
  note         = {0.0.1-475-gc87fc6d1},
  year         = 2017,
  doi          = {10.5905/ethz-1007-88},
  url          = {}

Stay up to Date

Mailing List

Salvus is under heavy development but already usable. Join the community to ask questions, get help with problems, and to keep updated about the latest developments and releases!

Join either by visiting the group page or by sending an email to [email protected].

Install and Learn It

See our installation instructions for more details. Our tutorials will remain our main documentation for the foreseeable future so have a look. If you end up doing something new with Salvus, consider writing a small tutorial and sending it to us?

Components and Source Code

Open source repositories of the various components of Salvus. It is early days for the code and you have to expect some rough edges and uncovered corner cases but it should be usable for experienced scientists.

  • salvus_wave []:

    The heart and soul of Salvus, our sun and stars - the actual massively parallel numerical solver and waveform propagator written in modern C++ and making use of PETSc.

  • salvus_mesher []:

    Next generation mesh building software for conforming (and non-conforming) 2D (tris, quads) and 3D (tets, hexes) meshes. Includes the capability to fully automatically generate full planetary (or sections thereof) meshes including doubling/tripling layers and internal as well as surface topographies. Written in Python.

  • salvus_seismo []:

    Interfaces and utilities to ease the use of Salvus for seismologists of all specializations.

  • salvus_examples []:

    This is our main documentation for now. Head over to the Tutorials section to get a good view of it.

  • pyexodus []:

    "Pure" Python library for reading and writing exodus files. Neatly side-steps the netCDF as well as the C and Python exodus libraries and is also a lot faster than the existing Python exodus bindings.

  • salvus_model:

    Upcoming toolbox to easily modify elastic parameters on existing Exodus meshes.

  • salvus_opt:

    Will be read soon and include state of the art optimization algorithms tuned to the wave propagation inversion problem.

  • salvus_flow []:

    Remote execution and workflow management for Salvus.

Current Status

Feature Status Percent Done Tested and Validated
Elastic wave propagation check 100 % check
Arbitrary high order spectral elements check 100 % check
2D and 3D wave propagation check 100 % check
Quad and hex elements check 100 % check
Triangle and tet elements check 100 % check
Fluid-solid coupling check 100 % check
Attenuation check 100 % check
Full Anisotropy check 100 % check
Cowling Approximation (Gravity) check 90 % loop
Adjoint Calculations check 100 % check
Ocean Loading clear 0 % clear
Absorbing boundaries check 75 % loop
Automated mesher check 100 % check
Non-linear optimization toolbox loop 50 % clear
Automated inversion workflow loop 60 % clear
GPU support loop 10 % clear
Comprehensive documentation loop 50 % clear
Python interface loop 80 % loop
ASDF output check 100 % check