Skip to content

Commit 1d42958

Browse files
refactor: directly solve initialization problem in linearization_function
1 parent 3f67126 commit 1d42958

File tree

3 files changed

+7
-8
lines changed

3 files changed

+7
-8
lines changed

Project.toml

Lines changed: 2 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,8 +92,8 @@ Libdl = "1"
9292
LinearAlgebra = "1"
9393
MLStyle = "0.4.17"
9494
NaNMath = "0.3, 1"
95+
NonlinearSolve = "3.12"
9596
OrderedCollections = "1"
96-
OrdinaryDiffEq = "6.73.0"
9797
PrecompileTools = "1"
9898
RecursiveArrayTools = "2.3, 3"
9999
Reexport = "0.2, 1"

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: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,8 +1856,9 @@ function linearization_function(sys::AbstractSystem, inputs,
18561856
sts = unknowns(sys),
18571857
get_initprob_u_p = get_initprob_u_p,
18581858
fun = ODEFunction{true, SciMLBase.FullSpecialize}(
1859-
sys, unknowns(sys), ps; initializeprobmap = initprobmap),
1859+
sys, unknowns(sys), ps),
18601860
initfn = initfn,
1861+
initprobmap = initprobmap,
18611862
h = build_explicit_observed_function(sys, outputs),
18621863
chunk = ForwardDiff.Chunk(input_idxs),
18631864
sys_ps = sys_ps,
@@ -1882,10 +1883,8 @@ function linearization_function(sys::AbstractSystem, inputs,
18821883
if norm(residual[alge_idxs]) > (eps(eltype(residual)))
18831884
initu0, initp = get_initprob_u_p(u, p, t)
18841885
initprob = NonlinearLeastSquaresProblem(initfn, initu0, initp)
1885-
@set! fun.initializeprob = initprob
1886-
prob = ODEProblem(fun, u, (t, t + 1), p)
1887-
integ = init(prob, OrdinaryDiffEq.Rodas5P())
1888-
u = integ.u
1886+
nlsol = solve(initprob)
1887+
u = initprobmap(nlsol)
18891888
end
18901889
end
18911890
uf = SciMLBase.UJacobianWrapper(fun, t, p)

0 commit comments

Comments
 (0)