Skip to content

Commit 17b2330

Browse files
speed up MTK OOP vector usage
1 parent 988fde4 commit 17b2330

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/utils.jl

+9-4
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)