@@ -60,9 +60,7 @@ system_vars(sys::DiffEqSystem) = sys.dvs
6060system_params (sys:: DiffEqSystem ) = sys. ps
6161
6262
63- function generate_ode_iW (sys:: DiffEqSystem , simplify= true )
64- var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in eachindex (sys. dvs)]
65- param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in eachindex (sys. ps)]
63+ function generate_ode_iW (sys:: DiffEqSystem , simplify= true ; version:: FunctionVersion = ArrayFunction)
6664 jac = calculate_jacobian (sys)
6765
6866 gam = Parameter (:gam )
@@ -82,14 +80,11 @@ function generate_ode_iW(sys::DiffEqSystem, simplify=true)
8280 iW_t = simplify_constants .(iW_t)
8381 end
8482
85- iW_exprs = [:(iW[ $ i, $ j] = $ ( convert (Expr, iW[i,j]))) for i in 1 : size (iW, 1 ), j in 1 : size (iW, 2 )]
86- exprs = vcat (var_exprs,param_exprs, vec (iW_exprs) )
87- block = expr_arr_to_block (exprs )
83+ vs, ps = system_vars (sys), system_params (sys)
84+ iW_func = build_function (iW , vs, ps, ( :gam , :t ); version = version )
85+ iW_t_func = build_function (iW_t, vs, ps, ( :gam , :t ); version = version )
8886
89- iW_t_exprs = [:(iW[$ i,$ j] = $ (convert (Expr, iW_t[i,j]))) for i in 1 : size (iW_t,1 ), j in 1 : size (iW_t,2 )]
90- exprs = vcat (var_exprs,param_exprs,vec (iW_t_exprs))
91- block2 = expr_arr_to_block (exprs)
92- :((iW,u,p,gam,t)-> $ (block)),:((iW,u,p,gam,t)-> $ (block2))
87+ return (iW_func, iW_t_func)
9388end
9489
9590function DiffEqBase. ODEFunction (sys:: DiffEqSystem ; version:: FunctionVersion = ArrayFunction)
0 commit comments