subroutine zstop_sigvz(izneut,zimp,eova,n,sigv)
 
  use hatom_mod
  implicit NONE
 
  !  neutral stopping rate coefficient (cx + ii) for neutral atom
  !  (Z=izneut) striking an impurity population with relative energy
  !  per amu EovA (KeV/nucleon) -- or mp*vrel**2/2 expressed in KeV
  !  via table lookup
  !
  !  tables provided for H,He,Li
  !         interacting with C and O
  !         other Zimp => interpolation or scaling by Z of C and/or O
  !         rate coefficients
  !
  !  note that Zimp is a floating point number... some codes use
  !  "model impurities" representing an aggregate population and with
  !  non-integer average Z value.
 
  integer, intent(in) :: izneut   ! Z of neutral atom (1, 2 or 3)
  real*8, intent(in) :: zimp      ! Z of (fully stripped light) impurity ion
  integer, intent(in) :: n        ! vector size
  real*8, intent(in) :: EovA(n)   ! rel. energy / nucleon, KeV/AMU
 
  real*8, intent(out) :: sigv(n)  ! <sigma*v> value(s) returned  m**3/sec
 
  real*8, parameter :: out_of_range=0.0  ! sigv to use when out of range

  !
  !  if iZneut is out of range, sigv(:)= out_of_range is returned...
  !
  !-----------------------
  ! local
 
  real*8 zsvc(n),zsvo(n)
  integer iok
 
  !-----------------------
 
  if(hatom_flag.eq.0) call hatom_init
 
  iok=1
  if(zimp.lt.3) then
 
     sigv = out_of_range          ! Zimp.ge.3 required...
     iok=0
 
  else if(zimp.le.6) then
 
     ! scale down from C
 
     if(izneut.eq.1) then
 
        call sv_coldtarget_sigmatimesv(Lst_H0_C6,eova,zsvc,n)
 
     else if(izneut.eq.2) then
 
        call sv_coldtarget_sigmatimesv(Lst_He0_C6,eova,zsvc,n)
 
     else if(izneut.eq.3) then
 
        call sv_coldtarget_sigmatimesv(Lst_Li0_C6,eova,zsvc,n)
 
     else
        sigv = out_of_range
        iok=0
     endif
 
     if(iok.eq.1) sigv=(zimp/6)*zsvc
 
  else if(zimp.ge.8) then
 
     ! scale up from O
 
     if(izneut.eq.1) then
 
        call sv_coldtarget_sigmatimesv(Lst_H0_O8,eova,zsvo,n)
 
     else if(izneut.eq.2) then
 
        call sv_coldtarget_sigmatimesv(Lst_He0_O8,eova,zsvo,n)
 
     else if(izneut.eq.3) then
 
        call sv_coldtarget_sigmatimesv(Lst_Li0_O8,eova,zsvo,n)
 
     else
        sigv = out_of_range
        iok=0
     endif
 
     if(iok.eq.1) sigv=(zimp/8)*zsvo
 
  else
 
     ! interpolate btw C and O
 
     if(izneut.eq.1) then
 
        call sv_coldtarget_sigmatimesv(Lst_H0_C6,eova,zsvc,n)
        call sv_coldtarget_sigmatimesv(Lst_H0_O8,eova,zsvo,n)
 
     else if(izneut.eq.2) then
 
        call sv_coldtarget_sigmatimesv(Lst_He0_C6,eova,zsvc,n)
        call sv_coldtarget_sigmatimesv(Lst_He0_O8,eova,zsvo,n)
 
     else if(izneut.eq.3) then
 
        call sv_coldtarget_sigmatimesv(Lst_Li0_C6,eova,zsvc,n)
        call sv_coldtarget_sigmatimesv(Lst_Li0_O8,eova,zsvo,n)
 
     else
        sigv = out_of_range
        iok=0
     endif
 
     if(iok.eq.1) sigv=((zimp-6)*zsvo+(8-zimp)*zsvc)/2
 
  endif
 
end subroutine zstop_sigvz
