Skip to content

Commit f3197ff

Browse files
committed
Update first_order_transform
1 parent 10f4b4d commit f3197ff

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/systems/diffeqs/first_order_transform.jl

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
function lower_varname(var::Variable, idv, order)
22
order == 0 && return var
3-
name = Symbol(var.name, :_, string(idv.name)^order)
3+
name = Symbol(var.name, :_, string(idv.op.name)^order)
44
return Variable{vartype(var)}(name)
55
end
66

@@ -24,14 +24,18 @@ function ode_order_lowering(eqs, iv)
2424
new_vars = Variable[]
2525

2626
for (i, eq) enumerate(eqs)
27-
var, maxorder = var_from_nested_derivative(eq.lhs)
28-
if maxorder > get(var_order, var, 0)
29-
var_order[var] = maxorder
30-
any(isequal(var), vars) || push!(vars, var)
27+
if isequal(eq.lhs, Constant(0))
28+
push!(new_eqs, eq)
29+
else
30+
var, maxorder = var_from_nested_derivative(eq.lhs)
31+
if maxorder > get(var_order, var, 0)
32+
var_order[var] = maxorder
33+
any(isequal(var), vars) || push!(vars, var)
34+
end
35+
var′ = lower_varname(var, iv, maxorder - 1)
36+
rhs′ = rename_lower_order(eq.rhs)
37+
push!(new_eqs, Differential(iv)(var′(iv)) ~ rhs′)
3138
end
32-
var′ = lower_varname(var, iv, maxorder - 1)
33-
rhs′ = rename_lower_order(eq.rhs)
34-
push!(new_eqs,Differential(iv())(var′(iv())) ~ rhs′)
3539
end
3640

3741
for var vars
@@ -41,8 +45,8 @@ function ode_order_lowering(eqs, iv)
4145
rvar = lower_varname(var, iv, o)
4246
push!(new_vars, rvar)
4347

44-
rhs = rvar(iv())
45-
eq = Differential(iv())(lvar(iv())) ~ rhs
48+
rhs = rvar(iv)
49+
eq = Differential(iv)(lvar(iv)) ~ rhs
4650
push!(new_eqs, eq)
4751
end
4852
end

0 commit comments

Comments
 (0)