@@ -312,12 +312,13 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
312
312
analytic = nothing ,
313
313
split_idxs = nothing ,
314
314
initialization_data = nothing ,
315
+ cse = true ,
315
316
kwargs... ) where {iip, specialize}
316
317
if ! iscomplete (sys)
317
318
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `ODEFunction`" )
318
319
end
319
320
f_gen = generate_function (sys, dvs, ps; expression = Val{true },
320
- expression_module = eval_module, checkbounds = checkbounds,
321
+ expression_module = eval_module, checkbounds = checkbounds, cse,
321
322
kwargs... )
322
323
f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
323
324
f = GeneratedFunctionWrapper {(2, 3, is_split(sys))} (f_oop, f_iip)
@@ -333,7 +334,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
333
334
tgrad_gen = generate_tgrad (sys, dvs, ps;
334
335
simplify = simplify,
335
336
expression = Val{true },
336
- expression_module = eval_module,
337
+ expression_module = eval_module, cse,
337
338
checkbounds = checkbounds, kwargs... )
338
339
tgrad_oop, tgrad_iip = eval_or_rgf .(tgrad_gen; eval_expression, eval_module)
339
340
_tgrad = GeneratedFunctionWrapper {(2, 3, is_split(sys))} (tgrad_oop, tgrad_iip)
@@ -345,7 +346,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
345
346
jac_gen = generate_jacobian (sys, dvs, ps;
346
347
simplify = simplify, sparse = sparse,
347
348
expression = Val{true },
348
- expression_module = eval_module,
349
+ expression_module = eval_module, cse,
349
350
checkbounds = checkbounds, kwargs... )
350
351
jac_oop, jac_iip = eval_or_rgf .(jac_gen; eval_expression, eval_module)
351
352
@@ -365,7 +366,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
365
366
end
366
367
367
368
observedfun = ObservedFunctionCache (
368
- sys; steady_state, eval_expression, eval_module, checkbounds)
369
+ sys; steady_state, eval_expression, eval_module, checkbounds, cse )
369
370
370
371
jac_prototype = if sparse
371
372
uElType = u0 === nothing ? Float64 : eltype (u0)
@@ -420,12 +421,13 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
420
421
eval_module = @__MODULE__ ,
421
422
checkbounds = false ,
422
423
initialization_data = nothing ,
424
+ cse = true ,
423
425
kwargs... ) where {iip}
424
426
if ! iscomplete (sys)
425
427
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `DAEFunction`" )
426
428
end
427
429
f_gen = generate_function (sys, dvs, ps; implicit_dae = true ,
428
- expression = Val{true },
430
+ expression = Val{true }, cse,
429
431
expression_module = eval_module, checkbounds = checkbounds,
430
432
kwargs... )
431
433
f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
@@ -435,7 +437,7 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
435
437
jac_gen = generate_dae_jacobian (sys, dvs, ps;
436
438
simplify = simplify, sparse = sparse,
437
439
expression = Val{true },
438
- expression_module = eval_module,
440
+ expression_module = eval_module, cse,
439
441
checkbounds = checkbounds, kwargs... )
440
442
jac_oop, jac_iip = eval_or_rgf .(jac_gen; eval_expression, eval_module)
441
443
@@ -445,7 +447,7 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
445
447
end
446
448
447
449
observedfun = ObservedFunctionCache (
448
- sys; eval_expression, eval_module, checkbounds = get (kwargs, :checkbounds , false ))
450
+ sys; eval_expression, eval_module, checkbounds = get (kwargs, :checkbounds , false ), cse )
449
451
450
452
jac_prototype = if sparse
451
453
uElType = u0 === nothing ? Float64 : eltype (u0)
@@ -479,14 +481,15 @@ function DiffEqBase.DDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
479
481
eval_module = @__MODULE__ ,
480
482
checkbounds = false ,
481
483
initialization_data = nothing ,
484
+ cse = true ,
482
485
kwargs... ) where {iip}
483
486
if ! iscomplete (sys)
484
487
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `DDEFunction`" )
485
488
end
486
489
f_gen = generate_function (sys, dvs, ps; isdde = true ,
487
490
expression = Val{true },
488
491
expression_module = eval_module, checkbounds = checkbounds,
489
- kwargs... )
492
+ cse, kwargs... )
490
493
f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
491
494
f = GeneratedFunctionWrapper {(3, 4, is_split(sys))} (f_oop, f_iip)
492
495
@@ -503,19 +506,20 @@ function DiffEqBase.SDDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys
503
506
eval_module = @__MODULE__ ,
504
507
checkbounds = false ,
505
508
initialization_data = nothing ,
509
+ cse = true ,
506
510
kwargs... ) where {iip}
507
511
if ! iscomplete (sys)
508
512
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `SDDEFunction`" )
509
513
end
510
514
f_gen = generate_function (sys, dvs, ps; isdde = true ,
511
515
expression = Val{true },
512
516
expression_module = eval_module, checkbounds = checkbounds,
513
- kwargs... )
517
+ cse, kwargs... )
514
518
f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
515
519
f = GeneratedFunctionWrapper {(3, 4, is_split(sys))} (f_oop, f_iip)
516
520
517
521
g_gen = generate_diffusion_function (sys, dvs, ps; expression = Val{true },
518
- isdde = true , kwargs... )
522
+ isdde = true , cse, kwargs... )
519
523
g_oop, g_iip = eval_or_rgf .(g_gen; eval_expression, eval_module)
520
524
g = GeneratedFunctionWrapper {(3, 4, is_split(sys))} (g_oop, g_iip)
521
525
@@ -841,6 +845,7 @@ function SciMLBase.BVProblem{iip, specialize}(sys::AbstractODESystem, u0map = []
841
845
warn_initialize_determined = true ,
842
846
eval_expression = false ,
843
847
eval_module = @__MODULE__ ,
848
+ cse = true ,
844
849
kwargs... ) where {iip, specialize}
845
850
if ! iscomplete (sys)
846
851
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `BVProblem`" )
@@ -864,12 +869,12 @@ function SciMLBase.BVProblem{iip, specialize}(sys::AbstractODESystem, u0map = []
864
869
_u0map = has_alg_eqs (sys) ? u0map : merge (Dict (u0map), Dict (guesses))
865
870
f, u0, p = process_SciMLProblem (ODEFunction{iip, specialize}, sys, _u0map, parammap;
866
871
t = tspan != = nothing ? tspan[1 ] : tspan, guesses,
867
- check_length, warn_initialize_determined, eval_expression, eval_module, kwargs... )
872
+ check_length, warn_initialize_determined, eval_expression, eval_module, cse, kwargs... )
868
873
869
874
stidxmap = Dict ([v => i for (i, v) in enumerate (sts)])
870
875
u0_idxs = has_alg_eqs (sys) ? collect (1 : length (sts)) : [stidxmap[k] for (k, v) in u0map]
871
876
872
- fns = generate_function_bc (sys, u0, u0_idxs, tspan)
877
+ fns = generate_function_bc (sys, u0, u0_idxs, tspan; cse )
873
878
bc_oop, bc_iip = eval_or_rgf .(fns; eval_expression, eval_module)
874
879
bc (sol, p, t) = bc_oop (sol, p, t)
875
880
bc (resid, u, p, t) = bc_iip (resid, u, p, t)
@@ -988,15 +993,16 @@ function DiffEqBase.DDEProblem{iip}(sys::AbstractODESystem, u0map = [],
988
993
eval_expression = false ,
989
994
eval_module = @__MODULE__ ,
990
995
u0_constructor = identity,
996
+ cse = true ,
991
997
kwargs... ) where {iip}
992
998
if ! iscomplete (sys)
993
999
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `DDEProblem`" )
994
1000
end
995
1001
f, u0, p = process_SciMLProblem (DDEFunction{iip}, sys, u0map, parammap;
996
1002
t = tspan != = nothing ? tspan[1 ] : tspan,
997
- symbolic_u0 = true , u0_constructor,
1003
+ symbolic_u0 = true , u0_constructor, cse,
998
1004
check_length, eval_expression, eval_module, kwargs... )
999
- h_gen = generate_history (sys, u0; expression = Val{true })
1005
+ h_gen = generate_history (sys, u0; expression = Val{true }, cse )
1000
1006
h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
1001
1007
h = h_oop
1002
1008
u0 = float .(h (p, tspan[1 ]))
@@ -1027,15 +1033,16 @@ function DiffEqBase.SDDEProblem{iip}(sys::AbstractODESystem, u0map = [],
1027
1033
eval_expression = false ,
1028
1034
eval_module = @__MODULE__ ,
1029
1035
u0_constructor = identity,
1036
+ cse = true ,
1030
1037
kwargs... ) where {iip}
1031
1038
if ! iscomplete (sys)
1032
1039
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `SDDEProblem`" )
1033
1040
end
1034
1041
f, u0, p = process_SciMLProblem (SDDEFunction{iip}, sys, u0map, parammap;
1035
1042
t = tspan != = nothing ? tspan[1 ] : tspan,
1036
1043
symbolic_u0 = true , eval_expression, eval_module, u0_constructor,
1037
- check_length, kwargs... )
1038
- h_gen = generate_history (sys, u0; expression = Val{true })
1044
+ check_length, cse, kwargs... )
1045
+ h_gen = generate_history (sys, u0; expression = Val{true }, cse )
1039
1046
h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
1040
1047
h = h_oop
1041
1048
u0 = h (p, tspan[1 ])
0 commit comments