Skip to content

Commit fefe559

Browse files
authored
Merge pull request #888 from SciML/myb/varmap
Use `at set!` in first_order_transform and call `diff2term` in varmap
2 parents 805811b + fc643ae commit fefe559

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

src/systems/diffeqs/first_order_transform.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ form by defining new variables which represent the N-1 derivatives.
77
function ode_order_lowering(sys::ODESystem)
88
iv = independent_variable(sys)
99
eqs_lowered, new_vars = ode_order_lowering(equations(sys), iv, states(sys))
10-
return ODESystem(eqs_lowered, iv, new_vars, parameters(sys))
10+
@set! sys.eqs = eqs_lowered
11+
@set! sys.states = new_vars
12+
@set! sys.structure = nothing
13+
return sys
1114
end
1215

1316
function ode_order_lowering(eqs, iv, states)

src/variables.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ applicable.
66
"""
77
function varmap_to_vars(varmap::Dict, varlist; defaults=Dict())
88
varmap = merge(defaults, varmap) # prefers the `varmap`
9-
varmap = Dict(value(k)=>value(varmap[k]) for k in keys(varmap))
9+
varmap = Dict(Symbolics.diff2term(value(k))=>value(varmap[k]) for k in keys(varmap))
1010
# resolve symbolic parameter expressions
1111
for (p, v) in pairs(varmap)
1212
varmap[p] = fixpoint_sub(v, varmap)

test/odesystem.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,3 +303,16 @@ ode = ODESystem(eq)
303303
issue808()
304304

305305
end
306+
307+
@variables x(t)
308+
D = Differential(t)
309+
@parameters M b k
310+
eqs = [D(D(x)) ~ -b/M*D(x) - k/M*x]
311+
ps = [M, b, k]
312+
default_u0 = [D(x) => 0.0, x => 10.0]
313+
default_p = [M => 1.0, b => 1.0, k => 1.0]
314+
@named sys = ODESystem(eqs, t, [x], ps, default_u0=default_u0, default_p=default_p)
315+
sys = ode_order_lowering(sys)
316+
prob = ODEProblem(sys, Pair[], tspan)
317+
sol = solve(prob, Tsit5())
318+
@test sum(abs, sol[end]) < 1

0 commit comments

Comments
 (0)