Skip to content

Commit 1aff3ae

Browse files
committed
fixes
1 parent af961e5 commit 1aff3ae

File tree

5 files changed

+35
-29
lines changed

5 files changed

+35
-29
lines changed

lib/OrdinaryDiffEqDifferentiation/src/linsolve_utils.jl

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ function dolinsolve(integrator, linsolve; A = nothing, linu = nothing, b = nothi
1717

1818
_alg = unwrap_alg(integrator, true)
1919

20-
_Pl,
21-
_Pr = _alg.precs(linsolve.A, du, u, p, t, A !== nothing, Plprev, Prprev,
20+
_Pl, _Pr = _alg.precs(linsolve.A, du, u, p, t, A !== nothing, Plprev, Prprev,
2221
solverdata)
2322
if (_Pl !== nothing || _Pr !== nothing)
2423
__Pl = _Pl === nothing ? SciMLOperators.IdentityOperator(length(integrator.u)) : _Pl
@@ -58,8 +57,15 @@ function wrapprecs(_Pl, _Pr, weight, u)
5857
Pl, Pr
5958
end
6059

61-
function wrapprecs(linsolver, W, weight)
60+
function wrapprecs(alg, W, weight, u, p, t)
61+
linsolver = alg.linsolve
6262
if hasproperty(linsolver, :precs) && isnothing(linsolver.precs)
63+
64+
if alg.precs != OrdinaryDiffEqCore.DEFAULT_PRECS
65+
@warn "passing precs via the ODE solver is deprecated. Pass precs via the Linear Solver"
66+
precs = Returns(wrapprecs(alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, nothing)..., weight, u))
67+
return remake(linsolver; precs)
68+
end
6369
Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight)))
6470
Pr = Diagonal(_vec(weight))
6571
precs = Returns((Pl, Pr))

lib/OrdinaryDiffEqNonlinearSolve/src/utils.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ function build_nlsolver(
212212
end
213213
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
214214
linprob = LinearProblem(W, _vec(k), (isdae ? du1 : nothing,u,p,t); u0 = _vec(dz))
215-
linsolve = init(linprob, wrapprecs(alg.linsolve, W, weight),
215+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t),
216216
alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
217217
assumptions = LinearSolve.OperatorAssumptions(true))
218218

lib/OrdinaryDiffEqRosenbrock/src/generic_rosenbrock.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ function gen_algcache(cacheexpr::Expr,constcachename::Symbol,algname::Symbol,tab
252252
jac_config = build_jac_config(alg,f,uf,du1,uprev,u,tmp,du2)
253253
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
254254
linprob = LinearProblem(W,_vec(linsolve_tmp), (nothing, u, p, t); u0=_vec(tmp))
255-
linsolve = init(linprob,alg.linsolve, alias = LinearAliasSpecifier(alias_A=true,alias_b=true))
255+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t), alias = LinearAliasSpecifier(alias_A=true,alias_b=true))
256256
$cachename($(valsyms...))
257257
end
258258
end

lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_caches.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ function alg_cache(alg::Rosenbrock23, u, rate_prototype, ::Type{uEltypeNoUnits},
156156
jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2)
157157
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
158158
linprob = LinearProblem(W, _vec(linsolve_tmp), (nothing,u,p,t); u0 = _vec(tmp))
159-
linsolve = init(linprob, alg.linsolve,
159+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t),
160160
alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
161161
assumptions = LinearSolve.OperatorAssumptions(true))
162162

