demo_rank_unique.f90 Source File


Contents

Source Code


Source Code

     program demo_rank_unique
     ! rank an array, with removal of duplicate entries.
     use M_orderpack, only : rank_unique
     implicit none
     character(len=*),parameter :: g='(*(g0,1x))'
     integer,allocatable :: INVALS(:)
     !
     INVALS=[10,5,7,1,4,5,6,8,9,10,1]
     call printme()
     INVALS=[-1,0,-2,0,-3,0,-4]
     call printme()
     contains
     subroutine printme()
     integer,allocatable :: irngt(:)
     integer :: nuni
        if(allocated(irngt))deallocate(irngt)
        allocate(irngt(size(INVALS)))
        write(*,g)'ORIGINAL:',INVALS
        call rank_unique(INVALS,irngt,nuni)
        write(*,g)'NUMBER OF UNIQUE INDICES:',nuni
        write(*,g)'RETURNED INDICES:',irngt(:nuni)
        write(*,g)'SORTED DATA:',INVALS(irngt(:nuni))
     end subroutine
     end program demo_rank_unique