@@ -47,21 +47,26 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
4747 ip_sys_exprs = [:($ X[$ i] = $ (conv (rhs))) for (i, rhs) ∈ enumerate (rhss)]
4848 ip_let_expr = Expr (:let , var_eqs, build_expr (:block , ip_sys_exprs))
4949
50- sys_expr = build_expr (:tuple , [conv (rhs) for rhs ∈ rhss])
51- let_expr = Expr (:let , var_eqs, sys_expr)
50+ tuple_sys_expr = build_expr (:tuple , [conv (rhs) for rhs ∈ rhss])
51+ vector_sys_expr = build_expr (:vect , [conv (rhs) for rhs ∈ rhss])
52+ let_expr = Expr (:let , var_eqs, tuple_sys_expr)
53+ vector_let_expr = Expr (:let , var_eqs, vector_sys_expr)
5254 bounds_block = checkbounds ? let_expr : :(@inbounds begin $ let_expr end )
55+ vector_bounds_block = checkbounds ? vector_let_expr : :(@inbounds begin $ vector_let_expr end )
5356 ip_bounds_block = checkbounds ? ip_let_expr : :(@inbounds begin $ ip_let_expr end )
5457
5558 fargs = ps == () ? :(u,$ (args... )) : :(u,p,$ (args... ))
5659
5760 oop_ex = :(
5861 ($ (fargs. args... ),) -> begin
59- @inbounds begin
62+ if $ (fargs. args[1 ]) isa Array
63+ return $ vector_bounds_block
64+ else
6065 X = $ bounds_block
6166 end
6267 T = promote_type (map (typeof,X)... )
6368 convert .(T,X)
64- construct = $ (constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. similar_type (typeof (u), eltype (X)) : x-> (du = similar (u, T, $ ( size (rhss) ... )); vec (du) . = x; du )) : constructor)
69+ construct = $ (constructor === nothing ? :(u isa ModelingToolkit. StaticArrays. StaticArray ? ModelingToolkit. StaticArrays. similar_type (typeof (u), eltype (X)) : x-> convert ( typeof (u),x )) : constructor)
6570 construct (X)
6671 end
6772 )
0 commit comments