get_beam_cx_rate Subroutine

public subroutine get_beam_cx_rate(ind, pos, v_ion, i_type, types, prob)

Get probability of a thermal ion charge exchanging with types neutrals

Arguments

Type IntentOptional AttributesName
integer(kind=Int32), intent(in), dimension(3):: ind

beam_grid indices

real(kind=Float64), intent(in), dimension(3):: pos

Interaction position in beam grid coordinates

real(kind=Float64), intent(in), dimension(3):: v_ion

Ion velocity [cm/s]

integer, intent(in) :: i_type

Ion type

integer(kind=Int32), intent(in), dimension(:):: types

Neutral types

real(kind=Float64), intent(out), dimension(nlevs):: prob

Charge exchange rate/probability [1/s]


Calls

proc~~get_beam_cx_rate~~CallsGraph proc~get_beam_cx_rate get_beam_cx_rate proc~bb_cx_rates bb_cx_rates proc~get_beam_cx_rate->proc~bb_cx_rates proc~get_plasma get_plasma proc~get_beam_cx_rate->proc~get_plasma proc~bt_cx_rates bt_cx_rates proc~get_beam_cx_rate->proc~bt_cx_rates interface~interpol_coeff interpol_coeff proc~bb_cx_rates->interface~interpol_coeff proc~in_plasma in_plasma proc~get_plasma->proc~in_plasma proc~bt_cx_rates->interface~interpol_coeff proc~interpol2d_coeff interpol2D_coeff interface~interpol_coeff->proc~interpol2d_coeff proc~interpol1d_coeff interpol1D_coeff interface~interpol_coeff->proc~interpol1d_coeff proc~interpol2d_coeff_arr interpol2D_coeff_arr interface~interpol_coeff->proc~interpol2d_coeff_arr proc~interpol1d_coeff_arr interpol1D_coeff_arr interface~interpol_coeff->proc~interpol1d_coeff_arr proc~in_plasma->interface~interpol_coeff proc~xyz_to_uvw xyz_to_uvw proc~in_plasma->proc~xyz_to_uvw proc~interpol2d_coeff_arr->proc~interpol2d_coeff proc~interpol1d_coeff_arr->proc~interpol1d_coeff

Called by

proc~~get_beam_cx_rate~~CalledByGraph proc~get_beam_cx_rate get_beam_cx_rate proc~npa_weights npa_weights proc~npa_weights->proc~get_beam_cx_rate proc~npa_f npa_f proc~npa_f->proc~get_beam_cx_rate proc~npa_mc npa_mc proc~npa_mc->proc~get_beam_cx_rate program~fidasim fidasim program~fidasim->proc~npa_weights program~fidasim->proc~npa_f program~fidasim->proc~npa_mc

Contents

Source Code


Source Code

subroutine get_beam_cx_rate(ind, pos, v_ion, i_type, types, prob)
    !+ Get probability of a thermal ion charge exchanging with `types` neutrals
    integer(Int32), dimension(3), intent(in)     :: ind
        !+ [[libfida:beam_grid]] indices
    real(Float64), dimension(3), intent(in)      :: pos
        !+ Interaction position in beam grid coordinates
    real(Float64), dimension(3), intent(in)      :: v_ion
        !+ Ion velocity [cm/s]
    integer, intent(in)                          :: i_type
        !+ Ion type
    integer(Int32), dimension(:), intent(in)     :: types
        !+ Neutral types
    real(Float64), dimension(nlevs), intent(out) :: prob
        !+ Charge exchange rate/probability [1/s]

    integer :: ntypes, i, ii
    type(LocalProfiles) :: plasma
    real(Float64), dimension(nlevs) :: rates, denn
    real(Float64), dimension(3) :: vhalo,vn,vnbi

    vnbi = pos - nbi%src
    vnbi = nbi%vinj*vnbi/norm2(vnbi)

    ntypes = size(types)
    prob = 0

    do i=1,ntypes
        if((types(i).le.3).and.(types(i).ne.0)) then
            ! CX with full type'th energy NBI neutrals
            denn = neut%dens(:,types(i),ind(1),ind(2),ind(3)) 
            vn = vnbi/sqrt(real(types(i)))
            call bb_cx_rates(denn,v_ion,vn,rates)
            prob = prob+rates
        else
            call get_plasma(plasma,pos=pos)
            denn = neut%dens(:,types(i),ind(1),ind(2),ind(3))
            call bt_cx_rates(plasma, denn, v_ion, i_type, rates)
            prob = prob + rates
        endif
    enddo

end subroutine get_beam_cx_rate