function mov3d_hyper_const (inv_map,inv_amp,inp_geom,out_geom, &
first_samp, last_samp, map, amp, inp_cent_coord) result (stat)
logical :: inv_map,inv_amp
integer :: stat
type (seis3d_geom_type), intent(in) :: inp_geom
type (seis3d_geom_type), intent(in) :: out_geom
integer, dimension(:,:), intent(out) :: first_samp,last_samp
real, dimension (:,:,:), intent(out) :: map,amp
real, pointer, optional, dimension (:,:,:) :: inp_cent_coord
...
if(.not. inv_map) then
in_bound = .true.
moveout= slow_sq*aoff_sq
if(moveout < 0.) then
first_samp(1,1) = &
max(1,ceiling(((t_0_dat + sqrt(-moveout))-t_0_mod)*inv_d_t_mod)+1)
else
first_samp(1,1)=1
end if
last_samp(1,1)=n_t_mod
i_samp_mod = first_samp(1,1)
do while ((i_samp_mod < n_t_mod ) .and. in_bound)
t_mod=t_0_mod + (i_samp_mod-1)*d_t_mod
t_dat=sqrt(t_mod*t_mod + moveout)
map(i_samp_mod,1,1)=(t_dat-t_0_dat)*inv_d_t_dat + 1
if(inv_amp) then
if(t_mod > 0.) then
amp(i_samp_mod,1,1)=t_dat/t_mod
else
amp(i_samp_mod,1,1)=1.
end if
else
if(t_dat > 0.) then
amp(i_samp_mod,1,1)=t_mod/t_dat
else
amp(i_samp_mod,1,1)=1.
end if
end if
if(map(i_samp_mod,1,1) > n_t_dat) then
in_bound=.false.
last_samp(1,1)=i_samp_mod-1
end if
i_samp_mod=i_samp_mod + 1
end do
else
call seperr('mov3d_hyper_const: cannot implement inv_map with NMO')
end if