Skip to content

Commit 4d7e178

Browse files
committed
Check indices in sparse iip Jacobian function only if checkbounds
1 parent 1762fd9 commit 4d7e178

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/systems/codegen.jl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -217,15 +217,15 @@ All other keyword arguments are forwarded to [`build_function_wrapper`](@ref).
217217
function generate_jacobian(sys::System;
218218
simplify = false, sparse = false, eval_expression = false,
219219
eval_module = @__MODULE__, expression = Val{true}, wrap_gfw = Val{false},
220-
kwargs...)
220+
checkbounds = true, kwargs...)
221221
dvs = unknowns(sys)
222222
jac = calculate_jacobian(sys; simplify, sparse, dvs)
223223
p = reorder_parameters(sys)
224224
t = get_iv(sys)
225-
if t === nothing
226-
wrap_code = (identity, identity)
225+
if t !== nothing && sparse && checkbounds
226+
wrap_code = assert_jac_length_header(sys) # checking sparse J indices at runtime is expensive for large systems
227227
else
228-
wrap_code = sparse ? assert_jac_length_header(sys) : (identity, identity)
228+
wrap_code = (identity, identity)
229229
end
230230
args = (dvs, p...)
231231
nargs = 2
@@ -331,7 +331,7 @@ All other keyword arguments are forwarded to [`build_function_wrapper`](@ref).
331331
"""
332332
function generate_W(sys::System;
333333
simplify = false, sparse = false, expression = Val{true}, wrap_gfw = Val{false},
334-
eval_expression = false, eval_module = @__MODULE__, kwargs...)
334+
eval_expression = false, eval_module = @__MODULE__, checkbounds = true, kwargs...)
335335
dvs = unknowns(sys)
336336
ps = parameters(sys; initial_parameters = true)
337337
M = calculate_massmatrix(sys; simplify)
@@ -341,8 +341,10 @@ function generate_W(sys::System;
341341
J = calculate_jacobian(sys; simplify, sparse, dvs)
342342
W = W_GAMMA * M + J
343343
t = get_iv(sys)
344-
if t !== nothing
345-
wrap_code = sparse ? assert_jac_length_header(sys) : (identity, identity)
344+
if t !== nothing && sparse && checkbounds
345+
wrap_code = assert_jac_length_header(sys)
346+
else
347+
wrap_code = (identity, identity)
346348
end
347349

348350
p = reorder_parameters(sys, ps)

0 commit comments

Comments
 (0)