This repo contains GPU-optimized Python code to compute the Green's functions from single-sided surface reflectivity data. marchenko_gpu_optimized.ipynb computes the Marchenko Green's functions and focusing functions from the input reflectivity, direct arrival, filter (theta), and ground-truth Green’s functions (for comparison). marchenko_imaging_gpu_optimized.ipynb implements Marchenko-based imaging using the decomposed Green’s functions, specifically the upgoing Green’s function Angus Lomas and Andrew Curtis
The Marchenko method reconstructs the Green's functions (both upgoing and downgoing) between a virtual source and surface receivers using single-sided reflection data and an estimate of the direct arrival.
The Marchenko method involves several key equations to estimate Green's functions from seismic reflection data. Here are the formulas corresponding to each section of the code below:
- Where:
-
$T_d$ = Direct arrival wavefield (one-way travel time) from the subsurface focusing point (virtual source) to the surface receivers -
$T_d(\mathbf{x}_r, \mathbf{x}_f, -t)$ is read as the time-reversed direct arrival at the receiver location$\mathbf{x}_r$ from the virtual source$\mathbf{x}_f$ in the subsurface. Other notations in this note can be read in a similar way. -
$\mathbf{x}_r$ = Receiver position -
$\mathbf{x}_f$ = Focal point position
-
- Implementation: Time reversal of direct arrival (Time-reversed direct arrival)
- Where:
-
$R$ = Reflection response -
$\Theta$ = Time-window function. It is a muting filter that removes acausal or undesired energy (e.g., above the direct arrival time). -
$\ast$ = Convolution operator
-
- Implementation: Convolution of reflection response with
$f_0^+$ . In frequency domain, this becomes a matrix product.
For k = 1 to N iterations:
- Downgoing component:
For the first iteration, for instance,
- Where:
$\mathbf{x}_f$ : focusing point ,$\mathbf{x}_s$ : source location (or source side in reflection response), and$\mathbf{x}_r$ : receiver location (or receiver side in reflection response)
Implementation: Convolve reflectivity and (time-reversed) fk_minus
- Updating upgoing function:
- Downgoing function update:
- Where
$k$ = Iteration index
Note: In numerical implementations, the convolution is often performed in the frequency domain. which is a simple multiplication
The upgoing Green's Function can also be extracted by:
Where:
-
$G(t)$ : Total Green’s function -
$G^+(t)$ : Previously computed downgoing part
This is derived from the assumption that the total Green's function is a sum of its downgoing and upgoing parts.
For whatever reason, you may choose to design your own taper function using the function below (or a modified function of it) instead of the built-in tukey in the SciPy library.
- Tapering Window (Tukey):
more compact
- Where
$\alpha$ = taper fraction (tp)
| Window Type | Best For | Spectral Leakage |
|---|---|---|
| Tukey | General purpose with controllable tapering | Moderate |
| Hann | General purpose | Good |
| Hamming | Narrowband analysis | Fair |
| Rectangular | Transient detection | Poor |
The Tukey window provides a good compromise between frequency resolution and spectral leakage control, especially when you need to adjust the amount of tapering for your specific application. The Tukey function above is controlled by the alpha parameter. The alpha parameter controls the transition:
alpha=0: Equivalent to a rectangular window (no tapering)alpha=1: Equivalent to a Hann window (full cosine taper)
- Pre-direct Arrival Mute:
- Removes artifacts before first arrival
- Ensures consistent amplitude scaling
This is typically computed via direct forward modeling (e.g., finite difference, finite element, or Kirchhoff modeling) using the known subsurface model
Where:
-
$c(x, z)$ : Velocity model -
$\delta$ : Dirac delta function at the source location$(x_s, z_s)$
This equation ensures that true serves as the ground truth against which the retrieved Green’s functions are compared.
| Math Symbol | Code Variable | Description |
|---|---|---|
sg |
Reflection response | |
direct |
Direct arrival | |
theta |
Time window function (causality constraint) | |
fk_plus |
Downgoing focusing function | |
fk_minus |
Upgoing focusing function | |
g_plus |
Downgoing Green's function | |
g_minus |
Upgoing Green's function | |
tap |
Taper window | |
tp |
Taper fraction | |
ns |
Number of receivers | |
- |
Receiver position vector | |
- |
Focal point position vector (focusing point) | |
- |
Source position vector | |
- |
Measurement Surface | |
- |
Convolution Operator | |
itr |
Iteration index | |
- |
time |
These equations implement the Marchenko method to retrieve Green's functions from single-sided reflection measurements, enabling redatuming without detailed velocity model information. The iterative scheme progressively removes artifacts caused by internal multiples.
- The direct arrival
$T_d$ gives$f_0^+$ . - Using
$f_0^+$ and the reflection response$R$ , we compute$f_0^-$ . - We iteratively update
$f_k^+$ and$f_k^-$ using$R$ and a time-reversed convolution process. - The final Green's functions
$G^-$ and$G^+$ are computed from these focusing functions and$R$ , from which total Green's function is constructed.
In summary, Marchenko methods allow for the reconstruction of
- Surface measurements (
$\mathbf{x}_s$ and$\mathbf{x}_r$ at the surface) - An estimate of the direct arrival
- A time window (causality constraint)
The code below implements Marchenko-based imaging using decomposed Green’s functions, specifically the upgoing Green’s function
The Marchenko zero-lag cross-correlation imaging condition is represented by this:
where:
-
$I(\mathbf{x}_f)$ is the image at the focusing location,$\mathbf{x}_f$ -
$f_0^+(\mathbf{x}_f, \mathbf{x}_r, t)$ : This is the downgoing focusing function focused at the focal point. It is time-reversed direct arrival from the focal point to the receiver -
$g^-(\mathbf{x}_r, \mathbf{x}_f, t)$ : upgoing Green’s function from the focal point to the receiver -
$\sum_{\mathbf{x}_r} \int dt$ : summation over receivers and time - The dot product implies zero-lag temporal correlation
This is equivalent to:
- Where:
-
$T_d$ = Direct arrival wavefield (one-way travel time) from the subsurface focusing point (virtual source) to the surface receivers -
$T_d(\mathbf{x}_r, \mathbf{x}_f, -t)$ is read as the time-reversed direct arrival at the receiver location$\mathbf{x}_r$ from the virtual source$\mathbf{x}_f$ in the subsurface. -
$\mathbf{x}_r$ = Receiver position -
$\mathbf{x}_f$ = Focal point position
-
- Implementation: Time reversal of direct arrival (Time-reversed direct arrival)
So,
This imaging condition is a cross-correlation-type condition, but instead of using raw reflection data, it uses the Marchenko-retrieved upgoing Green’s function



