@@ -11,12 +11,12 @@ function alias_elimination(sys)
11
11
end
12
12
is_linear_equations, eadj, cadj = find_linear_equations (sys)
13
13
14
- sys, v_eliminated, v_types, n_null_vars, degenerate_equations, linear_equations = alias_eliminate_graph (
14
+ v_eliminated, v_types, n_null_vars, degenerate_equations, linear_equations = alias_eliminate_graph (
15
15
s, is_linear_equations, eadj, cadj
16
16
)
17
17
18
18
s = structure (sys)
19
- @unpack fullvars = s
19
+ @unpack fullvars, graph = s
20
20
21
21
subs = Dict ()
22
22
if length (v_eliminated) - n_null_vars > 0
@@ -48,7 +48,7 @@ function alias_elimination(sys)
48
48
if ! isdiffeq (eq) && ! _iszero (eq. lhs)
49
49
eq = 0 ~ eq. rhs - eq. lhs
50
50
end
51
- eqs[ieq] = eq. lhs ~ fixpoint_sub (eq. rhs, dict )
51
+ eqs[ieq] = eq. lhs ~ fixpoint_sub (eq. rhs, subs )
52
52
end
53
53
54
54
newstates = []
@@ -59,8 +59,9 @@ function alias_elimination(sys)
59
59
end
60
60
end
61
61
62
- @set sys. structure = nothing
63
- @set sys. states = newstates
62
+ @set! sys. eqs = eqs
63
+ @set! sys. states = newstates
64
+ @set! sys. structure = nothing
64
65
return sys
65
66
end
66
67
@@ -72,7 +73,7 @@ function alias_eliminate_graph(s::SystemStructure, is_linear_equations, eadj, ca
72
73
73
74
is_not_potential_state = iszero .(varassoc)
74
75
is_linear_variables = copy (is_not_potential_state)
75
- for i in 𝑠vertices (graph); is_linear_equations[i] || continue
76
+ for i in 𝑠vertices (graph); is_linear_equations[i] && continue
76
77
for j in 𝑠neighbors (graph, i)
77
78
is_linear_variables[j] = false
78
79
end
@@ -109,7 +110,7 @@ function alias_eliminate_graph(s::SystemStructure, is_linear_equations, eadj, ca
109
110
# kind of like the backward substitution
110
111
for ei in reverse (1 : rank2)
111
112
locally_structure_simplify! (
112
- (eadj[ei], cadj [ei]),
113
+ (eadj[ei], old_cadj [ei]),
113
114
invvarassoc, v_eliminated, v_types
114
115
)
115
116
end
@@ -145,7 +146,7 @@ function alias_eliminate_graph(s::SystemStructure, is_linear_equations, eadj, ca
145
146
end
146
147
147
148
for (ei, e) in enumerate (linear_equations)
148
- graph. eadjlist [e] = eadj[ei]
149
+ graph. fadjlist [e] = eadj[ei]
149
150
end
150
151
151
152
degenerate_equations = rank3 < length (linear_equations) ? linear_equations[rank3+ 1 : end ] : Int[]
0 commit comments