Skip to content

Commit a9d4b6d

Browse files
committed
Place algebraic equations after differential equations
1 parent e9cfca7 commit a9d4b6d

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

src/systems/diffeqs/first_order_transform.jl

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,16 @@ end
2626
function ode_order_lowering(eqs, iv, states)
2727
var_order = Dict{Variable,Int}()
2828
vars = Variable[]
29-
new_eqs = Equation[]
30-
new_vars = Variable[]
3129
D = Differential(iv())
30+
diff_eqs = Equation[]
31+
diff_vars = Variable[]
32+
alge_eqs = Equation[]
33+
alge_vars = Variable[]
3234

3335
for (i, (eq, ss)) enumerate(zip(eqs, states))
3436
if isequal(eq.lhs, Constant(0))
35-
push!(new_vars, ss)
36-
push!(new_eqs, eq)
37+
push!(alge_vars, ss)
38+
push!(alge_eqs, eq)
3739
else
3840
var, maxorder = var_from_nested_derivative(eq.lhs)
3941
if maxorder > get(var_order, var, 0)
@@ -42,8 +44,8 @@ function ode_order_lowering(eqs, iv, states)
4244
end
4345
var′ = lower_varname(var, iv, maxorder - 1)
4446
rhs′ = rename_lower_order(eq.rhs)
45-
push!(new_vars, var′)
46-
push!(new_eqs, D(var′(iv())) ~ rhs′)
47+
push!(diff_vars, var′)
48+
push!(diff_eqs, D(var′(iv())) ~ rhs′)
4749
end
4850
end
4951

@@ -52,15 +54,15 @@ function ode_order_lowering(eqs, iv, states)
5254
for o in (order-1):-1:1
5355
lvar = lower_varname(var, iv, o-1)
5456
rvar = lower_varname(var, iv, o)
55-
push!(new_vars, lvar)
57+
push!(diff_vars, lvar)
5658

5759
rhs = rvar(iv())
5860
eq = Differential(iv())(lvar(iv())) ~ rhs
59-
push!(new_eqs, eq)
61+
push!(diff_eqs, eq)
6062
end
6163
end
6264

63-
return (new_eqs, new_vars)
65+
return (vcat(diff_eqs, alge_eqs), vcat(diff_vars, alge_vars))
6466
end
6567

6668
function rename_lower_order(O::Expression)

0 commit comments

Comments
 (0)