Skip to content

Commit 60d60fa

Browse files
authored
Make sure defaults handles differentials as well (#1598)
1 parent 3106f0a commit 60d60fa

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/systems/abstractsystem.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,9 @@ function renamespace(sys, x)
409409
sys === nothing && return x
410410
x = unwrap(x)
411411
if x isa Symbolic
412+
if isdifferential(x)
413+
return similarterm(x, operation(x), Any[renamespace(sys, only(arguments(x)))])
414+
end
412415
let scope = getmetadata(x, SymScope, LocalScope())
413416
if scope isa LocalScope
414417
rename(x, renamespace(getname(sys), getname(x)))

test/odesystem.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,3 +772,25 @@ let
772772
oprob = ODEProblem(osys, [A => 1.0], (0.0, 10.0), [k => 1.0]; check_length = false)
773773
@test_nowarn sol = solve(oprob, Tsit5())
774774
end
775+
776+
let
777+
function sys1(; name)
778+
vars = @variables x(t)=0.0 dx(t)=0.0
779+
780+
ODESystem([D(x) ~ dx], t, vars, []; name, defaults = [D(x) => x])
781+
end
782+
783+
function sys2(; name)
784+
@named s1 = sys1()
785+
786+
ODESystem(Equation[], t, [], []; systems = [s1], name)
787+
end
788+
789+
s1′ = sys1(; name = :s1)
790+
@named s2 = sys2()
791+
@unpack s1 = s2
792+
@test isequal(s1, s1′)
793+
794+
defs = Dict(s1.dx => 0.0, D(s1.x) => s1.x, s1.x => 0.0)
795+
@test isequal(ModelingToolkit.defaults(s2), defs)
796+
end

0 commit comments

Comments
 (0)