Skip to content

Commit 309a95e

Browse files
committed
Extend state priority to all its derivative chains in DD
1 parent e037dfe commit 309a95e

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/structural_transformation/partial_state_selection.jl

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,23 @@ function dummy_derivative_graph!(
184184
diff_to_eq = invview(eq_to_diff)
185185
diff_to_var = invview(var_to_diff)
186186
invgraph = invview(graph)
187+
extended_sp = let state_priority = state_priority, var_to_diff = var_to_diff,
188+
diff_to_var = diff_to_var
189+
190+
var -> begin
191+
min_p = max_p = 0.0
192+
while var_to_diff[var] !== nothing
193+
var = var_to_diff[var]
194+
end
195+
while true
196+
p = state_priority(var)
197+
max_p = max(max_p, p)
198+
min_p = min(min_p, p)
199+
(var = diff_to_var[var]) === nothing && break
200+
end
201+
min_p < 0 ? min_p : max_p
202+
end
203+
end
187204

188205
var_sccs = find_var_sccs(graph, var_eq_matching)
189206
eqcolor = falses(nsrcs(graph))
@@ -225,7 +242,7 @@ function dummy_derivative_graph!(
225242
iszero(nrows) && break
226243

227244
if state_priority !== nothing && isfirst
228-
sort!(vars, by = state_priority)
245+
sort!(vars, by = extended_sp)
229246
end
230247
# TODO: making the algorithm more robust
231248
# 1. If the Jacobian is a integer matrix, use Bareiss to check

0 commit comments

Comments
 (0)