Skip to content

Commit ca5f274

Browse files
Merge pull request #69 from SciML/hist
add history purging
2 parents de0b093 + 553ac2e commit ca5f274

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
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 = "0.2.3"
4+
version = "0.2.4"
55

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

src/iterative_wrappers.jl

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,11 @@ function init_cacheval(alg::IterativeSolversJL, A, b, u, Pl, Pr, maxiters, absto
201201
end
202202

203203
function SciMLBase.solve(cache::LinearCache, alg::IterativeSolversJL; kwargs...)
204-
if cache.isfresh
204+
if cache.isfresh || !(alg <: IterativeSolvers.GMRESIterable)
205205
solver = init_cacheval(alg, cache.A, cache.b, cache.u, cache.Pl, cache.Pr, cache.maxiters, cache.abstol, cache.reltol, cache.verbose)
206206
cache = set_cacheval(cache, solver)
207207
end
208+
purge_history!(cache.cacheval, cache.u, cache.b)
208209

209210
cache.verbose && println("Using IterativeSolvers.$(alg.generate_iterator)")
210211
for iter in enumerate(cache.cacheval)
@@ -215,3 +216,15 @@ function SciMLBase.solve(cache::LinearCache, alg::IterativeSolversJL; kwargs...)
215216

216217
return SciMLBase.build_linear_solution(alg,cache.u,nothing,cache)
217218
end
219+
220+
purge_history!(iter, x, b) = nothing
221+
function purge_history!(iter::IterativeSolvers.GMRESIterable, x, b)
222+
iter.k = 1
223+
iter.x = x
224+
iter.b = b
225+
226+
iter.residual.current = IterativeSolvers.init!(iter.arnoldi, iter.x, iter.b, iter.Pl, iter.Ax, initially_zero = true)
227+
IterativeSolvers.init_residual!(iter.residual, iter.residual.current)
228+
iter.β = iter.residual.current
229+
nothing
230+
end

test/runtests.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@ function test_interface(alg, prob1, prob2)
1616
A1 = prob1.A; b1 = prob1.b; x1 = prob1.u0
1717
A2 = prob2.A; b2 = prob2.b; x2 = prob2.u0
1818

19+
x1 .= false
1920
y = solve(prob1, alg; cache_kwargs...)
2021
@test A1 * y b1
2122

2223
cache = SciMLBase.init(prob1,alg; cache_kwargs...) # initialize cache
24+
cache.u .= false
2325
y = solve(cache)
2426
@test A1 * y b1
2527

2628
cache = LinearSolve.set_A(cache,copy(A2))
29+
cache.u .= false
2730
y = solve(cache)
2831
@test A2 * y b1
2932

3033
cache = LinearSolve.set_b(cache,b2)
34+
cache.u .= false
3135
y = solve(cache)
3236
@test A2 * y b2
3337

0 commit comments

Comments
 (0)