@@ -175,3 +175,56 @@ function is_parameter_solvable(p, pmap, defs, guesses)
175
175
return ((_val1 === missing || _val2 === missing ) ||
176
176
(_val1 === nothing && _val2 != = nothing )) && _val3 != = nothing
177
177
end
178
+
179
+ function SciMLBase. remake_initializeprob (sys:: ODESystem , odefn, u0, t0, p)
180
+ if (u0 === missing || ! (eltype (u0) <: Pair ) || isempty (u0)) &&
181
+ (p === missing || ! (eltype (p) <: Pair ) || isempty (p))
182
+ return odefn. initializeprob, odefn. update_initializeprob!, odefn. initializeprobmap,
183
+ odefn. initializeprobpmap
184
+ end
185
+ if u0 === missing || isempty (u0)
186
+ u0 = Dict ()
187
+ elseif ! (eltype (u0) <: Pair )
188
+ u0 = Dict (unknowns (sys) .=> u0)
189
+ end
190
+ if p === missing
191
+ p = Dict ()
192
+ end
193
+ if t0 === nothing
194
+ t0 = 0.0
195
+ end
196
+ u0 = todict (u0)
197
+ defs = defaults (sys)
198
+ varmap = merge (defs, u0)
199
+ varmap = canonicalize_varmap (varmap)
200
+ missingvars = setdiff (unknowns (sys), collect (keys (varmap)))
201
+ setobserved = filter (keys (varmap)) do var
202
+ has_observed_with_lhs (sys, var) || has_observed_with_lhs (sys, default_toterm (var))
203
+ end
204
+ p = todict (p)
205
+ guesses = ModelingToolkit. guesses (sys)
206
+ solvablepars = [par
207
+ for par in parameters (sys)
208
+ if is_parameter_solvable (par, p, defs, guesses)]
209
+ pvarmap = merge (defs, p)
210
+ setparobserved = filter (keys (pvarmap)) do var
211
+ has_parameter_dependency_with_lhs (sys, var)
212
+ end
213
+ if (((! isempty (missingvars) || ! isempty (solvablepars) ||
214
+ ! isempty (setobserved) || ! isempty (setparobserved)) &&
215
+ ModelingToolkit. get_tearing_state (sys) != = nothing ) ||
216
+ ! isempty (initialization_equations (sys)))
217
+ initprob = InitializationProblem (sys, t0, u0, p)
218
+ initprobmap = getu (initprob, unknowns (sys))
219
+ punknowns = [p for p in all_variable_symbols (initprob) if is_parameter (sys, p)]
220
+ getpunknowns = getu (initprob, punknowns)
221
+ setpunknowns = setp (sys, punknowns)
222
+ initprobpmap = GetUpdatedMTKParameters (getpunknowns, setpunknowns)
223
+ reqd_syms = parameter_symbols (initprob)
224
+ update_initializeprob! = UpdateInitializeprob (
225
+ getu (sys, reqd_syms), setu (initprob, reqd_syms))
226
+ return initprob, update_initializeprob!, initprobmap, initprobpmap
227
+ else
228
+ return nothing , nothing , nothing , nothing
229
+ end
230
+ end
0 commit comments