![]() |
(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