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.

Help Develop Salvus!

We have an open post-doc position at the Computational Seismology Group at the ETH in Z├╝rich: Open Position


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       = {The Salvus Development Team},
  title        = {Salvus 0.0.1-475-gc87fc6d1},
  month        = mar,
  year         = 2017,
  doi          = {10.5905/ethz-1007-88},
  url          = {}

Stay up to Date

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_optimization:

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

  • salvus_flow:

    Watch this space! Workflow management to steer for example iterative inversions and complex tasks with 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 90 % loop
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 10 % clear
GPU support loop 10 % clear
Comprehensive documentation loop 25 % clear
Python interface loop 50 % loop
ASDF output loop 90 % clear