@@ -153,15 +153,22 @@ function generate_initializesystem(sys::ODESystem;
153153 for k in keys (defs)
154154 defs[k] = substitute (defs[k], paramsubs)
155155 end
156+ meta = InitializationSystemMetadata (Dict {Any, Any} (u0map), Dict {Any, Any} (pmap))
156157 return NonlinearSystem (eqs_ics,
157158 vars,
158159 pars;
159160 defaults = defs,
160161 checks = check_units,
161162 name,
163+ metadata = meta,
162164 kwargs... )
163165end
164166
167+ struct InitializationSystemMetadata
168+ u0map:: Dict{Any, Any}
169+ pmap:: Dict{Any, Any}
170+ end
171+
165172function is_parameter_solvable (p, pmap, defs, guesses)
166173 _val1 = pmap isa AbstractDict ? get (pmap, p, nothing ) : nothing
167174 _val2 = get (defs, p, nothing )
@@ -249,6 +256,15 @@ function SciMLBase.remake_initializeprob(sys::ODESystem, odefn, u0, t0, p)
249256 ! isempty (setobserved) || ! isempty (setparobserved)) &&
250257 ModelingToolkit. get_tearing_state (sys) != = nothing ) ||
251258 ! isempty (initialization_equations (sys)))
259+ if SciMLBase. has_initializeprob (odefn)
260+ oldsys = odefn. initializeprob. f. sys
261+ meta = get_metadata (oldsys)
262+ if meta isa InitializationSystemMetadata
263+ u0 = merge (meta. u0map, u0)
264+ p = merge (meta. pmap, p)
265+ end
266+ end
267+
252268 initprob = InitializationProblem (sys, t0, u0, p)
253269 initprobmap = getu (initprob, unknowns (sys))
254270 punknowns = [p for p in all_variable_symbols (initprob) if is_parameter (sys, p)]
0 commit comments