Skip to content

Commit a5dc3f3

Browse files
refactor: directly solve initialization problem in linearization_function
1 parent 72044e4 commit a5dc3f3

File tree

3 files changed

+13
-10
lines changed

3 files changed

+13
-10
lines changed

Project.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
3232
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
3333
MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078"
3434
NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
35+
NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
3536
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
36-
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
3737
PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
3838
RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd"
3939
Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
@@ -92,6 +92,7 @@ Libdl = "1"
9292
LinearAlgebra = "1"
9393
MLStyle = "0.4.17"
9494
NaNMath = "0.3, 1"
95+
NonlinearSolve = "3.12"
9596
OrderedCollections = "1"
9697
OrdinaryDiffEq = "6.82.0"
9798
PrecompileTools = "1"
@@ -129,6 +130,7 @@ NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
129130
Optimization = "7f7a1694-90dd-40f0-9382-eb1efda571ba"
130131
OptimizationMOI = "fd9f6733-72f4-499f-8506-86b2bdd0dea1"
131132
OptimizationOptimJL = "36348300-93cb-4f02-beb5-3c3902f8871e"
133+
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
132134
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
133135
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
134136
ReferenceTests = "324d217c-45ce-50fc-942e-d289b448e8cf"
@@ -142,4 +144,4 @@ Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4"
142144
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
143145

144146
[targets]
145-
test = ["AmplNLWriter", "BenchmarkTools", "ControlSystemsBase", "DelayDiffEq", "NonlinearSolve", "ForwardDiff", "Ipopt", "Ipopt_jll", "ModelingToolkitStandardLibrary", "Optimization", "OptimizationOptimJL", "OptimizationMOI", "Random", "ReferenceTests", "SafeTestsets", "StableRNGs", "Statistics", "SteadyStateDiffEq", "Test", "StochasticDiffEq", "Sundials", "StochasticDelayDiffEq", "Pkg", "JET"]
147+
test = ["AmplNLWriter", "BenchmarkTools", "ControlSystemsBase", "DelayDiffEq", "NonlinearSolve", "ForwardDiff", "Ipopt", "Ipopt_jll", "ModelingToolkitStandardLibrary", "Optimization", "OptimizationOptimJL", "OptimizationMOI", "OrdinaryDiffEq", "Random", "ReferenceTests", "SafeTestsets", "StableRNGs", "Statistics", "SteadyStateDiffEq", "Test", "StochasticDiffEq", "Sundials", "StochasticDelayDiffEq", "Pkg", "JET"]

src/ModelingToolkit.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ using SciMLBase: StandardODEProblem, StandardNonlinearProblem, handle_varmap
4646
using Distributed
4747
import JuliaFormatter
4848
using MLStyle
49-
import OrdinaryDiffEq
49+
using NonlinearSolve
5050
using Reexport
5151
using RecursiveArrayTools
5252
import Graphs: SimpleDiGraph, add_edge!, incidence_matrix

src/systems/abstractsystem.jl

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1813,8 +1813,10 @@ function linearization_function(sys::AbstractSystem, inputs,
18131813
op = merge(defs, op)
18141814
end
18151815
sys = ssys
1816-
initsys = complete(generate_initializesystem(
1817-
sys, guesses = guesses(sys), algebraic_only = true))
1816+
initsys = structural_simplify(
1817+
generate_initializesystem(
1818+
sys, guesses = guesses(sys), algebraic_only = true),
1819+
fully_determined = false)
18181820
if p isa SciMLBase.NullParameters
18191821
p = Dict()
18201822
else
@@ -1897,8 +1899,9 @@ function linearization_function(sys::AbstractSystem, inputs,
18971899
sts = unknowns(sys),
18981900
get_initprob_u_p = get_initprob_u_p,
18991901
fun = ODEFunction{true, SciMLBase.FullSpecialize}(
1900-
sys, unknowns(sys), ps; initializeprobmap = initprobmap),
1902+
sys, unknowns(sys), ps),
19011903
initfn = initfn,
1904+
initprobmap = initprobmap,
19021905
h = build_explicit_observed_function(sys, outputs),
19031906
chunk = ForwardDiff.Chunk(input_idxs),
19041907
sys_ps = sys_ps,
@@ -1923,10 +1926,8 @@ function linearization_function(sys::AbstractSystem, inputs,
19231926
if norm(residual[alge_idxs]) > (eps(eltype(residual)))
19241927
initu0, initp = get_initprob_u_p(u, p, t)
19251928
initprob = NonlinearLeastSquaresProblem(initfn, initu0, initp)
1926-
@set! fun.initializeprob = initprob
1927-
prob = ODEProblem(fun, u, (t, t + 1), p)
1928-
integ = init(prob, OrdinaryDiffEq.Rodas5P())
1929-
u = integ.u
1929+
nlsol = solve(initprob)
1930+
u = initprobmap(nlsol)
19301931
end
19311932
end
19321933
uf = SciMLBase.UJacobianWrapper(fun, t, p)

0 commit comments

Comments
 (0)