@@ -142,33 +142,36 @@ function DiffEqBase.ODEFunction{iip}(sys::AbstractODESystem, dvs = states(sys),
142
142
ps = parameters (sys), u0 = nothing ;
143
143
version = nothing , tgrad= false ,
144
144
jac = false , Wfact = false ,
145
- sparse = false ,
145
+ sparse = false , eval_expression = true ,
146
146
kwargs... ) where {iip}
147
147
148
- f_oop,f_iip = ModelingToolkit. eval .(generate_function (sys, dvs, ps; expression= Val{true }, kwargs... ))
148
+ f_gen = generate_function (sys, dvs, ps; expression= Val{eval_expression}, kwargs... )
149
+ f_oop,f_iip = eval_expression ? ModelingToolkit. eval .(f_gen) : f_gen
149
150
f (u,p,t) = f_oop (u,p,t)
150
151
f (du,u,p,t) = f_iip (du,u,p,t)
151
152
152
153
if tgrad
153
- tgrad_oop,tgrad_iip = ModelingToolkit. eval .(generate_tgrad (sys, dvs, ps; expression= Val{true }, kwargs... ))
154
+ tgrad_gen = generate_tgrad (sys, dvs, ps; expression= Val{eval_expression}, kwargs... )
155
+ tgrad_oop,tgrad_iip = eval_expression ? ModelingToolkit. eval .(tgrad_gen) : tgrad_gen
154
156
_tgrad (u,p,t) = tgrad_oop (u,p,t)
155
157
_tgrad (J,u,p,t) = tgrad_iip (J,u,p,t)
156
158
else
157
159
_tgrad = nothing
158
160
end
159
161
160
162
if jac
161
- jac_oop,jac_iip = ModelingToolkit. eval .(generate_jacobian (sys, dvs, ps; sparse = sparse, expression= Val{true }, kwargs... ))
163
+ jac_gen = generate_jacobian (sys, dvs, ps; sparse = sparse, expression= Val{eval_expression}, kwargs... )
164
+ jac_oop,jac_iip = eval_expression ? ModelingToolkit. eval .(jac_gen) : jac_gen
162
165
_jac (u,p,t) = jac_oop (u,p,t)
163
166
_jac (J,u,p,t) = jac_iip (J,u,p,t)
164
167
else
165
168
_jac = nothing
166
169
end
167
170
168
171
if Wfact
169
- tmp_Wfact,tmp_Wfact_t = generate_factorized_W (sys, dvs, ps; expression= Val{true }, kwargs... )
170
- Wfact_oop, Wfact_iip = ModelingToolkit. eval .(tmp_Wfact)
171
- Wfact_oop_t, Wfact_iip_t = ModelingToolkit. eval .(tmp_Wfact_t)
172
+ tmp_Wfact,tmp_Wfact_t = generate_factorized_W (sys, dvs, ps; expression= Val{eval_expression }, kwargs... )
173
+ Wfact_oop, Wfact_iip = eval_expression ? ModelingToolkit. eval .(tmp_Wfact) : tmp_Wfact
174
+ Wfact_oop_t, Wfact_iip_t = eval_expression ? ModelingToolkit. eval .(tmp_Wfact_t) : tmp_Wfact_t
172
175
_Wfact (u,p,dtgamma,t) = Wfact_oop (u,p,dtgamma,t)
173
176
_Wfact (W,u,p,dtgamma,t) = Wfact_iip (W,u,p,dtgamma,t)
174
177
_Wfact_t (u,p,dtgamma,t) = Wfact_oop_t (u,p,dtgamma,t)
0 commit comments