Skip to content

Commit 4285acd

Browse files
hotfix matrix operator and stats
1 parent 9affc16 commit 4285acd

File tree

3 files changed

+25
-12
lines changed

3 files changed

+25
-12
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "LinearSolve"
22
uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae"
33
authors = ["SciML"]
4-
version = "2.1.4"
4+
version = "2.1.5"
55

66
[deps]
77
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"

src/factorization.jl

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,16 @@ function init_cacheval(alg::Union{LUFactorization, GenericLUFactorization}, A, b
103103
ArrayInterface.lu_instance(convert(AbstractMatrix, A))
104104
end
105105

106+
function init_cacheval(alg::Union{LUFactorization, GenericLUFactorization}, A::MatrixOperator, b, u, Pl, Pr,
107+
maxiters::Int, abstol, reltol, verbose::Bool,
108+
assumptions::OperatorAssumptions)
109+
ArrayInterface.lu_instance(convert(AbstractMatrix, A))
110+
end
111+
106112
const PREALLOCATED_LU = ArrayInterface.lu_instance(rand(1, 1))
107113

108114
function init_cacheval(alg::Union{LUFactorization, GenericLUFactorization},
109-
A::Matrix{Float64}, b, u, Pl, Pr,
115+
A::Union{Matrix{Float64},MatrixOperator{Float64, Matrix{Float64}}}, b, u, Pl, Pr,
110116
maxiters::Int, abstol, reltol, verbose::Bool,
111117
assumptions::OperatorAssumptions)
112118
PREALLOCATED_LU
@@ -175,7 +181,7 @@ end
175181

176182
const PREALLOCATED_QR = ArrayInterface.qr_instance(rand(1, 1))
177183

178-
function init_cacheval(alg::QRFactorization, A::Matrix{Float64}, b, u, Pl, Pr,
184+
function init_cacheval(alg::QRFactorization, A::Union{Matrix{Float64}, MatrixOperator{Float64, Matrix{Float64}}}, b, u, Pl, Pr,
179185
maxiters::Int, abstol, reltol, verbose::Bool,
180186
assumptions::OperatorAssumptions)
181187
PREALLOCATED_QR
@@ -254,7 +260,7 @@ end
254260

255261
const PREALLOCATED_CHOLESKY = ArrayInterface.cholesky_instance(rand(1, 1), cholpivot)
256262

257-
function init_cacheval(alg::CholeskyFactorization, A::Matrix{Float64}, b, u, Pl, Pr,
263+
function init_cacheval(alg::CholeskyFactorization, A::Union{Matrix{Float64}, MatrixOperator{Float64, Matrix{Float64}}}, b, u, Pl, Pr,
258264
maxiters::Int, abstol, reltol, verbose::Bool,
259265
assumptions::OperatorAssumptions)
260266
PREALLOCATED_CHOLESKY
@@ -346,7 +352,7 @@ end
346352

347353
const PREALLOCATED_SVD = ArrayInterface.svd_instance(rand(1, 1))
348354

349-
function init_cacheval(alg::SVDFactorization, A::Matrix{Float64}, b, u, Pl, Pr,
355+
function init_cacheval(alg::SVDFactorization, A::Union{Matrix{Float64}, MatrixOperator{Float64, Matrix{Float64}}}, b, u, Pl, Pr,
350356
maxiters::Int, abstol, reltol, verbose::Bool,
351357
assumptions::OperatorAssumptions)
352358
PREALLOCATED_SVD
@@ -671,7 +677,7 @@ function init_cacheval(alg::UMFPACKFactorization,
671677
nothing
672678
end
673679

674-
function init_cacheval(alg::UMFPACKFactorization, A::SparseMatrixCSC{Float64, Int}, b, u,
680+
function init_cacheval(alg::UMFPACKFactorization, A::Union{SparseMatrixCSC{Float64, Int}, MatrixOperator{Float64, Matrix{Float64}}}, b, u,
675681
Pl, Pr,
676682
maxiters::Int, abstol, reltol,
677683
verbose::Bool, assumptions::OperatorAssumptions)
@@ -768,7 +774,7 @@ function init_cacheval(alg::KLUFactorization,
768774
nothing
769775
end
770776

771-
function init_cacheval(alg::KLUFactorization, A::SparseMatrixCSC{Float64, Int}, b, u, Pl,
777+
function init_cacheval(alg::KLUFactorization, A::Union{SparseMatrixCSC{Float64, Int}, MatrixOperator{Float64, Matrix{Float64}}}, b, u, Pl,
772778
Pr,
773779
maxiters::Int, abstol, reltol,
774780
verbose::Bool, assumptions::OperatorAssumptions)
@@ -855,7 +861,7 @@ function init_cacheval(alg::CHOLMODFactorization,
855861
nothing
856862
end
857863

858-
function init_cacheval(alg::CHOLMODFactorization, A::SparseMatrixCSC{Float64, Int}, b, u,
864+
function init_cacheval(alg::CHOLMODFactorization, A::Union{SparseMatrixCSC{Float64, Int}, MatrixOperator{Float64, Matrix{Float64}}}, b, u,
859865
Pl, Pr,
860866
maxiters::Int, abstol, reltol,
861867
verbose::Bool, assumptions::OperatorAssumptions)
@@ -911,7 +917,13 @@ function init_cacheval(alg::RFLUFactorization, A, b, u, Pl, Pr, maxiters::Int,
911917
ArrayInterface.lu_instance(convert(AbstractMatrix, A)), ipiv
912918
end
913919

914-
function init_cacheval(alg::RFLUFactorization, A::Matrix{Float64}, b, u, Pl, Pr,
920+
function init_cacheval(alg::RFLUFactorization, A::MatrixOperator, b, u, Pl, Pr, maxiters::Int,
921+
abstol, reltol, verbose::Bool, assumptions::OperatorAssumptions)
922+
ipiv = Vector{LinearAlgebra.BlasInt}(undef, min(size(A)...))
923+
ArrayInterface.lu_instance(convert(AbstractMatrix, A)), ipiv
924+
end
925+
926+
function init_cacheval(alg::RFLUFactorization, A::Union{Matrix{Float64}, MatrixOperator{Float64, Matrix{Float64}}}, b, u, Pl, Pr,
915927
maxiters::Int,
916928
abstol, reltol, verbose::Bool, assumptions::OperatorAssumptions)
917929
ipiv = Vector{LinearAlgebra.BlasInt}(undef, 0)
@@ -1266,7 +1278,7 @@ function init_cacheval(alg::SparspakFactorization,
12661278
nothing
12671279
end
12681280

1269-
function init_cacheval(::SparspakFactorization, A::SparseMatrixCSC{Float64, Int}, b, u, Pl,
1281+
function init_cacheval(::SparspakFactorization, A::Union{SparseMatrixCSC{Float64, Int}, MatrixOperator{Float64, Matrix{Float64}}}, b, u, Pl,
12701282
Pr, maxiters::Int, abstol,
12711283
reltol,
12721284
verbose::Bool, assumptions::OperatorAssumptions)

src/iterative_wrappers.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,9 @@ function SciMLBase.solve!(cache::LinearCache, alg::KrylovJL; kwargs...)
267267
Krylov.solve!(args...; kwargs...)
268268
end
269269

270-
resid = @get_cacheval(cache, :KrylovJL_GMRES).stats.residuals |> last
270+
stats = @get_cacheval(cache, :KrylovJL_GMRES).stats
271+
resid = stats.residuals |> last
271272

272273
return SciMLBase.build_linear_solution(alg, cache.u, resid, cache;
273-
iters = cache.cacheval.stats.niter)
274+
iters = stats.niter)
274275
end

0 commit comments

Comments
 (0)