Fit Function: PEXCH4

Fit Function \[\begin{align*} \end{align*}\]
Comments This evaluation function can only derive cross sections for those transitions for which the oscillator strengths have been included in subroutines "oscsth1" and "oscthe".

Fortran

Arguments
namedescriptionunitstype(s)
pe energy eV real, dimension(:)
pcf coefficient data array real, dimension(13)
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 pexch4(pe, pcf, kncf, pxs, kermsg)
c
c     this is a subroutine to calculate cross sections (cm[2])
c     versus energy (ev) for heavy particle impact excitation
c     in the dipole-approximation close-coupling method (dacc).
c
c     pe = collision energy in ev
c
c     the coefficient data array passed should contain
c
c     pcf(1)  =   zt, the atomic number of target
c
c     pcf(2)  =   zp, the atomic number of projectile
c
c     pcf(3)  =  itrans,  integer which defines the type of transition.
c                 for transitions defined only in terms of the initial
c                 and final principal quantum numbers (n,m), itrans=1.
c                 for tranitions between (nl,ml') states itrans=2
c
c     pcf(4) =   n, the principal quantum number of the initial state
c
c     pcf(5) =   m, the principal quantum number of the final state
c
c     if itrans=2, the remainder of the coefficient array should
c                 contain
c
c     pcf(6) =   sumen, this indicates choice of ionization energy to be
c                returned.  if sumen=0  the ionization energy for the
c                specific state (quantified by n, l amd mult) is
c                returned.  if sumen=1  the ionization energy taken as
c                an average over angular momentum and
c                total spin is returned
c
c
c     pcf(7) =   lin, the orbital angular monentum of the inital state
c
c     pcf(8) =   lfin, the orbital angular monentum of the final state
c
c     pcf(9) =   mult, spin multiplicity (2s+1) of the inital state
c
c     pcf(10) =   j, the total angular momentum of the initial state
c                only required for fine structure transitions
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(11) = eth,threshold excitation energy for the transition (ev)
c
c     pcf(12) = wnm, energy difference between initial and final states
c
c     pcf(13) = parameter lambda
c
c     kermsg = blank if no errors
c
c     pxs = cross section in cm[2]
c
c      this evaluation function can only derive cross sections for those
c    transitions for which the oscillator strengths have been included
c    in subroutines oscsth1 and oscthe. oscsth1 contains the oscillator
c    strengths for allowed transitions for hydrogen from table a.1. of
c    janev et al. oscthe contains the oscillator strengths for allowed
c    transitions for helium  from table a.4 of janev et al.
c      for transitions beteen excited states of helium the excitation
c    energies are returned by subroutine heexcen and the ionization
c    energies are returned by subroutine heionen.
c
c------------------------------------------------------------------------
c
      double precision pe, pcf, pxs
c
      integer zt, zp, n, m, sumen, itrans
      real lambda
      dimension pcf(13)
      character*(*) kermsg
c
      data ry /1.358e+01/
c
      zt = pcf(1)
      zp = pcf(2)
      rzt = zt
      rzp = zp
      itrans  = pcf(3)
      n = pcf(4)
      m = pcf(5)
      an = n
      am = m
c
      if (m .le. n) then
        kermsg = 'error  principal quantum number m <= n '
        return
      endif
c
      if (kncf .lt. 11) then
c
c        first call to pexch4 determine energy independent
c        parameters and place in pcf for further use
c
c        (n,m) transitions - determine energies, wnm and oscillator
c                            strength.
c
        if (itrans .eq. 1) then
          if (zt .eq. 1) then
            c= 1.0/(an*an) - 1.0/(am*am)
            eth = ry * c
            wnm = 0.5 * c
          else if (zt .eq. 2) then
            call heionen(n, 0, 0, 1, eionn, kermsg)
            call heionen(m, 0, 0, 1, eionm, kermsg)
            eth = eionn - eionm
            wnm = eth /(2.0*ry)
          else
            kermsg = 'target not covered by pexch4 '
            return
          endif
c
c     calculate the oscillator strength, fnm, for the transition from
c     the formula of johnson
c
          if (zt .eq. 1) then
            call oscsth2(n, m, fnm)
          else
            kermsg = 'average oscillator strength missing in pexch4'
            return
          endif
c
c        (nl,ml') transitions - determine energies, wnm and oscillator
c                               strength.
c
        else if (itrans .eq. 2 .and. zt .eq. 2) then
          if (kncf .ne. 10) then
            kermsg =
     1           ' invalid number of coefficients passed to pexch4'
            return
          endif
c
          sumen =  pcf(6)
          lin =  pcf(7)
          lfin = pcf(8)
          mult = pcf(9)
          j = pcf(10)
c
          if (n .eq .1) then
             call heexcen(m, lfin, mult, sumen, eth, kermsg)
             wnm = eth /(2.0*ry)
          else
              call heionen(n, lin, mult, sumen, ethn, kermsg)
              call heionen(m, lfin, mult, sumen, ethm, kermsg)
              eth = ethn - ethm
              wnm = eth /(2.0*ry)
          endif
        endif
c
        if (itrans .eq. 2) then
          call oscsthe(n, lin, m, lfin, mult, j, fnm, kermsg)
        endif
c
c
c     determine the potential strength, lambda
c
      lambda= sqrt(fnm/(2.0*wnm))
c
c        place energy independent parameters in coefficient array and
c        update kncf
c
        pcf(11) = eth
        pcf(12) = wnm
        pcf(13) = lambda
        kncf = 13
      else if (kncf .eq. 13) then
          eth  = pcf(11)
          wnm  = pcf(12)
          lambda = pcf(13)
c
      else
          kermsg = ' incorrect number of coefficients passed to pexch4'
          return
      endif
c
      if(pe .lt. eth) then
        pxs=0.0
        return
      endif
c
c     determine the velocity, v
c     corrected 1/zp factor -- dh -- 13 March 2008
        v = 6.3246e-03* sqrt(pe) / zp
c
c     determine the value of beta
c
      beta = zp* lambda *  wnm / (v * v)
c
c     determine the value of the cross section  pxs
c
      pxs = 1.76e-16 *  zp * lambda * dbeta(beta) / wnm
c
      return
      end

Python

Arguments
namedescriptionunitstype(s)
pe 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