@@ -11,7 +11,7 @@ function generate_initializesystem(sys::ODESystem;
1111 default_dd_guess = 0.0 ,
1212 algebraic_only = false ,
1313 check_units = true , check_defguess = false ,
14- name = nameof (sys), kwargs... )
14+ name = nameof (sys), extra_metadata = (;), kwargs... )
1515 trueobs, eqs = unhack_observed (observed (sys), equations (sys))
1616 vars = unique ([unknowns (sys); getfield .(trueobs, :lhs )])
1717 vars_set = Set (vars) # for efficient in-lookup
@@ -179,7 +179,8 @@ function generate_initializesystem(sys::ODESystem;
179179 for k in keys (defs)
180180 defs[k] = substitute (defs[k], paramsubs)
181181 end
182- meta = InitializationSystemMetadata (anydict (u0map), anydict (pmap), additional_guesses)
182+ meta = InitializationSystemMetadata (
183+ anydict (u0map), anydict (pmap), additional_guesses, extra_metadata)
183184 return NonlinearSystem (eqs_ics,
184185 vars,
185186 pars;
@@ -195,6 +196,7 @@ struct InitializationSystemMetadata
195196 u0map:: Dict{Any, Any}
196197 pmap:: Dict{Any, Any}
197198 additional_guesses:: Dict{Any, Any}
199+ extra_metadata:: NamedTuple
198200end
199201
200202function is_parameter_solvable (p, pmap, defs, guesses)
@@ -282,6 +284,7 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
282284 guesses = Dict ()
283285 defs = defaults (sys)
284286 cmap, cs = get_cmap (sys)
287+ use_scc = true
285288
286289 if SciMLBase. has_initializeprob (odefn)
287290 oldsys = odefn. initializeprob. f. sys
@@ -290,6 +293,7 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
290293 u0map = merge (meta. u0map, u0map)
291294 pmap = merge (meta. pmap, pmap)
292295 merge! (guesses, meta. additional_guesses)
296+ use_scc = get (meta. extra_metadata, :use_scc , true )
293297 end
294298 else
295299 # there is no initializeprob, so the original problem construction
@@ -327,8 +331,10 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
327331 filter_missing_values! (u0map)
328332 filter_missing_values! (pmap)
329333
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)
332338 initprob = get (kws, :initializeprob , nothing )
333339 if initprob === nothing
334340 return nothing
0 commit comments