Skip to content

Commit 2a31335

Browse files
committed
fix 841
1 parent 1de2713 commit 2a31335

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,13 @@ variable and parameter vectors, respectively.
199199
"""
200200
struct ODEFunctionExpr{iip} end
201201

202+
struct ODEFunctionClosure{O, I} <: Function
203+
f_oop::O
204+
f_iip::I
205+
end
206+
(f::ODEFunctionClosure)(u, p, t) = f.f_oop(u, p, t)
207+
(f::ODEFunctionClosure)(du, u, p, t) = f.f_iip(du, u, p, t)
208+
202209
function ODEFunctionExpr{iip}(sys::AbstractODESystem, dvs = states(sys),
203210
ps = parameters(sys), u0 = nothing;
204211
version = nothing, tgrad=false,
@@ -209,20 +216,13 @@ function ODEFunctionExpr{iip}(sys::AbstractODESystem, dvs = states(sys),
209216

210217
f_oop, f_iip = generate_function(sys, dvs, ps; expression=Val{true}, kwargs...)
211218
fsym = gensym(:f)
212-
_f = quote
213-
$fsym(u,p,t) = $f_oop(u,p,t)
214-
$fsym(du,u,p,t) = $f_iip(du,u,p,t)
215-
end
216-
219+
_f = :($fsym = ModelingToolkit.ODEFunctionClosure($f_oop, $f_iip))
217220
tgradsym = gensym(:tgrad)
218221
if tgrad
219222
tgrad_oop, tgrad_iip = generate_tgrad(sys, dvs, ps;
220223
simplify=simplify,
221224
expression=Val{true}, kwargs...)
222-
_tgrad = quote
223-
$tgradsym(u,p,t) = $tgrad_oop(u,p,t)
224-
$tgradsym(J,u,p,t) = $tgrad_iip(J,u,p,t)
225-
end
225+
_tgrad = :($tgradsym = ModelingToolkit.ODEFunctionClosure($tgrad_oop, $tgrad_iip))
226226
else
227227
_tgrad = :($tgradsym = nothing)
228228
end
@@ -232,10 +232,7 @@ function ODEFunctionExpr{iip}(sys::AbstractODESystem, dvs = states(sys),
232232
jac_oop,jac_iip = generate_jacobian(sys, dvs, ps;
233233
sparse=sparse, simplify=simplify,
234234
expression=Val{true}, kwargs...)
235-
_jac = quote
236-
$jacsym(u,p,t) = $jac_oop(u,p,t)
237-
$jacsym(J,u,p,t) = $jac_iip(J,u,p,t)
238-
end
235+
_jac = :($jacsym = ModelingToolkit.ODEFunctionClosure($jac_oop, $jac_iip))
239236
else
240237
_jac = :($jacsym = nothing)
241238
end

0 commit comments

Comments
 (0)