fracspy.modelling.kirchhoff.Kirchhoff#
- class fracspy.modelling.kirchhoff.Kirchhoff(z, x, t, recs, vel, wav, wavcenter, y=None, mode='eikonal', wavfilter=False, trav=None, engine='numpy', dtype='float64', name='K')[source]#
Kirchhoff single-sided, demigration operator.
Kirchhoff-based demigration/migration operator for single-sided propagation (from subsurface to surface). Uses a high-frequency approximation of Green’s function propagators based on
trav.- Parameters:
- z
numpy.ndarray Depth axis
- x
numpy.ndarray Spatial axis
- t
numpy.ndarray Time axis for data
- recs
numpy.ndarray Receivers in array of size \(\lbrack 2 (3) \times n_r \rbrack\) The first axis should be ordered as (
y,)x,z.- vel
numpy.ndarrayorfloat Velocity model of size \(\lbrack (n_y\,\times)\; n_x \times n_z \rbrack\) (or constant)
- wav
numpy.ndarray Wavelet.
- wavcenter
int Index of wavelet center
- y
numpy.ndarray Additional spatial axis (for 3-dimensional problems)
- mode
str, optional Computation mode (
analytic,eikonalorbyot, see Notes for more details)- wavfilter
bool, optional Apply wavelet filter (
True) or not (False)- trav
numpy.ndarrayortuple, optional Traveltime table of size \(\lbrack (n_y) n_x n_z \times n_r \rbrack\) (to be provided if
mode='byot').- engine
str, optional Engine used for computations (
numpyornumba).- dtype
str, optional Type of elements in input array.
- name
str, optional Name of operator (to be used by
pylops.utils.describe.describe)
- z
- Attributes:
- Raises:
- NotImplementedError
If
modeis neitheranalytic,eikonal, orbyot
Notes
The Kirchhoff single-sided demigration operator synthesizes seismic data given a propagation velocity model \(v\) and a source distribution \(m\). In forward mode:
\[d(\mathbf{x_r}, \mathbf{x_s}, t) = \widetilde{w}(t) * \int_V G(\mathbf{x_r}, \mathbf{x_s}, t) m(\mathbf{x_s})\,\mathrm{d}\mathbf{x_s}\]where \(m(\mathbf{x_s})\) represents the source distribution at every location in the subsurface, \(G(\mathbf{x_r}, \mathbf{x_s}, t)\) is the Green’s function from source-to-receiver, and finally \(\widetilde{w}(t)\) is a filtered version of the wavelet \(w(t)\) [1] (or the wavelet itself when
wavfilter=False). In our implementation, the following high-frequency approximation of the Green’s functions is adopted:\[G(\mathbf{x_r}, \mathbf{x_s}, \omega) = e^{j \omega t(\mathbf{x_r}, \mathbf{x_s})}\]where \(t(\mathbf{x_r}, \mathbf{x})\) is the traveltime and no amplitude term is applied
Depending on the choice of
modethe traveltime and amplitude of the Green’s function will be also computed differently:mode=analyticormode=eikonal: traveltimes are computed for every source-receiver pair and the Green’s functions are implemented from traveltime look-up tables, placing the source distribution values at corresponding source-to-receiver time in the data.byot: bring your own tables. The traveltime table is provided directly by user usingtravinput parameter.
Finally, the adjoint of the demigration operator is a migration operator which projects the data in the model domain creating an image of the source distribution.
[1]Safron, L. “Multicomponent least-squares Kirchhoff depth migration”, MSc Thesis, 2018.
Methods
__init__(z, x, t, recs, vel, wav, wavcenter)adjoint()apply_columns(cols)Apply subset of columns of operator
cond([uselobpcg])Condition number of linear operator.
conj()Complex conjugate operator
div(y[, niter, densesolver])Solve the linear problem \(\mathbf{y}=\mathbf{A}\mathbf{x}\).
dot(x)Matrix-matrix or matrix-vector multiplication.
eigs([neigs, symmetric, niter, uselobpcg])Most significant eigenvalues of linear operator.
matmat(X)Matrix-matrix multiplication.
matvec(x)Matrix-vector multiplication.
reset_count()Reset counters
rmatmat(X)Matrix-matrix multiplication.
rmatvec(x)Adjoint matrix-vector multiplication.
todense([backend])Return dense matrix.
toimag([forw, adj])Imag operator
toreal([forw, adj])Real operator
tosparse()Return sparse matrix.
trace([neval, method, backend])Trace of linear operator.
transpose()