@@ -6,7 +6,7 @@ function equation_dependencies(sys::AbstractSystem; variables=states(sys))
6
6
depeqs_to_vars = Vector {Vector{Variable}} (undef,length (eqs))
7
7
8
8
for (i,eq) in enumerate (eqs)
9
- depeqs_to_vars[i] = collect (equation_dependencies ! (deps, eq, variables))
9
+ depeqs_to_vars[i] = collect (get_variables ! (deps, eq, variables))
10
10
empty! (deps)
11
11
end
12
12
@@ -31,16 +31,41 @@ function asgraph(eqdeps, vtois)
31
31
ne = 0
32
32
for (eqidx,vidxs) in enumerate (fadjlist)
33
33
foreach (vidx -> push! (badjlist[vidx], eqidx), vidxs)
34
- ne += 1
34
+ ne += length (vidxs)
35
35
end
36
36
37
37
BipartiteGraph (ne, fadjlist, badjlist)
38
38
end
39
39
40
40
# could be made to directly generate graph and save memory
41
41
function asgraph (sys:: AbstractSystem ; variables= nothing , variablestoids= nothing )
42
- vs = isnothing (variables) ? states (sys) : variables
42
+ vs = isnothing (variables) ? states (sys) : variables
43
43
eqdeps = equation_dependencies (sys, variables= vs)
44
44
vtois = isnothing (variablestoids) ? Dict (convert (Variable, v) => i for (i,v) in enumerate (vs)) : variablestoids
45
45
asgraph (eqdeps, vtois)
46
46
end
47
+
48
+
49
+ # for each variable determine the equations that modify it
50
+ function variable_dependencies (sys:: AbstractSystem ; variables= states (sys), variablestoids= nothing )
51
+ eqs = equations (sys)
52
+ vtois = isnothing (variablestoids) ? Dict (convert (Variable, v) => i for (i,v) in enumerate (variables)) : variablestoids
53
+
54
+ deps = Set {Variable} ()
55
+ badjlist = Vector {Vector{Int}} (undef, length (eqs))
56
+ for (eidx,eq) in enumerate (eqs)
57
+ modified_states! (deps, eq, variables)
58
+ badjlist[eidx] = sort! ([vtois[var] for var in deps])
59
+ empty! (deps)
60
+ end
61
+
62
+ fadjlist = [Vector {Int} () for i = 1 : length (variables)]
63
+ ne = 0
64
+ for (eqidx,vidxs) in enumerate (badjlist)
65
+ println (vidxs)
66
+ foreach (vidx -> push! (fadjlist[vidx], eqidx), vidxs)
67
+ ne += length (vidxs)
68
+ end
69
+
70
+ BipartiteGraph (ne, fadjlist, badjlist)
71
+ end
0 commit comments