@@ -153,6 +153,17 @@ function build_nlsolver(alg, u, uprev, p, t, dt, f::F, rate_prototype,
153
153
uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, iip)
154
154
end
155
155
156
+ function daenlf (ztmp, z, p)
157
+ tmp, ustep, γ, α, tstep, k, invγdt, _p, dt, f = p
158
+ _compute_rhs! (tmp, ztmp, ustep, γ, α, tstep, k, invγdt, _p, dt, f, z)[1 ]
159
+ end
160
+
161
+ function odenlf (ztmp, z, p)
162
+ tmp, ustep, γ, α, tstep, k, invγdt, method, _p, dt, f = p
163
+ _compute_rhs! (
164
+ tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, _p, dt, f, z)[1 ]
165
+ end
166
+
156
167
function build_nlsolver (
157
168
alg, nlalg:: Union{NLFunctional, NLAnderson, NLNewton, NonlinearSolveAlg} ,
158
169
u, uprev, p, t, dt,
@@ -215,19 +226,11 @@ function build_nlsolver(
215
226
if nlalg isa NonlinearSolveAlg
216
227
α = tTypeNoUnits (α)
217
228
dt = tTypeNoUnits (dt)
218
- if isdae
219
- nlf = (ztmp, z, p) -> begin
220
- tmp, ustep, γ, α, tstep, k, invγdt, _p, dt, f = p
221
- _compute_rhs! (tmp, ztmp, ustep, γ, α, tstep, k, invγdt, _p, dt, f, z)[1 ]
222
- end
223
- nlp_params = (tmp, ustep, γ, α, tstep, k, invγdt, p, dt, f)
229
+ nlf = isdae ? daenlf : odenlf
230
+ nlp_params = if isdae
231
+ (tmp, ustep, γ, α, tstep, k, invγdt, p, dt, f)
224
232
else
225
- nlf = (ztmp, z, p) -> begin
226
- tmp, ustep, γ, α, tstep, k, invγdt, method, _p, dt, f = p
227
- _compute_rhs! (
228
- tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, _p, dt, f, z)[1 ]
229
- end
230
- nlp_params = (tmp, ustep, γ, α, tstep, k, invγdt, DIRK, p, dt, f)
233
+ (tmp, ustep, γ, α, tstep, k, invγdt, DIRK, p, dt, f)
231
234
end
232
235
prob = NonlinearProblem (NonlinearFunction {true} (nlf), ztmp, nlp_params)
233
236
cache = init (prob, nlalg. alg)
@@ -262,6 +265,16 @@ function build_nlsolver(
262
265
Divergence, nlcache)
263
266
end
264
267
268
+ function oopdaenlf (z, p)
269
+ tmp, α, tstep, invγdt, _p, dt, uprev, f = p
270
+ _compute_rhs (tmp, α, tstep, invγdt, p, dt, uprev, f, z)[1 ]
271
+ end
272
+
273
+ function oopodenlf (z, p)
274
+ tmp, γ, α, tstep, invγdt, method, _p, dt, f = p
275
+ _compute_rhs (tmp, γ, α, tstep, invγdt, method, _p, dt, f, z)[1 ]
276
+ end
277
+
265
278
function build_nlsolver (
266
279
alg, nlalg:: Union{NLFunctional, NLAnderson, NLNewton, NonlinearSolveAlg} ,
267
280
u, uprev, p,
@@ -300,18 +313,11 @@ function build_nlsolver(
300
313
if nlalg isa NonlinearSolveAlg
301
314
α = tTypeNoUnits (α)
302
315
dt = tTypeNoUnits (dt)
303
- if isdae
304
- nlf = (z, p) -> begin
305
- tmp, α, tstep, invγdt, _p, dt, uprev, f = p
306
- _compute_rhs (tmp, α, tstep, invγdt, p, dt, uprev, f, z)[1 ]
307
- end
308
- nlp_params = (tmp, α, tstep, invγdt, p, dt, uprev, f)
316
+ nlf = isdae ? oopdaenlf : oopodenlf
317
+ nlp_params = if isdae
318
+ (tmp, α, tstep, invγdt, p, dt, uprev, f)
309
319
else
310
- nlf = (z, p) -> begin
311
- tmp, γ, α, tstep, invγdt, method, _p, dt, f = p
312
- _compute_rhs (tmp, γ, α, tstep, invγdt, method, _p, dt, f, z)[1 ]
313
- end
314
- nlp_params = (tmp, γ, α, tstep, invγdt, DIRK, p, dt, f)
320
+ (tmp, γ, α, tstep, invγdt, DIRK, p, dt, f)
315
321
end
316
322
prob = NonlinearProblem (NonlinearFunction {false} (nlf), copy (ztmp), nlp_params)
317
323
cache = init (prob, nlalg. alg)
0 commit comments