@@ -84,6 +84,7 @@ function generate_function(
84
84
sys:: AbstractODESystem , dvs = states (sys), ps = parameters (sys);
85
85
implicit_dae= false ,
86
86
ddvs= implicit_dae ? map (Differential (get_iv (sys)), dvs) : nothing ,
87
+ has_difference= false ,
87
88
kwargs...
88
89
)
89
90
# optimization
@@ -102,7 +103,7 @@ function generate_function(
102
103
p = map (x-> time_varying_as_func (value (x), sys), ps)
103
104
t = get_iv (sys)
104
105
105
- pre = get_postprocess_fbody (sys)
106
+ pre = has_difference ? (ex -> ex) : get_postprocess_fbody (sys)
106
107
107
108
if implicit_dae
108
109
build_function (rhss, ddvs, u, p, t; postprocess_fbody= pre, kwargs... )
@@ -578,8 +579,9 @@ symbolically calculating numerical enhancements.
578
579
"""
579
580
function DiffEqBase. ODEProblem {iip} (sys:: AbstractODESystem ,u0map,tspan,
580
581
parammap= DiffEqBase. NullParameters ();kwargs... ) where iip
581
- f, u0, p = process_DEProblem (ODEFunction{iip}, sys, u0map, parammap; kwargs... )
582
- if any (isdifferenceeq, equations (sys))
582
+ has_difference = any (isdifferenceeq, equations (sys))
583
+ f, u0, p = process_DEProblem (ODEFunction{iip}, sys, u0map, parammap; has_difference= has_difference, kwargs... )
584
+ if has_difference
583
585
ODEProblem {iip} (f,u0,tspan,p;difference_cb= generate_difference_cb (sys;kwargs... ),kwargs... )
584
586
else
585
587
ODEProblem {iip} (f,u0,tspan,p;kwargs... )
@@ -603,14 +605,15 @@ symbolically calculating numerical enhancements.
603
605
"""
604
606
function DiffEqBase. DAEProblem {iip} (sys:: AbstractODESystem ,du0map,u0map,tspan,
605
607
parammap= DiffEqBase. NullParameters ();kwargs... ) where iip
608
+ has_difference = any (isdifferenceeq, equations (sys))
606
609
f, du0, u0, p = process_DEProblem (
607
610
DAEFunction{iip}, sys, u0map, parammap;
608
- implicit_dae= true , du0map= du0map, kwargs...
611
+ implicit_dae= true , du0map= du0map, has_difference = has_difference, kwargs...
609
612
)
610
613
diffvars = collect_differential_variables (sys)
611
614
sts = states (sys)
612
615
differential_vars = map (Base. Fix2 (in, diffvars), sts)
613
- if any (isdifferenceeq, equations (sys))
616
+ if has_difference
614
617
DAEProblem {iip} (f,du0,u0,tspan,p;difference_cb= generate_difference_cb (sys; kwargs... ),differential_vars= differential_vars,kwargs... )
615
618
else
616
619
DAEProblem {iip} (f,du0,u0,tspan,p;differential_vars= differential_vars,kwargs... )
0 commit comments