Skip to content

Commit 8d09409

Browse files
feat: support arbitrary systems in remake_initialization_data
1 parent 4d5daa3 commit 8d09409

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/systems/nonlinear/initializesystem.jl

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -223,16 +223,19 @@ function is_parameter_solvable(p, pmap, defs, guesses)
223223
_val1 === nothing && _val2 !== nothing)) && _val3 !== nothing
224224
end
225225

226-
function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p, newu0, newp)
226+
function SciMLBase.remake_initialization_data(
227+
sys::AbstractSystem, odefn, u0, t0, p, newu0, newp)
227228
if u0 === missing && p === missing
228229
return odefn.initialization_data
229230
end
230231
if !(eltype(u0) <: Pair) && !(eltype(p) <: Pair)
231-
oldinitprob = odefn.initializeprob
232+
oldinitdata = odefn.initialization_data
233+
oldinitdata === nothing && return nothing
234+
235+
oldinitprob = oldinitdata.initializeprob
232236
oldinitprob === nothing && return nothing
233237
if !SciMLBase.has_sys(oldinitprob.f) || !(oldinitprob.f.sys isa NonlinearSystem)
234-
return SciMLBase.OverrideInitData(oldinitprob, odefn.update_initializeprob!,
235-
odefn.initializeprobmap, odefn.initializeprobpmap)
238+
return oldinitdata
236239
end
237240
pidxs = ParameterIndex[]
238241
pvals = []
@@ -254,7 +257,7 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
254257
if p !== missing
255258
for sym in parameter_symbols(oldinitprob)
256259
push!(pidxs, parameter_index(oldinitprob, sym))
257-
if isequal(sym, get_iv(sys))
260+
if is_time_dependent(sys) && isequal(sym, get_iv(sys))
258261
push!(pvals, t0)
259262
else
260263
push!(pvals, getp(sys, sym)(p))
@@ -283,8 +286,8 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
283286
length(oldinitprob.f.resid_prototype), newu0, newp))
284287
end
285288
initprob = remake(oldinitprob; f = newf, u0 = newu0, p = newp)
286-
return SciMLBase.OverrideInitData(initprob, odefn.update_initializeprob!,
287-
odefn.initializeprobmap, odefn.initializeprobpmap)
289+
return SciMLBase.OverrideInitData(initprob, oldinitdata.update_initializeprob!,
290+
oldinitdata.initializeprobmap, oldinitdata.initializeprobpmap)
288291
end
289292
dvs = unknowns(sys)
290293
ps = parameters(sys)
@@ -298,7 +301,7 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
298301
use_scc = true
299302

300303
if SciMLBase.has_initializeprob(odefn)
301-
oldsys = odefn.initializeprob.f.sys
304+
oldsys = odefn.initialization_data.initializeprob.f.sys
302305
meta = get_metadata(oldsys)
303306
if meta isa InitializationSystemMetadata
304307
u0map = merge(meta.u0map, u0map)
@@ -336,7 +339,7 @@ function SciMLBase.remake_initialization_data(sys::ODESystem, odefn, u0, t0, p,
336339
pmap[p] = getp(sys, p)(newp)
337340
end
338341
end
339-
if t0 === nothing
342+
if t0 === nothing && is_time_dependent(sys)
340343
t0 = 0.0
341344
end
342345
filter_missing_values!(u0map)

0 commit comments

Comments
 (0)