!------------------------------------------------------------------------------
!
real(fp) FUNCTION SGPLIX(ZE)
 
!       Lithium Fudge  tbt 10/94
!
!
!============
! idecl:  explicitize implicit INTEGER declarations:
  use iso_c_binding, only: fp => c_double
  IMPLICIT NONE
  INTEGER i
!============
! idecl:  explicitize implicit real(fp) declarations:
  real(fp) ze2,zemin,zemax,zeuse,zle,zls,zlss,zle2,za2,zans
!============
  real(fp) ZE
!
!  ZE IN EV
!  SGPHEX IN !M**2
!
!  JANEV-LANGER-EVANS-POST,
!  ELEMENTARY PROCESSES IN HYDROGEN-HELIUM PLASMAS
!  FIT FOR REACTION 3.3.1,  H+ + HE --> H + HE+
!    CHARGE EXCHANGE
!
!  FIT TABLE IN SS 8.1, P. 252
!
  real(fp) A331(9)
  DATA A331/-4.88373464e+01_fp,-7.86457732_fp,&
       1.05151860e+01_fp,&
       -4.73160090_fp, 1.16983075_fp,&
       -1.75034491e-01_fp,&
       1.57493444e-02_fp,-7.78484946e-04_fp,&
       1.61195349e-05_fp/
!
  LOGICAL EXTRAP
!
  EXTRAP=.FALSE.
!
  ZE2=ZE
!
  ZEMIN=17.3_fp
  ZEMAX=100000.0_fp
  IF((ZE2.LT.ZEMIN).OR.(ZE2.GT.ZEMAX)) EXTRAP=.TRUE.
!
  ZEUSE=min(ZEMAX,max(ZEMIN,ZE2))
!
  ZLE=log(ZEUSE)
!
  ZLS=A331(9)
  IF(EXTRAP) ZLSS=8.0_fp*A331(9)
!
  DO I=8,1,-1
     ZLS=ZLS*ZLE+A331(I)
     IF(EXTRAP.AND.(I.GE.2)) ZLSS=ZLSS*ZLE+(I-1)*A331(I)
  enddo
!
  IF(EXTRAP) THEN
     ZLE2=log(ZE2)
     ZA2=0.0_fp
     IF(ZE2.LT.ZEMIN) ZLS=ZLS-ZLSS*(ZLE-ZLE2)
     IF(ZE2.GT.ZEMAX) ZLS=ZLS+(ZLE2-ZLE)*(ZLSS-ZA2*(ZLE2-ZLE))
  ENDIF
!
  ZANS = EXP(min(50.0_fp,ZLS))
!
  SGPLIX=ZANS
!
  RETURN
END FUNCTION SGPLIX
!
!------------------------------------------------------------------------------
! 30Jun2000 fgtok -s r8_precision.sub "r8con.csh conversion"
! 02Aug2000 fgtok -s r8_precision.sub "r8con.csh conversion"
! 02Aug2000 fgtok
