Skip to content

Commit 14ca523

Browse files
fix nested hierarchy
1 parent 8ee5d30 commit 14ca523

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/systems/diffeqs/odesystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,5 +134,5 @@ Base.:(==)(sys1::ODESystem, sys2::ODESystem) =
134134
# NOTE: equality does not check cached Jacobian
135135

136136
function rename(sys::ODESystem,name)
137-
ODESystem(sys.eqs, sys.iv, sys.states, sys.ps, sys.tgrad, sys.jac, sys.Wfact, sys.Wfact_t, name, sys.systems)
137+
ODESystem(sys.eqs, sys.iv, sys.states, sys.ps, sys.pins, sys.observed, sys.tgrad, sys.jac, sys.Wfact, sys.Wfact_t, name, sys.systems)
138138
end

test/components.jl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,35 @@ jac2 = [connected1₊lorenz1₊x 0 g zeros(1,12)
149149
zeros(Expression,7,8) ModelingToolkit.namespace_operation.(calculate_jacobian(connected2),connected2.name,:t)]
150150

151151
@test all(isequal.(calculate_jacobian(doublelevel),jac2))
152+
153+
# Try higher hierarchy
154+
155+
@parameters t σ ρ β
156+
@variables x(t) y(t) z(t)
157+
@derivatives D'~t
158+
159+
eqs = [D(x) ~ σ*(y-x),
160+
D(y) ~ x*-z)-y,
161+
D(z) ~ x*y - β*z]
162+
163+
lorenz1 = ODESystem(eqs,name=:lorenz1)
164+
lorenz2 = ODESystem(eqs,name=:lorenz2)
165+
166+
@variables a(t)
167+
@parameters γ
168+
connections = [0 ~ lorenz1.x + lorenz2.y + a*γ]
169+
170+
# Now deviate from tutorial by introducing a 2nd level of connected blocks
171+
# Other issue: How does scoping work? Is it ok to re-use components named lorenz1 and lorenz2, or will the hierarchy be flattened eventually
172+
# connected1 and 2 are pairs of Lorenz oscillators. I'd like to solve multiple pairs together.
173+
connected1 = ODESystem(connections,t,[a],[γ],systems=[lorenz1,lorenz2], name=:connected1)
174+
connected2 = ODESystem(connections,t,[a],[γ],systems=[lorenz1,lorenz2], name=:connected2)
175+
176+
connections2ndLevel = Equation[] # Pairs are not connected
177+
variables2ndLevel = [] # No extra variables
178+
parameters2ndLevel = [] # No extra parameters
179+
180+
totalSystem = ODESystem(connections2ndLevel,t,variables2ndLevel, parameters2ndLevel, systems = [connected1, connected2],
181+
name=:totalSystem)
182+
183+
connections2ndLevel = [0 ~ connected1.lorenz1.x + connected2.lorenz1.x]

0 commit comments

Comments
 (0)