Skip to content

Commit 205a762

Browse files
refactor: accept a single op in InitializationProblem
1 parent 868a07d commit 205a762

File tree

1 file changed

+18
-17
lines changed

1 file changed

+18
-17
lines changed

src/problems/initializationproblem.jl

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ struct InitializationProblem{iip, specialization} end
22

33
"""
44
```julia
5-
InitializationProblem{iip}(sys::AbstractSystem, t, u0map,
6-
parammap = DiffEqBase.NullParameters();
5+
InitializationProblem{iip}(sys::AbstractSystem, t, op;
76
version = nothing, tgrad = false,
87
jac = false,
98
checkbounds = false, sparse = false,
@@ -20,8 +19,7 @@ initial conditions for the given DAE.
2019
"""
2120
@fallback_iip_specialize function InitializationProblem{iip, specialize}(
2221
sys::AbstractSystem,
23-
t, u0map = [],
24-
parammap = DiffEqBase.NullParameters();
22+
t, op = Dict();
2523
guesses = [],
2624
check_length = true,
2725
warn_initialize_determined = true,
@@ -37,18 +35,24 @@ initial conditions for the given DAE.
3735
if !iscomplete(sys)
3836
error("A completed system is required. Call `complete` or `mtkcompile` on the system before creating an `ODEProblem`")
3937
end
40-
if isempty(u0map) && get_initializesystem(sys) !== nothing
38+
has_u0_ics = false
39+
op = copy(anydict(op))
40+
for k in keys(op)
41+
has_u0_ics |= is_variable(sys, k) || isdifferential(k) ||
42+
symbolic_type(k) == ArraySymbolic() &&
43+
is_sized_array_symbolic(k) && is_variable(sys, first(collect(k)))
44+
end
45+
if !has_u0_ics && get_initializesystem(sys) !== nothing
4146
isys = get_initializesystem(sys; initialization_eqs, check_units)
4247
simplify_system = false
43-
elseif isempty(u0map) && get_initializesystem(sys) === nothing
48+
elseif !has_u0_ics && get_initializesystem(sys) === nothing
4449
isys = generate_initializesystem(
45-
sys; initialization_eqs, check_units, pmap = parammap,
46-
guesses, algebraic_only)
50+
sys; initialization_eqs, check_units, op, guesses, algebraic_only)
4751
simplify_system = true
4852
else
4953
isys = generate_initializesystem(
50-
sys; u0map, initialization_eqs, check_units, time_dependent_init,
51-
pmap = parammap, guesses, algebraic_only)
54+
sys; op, initialization_eqs, check_units, time_dependent_init,
55+
guesses, algebraic_only)
5256
simplify_system = true
5357
end
5458

@@ -106,20 +110,17 @@ initial conditions for the given DAE.
106110
@warn "Initialization system is underdetermined. $neqs equations for $nunknown unknowns. Initialization will default to using least squares. $(scc_message)To suppress this warning pass warn_initialize_determined = false. To make this warning into an error, pass fully_determined = true"
107111
end
108112

109-
parammap = recursive_unwrap(anydict(parammap))
110113
if t !== nothing
111-
parammap[get_iv(sys)] = t
114+
op[get_iv(sys)] = t
112115
end
113-
filter!(kvp -> kvp[2] !== missing, parammap)
116+
filter!(kvp -> kvp[2] !== missing, op)
114117

115-
u0map = to_varmap(u0map, unknowns(sys))
116118
if isempty(guesses)
117119
guesses = Dict()
118120
end
119121

120-
filter_missing_values!(u0map)
121-
filter_missing_values!(parammap)
122-
op = merge(ModelingToolkit.guesses(sys), todict(guesses), u0map, parammap)
122+
filter_missing_values!(op)
123+
op = merge(ModelingToolkit.guesses(sys), todict(guesses), op)
123124

124125
TProb = if neqs == nunknown && isempty(unassigned_vars)
125126
if use_scc && neqs > 0

0 commit comments

Comments
 (0)