@@ -177,6 +177,11 @@ function dummy_derivative_graph!(state::TransformationState, jac = nothing;
177
177
dummy_derivative_graph! (state. structure, var_eq_matching, jac, state_priority, log)
178
178
end
179
179
180
+ struct DummyDerivativeSummary
181
+ var_sccs:: Vector{Vector{Int}}
182
+ state_priority:: Vector{Vector{Float64}}
183
+ end
184
+
180
185
function dummy_derivative_graph! (
181
186
structure:: SystemStructure , var_eq_matching, jac = nothing ,
182
187
state_priority = nothing , :: Val{log} = Val (false )) where {log}
@@ -203,6 +208,9 @@ function dummy_derivative_graph!(
203
208
end
204
209
205
210
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}[]
206
214
eqcolor = falses (nsrcs (graph))
207
215
dummy_derivatives = Int[]
208
216
col_order = Int[]
@@ -242,7 +250,13 @@ function dummy_derivative_graph!(
242
250
iszero (nrows) && break
243
251
244
252
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)
246
260
end
247
261
# TODO : making the algorithm more robust
248
262
# 1. If the Jacobian is a integer matrix, use Bareiss to check
@@ -322,7 +336,7 @@ function dummy_derivative_graph!(
322
336
323
337
ret = tearing_with_dummy_derivatives (structure, BitSet (dummy_derivatives))
324
338
if log
325
- ret
339
+ ( ret... , DummyDerivativeSummary (var_dummy_scc, var_state_priority))
326
340
else
327
341
ret[1 ]
328
342
end
0 commit comments