(9) | ||
(10) |
Given data on a nonzero-offset section, we seek to convert it to a zero-offset section. Conceptually the simplest approach is to first migrate the constant offset data with an ellipsoid push operator and then take each point on the ellipsoid and diffract it out to a zero-offset hyperbola with a push operator .The product of push operators is known as Rocca's smile. This smile operator includes both normal moveout and dip moveout. (We could say that dip moveout is defined by Rocca's smile after restoring the normal moveout.)
To visualize the Rocca smile operator more clearly, I broke the continuous ellipsoid into a sequence of dots so you would be able to see individual hyperbolas as well their superposition. This is shown in Figure 1.
frocca
Figure 1 Rocca's smile is a superposition of hyperbolas, each with its top on an ellipse. |
Because of the approximation ,we have four different ways to express the Rocca smile:
(11) |
sergey
Figure 2 The adjoint of Rocca's smile is a superposition of flattened hyperbolas, each with its top on a circle. |
It is worth noticing that the concepts in this section are not limited to constant velocity but apply as well to v(z). The circle operator presents some difficulties, however. The circle operator, a push from t to z, requires us to solve for z given t. Starting from the Dix moveout approximation, we can directly solve for but finding is an iterative process at best. At worst, when the velocity gradient is abrupt enough, is multivalued. We often see this multivalued function on raw data.
# Flat topped hyperbolas and constant-offset section migration # subroutine flathyp( adj, add, vel , h, t0,dt,dx, modl,nt,nx, data) integer ix,iz,it,ib, adj, add, nt,nx real t, amp, z,b, vel(nt), h, t0,dt,dx, modl(nt,nx),data(nt,nx) call adjnull( adj, add, modl,nt*nx, data,nt*nx) do ib= -nx, nx { b = dx * ib # b = midpt separation y-y0 do iz= 2, nt { z = t0 + dt * (iz-1) # z = zero-offset time t = .5 * ( sqrt( z**2 +((b-h)*2/vel(iz))**2) + sqrt( z**2 +((b+h)*2/vel(iz))**2) ) it = 1.5 + (t - t0) / dt if( it > nt ) break amp = (z/t)/ sqrt(t) do ix= max0(1, 1-ib), min0(nx, nx-ib) if( adj == 0 ) data(it,ix+ib)= data(it,ix+ib) + modl(iz,ix ) * amp else modl(iz,ix )= modl(iz,ix ) + data(it,ix+ib) * amp } } return; end