@@ -198,7 +198,7 @@ function alg_cache(alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits},
198198
jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2)
199199
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
200200
linprob = LinearProblem(W, _vec(linsolve_tmp), (nothing,u,p,t); u0 = _vec(tmp))
201-
linsolve = init(linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
201+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t), alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
202202
assumptions = LinearSolve.OperatorAssumptions(true))
203203
algebraic_vars = f.mass_matrix === I ? nothing :
204204
[all(iszero, x) for x in eachcol(f.mass_matrix)]
@@ -233,7 +233,7 @@ function alg_cache(alg::Rosenbrock23, u, rate_prototype, ::Type{uEltypeNoUnits},
233233
uf = UDerivativeWrapper(f, t, p)
234234
J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false))
235235
linprob = nothing #LinearProblem(W,copy(u); u0=copy(u))
236-
linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true)
236+
linsolve = nothing #init(linprob,wrapprecs(alg, W, weight, u, p, t),alias_A=true,alias_b=true)
237237
Rosenbrock23ConstantCache(constvalue(uBottomEltypeNoUnits), tf, uf, J, W, linsolve,
238238
alg_autodiff(alg))
239239
end
@@ -263,7 +263,7 @@ function alg_cache(alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits},
263263
uf = UDerivativeWrapper(f, t, p)
264264
J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false))
265265
linprob = nothing #LinearProblem(W,copy(u); u0=copy(u))
266-
linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true)
266+
linsolve = nothing #init(linprob,wrapprecs(alg, W, weight, u, p, t),alias_A=true,alias_b=true)
267267
Rosenbrock32ConstantCache(constvalue(uBottomEltypeNoUnits), tf, uf, J, W, linsolve,
268268
alg_autodiff(alg))
269269
end
@@ -343,7 +343,7 @@ function alg_cache(alg::ROS3P, u, rate_prototype, ::Type{uEltypeNoUnits},
343343
jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2)
344344
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
345345
linprob = LinearProblem(W, _vec(linsolve_tmp), (nothing, u, p, t); u0 = _vec(tmp))
346-
linsolve = init(linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
346+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t), alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
347347
assumptions = LinearSolve.OperatorAssumptions(true))
348348
Rosenbrock33Cache(u, uprev, du, du1, du2, k1, k2, k3, k4,
349349
fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf,
@@ -360,7 +360,7 @@ function alg_cache(alg::ROS3P, u, rate_prototype, ::Type{uEltypeNoUnits},
360360
uf = UDerivativeWrapper(f, t, p)
361361
J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false))
362362
linprob = nothing #LinearProblem(W,copy(u); u0=copy(u))
363-
linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true)
363+
linsolve = nothing #init(linprob,wrapprecs(alg, W, weight, u, p, t),alias_A=true,alias_b=true)
364364
Rosenbrock33ConstantCache(tf, uf,
365365
ROS3PTableau(constvalue(uBottomEltypeNoUnits),
366366
constvalue(tTypeNoUnits)), J, W, linsolve)
@@ -426,7 +426,7 @@ function alg_cache(alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits},
426426
jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2)
427427
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
428428
linprob = LinearProblem(W, _vec(linsolve_tmp), (nothing, u, p, t); u0 = _vec(tmp))
429-
linsolve = init(linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
429+
linsolve = init(linprob, alg.wrapprecs(alg, W, weight, u, p, t), alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
430430
assumptions = LinearSolve.OperatorAssumptions(true))
431431
Rosenbrock34Cache(u, uprev, du, du1, du2, k1, k2, k3, k4,
432432
fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf,
@@ -453,7 +453,7 @@ function alg_cache(alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits},
453453
uf = UDerivativeWrapper(f, t, p)
454454
J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false))
455455
linprob = nothing #LinearProblem(W,copy(u); u0=copy(u))
456-
linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true)
456+
linsolve = nothing #init(linprob,wrapprecs(alg, W, weight, u, p, t),alias_A=true,alias_b=true)
457457
Rosenbrock34ConstantCache(tf, uf,
458458
Rodas3Tableau(constvalue(uBottomEltypeNoUnits),
459459
constvalue(tTypeNoUnits)), J, W, linsolve)
@@ -615,7 +615,7 @@ function alg_cache(alg::Rodas23W, u, rate_prototype, ::Type{uEltypeNoUnits},
615615
jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2)
616616
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
617617
linprob = LinearProblem(W, _vec(linsolve_tmp), (nothing, u, p, t); u0 = _vec(tmp))
618-
linsolve = init(linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
618+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t), alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
619619
assumptions = LinearSolve.OperatorAssumptions(true))
620620
Rodas23WCache(u, uprev, dense1, dense2, dense3, du, du1, du2, k1, k2, k3, k4, k5,
621621
fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp,
@@ -655,7 +655,7 @@ function alg_cache(alg::Rodas3P, u, rate_prototype, ::Type{uEltypeNoUnits},
655655
jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2)
656656
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
657657
linprob = LinearProblem(W, _vec(linsolve_tmp), (nothing, u, p, t); u0 = _vec(tmp))
658-
linsolve = init(linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
658+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t), alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
659659
assumptions = LinearSolve.OperatorAssumptions(true))
660660
Rodas3PCache(u, uprev, dense1, dense2, dense3, du, du1, du2, k1, k2, k3, k4, k5,
661661
fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp,
@@ -671,7 +671,7 @@ function alg_cache(alg::Rodas23W, u, rate_prototype, ::Type{uEltypeNoUnits},
671671
uf = UDerivativeWrapper(f, t, p)
672672
J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false))
673673
linprob = nothing #LinearProblem(W,copy(u); u0=copy(u))
674-
linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true)
674+
linsolve = nothing #init(linprob,wrapprecs(alg, W, weight, u, p, t),alias_A=true,alias_b=true)
675675
Rodas23WConstantCache(tf, uf,
676676
Rodas3PTableau(constvalue(uBottomEltypeNoUnits),
677677
constvalue(tTypeNoUnits)), J, W, linsolve,
@@ -686,7 +686,7 @@ function alg_cache(alg::Rodas3P, u, rate_prototype, ::Type{uEltypeNoUnits},
686686
uf = UDerivativeWrapper(f, t, p)
687687
J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false))
688688
linprob = nothing #LinearProblem(W,copy(u); u0=copy(u))
689-
linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true)
689+
linsolve = nothing #init(linprob,wrapprecs(alg, W, weight, u, p, t),alias_A=true,alias_b=true)
690690
Rodas3PConstantCache(tf, uf,
691691
Rodas3PTableau(constvalue(uBottomEltypeNoUnits),
692692
constvalue(tTypeNoUnits)), J, W, linsolve,
@@ -715,7 +715,7 @@ function alg_cache(
715715
uf = UDerivativeWrapper(f, t, p)
716716
J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false))
717717
linprob = nothing #LinearProblem(W,copy(u); u0=copy(u))
718-
linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true)
718+
linsolve = nothing #init(linprob,wrapprecs(alg, W, weight, u, p, t),alias_A=true,alias_b=true)
719719
tab = tabtype(alg)(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits))
720720
RosenbrockCombinedConstantCache(tf, uf,
721721
tab, J, W, linsolve,
@@ -759,7 +759,7 @@ function alg_cache(
759759
jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2)
760760
J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true))
761761
linprob = LinearProblem(W, _vec(linsolve_tmp), (nothing, u, p, t); u0 = _vec(tmp))
762-
linsolve = init(linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
762+
linsolve = init(linprob, wrapprecs(alg, W, weight, u, p, t), alias = LinearAliasSpecifier(alias_A = true, alias_b = true),
763763
assumptions = LinearSolve.OperatorAssumptions(true))
764764

765765

test/interface/linear_nonlinear_tests.jl

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,28 @@ solref = @test_nowarn solve(prob,
4444
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
4545
smooth_est = false));
4646
@test length(sol.t) < 20
47-
sol = @test_nowarn solve(prob,
47+
sol = solve(prob,
4848
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
4949
precs = precsl, smooth_est = false, concrete_jac = true));
5050
@test length(sol.t) < 20
51-
sol = @test_nowarn solve(prob,
51+
sol = solve(prob,
5252
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
5353
precs = precsr, smooth_est = false, concrete_jac = true));
5454
@test length(sol.t) < 20
55-
sol = @test_nowarn solve(prob,
55+
sol = solve(prob,
5656
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
5757
precs = precslr, smooth_est = false, concrete_jac = true));
5858
@test length(sol.t) < 20
5959
sol = @test_nowarn solve(prob,
6060
QNDF(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
6161
concrete_jac = true));
6262
@test length(sol.t) < 25
63-
sol = @test_nowarn solve(prob,
63+
sol = solve(prob,
6464
Rosenbrock23(autodiff = AutoFiniteDiff(),
6565
linsolve = KrylovJL_GMRES(),
6666
precs = precslr, concrete_jac = true));
6767
@test length(sol.t) < 20
68-
sol = @test_nowarn solve(prob,
68+
sol = solve(prob,
6969
Rodas4(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
7070
precs = precslr, concrete_jac = true));
7171
@test length(sol.t) < 20
@@ -79,27 +79,27 @@ sol = @test_nowarn solve(prob,
7979
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
8080
smooth_est = false));
8181
@test length(sol.t) < 20
82-
sol = @test_nowarn solve(prob,
82+
sol = solve(prob,
8383
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
8484
precs = precsl, smooth_est = false, concrete_jac = true));
8585
@test length(sol.t) < 20
86-
sol = @test_nowarn solve(prob,
86+
sol = solve(prob,
8787
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
8888
precs = precsr, smooth_est = false, concrete_jac = true));
8989
@test length(sol.t) < 20
90-
sol = @test_nowarn solve(prob,
90+
sol = solve(prob,
9191
TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
9292
precs = precslr, smooth_est = false, concrete_jac = true));
9393
@test length(sol.t) < 20
9494
sol = @test_nowarn solve(prob,
9595
QNDF(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
9696
concrete_jac = true));
9797
@test length(sol.t) < 25
98-
sol = @test_nowarn solve(prob,
98+
sol = solve(prob,
9999
Rosenbrock23(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
100100
precs = precslr, concrete_jac = true));
101101
@test length(sol.t) < 20
102-
sol = @test_nowarn solve(prob,
102+
sol = solve(prob,
103103
Rodas4(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(),
104104
precs = precslr, concrete_jac = true));
105105
@test length(sol.t) < 20

0 commit comments

Comments
 (0)