Get probability of a thermal ion charge exchanging with types
neutrals
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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) | :: | rate_tot | Total charge exchange rate [1/s] |
subroutine get_beam_cx_rate(ind, pos, v_ion, i_type, types, rate_tot)
!+ 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) :: rate_tot
!+ Total charge exchange rate [1/s]
integer :: n, i, j, k, 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)
n = size(types)
rate_tot = 0
i = ind(1) ; j = ind(2) ; k = ind(3)
do ii=1,n
select case (types(ii))
case (nbif_type)
vn = vnbi
call bb_cx_rates(neut%full(:,i,j,k),v_ion,vn,rates)
case (nbih_type)
vn = vnbi/sqrt(2.0)
call bb_cx_rates(neut%half(:,i,j,k),v_ion,vn,rates)
case (nbit_type)
vn = vnbi/sqrt(3.0)
call bb_cx_rates(neut%third(:,i,j,k),v_ion,vn,rates)
case (dcx_type)
call get_plasma(plasma, pos=pos)
call bt_cx_rates(plasma,neut%dcx(:,i,j,k),v_ion,i_type,rates)
case (halo_type)
call get_plasma(plasma, pos=pos)
call bt_cx_rates(plasma,neut%halo(:,i,j,k),v_ion,i_type,rates)
end select
rate_tot = rate_tot + rates
enddo
end subroutine get_beam_cx_rate