find Function

private function find(val, a)

searches for bracketing indices for a value value in an array a

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: val

value to find in array

real(kind=wp), intent(in) :: a(:)

array to find val in

Return Value integer


Source Code

    integer function find(val, a)
    !! searches for bracketing indices for a value value in an array a

        !> value to find in array
        real(kind=wp), intent(in) :: val
        !> array to find val in
        real(kind=wp), intent(in) :: a(:)
        
        integer :: n, lo, mid, hi

        n = size(a)
        lo = 0
        hi = n + 1

        if (val == a(1)) then
            find = 1
        else if (val == a(n)) then
            find = n-1
        else if((val > a(n)) .or. (val < a(1))) then
            find = -1
        else
            do
                if (hi-lo <= 1) exit
                mid = (hi+lo)/2
                if (val >= a(mid)) then
                    lo = mid
                else
                    hi = mid
                end if
            end do
            find = lo
        end if
    end function find