The adjoint to this operation is to begin from a model that is identical to the zero-offset trace and spray this trace to all offsets. There is no ``official'' definition of which operator of an operator pair is the operator itself and which is the adjoint. On the one hand, I like to think of the modeling operation itself as the operator. On the other hand, the industry machinery keeps churning away at many processes that have well-known names, so people often think of one of them as the operator. Industrial data-processing operators are typically adjoints to modeling operators.
Figure 2 illustrates the operator pair, consisting
of spraying out a zero-offset trace (the model) to all offsets
and the adjoint of the spraying,
which is stacking.
The moveout and stack operations are in subroutine stack0().
subroutine stack0( adj, add, slow, t0,dt, x0,dx, nt,nx, stack, gather)
integer ix, adj, add, nt,nx
real x, slow(nt), t0,dt, x0,dx, stack(nt), gather(nt,nx)
call adjnull( adj, add, stack,nt, gather,nt*nx)
do ix= 1, nx {
x = x0 + dx * (ix-1)
call nmo0( adj, 1, slow, x, t0,dt, nt, stack, gather(1,ix))
}
return; end
Let denote NMO, and let the stack be
defined by invoking stack0() with the adj=1 argument.
Then is the modeling operation
defined by invoking stack0() with the adj=0 argument.
Figure 2 illustrates both.
stack
Figure 2 Top is a model trace . Center shows the spraying to synthetic traces, . Bottom is the stack of the synthetic data, . |
Notice the roughness on the waveforms caused by different numbers of points landing in one place. Notice also the increase of AVO (amplitude versus offset) as the waveform gets compressed into a smaller space. Finally, notice that the stack is a little rough, but the energy is all in the desired time window.
We notice a contradiction of aspirations. On the one hand, an operator has smooth outputs if it ``loops over output space'' and finds its input where ever it may. On the other hand, it is nice to have modeling and processing be exact adjoints of each other. Unfortunately, we cannot have both. If you loop over the output space of an operator, then the adjoint operator has a loop over input space and a consequent roughness of its output.