!
!  real*8 interface -- thermonuclear fusion
!
!  collection of functions for evaluating fusion reaction rate coefficients
!  <<sigma*v>> from pretabulated data
!
!  for all functions:  input plasma temperature, KeV
!  receive <<sigma*v>>, m**3/sec
!
!  DD rate is then nd*nd*<<sigma*v>>DDn
!  DT rate is then nd*nt*<<sigma*v>>DT
!
subroutine fusn_thermo_DDp(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_DDp, tplasma, answer, n)
 
end subroutine fusn_thermo_DDp
!
subroutine fusn_thermo_DDn(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
  call fs_thermonuclear_sigmatimesv(Lfs_DDn, tplasma, answer, n)
end subroutine fusn_thermo_DDn
!
subroutine fusn_thermo_DT(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_DT, tplasma, answer, n)
 
end subroutine fusn_thermo_DT
!
subroutine fusn_thermo_TD(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_TD, tplasma, answer, n)
 
end subroutine fusn_thermo_TD
!
subroutine fusn_thermo_TT(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_TT, tplasma, answer, n)
 
end subroutine fusn_thermo_TT
!
subroutine fusn_thermo_dpcTT(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_dpcTT, tplasma, answer, n)
 
end subroutine fusn_thermo_dpcTT
!
subroutine fusn_thermo_D3(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_D3, tplasma, answer, n)
 
end subroutine fusn_thermo_D3
!
subroutine fusn_thermo_3D(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_3D, tplasma, answer, n)
 
end subroutine fusn_thermo_3D
!
subroutine fusn_thermo_T3(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_T3, tplasma, answer, n)
 
end subroutine fusn_thermo_T3
!
subroutine fusn_thermo_3T(tplasma,answer,n)
 
  use hatom_mod
  implicit NONE
 
  integer, intent(in) :: n
  real*8, intent(in) :: tplasma(n)
  real*8, intent(out) :: answer(n)
 
  !--------------------------------------------
  !  initialize module, if necessary
 
  if(hatom_flag.eq.0) call hatom_init
 
  !--------------------------------------------
 
  call fs_thermonuclear_sigmatimesv(Lfs_3T, tplasma, answer, n)
 
end subroutine fusn_thermo_3T
