(1) |

(2) |

From Equations (1) and (2), we can write that

(3) | ||

(4) |

Equation (3) represents a general form of the
*main* mixed-domain downward-continuation operator.
This operator can be broken up into a group of *functional*
operators as follows:

- Wavefield continuation using mixed-domain phase-shift:
(5) - Imaging condition which transforms the wavefield into an image
at any given depth level:
(6)

For Equations (5) and (6),
we can distinguish 5 functional operators.
Each operator is initialized with a call to a function (`XXin`)
and executed with a call to another function (`XXop`).
In a typical example, the functional operators perform the following tasks:

- 1.
**Wavefield continuation operator**(`WCin`&`WCop`)Continues the wavefield between two depth levels, using one or more reference slownesses.

**Interface**:`integer function WCop(wfld,iws,izs,ith,FKop,FXop) result(st)``complex, dimension(:,:,:,:,:), pointer :: wfld`(wavefield slice)`integer :: iws`(index of the frequency slice)`integer :: izs`(index of the depth slice)`integer :: ith`(thread number)`FKop`::*f*-*k*operator`FXop`::*f*-*x*operator

**Implemented examples**:`weimwc1`(mixed-domain wavefield continuation operator for 1 reference slowness)`weimwcN`mixed-domain wavefield continuation operator for*N*reference slownesses)

- 2.
**Slowness operator**(`SLin`&`SLop`)Selects the number and values of the reference slownesses (

*s*_{o}), and sets-up the interpolation map between the wavefields continued using the various reference slownesses.**Interface**:`integer function SLop() result(st)`**Implemented examples**:`weislo1`(slowness selector for 1 reference slowness)`weisloN`(slowness selector for*N*reference slownesses)

- 3.
(*f*-*k*operator`FKin`&`FKop`)Performs phase-shift using the full 3-

*D*DSR equation Claerbout (1985), the common-azimuth equation Biondi and Palacharla (1996), or the offset plane-waves equation Mosher and Foster (2000).**Interface**:`integer function FXop(iws,izs,ifk,ith,wfld) result(st)``integer :: iws`(index of the frequency slice)`integer :: izs`(index of the depth slice)`integer :: ifk`(index of the reference velocity)`integer :: ith`(thread number)`complex, dimension(:,:,:,:,:), pointer :: wfld`(wavefield slice)

**Implemented examples**:`weiwem`(3-*D*prestack or 3-*D*offset plane-waves phase-shift)`weicam`(3-*D*common-azimuth phase-shift)

- 4.
(*f*-*x*operator`FXin`&`FXop`)Performs phase shift that accounts for lateral slowness variation. Examples of (

*f*-*x*) operators include but are not limited to split-step Fourier Stoffa et al. (1990), local Born Fourier or local Rytov Fourier Huang et al. (1999), Fourier Finite-Difference Ristow and Ruhl (1994), generalized screen propagators Le Rousseau and de Hoop (1998), etc.**Interface**:`integer function FXop(iws,izs,ifk,ith,wfld) result(st)``integer :: iws`(index of the frequency slice)`integer :: izs`(index of the depth slice)`integer :: ifk`(index of the reference velocity)`integer :: ith`(thread number)`complex, dimension(:,:,:,:,:), pointer :: wfld`(wavefield slice)

**Implemented example**:`weissf`(Split-step correction)

- 5.
**Imaging operator**(`IGin`&`IGop`)Performs imaging in the offset-domain or the offset ray-parameter domain. This operator can also incorporate amplitude-preserving corrections.

**Interface**:`integer function IGop(wfld,iws,ith) result(st)``complex, dimension(:,:,:,:,:), pointer :: wfld`(wavefield slice)`integer :: iws`(index of the frequency slice)`integer :: ith`(thread number)

**Implemented examples**:`weihcig`(Offset-domain common image-gathers)`weipcig`(Offset ray-parameter*p*_{h}common image-gathers)

6/8/2002