@@ -51,10 +51,11 @@ function build_function(rhss, vs, ps, args = (), conv = rhs -> convert(Expr, rhs
5151 quote
5252 function $fname ($ X,u,p,$ (args... ))
5353 $ ip_let_expr
54+ nothing
5455 end
5556 function $fname (u,p,$ (args... ))
5657 X = $ let_expr
57- T = $ (constructor === nothing ? :(u isa StaticArrays. StaticArray ? StaticArrays. similar_type (typeof (u), eltype (X)) : x-> (du= similar (u, eltype (X)); du .= x)) : constructor)
58+ T = $ (constructor === nothing ? :(u isa ModelingToolkit . StaticArrays. StaticArray ? ModelingToolkit . StaticArrays. similar_type (typeof (u), eltype (X)) : x-> (du= similar (u, eltype (X)); du .= x)) : constructor)
5859 T (X)
5960 end
6061 end
@@ -91,28 +92,10 @@ function vars!(vars, O)
9192 return vars
9293end
9394
94- """
95- $(SIGNATURES)
96-
97- Generate `ODESystem`, dependent variables, and parameters from an `ODEProblem`.
98- """
99- function modelingtoolkitize (prob:: DiffEqBase.ODEProblem )
100- t, = @parameters t;
101- vars = [Variable (:x , i)(t) for i in eachindex (prob. u0)]
102- params = [Variable (:α ,i; known = true )() for i in eachindex (prob. p)]
103- D, = @derivatives D' ~ t
104-
105- rhs = [D (var) for var in vars]
106-
107- if DiffEqBase. isinplace (prob)
108- lhs = similar (vars, Any)
109- prob. f (lhs, vars, params, t)
110- else
111- lhs = prob. f (vars, params, t)
112- end
113-
114- eqs = vcat ([rhs[i] ~ lhs[i] for i in eachindex (prob. u0)]. .. )
115- de = ODESystem (eqs)
116-
117- de, vars, params
95+ @inline @generated function fast_invokelatest (f, :: Type{rt} , args... ) where rt
96+ tupargs = Expr (:tuple ,args... )
97+ quote
98+ _f = $ (Expr (:cfunction , Base. CFunction, :f , rt, :((Core. svec)($ args... )), :(:ccall )))
99+ return ccall (_f. ptr,rt,$ tupargs,$ ((:(getindex (args,$ i)) for i in 1 : length (args)). .. ))
100+ end
118101end
0 commit comments