Skip to content

Commit a94b5c2

Browse files
committed
Extend initialization only for ODE systems
1 parent 355baea commit a94b5c2

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/systems/abstractsystem.jl

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2517,6 +2517,7 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
25172517
end
25182518
end
25192519

2520+
# collect fields common to all system types
25202521
eqs = union(get_eqs(basesys), get_eqs(sys))
25212522
sts = union(get_unknowns(basesys), get_unknowns(sys))
25222523
ps = union(get_ps(basesys), get_ps(sys))
@@ -2528,20 +2529,20 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
25282529
cevs = union(get_continuous_events(basesys), get_continuous_events(sys))
25292530
devs = union(get_discrete_events(basesys), get_discrete_events(sys))
25302531
defs = merge(get_defaults(basesys), get_defaults(sys)) # prefer `sys`
2531-
guesses = merge(get_guesses(basesys), get_guesses(sys)) # prefer `sys`
2532-
ieqs = union(get_initialization_eqs(basesys), get_initialization_eqs(sys))
25332532
syss = union(get_systems(basesys), get_systems(sys))
2533+
args = length(ivs) == 0 ? (eqs, sts, ps) : (eqs, ivs[1], sts, ps)
2534+
kwargs = (parameter_dependencies = dep_ps, observed = obs, continuous_events = cevs,
2535+
discrete_events = devs, defaults = defs, systems = syss,
2536+
name = name, gui_metadata = gui_metadata)
25342537

2535-
if length(ivs) == 0
2536-
T(eqs, sts, ps, observed = obs, defaults = defs, name = name, systems = syss,
2537-
continuous_events = cevs, discrete_events = devs, gui_metadata = gui_metadata,
2538-
parameter_dependencies = dep_ps, initialization_eqs = ieqs, guesses = guesses)
2539-
elseif length(ivs) == 1
2540-
T(eqs, ivs[1], sts, ps, observed = obs, defaults = defs, name = name,
2541-
systems = syss, continuous_events = cevs, discrete_events = devs,
2542-
gui_metadata = gui_metadata, parameter_dependencies = dep_ps,
2543-
initialization_eqs = ieqs, guesses = guesses)
2538+
# collect fields specific to some system types
2539+
if basesys isa ODESystem
2540+
ieqs = union(get_initialization_eqs(basesys), get_initialization_eqs(sys))
2541+
guesses = merge(get_guesses(basesys), get_guesses(sys)) # prefer `sys`
2542+
kwargs = merge(kwargs, (initialization_eqs = ieqs, guesses = guesses))
25442543
end
2544+
2545+
return T(args...; kwargs...)
25452546
end
25462547

25472548
function Base.:(&)(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nameof(sys))

0 commit comments

Comments
 (0)