@@ -160,16 +160,16 @@ function (f::ODEToExpr)(O::Operation)
160
160
end
161
161
(f:: ODEToExpr )(x) = convert (Expr, x)
162
162
163
- function generate_jacobian (sys:: ODESystem , dvs = sys. dvs, ps = sys. ps)
163
+ function generate_jacobian (sys:: ODESystem , dvs = sys. dvs, ps = sys. ps, expression = Val{ true } )
164
164
jac = calculate_jacobian (sys)
165
- return build_function (jac, dvs, ps, (sys. iv. name,), ODEToExpr (sys))
165
+ return build_function (jac, dvs, ps, (sys. iv. name,), ODEToExpr (sys), expression )
166
166
end
167
167
168
- function generate_function (sys:: ODESystem , dvs = sys. dvs, ps = sys. ps)
168
+ function generate_function (sys:: ODESystem , dvs = sys. dvs, ps = sys. ps, expression = Val{ true } )
169
169
rhss = [deq. rhs for deq ∈ sys. eqs]
170
170
dvs′ = [clean (dv) for dv ∈ dvs]
171
171
ps′ = [clean (p) for p ∈ ps]
172
- return build_function (rhss, dvs′, ps′, (sys. iv. name,), ODEToExpr (sys))
172
+ return build_function (rhss, dvs′, ps′, (sys. iv. name,), ODEToExpr (sys), expression )
173
173
end
174
174
175
175
function calculate_factorized_W (sys:: ODESystem , simplify= true )
@@ -196,16 +196,16 @@ function calculate_factorized_W(sys::ODESystem, simplify=true)
196
196
(Wfact,Wfact_t)
197
197
end
198
198
199
- function generate_factorized_W (sys:: ODESystem , vs = sys. dvs, ps = sys. ps, simplify= true )
199
+ function generate_factorized_W (sys:: ODESystem , vs = sys. dvs, ps = sys. ps, simplify= true , expression = Val{ true } )
200
200
(Wfact,Wfact_t) = calculate_factorized_W (sys,simplify)
201
201
siz = size (Wfact)
202
202
constructor = :(x -> begin
203
203
A = SMatrix {$siz...} (x)
204
204
StaticArrays. LU (LowerTriangular ( SMatrix {$siz...} (UnitLowerTriangular (A)) ), UpperTriangular (A), SVector (ntuple (n-> n, max ($ siz... ))))
205
205
end )
206
206
207
- Wfact_func = build_function (Wfact , vs, ps, (:gam ,:t ), ODEToExpr (sys);constructor= constructor)
208
- Wfact_t_func = build_function (Wfact_t, vs, ps, (:gam ,:t ), ODEToExpr (sys);constructor= constructor)
207
+ Wfact_func = build_function (Wfact , vs, ps, (:gam ,:t ), ODEToExpr (sys), expression ;constructor= constructor)
208
+ Wfact_t_func = build_function (Wfact_t, vs, ps, (:gam ,:t ), ODEToExpr (sys), expression ;constructor= constructor)
209
209
210
210
return (Wfact_func, Wfact_t_func)
211
211
end
@@ -220,21 +220,21 @@ respectively.
220
220
function DiffEqBase. ODEFunction {iip} (sys:: ODESystem , dvs, ps;
221
221
version = nothing ,
222
222
jac = false , Wfact = false ) where {iip}
223
- f_oop,f_iip = generate_function (sys, dvs, ps)
223
+ f_oop,f_iip = generate_function (sys, dvs, ps, Val{ false } )
224
224
225
225
f (u,p,t) = f_oop (u,p,t)
226
226
f (du,u,p,t) = f_iip (du,u,p,t)
227
227
228
228
if jac
229
- jac_oop,jac_iip = generate_jacobian (sys, dvs, ps)
229
+ jac_oop,jac_iip = generate_jacobian (sys, dvs, ps, Val{ false } )
230
230
_jac (u,p,t) = jac_oop (u,p,t)
231
231
_jac (J,u,p,t) = jac_iip (J,u,p,t)
232
232
else
233
233
_jac = nothing
234
234
end
235
235
236
236
if Wfact
237
- tmp_Wfact,tmp_Wfact_t = generate_factorized_W (sys, dvs, ps)
237
+ tmp_Wfact,tmp_Wfact_t = generate_factorized_W (sys, dvs, ps, Val{ false } )
238
238
Wfact_oop, Wfact_iip = tmp_Wfact
239
239
Wfact_oop_t, Wfact_iip_t = tmp_Wfact_t
240
240
_Wfact (u,p,t) = Wfact_oop (u,p,t)
0 commit comments