Skip to content

Commit 065b313

Browse files
committed
add compose dispatch
1 parent fc2586c commit 065b313

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/reactionsystem.jl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,37 @@ function MT.flatten(rs::ReactionSystem; name = nameof(rs))
13971397
discrete_events = MT.discrete_events(rs))
13981398
end
13991399

1400+
"""
1401+
ModelingToolkit.compose(sys::ReactionSystem, systems::AbstractArray; name = nameof(sys))
1402+
1403+
Compose the indicated [`ReactionSystem`](@ref) with one or more `AbstractSystem`s.
1404+
1405+
"""
1406+
function compose(sys::ReactionSystem, systems::AbstractArray; name = nameof(sys))
1407+
nsys = length(systems)
1408+
nsys == 0 && return sys
1409+
@set! sys.name = name
1410+
@set! sys.systems = [get_systems(sys); systems]
1411+
newunknowns = OrderedSet{BasicSymbolic{Real}}()
1412+
newparams = OrderedSet()
1413+
iv = has_iv(sys) ? get_iv(sys) : nothing
1414+
for ssys in systems
1415+
collect_scoped_vars!(newunknowns, newparams, ssys, iv)
1416+
end
1417+
1418+
if !isempty(newunknowns)
1419+
@set! sys.unknowns = union(get_unknowns(sys), newunknowns)
1420+
sort!(get_unknowns(sys), by = !isspecies)
1421+
@set! sys.species = filter(isspecies, get_unknowns(sys))
1422+
end
1423+
1424+
if !isempty(newparams)
1425+
@set! sys.ps = union(get_ps(sys), newparams)
1426+
end
1427+
1428+
return sys
1429+
end
1430+
14001431
"""
14011432
ModelingToolkit.extend(sys::AbstractSystem, rs::ReactionSystem; name::Symbol=nameof(sys))
14021433

0 commit comments

Comments
 (0)