module velsimp {                                # simple velocity transform 
real,pointer,dimension(:) :: offset
integer :: nt,nx,nv,harold
real    :: t0,dt,v0,dv
#%_init (t0,dt,offset,v0,dv, nt,nx,nv)
#%_lop (modl (nt,nv), data (nt,nx))
integer iz,ix,iv,i,stat
real x,v,sx,t,z,ft,gt,it,wt


do iv= 1, nv {  v = v0 + (iv-1) * dv             # velocity
do ix= 1, size(offset) {  x = offset(ix)         # offset
do iz= 2, nt {  z = t0 + (iz-1) * dt             # time
        sx =  abs( x/v)                        # normalized offset
        t  = sqrt( z * z + sx * sx)              # NMO
        it=1.5+(t-t0)/dt; i=it; it=i
        if ( it >= nt) exit                       # out of the range
	wt=(z/t)/sqrt(t); ft=it-i   ; gt=1.-ft    # weighting
	if(adj) modl(iz,iv)+= data(i,ix)*gt*wt+data(i+1,ix)*ft*wt
	else{		
          data(i,ix)+=modl(iz,iv)*gt*wt
          data(i+1,ix)+=wt*ft*modl(iz,iv)
      }
 }}}
}
