@@ -177,6 +177,11 @@ function dummy_derivative_graph!(state::TransformationState, jac = nothing;
177177 dummy_derivative_graph! (state. structure, var_eq_matching, jac, state_priority, log)
178178end
179179
180+ struct DummyDerivativeSummary
181+ var_sccs:: Vector{Vector{Int}}
182+ state_priority:: Vector{Vector{Float64}}
183+ end
184+
180185function dummy_derivative_graph! (
181186 structure:: SystemStructure , var_eq_matching, jac = nothing ,
182187 state_priority = nothing , :: Val{log} = Val (false )) where {log}
@@ -203,6 +208,9 @@ function dummy_derivative_graph!(
203208 end
204209
205210 var_sccs = find_var_sccs (graph, var_eq_matching)
211+ var_perm = Int[]
212+ var_dummy_scc = Vector{Int}[]
213+ var_state_priority = Vector{Float64}[]
206214 eqcolor = falses (nsrcs (graph))
207215 dummy_derivatives = Int[]
208216 col_order = Int[]
@@ -242,7 +250,13 @@ function dummy_derivative_graph!(
242250 iszero (nrows) && break
243251
244252 if state_priority != = nothing && isfirst
245- sort! (vars, by = extended_sp)
253+ sp = extended_sp .(vars)
254+ resize! (var_perm, length (sp))
255+ sortperm! (var_perm, sp)
256+ permute! (vars, var_perm)
257+ permute! (sp, var_perm)
258+ push! (var_dummy_scc, copy (vars))
259+ push! (var_state_priority, sp)
246260 end
247261 # TODO : making the algorithm more robust
248262 # 1. If the Jacobian is a integer matrix, use Bareiss to check
@@ -322,7 +336,7 @@ function dummy_derivative_graph!(
322336
323337 ret = tearing_with_dummy_derivatives (structure, BitSet (dummy_derivatives))
324338 if log
325- ret
339+ ( ret... , DummyDerivativeSummary (var_dummy_scc, var_state_priority))
326340 else
327341 ret[1 ]
328342 end
0 commit comments