@@ -217,15 +217,15 @@ All other keyword arguments are forwarded to [`build_function_wrapper`](@ref).
217217function 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"""
332332function 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