program demo_prank_special
! partially rank N lowest values in an array
use M_orderpack, only : prank_special
implicit none
character(len=*),parameter :: g='(*(g0,1x))'
integer,allocatable :: INVALS(:)
integer,allocatable :: irngt(:)
integer :: nord
INVALS=[10,5,7,1,4,5,6,8,9,10,1]
nord=5
allocate(irngt(nord))
write(*,g)'ORIGINAL:',INVALS
call prank_special(INVALS,irngt,nord)
write(*,g)'NUMBER OF INDICES TO RETURN:',nord
write(*,g)'RETURNED INDICES:',irngt
write(*,g)nord,'SMALLEST VALUES:',INVALS(irngt(:nord))
end program demo_prank_special