Code |
c
c###################################################################
c
subroutine jeexc1(pe, pcf, kncf, pxs, kermsg)
c
c this is a subroutine to calculate a cross section
c in cm[2] as function of electron energy in ev for dipole
c allowed transitions.
c for details see doc=h-he-plasma , used for reactions 2.3.1,
c 2.3.5a, 2.3.5b, 2.3.6a, 2.3.6b, and 2.3.7.
c
c pcf is the coefficient data array, where
c
c pcf(1) = coefficient beta
c
c pcf(2) = coefficient gamma
c
c pcf(3) = coefficient delta
c
c pcf(4) = nin(n), principal quantum number of the initital state
c
c pcf(5) = lin(l), orbital angular momentum of the initital state
c
c pcf(6) = lfin(l') orbital angular momentum of the final state
c
c pcf(7) = mult, spin multiplicity (2s+1) of the inital state
c
c pcf(8) = j, the total angular momentum of the initial state
c only required for fine structure transitions
c (see routine oscsthe for details of definition)
c
c pcf(9) = nfin(n'), principal quantum number of the initital state
c
c - warning- .
c
c the coefficient array pcf is updated by this routine to
c include energy independent constants. these coefficients can be
c used in subsequent calls for the same entry. the coefficeients
c added are:
c
c pcf(10) = threshold energy for the transition (ev)
c
c pcf(11) = oscillator strength for the transition
c
c pcf(12) = the coefficient xi (see doc=h-he-plasma for definition)
c
c pe = electron energy (ev)
c
c kermsg = blank if no errors
c
c pxs = cross section in cm[2]
c
c written by j. j. smith , iaea atomic and molecular data unit
c
c------------------------------------------------------------------------
c
double precision pe, pcf, pxs
integer nin, lin, nfin, lfin, mult, j
dimension pcf(12)
character*(*) kermsg
data ry/13.58/
c
beta = pcf(1)
gamma = pcf(2)
delta = pcf(3)
nin = pcf(4)
lin = pcf(5)
lfin = pcf(6)
mult = pcf(7)
j = pcf(8)
nfin = pcf(9)
c
kermsg = ' '
if (kncf .lt. 10) then
c
c first call to jeexc1 determine energy independent
c parameters and place in pcf for further use
c
c determine the excitation energy of the final state
c
eexcl = 0.0
if (nin .ne. 1) then
call heexcen (nin, lin, mult, 0, eexcl, kermsg)
if (kermsg .ne. ' ') return
endif
c
call heexcen (nfin, lfin, mult, 0, eexcu, kermsg)
if (kermsg .ne. ' ') return
eexc = eexcu - eexcl
c
c determine the oscillator strength for the transition
c
c Yuri R.: there're some problems here
c Denis H.: Problem solved: size of array pcf passed to the function was not fixed
call oscsthe(nin, lin, nfin, lfin, mult, j, fnm, kermsg)
if (kermsg .ne. ' ') return
c
xi = beta * ((ry * fnm /eexc)** (-gamma))
c
c place energy independent parameters in coefficient array and
c update kncf
c
pcf(10) = eexc
pcf(11) = fnm
pcf(12) = xi
kncf = 12
c
else if (kncf .eq. 12) then
eexc = pcf(10)
fnm = pcf(11)
xi = pcf(12)
c
else
kermsg = ' incorrect number of coefficients passed to jeexc1'
return
endif
c
c check for impact energies below threshold
c
if (pe. lt. eexc ) then
pxs = 0.0
return
endif
c
u = pe / eexc
c
cexp = - xi * (u + 1.0)
if (cexp .lt. -20.0) then
vexp = 0.0
else
vexp = exp(cexp)
endif
c
if (delta .eq. 0.0) then
y = (1.0 - vexp) * log (u) / u
else
y = (1.0 - vexp) * log (u+delta) / u
endif
c
pxs = 3.52e-16 * ( (ry/eexc)**2 ) * fnm * y
c
return
c
end |