pylops_mpi.waveeqprocessing.MPIMDC#

pylops_mpi.waveeqprocessing.MPIMDC(G, nt, nv, nfreq, dt=1.0, dr=1.0, twosided=True, fftengine='numpy', saveGt=True, conj=False, usematmul=False, prescaled=False, base_comm=<mpi4py.MPI.Intracomm object>)[source]#

Multi-dimensional convolution.

Apply multi-dimensional convolution between two datasets. Model and data should be provided after flattening 2- or 3-dimensional arrays of size \([n_t \times n_r (\times n_{vs})]\) and \([n_t \times n_s (\times n_{vs})]\) (or \(2*n_t-1\) for twosided=True), respectively.

Parameters:
Gnumpy.ndarray

Multi-dimensional convolution kernel in frequency domain of size \([n_{fmax} \times n_s \times n_r]\)

ntint

Number of samples along time axis for model and data (note that this must be equal to 2*n_t-1 when working with twosided=True.

nvint

Number of samples along virtual source axis

dtfloat, optional

Sampling of time integration axis

drfloat, optional

Sampling of receiver integration axis

twosidedbool, optional

MDC operator has both negative and positive time (True) or only positive (False)

fftenginestr, optional

Engine used for fft computation (numpy or fftw)

saveGtbool, optional

Save G and G^H to speed up the computation of adjoint of pylops.signalprocessing.Fredholm1 (True) or create G^H on-the-fly (False) Note that saveGt=True will be faster but double the amount of required memory

conjstr, optional

Perform Fredholm integral computation with complex conjugate of G

usematmulbool, optional

Use numpy.matmul (True) or for-loop with numpy.dot (False) in pylops.signalprocessing.Fredholm1 operator. Refer to Fredholm1 documentation for details.

prescaledbool, optional

Apply scaling to kernel (False) or not (False) when performing spatial and temporal summations. In case prescaled=True, the kernel is assumed to have been pre-scaled when passed to the MDC routine.

base_commmpi4py.MPI.Comm, optional

MPI Base Communicator. Defaults to mpi4py.MPI.COMM_WORLD.

Raises:
ValueError

If nt is even and twosided=True

See also

MDD

Multi-dimensional deconvolution

Notes

The so-called multi-dimensional convolution (MDC) is a chained operator [1]. It is composed of a forward Fourier transform, a multi-dimensional integration, and an inverse Fourier transform:

\[y(t, s, v) = \mathscr{F}^{-1} \Big( \int_S G(f, s, r) \mathscr{F}(x(t, r, v)) dr \Big)\]

which is discretized as follows:

\[y(t, s, v) = \mathscr{F}^{-1} \Big( \sum_{i_r=0}^{n_r} (\sqrt{n_t} * d_t * d_r) G(f, s, i_r) \mathscr{F}(x(t, i_r, v)) \Big)\]

where \((\sqrt{n_t} * d_t * d_r)\) is not applied if prescaled=True.

This operation can be discretized and performed by means of a linear operator

\[\mathbf{D}= \mathbf{F}^H \mathbf{G} \mathbf{F}\]

where \(\mathbf{F}\) is the Fourier transform applied along the time axis and \(\mathbf{G}\) is the multi-dimensional convolution kernel.

[1]

Wapenaar, K., van der Neut, J., Ruigrok, E., Draganov, D., Hunziker, J., Slob, E., Thorbecke, J., and Snieder, R., “Seismic interferometry by crosscorrelation and by multi-dimensional deconvolution: a systematic comparison”, Geophysical Journal International, vol. 185, pp. 1335-1364. 2011.

Examples using pylops_mpi.waveeqprocessing.MPIMDC#

Multi-Dimensional Convolution

Multi-Dimensional Convolution

Multi-Dimensional Deconvolution

Multi-Dimensional Deconvolution