Authors:
Dr. Christian Böhm | ETH Zurich | Switzerland
M. Sc. Michael Afanasiev | ETH Zurich | Switzerland
Dr. Martin van Driel | ETH Zurich | Switzerland
M. Sc. Lion Krischer | ETH Zurich | Switzerland
Dr. Max Rietmann | ETH Zurich | Switzerland
Dr. Dave A. May | ETH Zurich | Switzerland
Prof. Dr. Andreas Fichtner | ETH Zurich | Switzerland
Recent years have been witness to the application of waveform inversion to new and exciting domains such as seismic tomography, medical imaging, and non-destructive testing. Despite the vastly different scales, all of these applications have in common that they can be stated as PDE-constrained optimization problems which invert for unknown material properties or external sources and that are governed by some variant of the time-dependent wave equation.
However, each new domain brings with it novel wave propagation physics, spatial and temporal discretizations, and models of variable complexity.
Adapting existing software to these novel applications often requires a significant investment of time, and acts as a barrier to progress. To combat these problems we introduce Salvus, an open-source HPC software package designed to solve large-scale full-waveform inverse problems, with a focus on both flexibility and performance.
Currently based on an abstract implementation of high order finite (spectral) elements, we have built Salvus to work on unstructured meshes in both 2 or 3 dimensions. A diverse (and expanding) collection of wave propagation physics is supported, such as viscoelasticity or solid-fluid coupling. With a focus on the inverse problem, adjoint-based computations of gradients and Hessian-vector products as well as custom-tailored compression methods are built-in. This allows a tight integration with trust-region quasi-Newton and Newton-CG methods to solve the inverse problem.
Salvus bridges the gap between research and production codes with a design based on C++ template mixins and Python wrappers that separate the physical equations from the numerical core. This allows domain scientists to add new equations using a high-level interface, without having to worry about optimized implementation details. Salvus was constructed by following modern software design practices, testing protocols, and by establishing its foundations upon existing high-level scientific libraries, such as PETSc and Eigen.
Our goal in this presentation is to introduce the code and its underlying mathematical framework. Furthermore, we show several numerical examples across the scales.