program demo_orderval
! Return value of Nth lowest value of array
use M_orderpack, only : orderval
implicit none
character(len=*),parameter :: list= '(*(g0:,", "))'
character(len=*),parameter :: sp='(*(g0,1x))'
real,parameter :: INVALS(*)=[1.1,20.20,3.3,10.10,5.5,4.4,2.2]
integer :: i
integer :: imiddle
write(*,list) 'ORIGINAL:',INVALS
! can return the same values as intrinsics minval(3f) and maxval(3f)
print sp, 'minval',orderval(INVALS,1), minval(INVALS)
print sp, 'maxval',orderval(INVALS,size(INVALS)), maxval(INVALS)
! but more generally it can return the Nth lowest value.
print sp,'nord=',4, ' fractile=',orderval(INVALS,4)
! so a value at the middle would be
imiddle=(size(INVALS)+1)/2
print sp,'median',orderval(INVALS,imiddle)
! sorting the hard way
do i=1,size(INVALS)
write(*,list)i,orderval(INVALS,i)
enddo
end program demo_orderval