Skip to content

Commit 20d13da

Browse files
Reuse du2 of Tridiagonal matrix for pivoting in lu! if extant (#47564)
1 parent 7514bcf commit 20d13da

File tree

1 file changed

+9
-2
lines changed
  • stdlib/LinearAlgebra/src

1 file changed

+9
-2
lines changed

stdlib/LinearAlgebra/src/lu.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,14 @@ function lu!(A::Tridiagonal{T,V}, pivot::Union{RowMaximum,NoPivot} = RowMaximum(
527527
if dl === du
528528
throw(ArgumentError("off-diagonals of `A` must not alias"))
529529
end
530-
du2 = fill!(similar(d, max(0, n-2)), 0)::V
530+
# Check if Tridiagonal matrix already has du2 for pivoting
531+
has_du2_defined = isdefined(A, :du2) && length(A.du2) == max(0, n-2)
532+
if has_du2_defined
533+
du2 = A.du2::V
534+
else
535+
du2 = similar(d, max(0, n-2))::V
536+
end
537+
fill!(du2, 0)
531538

532539
@inbounds begin
533540
for i = 1:n
@@ -582,7 +589,7 @@ function lu!(A::Tridiagonal{T,V}, pivot::Union{RowMaximum,NoPivot} = RowMaximum(
582589
end
583590
end
584591
end
585-
B = Tridiagonal{T,V}(dl, d, du, du2)
592+
B = has_du2_defined ? A : Tridiagonal{T,V}(dl, d, du, du2)
586593
check && checknonsingular(info, pivot)
587594
return LU{T,Tridiagonal{T,V},typeof(ipiv)}(B, ipiv, convert(BlasInt, info))
588595
end

0 commit comments

Comments
 (0)