@@ -47,21 +47,26 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
47
47
ip_sys_exprs = [:($ X[$ i] = $ (conv (rhs))) for (i, rhs) ∈ enumerate (rhss)]
48
48
ip_let_expr = Expr (:let , var_eqs, build_expr (:block , ip_sys_exprs))
49
49
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)
52
54
bounds_block = checkbounds ? let_expr : :(@inbounds begin $ let_expr end )
55
+ vector_bounds_block = checkbounds ? vector_let_expr : :(@inbounds begin $ vector_let_expr end )
53
56
ip_bounds_block = checkbounds ? ip_let_expr : :(@inbounds begin $ ip_let_expr end )
54
57
55
58
fargs = ps == () ? :(u,$ (args... )) : :(u,p,$ (args... ))
56
59
57
60
oop_ex = :(
58
61
($ (fargs. args... ),) -> begin
59
- @inbounds begin
62
+ if $ (fargs. args[1 ]) isa Array
63
+ return $ vector_bounds_block
64
+ else
60
65
X = $ bounds_block
61
66
end
62
67
T = promote_type (map (typeof,X)... )
63
68
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)
65
70
construct (X)
66
71
end
67
72
)
0 commit comments