Skip to content

Commit 615c7fc

Browse files
fix: allow passing guesses to linearization_function
1 parent 3d9a8d8 commit 615c7fc

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

src/linearization.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ function linearization_function(sys::AbstractSystem, inputs,
4141
initialization_solver_alg = TrustRegion(),
4242
eval_expression = false, eval_module = @__MODULE__,
4343
warn_initialize_determined = true,
44+
guesses = Dict(),
4445
kwargs...)
4546
op = Dict(op)
4647
inputs isa AbstractVector || (inputs = [inputs])
@@ -66,11 +67,10 @@ function linearization_function(sys::AbstractSystem, inputs,
6667
initializealg = initialize ? OverrideInit() : NoInit()
6768
end
6869

69-
fun, u0, p = process_SciMLProblem(
70-
ODEFunction{true, SciMLBase.FullSpecialize}, sys, op, p;
71-
t = 0.0, build_initializeprob = initializealg isa OverrideInit,
72-
allow_incomplete = true, algebraic_only = true)
73-
prob = ODEProblem(fun, u0, (nothing, nothing), p)
70+
prob = ODEProblem{true, SciMLBase.FullSpecialize}(
71+
sys, op, (nothing, nothing), p; allow_incomplete = true,
72+
algebraic_only = true, guesses)
73+
u0 = state_values(prob)
7474

7575
ps = parameters(sys)
7676
h = build_explicit_observed_function(sys, outputs; eval_expression, eval_module)

test/downstream/linearize.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,12 +317,15 @@ matrices = linfun([1.0], Dict(p => 3.0), 1.0)
317317
@test matrices.f_u[] == 3.0
318318
end
319319

320-
@testset "Issue #2941" begin
321-
@variables x(t) y(t) [guess = 1.0]
320+
@testset "Issue #2941 and #3400" begin
321+
@variables x(t) y(t)
322322
@parameters p
323323
eqs = [0 ~ x * log(y) - p]
324324
@named sys = ODESystem(eqs, t; defaults = [p => 1.0])
325325
sys = complete(sys)
326-
@test_nowarn linearize(
326+
@test_throws ModelingToolkit.MissingVariablesError linearize(
327327
sys, [x], []; op = Dict(x => 1.0), allow_input_derivatives = true)
328+
@test_nowarn linearize(
329+
sys, [x], []; op = Dict(x => 1.0), guesses = Dict(y => 1.0),
330+
allow_input_derivatives = true)
328331
end

0 commit comments

Comments
 (0)