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(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_total_cx_rate(ind, pos, v_ion, 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(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
type(NeutralParticleReservoir) :: res
real(Float64), dimension(nlevs) :: rates, denn
real(Float64), dimension(3) :: vn
n = size(types)
rate_tot = 0.0
i = ind(1) ; j = ind(2) ; k = ind(3)
do ii=1,n
select case (types(ii))
case (nbif_type)
denn = neut%full%dens(:,i,j,k)
res = neut%full%res(i,j,k)
case (nbih_type)
denn = neut%half%dens(:,i,j,k)
res = neut%half%res(i,j,k)
case (nbit_type)
denn = neut%third%dens(:,i,j,k)
res = neut%third%res(i,j,k)
case (dcx_type)
denn = neut%dcx%dens(:,i,j,k)
res = neut%dcx%res(i,j,k)
case (halo_type)
denn = neut%halo%dens(:,i,j,k)
res = neut%halo%res(i,j,k)
end select
call neutral_cx_rate(denn, res, v_ion, rates)
rate_tot = rate_tot + rates
enddo
end subroutine get_total_cx_rate