Calculates an array of cross sections for proton-Hydrogen charge exchange interactions
from the n
state to m = 1..m_max
states at energy Erel
Cross sections are normalized to the total cross sections calculated by p_cx_janev.
Cross sections for some transitions are calculated via the equivalence principle or by "spreading" their expected total cross sections among the non-filled m states.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=Float64), | intent(in) | :: | Erel | Relative collision energy [keV/amu] |
||
integer, | intent(in) | :: | n | Initial atomic energy level/state |
||
integer, | intent(in) | :: | m_max | Number of |
Array of cross sections where the index refers to the m
'th state []
function p_cx_n(Erel, n, m_max) result(sigma)
!+Calculates an array of cross sections for proton-Hydrogen charge exchange interactions
!+from the `n` state to m = 1..`m_max` states at energy `Erel`
!+
!+@note
!+Cross sections are normalized to the total cross sections calculated by
!+[[p_cx_janev(proc)]].
!+
!+@note
!+Cross sections for some transitions are calculated via the equivalence principle or
!+by "spreading" their expected total cross sections among the non-filled m states.
!+
!+###Equation
!+ $$H^+ + H(n) \rightarrow H(m=1..m_{max}) + H^+$$
!+###References
!+* Ref. 4 [[atomic_tables(module)]]
real(Float64), intent(in) :: Erel
!+ Relative collision energy [keV/amu]
integer, intent(in) :: n
!+ Initial atomic energy level/state
integer, intent(in) :: m_max
!+ Number of `m` states to calculate
real(Float64), dimension(m_max) :: sigma
!+ Array of cross sections where the index refers to the `m`'th state [\(cm^2\)]
real(Float64), dimension(m_max) :: sigma2,sigma3
real(Float64) :: sigma_n,e,norm_fac
sigma = 0.d0
select case (n)
case (0)
stop
case (1)
sigma = p_cx_1(Erel,m_max)
return
case (2)
sigma = p_cx_2(Erel,m_max)
return
case (3)
sigma = p_cx_3(Erel,m_max)
return
case (4)
e = Erel*n**2.0
sigma2 = p_cx_2(e/(2.0**2.0),m_max)
sigma(1) = p_cx_1_4_adas(e/(1.0**2.0))*(1.d0/n)**2.0
sigma(2) = sigma2(4)*(2.d0/n)**2.0
sigma(3) = p_cx_3_4_adas(e/(3.0**2.0))*(3.d0/n)**2.0
case (5)
e = Erel*n**2.0
sigma2 = p_cx_2(e/(2.0**2.0),m_max)
sigma(2) = sigma2(5)*(2.d0/n)**2.0
sigma(3) = p_cx_3_5_adas(e/(3.0**2.0))*(3.d0/n)**2.0
case (6)
e = Erel*n**2.0
sigma2 = p_cx_2(e/(2.0**2.0),m_max)
sigma(2) = sigma2(6)*(2.d0/n)**2.0
sigma3 = p_cx_3(e/(3.0**2.0),m_max)*(3.d0/n)**2.0
sigma(3) = sigma3(6)
case DEFAULT
end select
sigma_n = max(p_cx_janev(Erel,n) - sum(sigma),0.0)
call m_spread(n, m_max, sigma_n, sigma)
norm_fac = p_cx_janev(Erel, n)/sum(sigma)
sigma = norm_fac*sigma
end function p_cx_n