find_index Subroutine

subroutine find_index(n, range, x, index)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: n
real(kind=8), intent(in), dimension(0:n) :: range
real(kind=8), intent(in) :: x
integer, intent(out) :: index

Source Code

subroutine find_index(n,range,x,index)
  integer,intent(in)                :: n
  real(8),dimension(0:n),intent(in) :: range
  real(8),intent(in)                :: x
  integer,intent(out)               :: index
  integer                           :: i,upper,lower,mid
  if((x<range(0)) .OR. (x>range(n)))then
     print*,"X out of range!"
     return
  endif
  upper=n
  lower=0
  do while((upper-lower>1))
     mid = (upper+lower)/2    !int(dble(upper + lower)/2.d0)
     if( x >= range(mid))then
        lower=mid
     else
        upper=mid
     endif
  enddo
  index=lower
  if(x<range(lower) .OR. x>range(lower+1))then
     print*,"error: x not found within range!"
     stop
  endif
end subroutine find_index