demo_orderval.f90 Source File


Contents

Source Code


Source Code

     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