Gradient-based inversion methods often require the use of adjoint operators Claerbout (1994). In programming an operator and its adjoint, we generally loop over the same space independent of whether we desire the forward or adjoint operation. This means that in one of the two cases a subroutine/operator loops over its input space and in the other it loops over its output space. For many operators, this detail can have a significant negative effect on the output. For example, we can neither stack reflections nor collapse diffractions perfectly even with exact velocities. A physical explanation for this shortcoming is found in Ji 1992: the wave equation is a unitary operator that we measure in continuous space. However, our operators must work in discrete and finite space. An important factor in approximating a continuous space with a discrete one is evenness of sampling, and we will see that designing operators to loop over input or output space has a major impact on how the output of the operator samples the input.

For wave-equation based operators,
it seems always preferable to loop over the output
space. This means that each bin in the output space scans the inputs
for the appropriate value or values to *pull* in. The number of inputs per
output varies smoothly across the output space. Looping the other way,
*pushing* values from input bins into whatever outputs are appropriate, carries
with it the inevitability that the number of input values per output will
not be a smooth function, and the possibility that it may
actually be zero in some areas. However, looping over inputs is a natural consequence of
using adjoints to find the gradient in an inverse problem, and so seems more or less unavoidable.

The question arises whether it is better to use an approximate adjoint, which
will not generally provide the exact gradient direction for the inversion, but which
will have smoothly sampled outputs in both the forward and adjoint operations.
We can recode our operators so that they loop over the output space in
both the forward and adjoint directions. Claerbout 1995 labels
such an operator a *pull adjoint*.
Such an operator does not precisely fit our conjugate gradient optimization
theory, but is attractive because it more closely approximates an
operator in a continuum, and is closer to being a unitary operator like
the wave equation.

In this paper, I describe some of the details behind implementing pull adjoints, and present examples which highlight their 0.

11/12/1997