Skip to content

Commit 64427a9

Browse files
fix: fix SCCNonlinearProblem reordering parameters
1 parent 3d9a8d8 commit 64427a9

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/systems/nonlinear/nonlinearsystem.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,8 @@ function SciMLBase.SCCNonlinearProblem{iip}(sys::NonlinearSystem, u0map,
792792
new_eqs = eqs[reduce(vcat, eq_sccs)]
793793
@set! sys.unknowns = new_dvs
794794
@set! sys.eqs = new_eqs
795-
sys = complete(sys)
795+
@set! sys.index_cache = subset_unknowns_observed(
796+
get_index_cache(sys), sys, new_dvs, getproperty.(obs, (:lhs,)))
796797
return SCCNonlinearProblem(subprobs, explicitfuns, p, true; sys)
797798
end
798799

test/scc_nonlinear_problem.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,3 +263,22 @@ end
263263
sol = solve(prob, NewtonRaphson())
264264
@test SciMLBase.successful_retcode(sol)
265265
end
266+
267+
@testset "SCCNonlinearProblem retains parameter order" begin
268+
@variables x y z
269+
@parameters σ β ρ
270+
@mtkbuild fullsys = NonlinearSystem(
271+
[0 ~ x^3 * β + y^3 * ρ - σ, 0 ~ x^2 + 2x * y + y^2, 0 ~ z^2 - 4z + 4],
272+
[x, y, z], [σ, β, ρ])
273+
274+
u0 = [x => 1.0,
275+
y => 0.0,
276+
z => 0.0]
277+
278+
p ==> 28.0,
279+
ρ => 10.0,
280+
β => 8 / 3]
281+
282+
sccprob = SCCNonlinearProblem(fullsys, u0, p)
283+
@test isequal(parameters(fullsys), parameters(sccprob.f.sys))
284+
end

0 commit comments

Comments
 (0)