Skip to content

Commit e617703

Browse files
Allow for setting fully_determined=true in initialization
1 parent f9226f9 commit e617703

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,7 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
762762
warn_initialize_determined = true,
763763
build_initializeprob = true,
764764
initialization_eqs = [],
765+
fully_determined = false,
765766
kwargs...)
766767
eqs = equations(sys)
767768
dvs = unknowns(sys)
@@ -835,7 +836,7 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
835836
end
836837
initializeprob = ModelingToolkit.InitializationProblem(
837838
sys, t, u0map, parammap; guesses, warn_initialize_determined,
838-
initialization_eqs, eval_expression, eval_module)
839+
initialization_eqs, eval_expression, eval_module, fully_determined)
839840
initializeprobmap = getu(initializeprob, unknowns(sys))
840841

841842
zerovars = Dict(setdiff(unknowns(sys), keys(defaults(sys))) .=> 0.0)
@@ -1478,6 +1479,7 @@ InitializationProblem{iip}(sys::AbstractODESystem, u0map, tspan,
14781479
simplify = false,
14791480
linenumbers = true, parallel = SerialForm(),
14801481
initialization_eqs = [],
1482+
fully_determined = false,
14811483
kwargs...) where {iip}
14821484
```
14831485
@@ -1527,6 +1529,7 @@ function InitializationProblem{iip, specialize}(sys::AbstractODESystem,
15271529
check_length = true,
15281530
warn_initialize_determined = true,
15291531
initialization_eqs = [],
1532+
fully_determined = false,
15301533
kwargs...) where {iip, specialize}
15311534
if !iscomplete(sys)
15321535
error("A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `ODEProblem`")
@@ -1535,10 +1538,10 @@ function InitializationProblem{iip, specialize}(sys::AbstractODESystem,
15351538
isys = get_initializesystem(sys; initialization_eqs)
15361539
elseif isempty(u0map) && get_initializesystem(sys) === nothing
15371540
isys = structural_simplify(
1538-
generate_initializesystem(sys; initialization_eqs); fully_determined = false)
1541+
generate_initializesystem(sys; initialization_eqs); fully_determined)
15391542
else
15401543
isys = structural_simplify(
1541-
generate_initializesystem(sys; u0map, initialization_eqs); fully_determined = false)
1544+
generate_initializesystem(sys; u0map, initialization_eqs); fully_determined)
15421545
end
15431546

15441547
uninit = setdiff(unknowns(sys), [unknowns(isys); getfield.(observed(isys), :lhs)])

test/initializationsystem.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ sol = solve(initprob)
1717
@test SciMLBase.successful_retcode(sol)
1818
@test maximum(abs.(sol[conditions])) < 1e-14
1919

20+
@test_throws ModelingToolkit.ExtraVariablesSystemException ModelingToolkit.InitializationProblem(pend, 0.0, [], [g => 1];
21+
guesses = [ModelingToolkit.missing_variable_defaults(pend); x => 1; y => 0.2],
22+
fully_determined = true)
23+
2024
initprob = ModelingToolkit.InitializationProblem(pend, 0.0, [x => 1, y => 0], [g => 1];
2125
guesses = ModelingToolkit.missing_variable_defaults(pend))
2226
@test initprob isa NonlinearProblem
@@ -31,6 +35,10 @@ initprob = ModelingToolkit.InitializationProblem(
3135
sol = solve(initprob)
3236
@test !SciMLBase.successful_retcode(sol)
3337

38+
@test_throws ModelingToolkit.ExtraVariablesSystemException ModelingToolkit.InitializationProblem(
39+
pend, 0.0, [], [g => 1]; guesses = ModelingToolkit.missing_variable_defaults(pend),
40+
fully_determined = true)
41+
3442
prob = ODEProblem(pend, [x => 1, y => 0], (0.0, 1.5), [g => 1],
3543
guesses = ModelingToolkit.missing_variable_defaults(pend))
3644
prob.f.initializeprob isa NonlinearProblem
@@ -47,6 +55,10 @@ sol = solve(prob.f.initializeprob)
4755
sol = solve(prob, Rodas5P())
4856
@test maximum(abs.(sol[conditions][1])) < 1e-14
4957

58+
@test_throws ModelingToolkit.ExtraVariablesSystemException ODEProblem(pend, [x => 1], (0.0, 1.5), [g => 1],
59+
guesses = ModelingToolkit.missing_variable_defaults(pend),
60+
fully_determined = true)
61+
5062
@connector Port begin
5163
p(t)
5264
dm(t) = 0, [connect = Flow]
@@ -225,14 +237,20 @@ initsol = solve(initprob, reltol = 1e-12, abstol = 1e-12)
225237
@test SciMLBase.successful_retcode(initsol)
226238
@test maximum(abs.(initsol[conditions])) < 1e-14
227239

240+
@test_throws ModelingToolkit.ExtraEquationsSystemException ModelingToolkit.InitializationProblem(sys, 0.0, fully_determined = true)
241+
228242
allinit = unknowns(sys) .=> initsol[unknowns(sys)]
229243
prob = ODEProblem(sys, allinit, (0, 0.1))
230244
sol = solve(prob, Rodas5P(), initializealg = BrownFullBasicInit())
231245
# If initialized incorrectly, then it would be InitialFailure
232246
@test sol.retcode == SciMLBase.ReturnCode.Unstable
233247
@test maximum(abs.(initsol[conditions][1])) < 1e-14
234248

249+
prob = ODEProblem(sys, allinit, (0, 0.1))
235250
prob = ODEProblem(sys, [], (0, 0.1), check = false)
251+
252+
@test_throws ModelingToolkit.ExtraEquationsSystemException ODEProblem(sys, [], (0, 0.1), fully_determined = true)
253+
236254
sol = solve(prob, Rodas5P())
237255
# If initialized incorrectly, then it would be InitialFailure
238256
@test sol.retcode == SciMLBase.ReturnCode.Unstable

0 commit comments

Comments
 (0)