1
1
function lower_varname (var:: Variable , idv, order)
2
2
order == 0 && return var
3
- name = Symbol (var. name, :_ , string (idv. name)^ order)
3
+ name = Symbol (var. name, :_ , string (idv. op . name)^ order)
4
4
return Variable {vartype(var)} (name)
5
5
end
6
6
@@ -24,14 +24,18 @@ function ode_order_lowering(eqs, iv)
24
24
new_vars = Variable[]
25
25
26
26
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′)
31
38
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′)
35
39
end
36
40
37
41
for var ∈ vars
@@ -41,8 +45,8 @@ function ode_order_lowering(eqs, iv)
41
45
rvar = lower_varname (var, iv, o)
42
46
push! (new_vars, rvar)
43
47
44
- rhs = rvar (iv () )
45
- eq = Differential (iv ()) (lvar (iv () )) ~ rhs
48
+ rhs = rvar (iv)
49
+ eq = Differential (iv) (lvar (iv)) ~ rhs
46
50
push! (new_eqs, eq)
47
51
end
48
52
end
0 commit comments