get_passive_grid_indices Subroutine

public subroutine get_passive_grid_indices(pos, ind, input_coords)

Find closest pass_grid indices ind to position pos

Arguments

Type IntentOptional AttributesName
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 pos. Beam grid (0), machine (1) and cylindrical (2)


Called by

proc~~get_passive_grid_indices~~CalledByGraph proc~get_passive_grid_indices get_passive_grid_indices proc~store_photons store_photons proc~store_photons->proc~get_passive_grid_indices proc~track_cylindrical track_cylindrical proc~track_cylindrical->proc~get_passive_grid_indices proc~dcx_spec dcx_spec proc~dcx_spec->proc~store_photons proc~halo_spec halo_spec proc~halo_spec->proc~store_photons proc~make_diagnostic_grids make_diagnostic_grids proc~make_diagnostic_grids->proc~track_cylindrical proc~cold_spec cold_spec proc~cold_spec->proc~store_photons proc~nbi_spec nbi_spec proc~nbi_spec->proc~store_photons proc~store_bes_photons store_bes_photons proc~store_bes_photons->proc~store_photons proc~pfida_mc pfida_mc proc~pfida_mc->proc~track_cylindrical proc~pfida_f pfida_f proc~pfida_f->proc~track_cylindrical proc~store_fida_photons store_fida_photons proc~store_fida_photons->proc~store_photons program~fidasim fidasim program~fidasim->proc~dcx_spec program~fidasim->proc~halo_spec program~fidasim->proc~make_diagnostic_grids program~fidasim->proc~cold_spec program~fidasim->proc~nbi_spec program~fidasim->proc~pfida_mc program~fidasim->proc~pfida_f

Contents


Source Code

subroutine get_passive_grid_indices(pos, ind, input_coords)
    !+ Find closest [[libfida:pass_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) = pass_grid%nr
    maxind(2) = pass_grid%nz
    maxind(3) = pass_grid%nphi

    mini(1) = minval(pass_grid%r)
    mini(2) = minval(pass_grid%z)
    mini(3) = minval(pass_grid%phi)

    differentials(1) = pass_grid%dr
    differentials(2) = pass_grid%dz
    differentials(3) = pass_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_passive_grid_indices