@@ -11,7 +11,7 @@ function generate_initializesystem(sys::ODESystem;
11
11
default_dd_guess = 0.0 ,
12
12
algebraic_only = false ,
13
13
check_units = true , check_defguess = false ,
14
- name = nameof (sys), kwargs... )
14
+ name = nameof (sys), extra_metadata = (;), kwargs... )
15
15
trueobs, eqs = unhack_observed (observed (sys), equations (sys))
16
16
vars = unique ([unknowns (sys); getfield .(trueobs, :lhs )])
17
17
vars_set = Set (vars) # for efficient in-lookup
@@ -179,7 +179,8 @@ function generate_initializesystem(sys::ODESystem;
179
179
for k in keys (defs)
180
180
defs[k] = substitute (defs[k], paramsubs)
181
181
end
182
- meta = InitializationSystemMetadata (anydict (u0map), anydict (pmap), additional_guesses)
182
+ meta = InitializationSystemMetadata (
183
+ anydict (u0map), anydict (pmap), additional_guesses, extra_metadata)
183
184
return NonlinearSystem (eqs_ics,
184
185
vars,
185
186
pars;
@@ -195,6 +196,7 @@ struct InitializationSystemMetadata
195
196
u0map:: Dict{Any, Any}
196
197
pmap:: Dict{Any, Any}
197
198
additional_guesses:: Dict{Any, Any}
199
+ extra_metadata:: NamedTuple
198
200
end
199
201
200
202
function is_parameter_solvable (p, pmap, defs, guesses)
@@ -282,6 +284,7 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
282
284
guesses = Dict ()
283
285
defs = defaults (sys)
284
286
cmap, cs = get_cmap (sys)
287
+ use_scc = true
285
288
286
289
if SciMLBase. has_initializeprob (odefn)
287
290
oldsys = odefn. initializeprob. f. sys
@@ -290,6 +293,7 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
290
293
u0map = merge (meta. u0map, u0map)
291
294
pmap = merge (meta. pmap, pmap)
292
295
merge! (guesses, meta. additional_guesses)
296
+ use_scc = get (meta. extra_metadata, :use_scc , true )
293
297
end
294
298
else
295
299
# there is no initializeprob, so the original problem construction
@@ -327,8 +331,10 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
327
331
filter_missing_values! (u0map)
328
332
filter_missing_values! (pmap)
329
333
330
- op, missing_unknowns, missing_pars = build_operating_point (u0map, pmap, defs, cmap, dvs, ps)
331
- kws = maybe_build_initialization_problem (sys, op, u0map, pmap, t0, defs, guesses, missing_unknowns; use_scc = true )
334
+ op, missing_unknowns, missing_pars = build_operating_point (
335
+ u0map, pmap, defs, cmap, dvs, ps)
336
+ kws = maybe_build_initialization_problem (
337
+ sys, op, u0map, pmap, t0, defs, guesses, missing_unknowns; use_scc)
332
338
initprob = get (kws, :initializeprob , nothing )
333
339
if initprob === nothing
334
340
return nothing
0 commit comments