Skip to content

Commit 19f661a

Browse files
Fix pivot search by replacing argmax with BLAS.iamax
1 parent 6f03ea5 commit 19f661a

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

src/array/lu.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,16 @@ function LinearAlgebra.lu!(A::DMatrix{T}, ::LinearAlgebra.NoPivot; check::Bool=t
2929
end
3030

3131
function searchmax_pivot!(piv_idx::AbstractVector{Int}, piv_val::AbstractVector{T}, A::AbstractMatrix{T}, offset::Int=0) where T
32-
max_idx = argmax(abs.(A[:]))
32+
max_idx = LinearAlgebra.BLAS.iamax(A[:])
3333
piv_idx[1] = offset+max_idx
3434
piv_val[1] = A[max_idx]
3535
end
3636

3737
function update_ipiv!(ipivl::AbstractVector{Int}, piv_idx::AbstractVector{Int}, piv_val::AbstractVector{T}, k::Int, nb::Int) where T
38-
max_piv_idx = argmax(abs.(piv_val))
39-
max_piv_val = abs(piv_val[max_piv_idx])
40-
isapprox(max_piv_val, zero(T); atol=eps(real(T))) && throw(LinearAlgebra.SingularException(k))
38+
max_piv_idx = LinearAlgebra.BLAS.iamax(piv_val)
39+
max_piv_val = piv_val[max_piv_idx]
40+
abs_max_piv_val = max_piv_val isa Real ? abs(max_piv_val) : abs(real(max_piv_val)) + abs(imag(max_piv_val))
41+
isapprox(abs_max_piv_val, zero(T); atol=eps(real(T))) && throw(LinearAlgebra.SingularException(k))
4142
ipivl[1] = (max_piv_idx+k-2)*nb + piv_idx[max_piv_idx]
4243
end
4344

0 commit comments

Comments
 (0)