Find closest inter_grid indices ind to position pos
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=Float64), | intent(in), | dimension(3) | :: | pos | Position [cm] | |
| integer(kind=Int32), | intent(out), | dimension(3) | :: | ind | Closest indices to position | |
| integer, | intent(in), | optional | :: | input_coords | Indicates coordinate system of  | 
subroutine get_interpolation_grid_indices(pos, ind, input_coords)
    !+ Find closest [[libfida:inter_grid]] indices `ind` to position `pos`
    real(Float64),  dimension(3), intent(in)  :: pos
        !+ Position [cm]
    integer(Int32), dimension(3), intent(out) :: ind
        !+ Closest indices to position
    integer, intent(in), optional             :: input_coords
        !+ Indicates coordinate system of `pos`. Beam grid (0), machine (1) and cylindrical (2)
    real(Float64),  dimension(3) :: mini, differentials, loc
    integer(Int32), dimension(3) :: maxind
    integer :: i, ics
    if(present(input_coords)) then
        ics = input_coords
    else
        ics = 2
    endif
    if(ics.eq.1) then
        loc(1) = sqrt(pos(1)*pos(1) + pos(2)*pos(2))
        loc(2) = pos(3)
        loc(3) = atan2(pos(2),pos(1))
    endif
    if(ics.eq.2) then
        loc(1) = pos(1)
        loc(2) = pos(2)
        loc(3) = pos(3)
    endif
    maxind(1) = inter_grid%nr
    maxind(2) = inter_grid%nz
    maxind(3) = inter_grid%nphi
    mini(1) = minval(inter_grid%r)
    mini(2) = minval(inter_grid%z)
    mini(3) = minval(inter_grid%phi)
    differentials(1) = inter_grid%dr
    differentials(2) = inter_grid%dz
    differentials(3) = inter_grid%dphi
    do i=1,3
        ind(i) = floor((loc(i)-mini(i))/differentials(i)) + 1
        if (ind(i).gt.maxind(i)) ind(i)=maxind(i)
        if (ind(i).lt.1) ind(i)=1
    enddo
end subroutine get_interpolation_grid_indices