@@ -201,10 +201,11 @@ function init_cacheval(alg::IterativeSolversJL, A, b, u, Pl, Pr, maxiters, absto
201201end
202202
203203function 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)
217218end
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
0 commit comments