The theory for this section is based on this paper:
Zhou, X.-Y., Chang, X., Wang, Y.-B., Wen, X.-T., You, J.-C., & Sun, C. (2022). Non-artifact vector P- and S-wave separation for elastic reverse time migration. Petroleum Science, 19(6), 2695–2710. https://doi.org/10.1016/j.petsci.2022.08.006
One can separate the P- and S-wave components of a wavefield by
taking the divergence and the curl of the displacement field. An easy way to do
this in Salvus is to output the gradient-of-displacement and then use the
components from the resulting tensor to construct the divergence and curl
manually.
The following is an example demonstrating such a wavefield separation:
2D Separation
The gradient of the displacement field ∇u can be computed
using
where the indices of ui represent which component of the output field to
select.
To get the divergence of the displacement field (P-wave component), simply apply
∇⋅u=∂xux+∂yuy=u0+u3.
Similarly, to get the curl of the displacement field (S-wave component), use
∇×u=∂xuy−∂yux=u2−u1.
Practical Advice
The wavefield which is computed during a Salvus simulation can be
opened using the
WavefieldOutput.
Note that the regularly gridded wavefield output has dimensions
[n_time_slices, n_components, n_x, n_y]
. The subscripts for
u
effectively represent which dimension in the wavefield output should
be extracted along
axis=1
.
For example, the divergence of the wavefield output could be
obtained using something anaologous to
div_u = wavefield_output[:, 0, :, :] + wavefield_output[:, 3, :, :]
3D Separation
The same general procedure applies as in the 2D case, but now considering the
additional z-component.