p_cx_n Function

public 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

Equation

References

Arguments

Type IntentOptional AttributesName
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 m states to calculate

Return Value real(kind=Float64), dimension(m_max)

Array of cross sections where the index refers to the m'th state []


Calls

proc~~p_cx_n~~CallsGraph proc~p_cx_n p_cx_n proc~p_cx_janev p_cx_janev proc~p_cx_n->proc~p_cx_janev proc~m_spread m_spread proc~p_cx_n->proc~m_spread proc~p_cx_3_5_adas p_cx_3_5_adas proc~p_cx_n->proc~p_cx_3_5_adas proc~p_cx_3_4_adas p_cx_3_4_adas proc~p_cx_n->proc~p_cx_3_4_adas proc~p_cx_2 p_cx_2 proc~p_cx_n->proc~p_cx_2 proc~p_cx_3 p_cx_3 proc~p_cx_n->proc~p_cx_3 proc~p_cx_1 p_cx_1 proc~p_cx_n->proc~p_cx_1 proc~p_cx_1_4_adas p_cx_1_4_adas proc~p_cx_n->proc~p_cx_1_4_adas proc~p_cx_1_janev p_cx_1_janev proc~p_cx_janev->proc~p_cx_1_janev proc~p_cx_2_janev p_cx_2_janev proc~p_cx_janev->proc~p_cx_2_janev proc~p_cx_n_janev p_cx_n_janev proc~p_cx_janev->proc~p_cx_n_janev proc~p_cx_3_janev p_cx_3_janev proc~p_cx_janev->proc~p_cx_3_janev proc~p_cx_2->proc~p_cx_janev proc~p_cx_2->proc~m_spread proc~p_cx_1_2_adas p_cx_1_2_adas proc~p_cx_2->proc~p_cx_1_2_adas proc~p_cx_2_3_adas p_cx_2_3_adas proc~p_cx_2->proc~p_cx_2_3_adas proc~p_cx_2_2_adas p_cx_2_2_adas proc~p_cx_2->proc~p_cx_2_2_adas proc~p_cx_3->proc~p_cx_janev proc~p_cx_3->proc~m_spread proc~p_cx_3->proc~p_cx_3_5_adas proc~p_cx_3->proc~p_cx_3_4_adas proc~p_cx_3->proc~p_cx_1 proc~p_cx_3_2_adas p_cx_3_2_adas proc~p_cx_3->proc~p_cx_3_2_adas proc~p_cx_3_3_adas p_cx_3_3_adas proc~p_cx_3->proc~p_cx_3_3_adas proc~p_cx_3_6inf_adas p_cx_3_6inf_adas proc~p_cx_3->proc~p_cx_3_6inf_adas proc~p_cx_1_3_adas p_cx_1_3_adas proc~p_cx_3->proc~p_cx_1_3_adas proc~p_cx_1->proc~p_cx_janev proc~p_cx_1->proc~p_cx_1_4_adas proc~p_cx_1_1_adas p_cx_1_1_adas proc~p_cx_1->proc~p_cx_1_1_adas proc~p_cx_1->proc~p_cx_1_2_adas proc~p_cx_1->proc~p_cx_1_3_adas

Called by

proc~~p_cx_n~~CalledByGraph proc~p_cx_n p_cx_n proc~p_cx p_cx proc~p_cx->proc~p_cx_n proc~p_cx_n_m p_cx_n_m proc~p_cx_n_m->proc~p_cx_n proc~write_bb_h_h write_bb_H_H proc~write_bb_h_h->proc~p_cx program~generate_tables generate_tables program~generate_tables->proc~write_bb_h_h

Contents

Source Code


Source Code

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