@@ -170,16 +170,23 @@ function generate_initializesystem(sys::ODESystem;
170170 nleqs = Symbolics. substitute .(nleqs, (paramsubs,))
171171 unks = [full_states; collect (values (paramsubs))]
172172 u0 = Dict (k => substitute (v, paramsubs) for (k, v) in u0)
173+ meta = InitializationSystemMetadata (Dict {Any, Any} (u0map), Dict {Any, Any} (pmap))
173174 sys_nl = NonlinearSystem (nleqs,
174175 unks,
175176 pars;
176177 defaults = merge (ModelingToolkit. defaults (sys), todict (u0), dd_guess, pmap),
177178 checks = check_units,
178179 name,
180+ metadata = meta,
179181 kwargs... )
180182 return sys_nl
181183end
182184
185+ struct InitializationSystemMetadata
186+ u0map:: Dict{Any, Any}
187+ pmap:: Dict{Any, Any}
188+ end
189+
183190function is_parameter_solvable (p, pmap, defs, guesses)
184191 _val1 = pmap isa AbstractDict ? get (pmap, p, nothing ) : nothing
185192 _val2 = get (defs, p, nothing )
@@ -267,6 +274,15 @@ function SciMLBase.remake_initializeprob(sys::ODESystem, odefn, u0, t0, p)
267274 ! isempty (setobserved) || ! isempty (setparobserved)) &&
268275 ModelingToolkit. get_tearing_state (sys) != = nothing ) ||
269276 ! isempty (initialization_equations (sys)))
277+ if SciMLBase. has_initializeprob (odefn)
278+ oldsys = odefn. initializeprob. f. sys
279+ meta = get_metadata (oldsys)
280+ if meta isa InitializationSystemMetadata
281+ u0 = merge (meta. u0map, u0)
282+ p = merge (meta. pmap, p)
283+ end
284+ end
285+
270286 initprob = InitializationProblem (sys, t0, u0, p)
271287 initprobmap = getu (initprob, unknowns (sys))
272288 punknowns = [p for p in all_variable_symbols (initprob) if is_parameter (sys, p)]
0 commit comments