@@ -219,11 +219,11 @@ mutable struct TearingState{T <: AbstractSystem} <: AbstractTearingState{T}
219219end
220220
221221TransformationState (sys:: AbstractSystem ) = TearingState (sys)
222- function system_subset (ts:: TearingState , ieqs:: Vector{Int} )
222+ function system_subset (ts:: TearingState , ieqs:: Vector{Int} , ivars :: Vector{Int} )
223223 eqs = equations (ts)
224224 @set! ts. sys. eqs = eqs[ieqs]
225225 @set! ts. original_eqs = ts. original_eqs[ieqs]
226- @set! ts. structure = system_subset (ts. structure, ieqs)
226+ @set! ts. structure = system_subset (ts. structure, ieqs, ivars )
227227 if all (eq -> eq. rhs isa StateMachineOperator, get_eqs (ts. sys))
228228 names = Symbol[]
229229 for eq in get_eqs (ts. sys)
@@ -240,22 +240,35 @@ function system_subset(ts::TearingState, ieqs::Vector{Int})
240240 else
241241 @set! ts. statemachines = eltype (ts. statemachines)[]
242242 end
243+ @set! ts. fullvars = ts. fullvars[ivars]
243244 ts
244245end
245246
246- function system_subset (structure:: SystemStructure , ieqs:: Vector{Int} )
247- @unpack graph, eq_to_diff = structure
247+ function system_subset (structure:: SystemStructure , ieqs:: Vector{Int} , ivars :: Vector{Int} )
248+ @unpack graph = structure
248249 fadj = Vector{Int}[]
249250 eq_to_diff = DiffGraph (length (ieqs))
251+ var_to_diff = DiffGraph (length (ivars))
252+
250253 ne = 0
254+ old_to_new_var = zeros (Int, ndsts (graph))
255+ for (i, iv) in enumerate (ivars)
256+ old_to_new_var[iv] = i
257+ end
258+ for (i, iv) in enumerate (ivars)
259+ structure. var_to_diff[iv] === nothing && continue
260+ var_to_diff[i] = old_to_new_var[structure. var_to_diff[iv]]
261+ end
251262 for (j, eq_i) in enumerate (ieqs)
252- ivars = copy (graph. fadjlist[eq_i])
253- ne += length (ivars)
254- push! (fadj, ivars)
263+ var_adj = [old_to_new_var[i] for i in graph. fadjlist[eq_i]]
264+ @assert all (! iszero, var_adj)
265+ ne += length (var_adj)
266+ push! (fadj, var_adj)
255267 eq_to_diff[j] = structure. eq_to_diff[eq_i]
256268 end
257- @set! structure. graph = complete (BipartiteGraph (ne, fadj, ndsts (graph )))
269+ @set! structure. graph = complete (BipartiteGraph (ne, fadj, length (ivars )))
258270 @set! structure. eq_to_diff = eq_to_diff
271+ @set! structure. var_to_diff = complete (var_to_diff)
259272 structure
260273end
261274
0 commit comments