@@ -101,25 +101,29 @@ respectively.
101
101
function DiffEqBase. SDEFunction {iip} (sys:: SDESystem , dvs = sys. states, ps = sys. ps,
102
102
u0 = nothing ;
103
103
version = nothing , tgrad= false , sparse = false ,
104
- jac = false , Wfact = false , kwargs... ) where {iip}
105
- f_oop,f_iip = ModelingToolkit. eval .(generate_function (sys, dvs, ps; expression= Val{true }, kwargs... ))
106
- g_oop,g_iip = ModelingToolkit. eval .(generate_diffusion_function (sys, dvs, ps; expression= Val{true }, kwargs... ))
104
+ jac = false , Wfact = false , eval_expression = true , kwargs... ) where {iip}
105
+ f_gen = generate_function (sys, dvs, ps; expression= Val{eval_expression}, kwargs... )
106
+ f_oop,f_iip = eval_expression ? ModelingToolkit. eval .(f_gen) : f_gen
107
+ g_gen = generate_diffusion_function (sys, dvs, ps; expression= Val{eval_expression}, kwargs... )
108
+ g_oop,g_iip = eval_expression ? ModelingToolkit. eval .(g_gen) : g_gen
107
109
108
110
f (u,p,t) = f_oop (u,p,t)
109
111
f (du,u,p,t) = f_iip (du,u,p,t)
110
112
g (u,p,t) = g_oop (u,p,t)
111
113
g (du,u,p,t) = g_iip (du,u,p,t)
112
114
113
115
if tgrad
114
- tgrad_oop,tgrad_iip = ModelingToolkit. eval .(generate_tgrad (sys, dvs, ps; expression= Val{true }, kwargs... ))
116
+ tgrad_gen = generate_tgrad (sys, dvs, ps; expression= Val{eval_expression}, kwargs... )
117
+ tgrad_oop,tgrad_iip = eval_expression ? ModelingToolkit. eval .(tgrad_gen) : tgrad_gen
115
118
_tgrad (u,p,t) = tgrad_oop (u,p,t)
116
119
_tgrad (J,u,p,t) = tgrad_iip (J,u,p,t)
117
120
else
118
121
_tgrad = nothing
119
122
end
120
123
121
124
if jac
122
- jac_oop,jac_iip = ModelingToolkit. eval .(generate_jacobian (sys, dvs, ps; expression= Val{true }, sparse= sparse, kwargs... ))
125
+ jac_gen = generate_jacobian (sys, dvs, ps; expression= Val{eval_expression}, sparse= sparse, kwargs... )
126
+ jac_oop,jac_iip = eval_expression ? ModelingToolkit. eval .(jac_gen) : jac_gen
123
127
_jac (u,p,t) = jac_oop (u,p,t)
124
128
_jac (J,u,p,t) = jac_iip (J,u,p,t)
125
129
else
@@ -128,8 +132,8 @@ function DiffEqBase.SDEFunction{iip}(sys::SDESystem, dvs = sys.states, ps = sys.
128
132
129
133
if Wfact
130
134
tmp_Wfact,tmp_Wfact_t = generate_factorized_W (sys, dvs, ps, true ; expression= Val{true }, kwargs... )
131
- Wfact_oop, Wfact_iip = ModelingToolkit. eval .(tmp_Wfact)
132
- Wfact_oop_t, Wfact_iip_t = ModelingToolkit. eval .(tmp_Wfact_t)
135
+ Wfact_oop, Wfact_iip = eval_expression ? ModelingToolkit. eval .(tmp_Wfact) : tmp_Wfact
136
+ Wfact_oop_t, Wfact_iip_t = eval_expression ? ModelingToolkit. eval .(tmp_Wfact_t) : tmp_Wfact_t
133
137
_Wfact (u,p,dtgamma,t) = Wfact_oop (u,p,dtgamma,t)
134
138
_Wfact (W,u,p,dtgamma,t) = Wfact_iip (W,u,p,dtgamma,t)
135
139
_Wfact_t (u,p,dtgamma,t) = Wfact_oop_t (u,p,dtgamma,t)
@@ -253,6 +257,7 @@ function DiffEqBase.SDEProblem{iip}(sys::SDESystem,u0map,tspan,parammap=DiffEqBa
253
257
checkbounds = false , sparse = false ,
254
258
sparsenoise = sparse,
255
259
linenumbers = true , parallel= SerialForm (),
260
+ eval_expression = true ,
256
261
kwargs... ) where iip
257
262
258
263
dvs = states (sys)
@@ -262,7 +267,7 @@ function DiffEqBase.SDEProblem{iip}(sys::SDESystem,u0map,tspan,parammap=DiffEqBa
262
267
f = SDEFunction {iip} (sys,dvs,ps,u0;tgrad= tgrad,jac= jac,Wfact= Wfact,
263
268
checkbounds= checkbounds,
264
269
linenumbers= linenumbers,parallel= parallel,
265
- sparse= sparse)
270
+ sparse= sparse, eval_expression = eval_expression )
266
271
if typeof (sys. noiseeqs) <: AbstractVector
267
272
noise_rate_prototype = nothing
268
273
elseif sparsenoise
0 commit comments