Skip to content

Commit 8126e18

Browse files
Merge pull request #75 from JuliaComputing/as/system-subset-state-priorities
fix: properly subset `state_priorities` in `system_subset`
2 parents ddad064 + d742094 commit 8126e18

2 files changed

Lines changed: 23 additions & 0 deletions

File tree

lib/ModelingToolkitTearing/src/clock_inference/interface.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ function system_subset(structure::SystemStructure, ieqs::Vector{Int}, ivars::Vec
118118
@set! structure.graph = complete(BipartiteGraph(ne, fadj, length(ivars)))
119119
@set! structure.eq_to_diff = eq_to_diff
120120
@set! structure.var_to_diff = complete(var_to_diff)
121+
@set! structure.state_priorities = structure.state_priorities[ivars]
122+
@set! structure.var_types = structure.var_types[ivars]
121123
structure
122124
end
123125

lib/ModelingToolkitTearing/test/runtests.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,24 @@ end
169169
], t
170170
) reassemble_alg = MTKTearing.DefaultReassembleAlgorithm(; inline_linear_sccs = true)
171171
end
172+
173+
@testset "`system_subset(::SystemStructure)` subsets `.state_priorities`" begin
174+
@variables x(t) y(t) [state_priority = 2] z(t) [state_priority = 5]
175+
@named sys = System([D(x) ~ x, D(y) ~ y, D(z) ~ z], t)
176+
ts = TearingState(sys)
177+
178+
# Confirm priorities are set as expected in the full structure
179+
x_idx = findfirst(isequal(x), ts.fullvars)::Int
180+
y_idx = findfirst(isequal(y), ts.fullvars)::Int
181+
z_idx = findfirst(isequal(z), ts.fullvars)::Int
182+
@test ts.structure.state_priorities[x_idx] == 0
183+
@test ts.structure.state_priorities[y_idx] == 2
184+
@test ts.structure.state_priorities[z_idx] == 5
185+
186+
# Subset to only y and z
187+
ieqs = [𝑑neighbors(ts.structure.graph, y_idx); 𝑑neighbors(ts.structure.graph, z_idx)]
188+
ivars = [y_idx, z_idx, ts.structure.var_to_diff[y_idx], ts.structure.var_to_diff[z_idx]]
189+
sub = MTKTearing.system_subset(ts.structure, ieqs, ivars)
190+
@test sub.state_priorities == [2, 5, 2, 5]
191+
end
192+

0 commit comments

Comments
 (0)