1
- function lower_varname (var:: Variable , idv, order)
1
+ function lower_varname (var:: Term , idv, order)
2
2
order == 0 && return var
3
- name = Symbol (var. name, :ˍ , string (idv. name)^ order)
4
- return Variable {vartype(var)} (name)
3
+ name = Symbol (nameof (var. op), :ˍ , string (idv)^ order)
4
+ # name = Symbol(var.name, :ˍ, string(idv.name)^order)
5
+ return Sym {symtype(var.op)} (name)(var. args[1 ])
5
6
end
6
7
7
- function flatten_differential (O:: Operation )
8
+ function flatten_differential (O:: Term )
8
9
@assert is_derivative (O) " invalid differential: $O "
9
10
is_derivative (O. args[1 ]) || return (O. args[1 ], O. op. x, 1 )
10
11
(x, t, order) = flatten_differential (O. args[1 ])
@@ -24,12 +25,12 @@ function ode_order_lowering(sys::ODESystem)
24
25
end
25
26
26
27
function ode_order_lowering (eqs, iv, states)
27
- var_order = OrderedDict {Variable ,Int} ()
28
- D = Differential (iv () )
28
+ var_order = OrderedDict {Any ,Int} ()
29
+ D = Differential (iv)
29
30
diff_eqs = Equation[]
30
- diff_vars = Variable []
31
+ diff_vars = []
31
32
alge_eqs = Equation[]
32
- alge_vars = Variable []
33
+ alge_vars = []
33
34
34
35
for (i, (eq, ss)) ∈ enumerate (zip (eqs, states))
35
36
if isequal (eq. lhs, Constant (0 ))
@@ -42,7 +43,7 @@ function ode_order_lowering(eqs, iv, states)
42
43
var′ = lower_varname (var, iv, maxorder - 1 )
43
44
rhs′ = rename_lower_order (eq. rhs)
44
45
push! (diff_vars, var′)
45
- push! (diff_eqs, D (var′ ( iv ()) ) ~ rhs′)
46
+ push! (diff_eqs, D (var′) ~ rhs′)
46
47
end
47
48
end
48
49
@@ -52,8 +53,8 @@ function ode_order_lowering(eqs, iv, states)
52
53
rvar = lower_varname (var, iv, o)
53
54
push! (diff_vars, lvar)
54
55
55
- rhs = rvar ( iv ())
56
- eq = Differential (iv ()) (lvar ( iv ()) ) ~ rhs
56
+ rhs = rvar
57
+ eq = Differential (iv) (lvar) ~ rhs
57
58
push! (diff_eqs, eq)
58
59
end
59
60
end
@@ -62,11 +63,11 @@ function ode_order_lowering(eqs, iv, states)
62
63
return (vcat (diff_eqs, alge_eqs), vcat (diff_vars, alge_vars))
63
64
end
64
65
65
- function rename_lower_order (O:: Expression )
66
- isa (O, Operation ) || return O
66
+ function rename_lower_order (O)
67
+ isa (O, Term ) || return O
67
68
if is_derivative (O)
68
69
(x, t, order) = flatten_differential (O)
69
- return lower_varname (x. op , t. op , order)(x . args ... )
70
+ return lower_varname (x, t, order)
70
71
end
71
- return Operation (O. op, rename_lower_order .(O. args))
72
+ return Term (O. op, rename_lower_order .(O. args))
72
73
end
0 commit comments