Skip to content

Commit 53ac691

Browse files
Support ODESystem in the alternative build targets
1 parent 683b469 commit 53ac691

File tree

4 files changed

+19
-3
lines changed

4 files changed

+19
-3
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
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 <accounts@chrisrackauckas.com>"]
4-
version = "1.4.0"
4+
version = "1.4.1"
55

66
[deps]
77
DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e"

src/build_function.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,13 @@ function numbered_expr(O::Operation,vars,parameters;
116116
[numbered_expr(x,vars,parameters;derivname=derivname,
117117
varname=varname,paramname=paramname) for x in O.args]...)
118118
end
119-
119+
function numbered_expr(de::ModelingToolkit.DiffEq,vars,parameters;
120+
derivname=:du,varname=:u,paramname=:p)
121+
i = findfirst(x->isequal(x.op.name,de.x.name),vars)
122+
:($derivname[$i] = $(numbered_expr(de.rhs,vars,parameters;
123+
derivname=derivname,
124+
varname=varname,paramname=paramname)))
125+
end
120126
numbered_expr(c::ModelingToolkit.Constant,args...;kwargs...) = c.value
121127

122128
function _build_function(target::StanTarget, eqs, vs, ps, iv,

src/systems/diffeqs/diffeqsystem.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ function flatten_differential(O::Operation)
1414
return (x, t, order + 1)
1515
end
1616

17-
1817
struct DiffEq # dⁿx/dtⁿ = rhs
1918
x::Variable
2019
n::Int

test/build_targets.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,14 @@ eqs = [D(x) ~ a*x - x*y,
2525
@test ModelingToolkit.build_function(eqs,[x,y],[a],t,target = ModelingToolkit.MATLABTarget()) ==
2626
"""
2727
diffeqf = @(t,internal_var___u) [internal_var___p(1) * internal_var___u(1) - internal_var___u(1) * internal_var___u(2); -3 * internal_var___u(2) + internal_var___u(1) * internal_var___u(2)];"""
28+
29+
sys = ODESystem(eqs,t,[x,y],[a])
30+
31+
@test ModelingToolkit.build_function(eqs,[x,y],[a],t,target = ModelingToolkit.CTarget()) ==
32+
ModelingToolkit.build_function(sys.eqs,[x,y],[a],t,target = ModelingToolkit.CTarget())
33+
34+
@test ModelingToolkit.build_function(eqs,[x,y],[a],t,target = ModelingToolkit.StanTarget()) ==
35+
ModelingToolkit.build_function(sys.eqs,[x,y],[a],t,target = ModelingToolkit.StanTarget())
36+
37+
@test ModelingToolkit.build_function(eqs,[x,y],[a],t,target = ModelingToolkit.MATLABTarget()) ==
38+
ModelingToolkit.build_function(sys.eqs,[x,y],[a],t,target = ModelingToolkit.MATLABTarget())

0 commit comments

Comments
 (0)