ADAS Subroutine h9qd3b
subroutine h9qd3b( ntdim , nedim , nfdim ,
& teff , tenum ,
& ne , nt , wupper , wlower ,
& xa , dist , kap_val , dru_val ,
& zeta , evt , omega ,
& n_en , en , f , nte ,
& nform1, param1 , nform2 , param2 ,
& alpha , q
& )
C-----------------------------------------------------------------------
C
C ****************** fortran77 subroutine: h9qd3b *********************
C
C purpose: To execute quadratures over ionisation collision strengths
C to determine the ionisation and 3-body recombination
C coefficients. Free electron distribution function may be
C Maxwellian, Kappa, Druyvesteyn, or numeric from adf37 file.
C
C calling program: adas809
C
C input : (i*4) ntdim = max no of temperatures that can be read in
C input : (i*4) nedim = max no of energy points that can be read in
C input : (r*8) teff() = input effective temperatures (eV)
C input : (r*8) tenum() = effective temperatures from adf37 file (eV)
C input : (i*4) ne = no of x parameter values in adf04 type 1
C input : (i*4) nt = no of input temperatures
C input : (r*8) wupper = statistical weight of upper level
C input : (r*8) wlower = statistical weight of lower level
C input : (r*8) xa() = x parameter from adf04 type1
C input : (i*4) dist = distribution type
C 0 => Maxwellian
C 1 => kappa
C 2 => numeric
C 3 => Druyvesteyn
C input : (r*8) kap_val = value of kappa parameter
C input : (r*8) dru_val = value of x parameter in Druyvesteyn dist
C input : (r*8) evt = ionisation potential
C input : (r*8) omega() = collision strength from adf04 type1
C input : (i*4) n_en = no of energy points in adf37
C input : (r*8) en(,) = energy points of distribution tabulation
C input : (r*8) f(,) = distribution function tabulation
C input : (i*4) nte = no of temperatures in adf37
C input : (i*4) nform1 = type of threshold behaviour
C 1 => cutoff
C 2 => energy^param1
C input : (r*8) param1() = parameter of threshold form
C input : (i*4) nform2 = type of high-energy behaviour
C 1 => cutoff
C 2 => energy^-param2(1)
C 3 => exp(-param2(1)*energy)
C input : (r*8) param2 = parameter of high-energy form
C
C output: (r*8) alpha = 3-body recombination coefficient
C output: (r*8) q = ionisation coefficient
C
C routines:
C routine source brief description
C -------------------------------------------------------------
C eei ADAS evaluates exp(x)*E1(x)
C lngama ADAS evaluates ln(gamma(x))
C
C author: Paul Bryans, University of Strathclyde
C
C date: 22/11/04
C
c modification history:
c
c date: 22/11/04 version: 1.1
c modified: Paul Bryans
c - first release
c
c date: 26/11/04
c modified: Allan Whiteford
c - made some arrays locally dimensioned to prevent
c g77 compiled code failing when it tried to make
c large automatic arrays.
c
c date: 26/11/04
c modified: Paul Bryans
c - Moved final exponential coefficient of Maxwellian
c and Druyvesteyn ionisation rate inside integrals to
c eliminate overflow problem when this becomes large.
c
c date: 18/08/05
c modified: Paul Bryans
c - Set energy difference equal to zero at threshold.
c Numerical precision was causing this to be small and
c negative, giving NaN when raised to non-integer power.
c
C-----------------------------------------------------------------------
INTEGER DIST, NE, NEDIM, NFDIM
INTEGER NFORM1, NFORM2, NT, NTDIM
INTEGER NTE, N_EN
REAL*8 ALPHA(NTDIM), DRU_VAL
REAL*8 EN(NTDIM,NFDIM), EVT
REAL*8 F(NTDIM,NFDIM), KAP_VAL
REAL*8 OMEGA(NEDIM), PARAM1
REAL*8 PARAM2(2), Q(NTDIM), TEFF(NTDIM)
REAL*8 TENUM(QDNT), WLOWER, WUPPER
REAL*8 XA(NEDIM), ZETA