Skip to content

Commit cd41b94

Browse files
authored
Merge pull request #1234 from SciML/myb/namespacevector
Fixing concrete arrays in equations
2 parents 6753f96 + 30f8ba6 commit cd41b94

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/systems/abstractsystem.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,8 @@ function namespace_expr(O, sys) where {T}
379379
else
380380
similarterm(O, operation(O), renamed)
381381
end
382+
elseif O isa Array
383+
map(Base.Fix2(namespace_expr, sys), O)
382384
else
383385
O
384386
end

test/odesystem.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,3 +471,24 @@ xₜ₋₁ = hist(x, t-1)
471471
eqs = [D(x) ~ x * y
472472
D(y) ~ y * x - xₜ₋₁]
473473
@named sys = ODESystem(eqs, t)
474+
475+
# register
476+
using StaticArrays
477+
using SymbolicUtils: term
478+
using SymbolicUtils.Code
479+
using Symbolics: unwrap, wrap
480+
function foo(a::Num, ms::AbstractVector)
481+
a = unwrap(a)
482+
ms = map(unwrap, ms)
483+
wrap(term(foo, a, MakeArray(ms, SArray)))
484+
end
485+
foo(a, ms::AbstractVector) = a + sum(ms)
486+
@variables t x(t) ms[1:3](t)
487+
D = Differential(t)
488+
ms = collect(ms)
489+
eqs = [D(x) ~ foo(x, ms); D.(ms) .~ 1]
490+
@named sys = ODESystem(eqs, t, [x; ms], [])
491+
@named emptysys = ODESystem(Equation[], t)
492+
@named outersys = compose(emptysys, sys)
493+
prob = ODEProblem(outersys, [sys.x=>1.0; collect(sys.ms).=>1:3], (0, 1.0))
494+
@test_nowarn solve(prob, Tsit5())

0 commit comments

Comments
 (0)