Fit Function: JEEXC1

Fit Function \[\begin{align*} \end{align*}\]
Comments

Fortran

Arguments
namedescriptionunitstype(s)
pe requested energy eV real, dimension(:)
pcf coefficient data array real, dimension(12)
kncf number of coefficients in the data array integer
pfit cross section cm2 real, dimension(:)
kermsg error message character
Return values
namedescriptionunitstype(s)
pfit cross section cm2 real, dimension(:)
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

Python

Arguments
namedescriptionunitstype(s)
pe requested energy eV float, np.ndarray
pcf coefficient data array float, np.ndarray
kncf number of coefficients in the data array int
pfit cross section cm2 float, np.ndarray
kermsg error message str
Return values
namedescriptionunitstype(s)
pfit cross section cm2 float, np.ndarray
Code