This tutorial is presented as Python code running inside a Jupyter Notebook, the recommended way to use Salvus. To run it yourself you can copy/type each individual cell or directly download the full notebook, including all required files.

Global and Regional Seismic Wave Propagation with Smothiesem

This tutorial demonstrates how to prepare meshes for global seismic wave simulations using the anisotropic adaptive mesh refinement rechnique (aamr), which in this context is also known as smoothiesem [1, 2]. The meshes are specifically build for a particular source location to take advantage of the lateral smoothness of the wavefield and reduce the numerical burden significantly for global and regional scale simulations.
The mesh can be refined in predefined depth, distance and azimuth regions. Additionally, the domain can be restricted to a region of interest as discussed in the separate data adaptive mesh masking tutorial.
In this tutorial we demonstrate the basic concept and most important parameters to build these meshes.
%matplotlib inline
%config Completer.use_jedi = False

from salvus.mesh.simple_mesh import SmoothieSEM
from salvus import namespace as sn

period_global = 100.0

# a quake in Turkey that we will use in this tutorial, original data from IRIS spud:
source = sn.simple_config.source.seismology.SideSetMomentTensorPoint3D(

Full Sphere Meshes

First, we build some full sphere meshes to highlight the different lateral refinement options.

1) no lateral refinement

The simplemost smoothiesem mesh is a full sphere with no lateral refinements and the symmetry axis is aligned with the seismic source location. The tensor order controls boths the accuracy of representing the seismic velocities as well as the geometry of the domain (here: the sphere). On top, the parameter nlat allows to vary the number of elements in the lateral direction that is used throughout the whole mesh. Compare Figure 9 in [1] to choose values appropriate for your application.
sm = SmoothieSEM()
sm.basic.model = "prem_iso_one_crust"
sm.basic.min_period_in_seconds = period_global
sm.basic.elements_per_wavelength = 2.0

sm.advanced.tensor_order = 2
sm.basic.number_of_lateral_elements = 4
sm.source.latitude = source._initial_arguments["latitude"]
sm.source.longitude = source._initial_arguments["longitude"]