Determining the physical units of inputs and outputs in Salvus requires understanding which interpretation of the governing equations is chosen. Salvus supports several physically consistent interpretations for the scalar acoustic potential in purely acoustic simulations, and a unique one when acoustic and elastic physics are coupled. This page lists all supported interpretations, how to translate saved fields to physically meaningful quantities (pressure, particle velocity, displacement), and the special role of the coupled case.
In the elastic wave equation, all outputs are given in their canonical SI units. This is in contrast to the acoustic case, where the units depend on the chosen interpretation of the scalar field, typically some potential. Note that in coupled acoustic-elastic simulations, only one interpretation is allowed.
The strong form we solve is written in a unified way as
with density , wave speed , scalar potential , and source term . Different physical choices for the dimensions assigned to and lead to different practical post-processing steps. Salvus does not enforce a single convention for pure acoustic runs; you decide which table below applies.
In the first interpretation, the source term represents a volumetric injection rate with units , one finds . To get pressure and particle velocity, use:
| Desired output | Expression | Field to save | Further operations |
|---|---|---|---|
| Pressure (Pa) | ["phi_t"] | None | |
| Particle velocity () | ["gradient-of-phi"] | Multiply by inverse density |
Assume carries divergence of force density units , we find . Then
| Desired output | Expression | Field to save | Further operations |
|---|---|---|---|
| Pressure (Pa) | ["phi"] | Multiply by inverse density | |
| Particle velocity () | ["gradient-of-phi"] | Time integration + multiply by |
Motivated by interface coupling (see below) we can assign . Plugging this into the same governing equation implies a dimensionless right hand side in the strong form (i.e., ). This means that the source term becomes a normalized monopole source strength. For more insight in this, see the section on conversions below. Practical consequences:
| Desired output | Expression | Field to save | Further operations |
|---|---|---|---|
| Pressure (Pa) | ["phi_tt"] | Multiply by -1 | |
| Normal displacement (at interface) () | ["gradient-of-phi"] | Select normal component & multiply by | |
| Particle displacement (bulk) () | ["gradient-of-phi"] | Multiply by | |
| Particle velocity (bulk) () | ["gradient-of-phi"] | Multiply by , then take the time derivative* |
*Note that one could also output [phi_t] and then compute the gradient
afterwards, but this is much more involved on unstructured meshes than taking
the time derivative of the gradient field with e.g. a central difference
(higher order) scheme.
Interpretation C is mandatory when coupling to elasticity; A and B are only valid in purely acoustic scenarios.
Choosing among A or B (pure acoustic): Pick the one aligned with how your source is specified physically. Need immediate pressure? Use A. Have a known force density history? Use B. Planning to share meshes with elastic physics? Use C from the start to avoid reinterpretation.
For full algorithmic details see our paper here. Additionally, a complete list of fields which can be output can be found in the documentation.
It is common to have a source specified in one physical description and wish to
implement it under a different interpretation (or eventually migrate to a
coupled simulation). The relations below let you translate between a purely
acoustic physical source description and the dimensionless right-hand side
f used in the coupled convention (Interpretation C). Denote the coupled-form
source term by f_c(t) (dimensionless) and the time variable by t.
Given one of the following physical source descriptions in a pure acoustic setting:
| Physical description | Symbol & units | Conversion to dimensionless f_c(t) (Interpretation C) | Notes |
|---|---|---|---|
| Volume injection rate | q(t) [s^-1] | f_c(t) = - ∫ q(t) dt (constant chosen so f_c→0 outside source) | Time integral; remove DC after integration |
| Pressure history (localized) | p(t) [Pa] | f_c(t) = - p(t) / (ρ c^2) | Uses local acoustic impedance (ρ c^2) scaling |
| Divergence of force density | g(t) [N m^-4] | f_c(t) = - (1/ρ) ∫∫ g(t) dt^2 | Two time integrals; detrend afterwards |
Each physical description corresponds to a way of injecting work or
mass/volume change into the acoustic field. In the coupled Interpretation C,
the governing equation has a dimensionless right-hand side, so any dimensional
source must be rescaled to produce the correctly scaled potential with
units . A volume injection rate is (up to constants)
the time derivative of a dimensionless monopole strength-hence we integrate
once to obtain its cumulative effect. A localized pressure history
enters as an imposed normal stress; dividing by the bulk modulus proxy
yields a dimensionless amplitude consistent with .
Finally, a divergence of force density is (in the pure-acoustic
interpretations) the second time derivative of a monopole-like loading;
recovering the dimensionless f_c therefore requires two time integrations
(and detrending to remove integration constants). This mapping ensures that
after substitution into the coupled equation, and its derivatives
reproduce the originally intended physical pressure / traction and
volume-change effects.
Conversely, once you have a dimensionless f_c(t) (coupled interpretation):
| Quantity (pure acoustic meaning) | Recover from f_c(t) | Comment |
|---|---|---|
Volume injection rate q(t) | q(t) = - d f_c / dt | Central differences recommended |
Local pressure p(t) | p(t) = - ρ c^2 f_c(t) | Near-source approximation |
Divergence force density g(t) | g(t) = - ρ d^2 f_c / dt^2 | Central differences recommended |
Implementation tips:
φ.Design guidance:
f_c(t) and recomputing derived
fields.In the elastic case, Salvus solves the general elastic wave equation. For the analysis of units involved in the source term specifically, let's limit ourselves to purely elastic linear media. The strong form of this equation is:
Here is density, is displacement, and represents an external forcing term. The time and space dependency of these last three terms is taken as implicit to simplify notation. is a fourth-order tensor characterizing the stiffness of the medium, and the symbol denotes a contraction over adjacent indices.
In the elastic case, it is a little less flexible to substitute units of the applied force. Let's see what units are present in the equation when one defines as displacement in meters:
| Symbol | Quantity (Unit) |
|---|---|
| Density () | |
| Displacement () | |
| Elasticity () | |
| Time derivative, variation per second () | |
| Spatial derivative, variation per meter () |
Let's substitute these units into the equation, and figure out in what units the source term should be. In this exercise, we forego the dimensionalities of the quantities.
Simplifying and using , where denotes force in units of Newtons gives:
So, finally using :
Which dictates that our source term needs to be interpreted in the strong form as a source term with units .
VectorPoint3D)One often desires point sources to be injected in a wavefield simulation. As a
case study, we look at how to interpret the units of VectorPoint3D. The
signature of creating this object is as follows:
class VectorPoint3D: def __init__( self, x: float, y: float, z: float, fx: float, fy: float, fz: float, ... ): ...
To know in what units the source_time_function of these
sources should be interpreted, we start with the formulation of this point
source as injected into the strong form:
$$ f(\mathbf{x}, t) = \text{stf}(t) \, \mathbf{F} \,\delta(\mathbf{x}) $$
In this definition, the vector fx, fy, fz allows one
to orient (and scale) the source in any direction. The symbol
indicates the (multidimensional) Dirac delta function.
The units of the Dirac delta function should be interpreted to collapse to dimensionless if integrated over its argument. In this case, we would integrate over three spatial coordinates, giving it the units . If now we interpret the orientation vector as dimensionless, the units of are found in the following way:
Yielding that should be interpreted as Newtons when is dimensionless. More generally, only the product is physically constrained: it must carry units of Newtons. How you split amplitude between the STF and is a user choice (see the summary table below).
MomentTensorPoint3D)Moment tensor sources are central to seismology. Unlike vector point sources,
which represent monopole forces, moment tensor sources represent force couples
(dipoles). As a case study, we look at how to interpret the units of
MomentTensorPoint3D. The signature of creating this object is as follows:
class MomentTensorPoint3D: def __init__( self, x: float, y: float, z: float, mxx: float, myy: float, mzz: float, myz: float, mxz: float, mxy: float, ... ): ...
The six parameters mxx, ..., mxy are the independent components of the
symmetric moment tensor in Voigt notation. The symmetry reduces the nine tensor components to six independent ones.
A moment tensor point source enters the strong form of the elastic wave equation as the negative divergence of a localized stress-like tensor:
Physically, the gradient of the delta function represents a force couple: two equal and opposite point forces infinitesimally close together. The tensor specifies the orientation and relative strength of these couples.
To determine the units of , we need the units of . We already established that in three dimensions. Its spatial derivative picks up one additional :
$$ [\partial_j \delta(\mathbf{x})] = \text{m}^{-4} $$
We showed earlier that the force density in the elastic strong form satisfies . Interpreting as a dimensionless orientation/scaling tensor:
Yielding:
$$ [\text{stf}(t)] = \text{N} \cdot \text{m} $$
The source time function of a moment tensor source should therefore be interpreted in units of Newton-meters (when is dimensionless), i.e., the physical unit of seismic moment. This is consistent with the seismological convention where the scalar seismic moment has units of .
As with all elastic sources, only the product is physically constrained: it must carry units of . If the moment tensor components encode both a focal mechanism and a scalar amplitude, the STF may be correspondingly dimensionless.
In seismology, the moment tensor is often decomposed as:
where is the scalar seismic moment (), is the unit-normalized mechanism tensor (with ), and is the normalized source time function (dimensionless, peak value 1). In Salvus's parameterization, setting the moment tensor weights to and scaling the STF amplitude to reproduces this decomposition. Alternatively, one can absorb into the weights and use a unit-amplitude STF-only the product matters.
In 2-D, the simulation domain represents an infinite out-of-plane extent. Salvus uses a plane-strain approximation in 2-D, The 2-D Dirac delta satisfies , leading to . The force density constraint is unchanged (), so:
$$ [\text{stf}(t)]_{\text{2D}} = \text{N} $$
A "2-D moment tensor" STF therefore has units of Newtons, not Newton-meters. Physically, this is the moment per unit out-of-plane length (). The same dimensional reduction applies to all 2-D sources: a 2-D point source is a 3-D line source extending infinitely in the out-of-plane direction.
Note that the different amplitude decay and dispersion relations are thus expected in 2-D vs. 3-D.
VectorGradientPoint3D)The VectorGradientPoint3D source generalizes the moment tensor source by
relaxing the symmetry constraint. Where a moment tensor has 6 independent
components in 3-D (symmetric ), a vector gradient source has
independent components (the full, generally non-symmetric, tensor
)-giving 9 components in 3-D and 4 in 2-D:
class VectorGradientPoint3D: def __init__( self, x: float, y: float, z: float, gxx: float, gxy: float, gxz: float, gyx: float, gyy: float, gyz: float, gzx: float, gzy: float, gzz: float, ... ): ...
The injection mechanism is identical to the moment tensor case:
The unit analysis follows accordingly:
The antisymmetric part of (i.e., , which has no counterpart in the symmetric moment tensor) represents rotational force couples that produce a net torque but no net moment. This is useful for modeling certain types of dislocations, CLVD (compensated linear vector dipole) decompositions, or other non-double-couple source mechanisms.
Salvus supports five source mechanisms: Scalar, ScalarGradient, Vector,
MomentTensor, and VectorGradient. Of these, only Vector, MomentTensor,
and VectorGradient are valid in elastic elements (the solver enforces this
consistency check). The Scalar and ScalarGradient mechanisms are
acoustic-only and their unit interpretations depend on which acoustic
convention is chosen (see the acoustic section above). The table below collects
the STF units for all three elastic point source types, in both 2-D and 3-D:
| Source type | STF units (3-D) | STF units (2-D) | Physical interpretation |
|---|---|---|---|
VectorPoint | Force (monopole) | ||
MomentTensorPoint | Seismic moment (symmetric dipole) | ||
VectorGradientPoint | Generalized moment (non-symmetric dipole) |
Salvus does not enforce a particular split between the STF and the spatial
weights. Only their product is physically meaningful,
and it must carry the units listed in the table. The derivations above assume
dimensionless weights for clarity, so that the STF alone carries the full
physical amplitude. In practice, many users specify the weights in physical
units (e.g., mxx in for a 3-D moment tensor), in
which case the STF is correspondingly dimensionless. Either convention is valid
as long as it is applied consistently.
Note on interpretation dependence: unlike the acoustic case, where the units of the STF depend on which interpretation (A, B, or C) of the scalar potential is chosen, the elastic case has a unique state-variable convention: is displacement in meters. There is no analogous freedom. The units listed above therefore hold unconditionally for any elastic simulation in SI units.
When an acoustic region adjoins an elastic region within the same simulation, the interface conditions uniquely determine the permissible scaling of the acoustic potential. Across any acoustic–elastic boundary with outward normal (Nissen-Meyer et al., 2007, equation 46):
With elastic displacement and stress , these two relations force and . Thus only acoustic simulations' Interpretation C is consistent; A and B would break continuity. Practical recipe for coupled simulations:
phi_tt to obtain pressure: pressure = -phi_tt.gradient-of-phi and multiply its components by 1/rho to get
displacement components.Why is there a minus sign in $p = -\phi{tt}?_ The sign follows directly from the stress balance with our positive pressure convention; in the frequency domain $\phi_{tt} \rightarrow -\omega^2 \phi giving the expected 180° phase relative to .
What are the units of the acoustic source term now? Dimensionless in the strong form; any physical forcing is mediated through traction continuity or is scaled so that resulting has .
Can I still use a volume injection rate source in a coupled run? No. That scaling would force inconsistent interface units.