Moveout, velocity, and stacking |
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 4.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().
for (ix=0; ix < nx; ix++) { nmo0_set(x0 + dx * ix); /* set offset */ nmo0_lop( adj, true, nt, nt, stack, gather+ix*nt); } |
stack
Figure 2. Top is a model trace . Center shows the spraying to synthetic traces, . Bottom is the stack of the synthetic data, . | |
---|---|
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.
Moveout, velocity, and stacking |