Skip to content

Commit 6cb4f23

Browse files
authored
Merge pull request #309 from SciML/myb/first_order
Generate a full list of vars in `ode_order_lowering`
2 parents a13d70d + 15e6c27 commit 6cb4f23

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

Project.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ModelingToolkit"
22
uuid = "961ee093-0014-501f-94e3-6117800e7a78"
33
authors = ["Chris Rackauckas <[email protected]>"]
4-
version = "3.0.0"
4+
version = "3.0.1"
55

66
[deps]
77
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"

src/systems/diffeqs/first_order_transform.jl

+9-6
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,20 @@ Takes a Nth order ODESystem and returns a new ODESystem written in first order
1919
form by defining new variables which represent the N-1 derivatives.
2020
"""
2121
function ode_order_lowering(sys::ODESystem)
22-
eqs_lowered, new_vars = ode_order_lowering(sys.eqs, sys.iv)
23-
ODESystem(eqs_lowered, sys.iv, vcat(new_vars, states(sys)), sys.ps)
22+
eqs_lowered, new_vars = ode_order_lowering(equations(sys), sys.iv, states(sys))
23+
return ODESystem(eqs_lowered, sys.iv, new_vars, sys.ps)
2424
end
2525

26-
function ode_order_lowering(eqs, iv)
26+
function ode_order_lowering(eqs, iv, states)
2727
var_order = Dict{Variable,Int}()
2828
vars = Variable[]
2929
new_eqs = Equation[]
3030
new_vars = Variable[]
31+
D = Differential(iv())
3132

32-
for (i, eq) enumerate(eqs)
33+
for (i, (eq, ss)) enumerate(zip(eqs, states))
3334
if isequal(eq.lhs, Constant(0))
35+
push!(new_vars, ss)
3436
push!(new_eqs, eq)
3537
else
3638
var, maxorder = var_from_nested_derivative(eq.lhs)
@@ -40,7 +42,8 @@ function ode_order_lowering(eqs, iv)
4042
end
4143
var′ = lower_varname(var, iv, maxorder - 1)
4244
rhs′ = rename_lower_order(eq.rhs)
43-
push!(new_eqs,Differential(iv())(var′(iv())) ~ rhs′)
45+
push!(new_vars, var′)
46+
push!(new_eqs, D(var′(iv())) ~ rhs′)
4447
end
4548
end
4649

@@ -49,7 +52,7 @@ function ode_order_lowering(eqs, iv)
4952
for o in (order-1):-1:1
5053
lvar = lower_varname(var, iv, o-1)
5154
rvar = lower_varname(var, iv, o)
52-
push!(new_vars, rvar)
55+
push!(new_vars, lvar)
5356

5457
rhs = rvar(iv())
5558
eq = Differential(iv())(lvar(iv())) ~ rhs

0 commit comments

Comments
 (0)