# 1D time extrapolation modeling ( conj=0 ) # and reverse time migration ( conj=1 ) # subroutine rt1d( conj, dt,dz, nt,nz, modl, data, v) integer conj, nt,nz, it, iz real modl(nz), data(nt), v(nz) real dt,dz, dtz, a, a1,a2,a3 temporary real tmodl(nz,3)call conjnull( conj, 0, modl,nz, data,nt ) call zero( 3*nz, tmodl)
if (conj==0) { do iz = 1, nz { tmodl(iz,1) = 0. tmodl(iz,2) = modl(iz) } data(1) = modl(1) do it = 2, nt { do iz = 2, nz-1 { a = (v(iz)*dt/dz)**2. tmodl(iz,3) = a*(tmodl(iz+1,2) - 2.*tmodl(iz,2)+tmodl(iz-1,2))_ - tmodl(iz ,1) + 2.*tmodl(iz,2) } a = (v(1)*dt/dz)**2. tmodl(1,3) = a*(tmodl(2,2) - 2.*tmodl(1,2))_ - tmodl(1,1) + 2.*tmodl(1,2) a = (v(nz)*dt/dz)**2. tmodl(nz,3) = a*(tmodl(nz-1,2) - 2.*tmodl(nz,2))_ - tmodl(nz ,1) + 2.*tmodl(nz,2) data(it) = tmodl(1,3) do iz = 1, nz { tmodl(iz,1) = tmodl(iz,2) tmodl(iz,2) = tmodl(iz,3) } } } else { dtz= (dt/dz)**2. tmodl(1,1) = data(nt); tmodl(1,2) = data(nt-1) tmodl(1,3) = data(nt-2) do it = nt-1, 1, -1 { do iz = 1, nz tmodl(iz,3) = tmodl(iz,3) - tmodl(iz,1) do iz = 2, nz-1{ a1 = v(iz-1)*v(iz-1)*dtz; a2 = v(iz)*v(iz)*dtz a3 = v(iz+1)*v(iz+1)*dtz tmodl(iz,2) = a1*tmodl(iz-1,1) - 2.*a2*tmodl(iz,1) + a3*tmodl(iz+1,1)_ + 2.*tmodl(iz ,1) + tmodl(iz,2) } a2 = v(1)*v(1)*dtz; a3 = v(2)*v(2)*dtz tmodl( 1,2) = a3*tmodl(2,1) - 2.*a2*tmodl(1,1)_ + 2.*tmodl(1,1) + tmodl(1,2) a1 = v(nz-1)*v(nz-1)*dtz; a2 = v(nz)*v(nz)*dtz tmodl(nz,2) = a1*tmodl(nz-1,1) - 2.*a2*tmodl(nz,1)_ + 2.*tmodl(nz ,1) + tmodl(nz,2)
do iz = 1, nz { tmodl(iz,1) = tmodl(iz,2) tmodl(iz,2) = tmodl(iz,3) }
if( it > 2 ) { do iz = 1, nz tmodl(iz,3) = 0. tmodl( 1,3) = data(it-2) } } do iz = 1, nz { modl(iz) = tmodl(iz,1) } }
return; end