diff --git a/src/util/util_sort.f90 b/src/util/util_sort.f90 index d27489da5..8ea7a3026 100644 --- a/src/util/util_sort.f90 +++ b/src/util/util_sort.f90 @@ -74,15 +74,12 @@ module pure subroutine util_sort_dp(arr) do i = 2, n tmp = arr(i) j = i - 1 - do while ((j > 1) .and. (arr(j) > tmp)) + do while (j >= 1) + if (arr(j) <= tmp) exit arr(j + 1) = arr(j) j = j - 1 end do - if ((j == 1) .and. (arr(j) > tmp)) then - arr(j + 1) = arr(j) - j = j - 1 - end if - arr(j + 1) = tmp + arr(j + 1) = tmp end do return @@ -102,7 +99,7 @@ module pure subroutine util_sort_index_dp(arr, ind) real(DP), dimension(:), intent(in) :: arr integer(I4B), dimension(:), allocatable, intent(inout) :: ind ! Internals - integer(I4B) :: n, i, j, itmp + integer(I4B) :: n, i, j, jp, itmp n = size(arr) if (.not.allocated(ind)) then @@ -112,15 +109,12 @@ module pure subroutine util_sort_index_dp(arr, ind) do i = 2, n itmp = ind(i) j = i - 1 - do while ((j > 1) .and. (arr(ind(j)) > arr(itmp))) + do while (j >= 1) + if (arr(ind(j)) <= arr(itmp)) exit ind(j + 1) = ind(j) j = j - 1 end do - if ((j == 1) .and. (arr(ind(j)) > arr(itmp))) then - ind(j + 1) = ind(j) - j = j - 1 - end if - ind(j + 1) = itmp + ind(j + 1) = itmp end do return @@ -144,15 +138,12 @@ module pure subroutine util_sort_i4b(arr) do i = 2, n tmp = arr(i) j = i - 1 - do while ((j > 1) .and. (arr(j) > tmp)) + do while (j >= 1) + if (arr(j) <= tmp) exit arr(j + 1) = arr(j) j = j - 1 end do - if ((j == 1) .and. (arr(j) > tmp)) then - arr(j + 1) = arr(j) - j = j - 1 - end if - arr(j + 1) = tmp + arr(j + 1) = tmp end do return @@ -182,15 +173,12 @@ module pure subroutine util_sort_index_i4b(arr, ind) do i = 2, n itmp = ind(i) j = i - 1 - do while ((j > 1) .and. (arr(ind(j)) > arr(itmp))) + do while (j >= 1) + if (arr(ind(j)) <= arr(itmp)) exit ind(j + 1) = ind(j) j = j - 1 end do - if ((j == 1) .and. (arr(ind(j)) > arr(itmp))) then - ind(j + 1) = ind(j) - j = j - 1 - end if - ind(j + 1) = itmp + ind(j + 1) = itmp end do return @@ -214,15 +202,12 @@ module pure subroutine util_sort_sp(arr) do i = 2, n tmp = arr(i) j = i - 1 - do while ((j > 1) .and. (arr(j) > tmp)) + do while (j >= 1) + if (arr(j) <= tmp) exit arr(j + 1) = arr(j) j = j - 1 end do - if ((j == 1) .and. (arr(j) > tmp)) then - arr(j + 1) = arr(j) - j = j - 1 - end if - arr(j + 1) = tmp + arr(j + 1) = tmp end do return @@ -252,15 +237,12 @@ module pure subroutine util_sort_index_sp(arr, ind) do i = 2, n itmp = ind(i) j = i - 1 - do while ((j > 1) .and. (arr(ind(j)) > arr(itmp))) + do while (j >= 1) + if (arr(ind(j)) <= arr(itmp)) exit ind(j + 1) = ind(j) j = j - 1 end do - if ((j == 1) .and. (arr(ind(j)) > arr(itmp))) then - ind(j + 1) = ind(j) - j = j - 1 - end if - ind(j + 1) = itmp + ind(j + 1) = itmp end do return