@@ -135,6 +135,14 @@ _, easy_res14 = adjoint_sensitivities(solb, Tsit5(), t = t, dgdu_discrete = dg,
135
135
abstol = 1e-14 ,
136
136
reltol = 1e-14 ,
137
137
sensealg = GaussAdjoint ())
138
+ _, easy_res15 = adjoint_sensitivities (solb, Tsit5 (), t = t, dgdu_discrete = dg,
139
+ abstol = 1e-14 ,
140
+ reltol = 1e-14 ,
141
+ sensealg = InterpolatingAdjoint (autojacvec = SciMLSensitivity. MooncakeVJP ()))
142
+ _, easy_res16 = adjoint_sensitivities (solb, Tsit5 (), t = t, dgdu_discrete = dg,
143
+ abstol = 1e-14 ,
144
+ reltol = 1e-14 ,
145
+ sensealg = QuadratureAdjoint (autojacvec = SciMLSensitivity. MooncakeVJP ()))
138
146
_, easy_res142 = adjoint_sensitivities (solb, Tsit5 (), t = t, dgdu_discrete = dg,
139
147
abstol = 1e-14 ,
140
148
reltol = 1e-14 ,
@@ -158,6 +166,10 @@ _, easy_res146 = adjoint_sensitivities(sol_nodense, Tsit5(), t = t, dgdu_discret
158
166
sensealg = GaussAdjoint (checkpointing = true ,
159
167
autojacvec = false ),
160
168
checkpoints = sol. t[1 : 500 : end ])
169
+ _, easy_res147 = adjoint_sensitivities (solb, Tsit5 (), t = t, dgdu_discrete = dg,
170
+ abstol = 1e-14 ,
171
+ reltol = 1e-14 ,
172
+ sensealg = GaussAdjoint (autojacvec = SciMLSensitivity. MooncakeVJP ()))
161
173
adj_prob = ODEAdjointProblem (sol,
162
174
QuadratureAdjoint (abstol = 1e-14 , reltol = 1e-14 ,
163
175
autojacvec = SciMLSensitivity. ReverseDiffVJP ()),
@@ -189,11 +201,14 @@ res, err = quadgk(integrand, 0.0, 10.0, atol = 1e-14, rtol = 1e-12)
189
201
@test isapprox (res, easy_res12, rtol = 1e-9 )
190
202
@test isapprox (res, easy_res13, rtol = 1e-9 )
191
203
@test isapprox (res, easy_res14, rtol = 1e-9 )
204
+ @test isapprox (res, easy_res15, rtol = 1e-9 )
205
+ @test isapprox (res, easy_res16, rtol = 1e-9 )
192
206
@test isapprox (res, easy_res142, rtol = 1e-9 )
193
207
@test isapprox (res, easy_res143, rtol = 1e-9 )
194
208
@test isapprox (res, easy_res144, rtol = 1e-9 )
195
209
@test isapprox (res, easy_res145, rtol = 1e-9 )
196
210
@test isapprox (res, easy_res146, rtol = 1e-9 )
211
+ @test isapprox (res, easy_res147, rtol = 1e-9 )
197
212
198
213
println (" OOP adjoint sensitivities " )
199
214
@@ -203,14 +218,11 @@ _, easy_res = adjoint_sensitivities(soloop, Tsit5(), t = t, dgdu_discrete = dg,
203
218
_, easy_res2 = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
204
219
abstol = 1e-14 ,
205
220
reltol = 1e-14 ,
206
- sensealg = QuadratureAdjoint (abstol = 1e-14 ,
207
- reltol = 1e-14 ))
221
+ sensealg = QuadratureAdjoint (abstol = 1e-14 , reltol = 1e-14 ))
208
222
_, easy_res22 = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
209
223
abstol = 1e-14 ,
210
224
reltol = 1e-14 ,
211
- sensealg = QuadratureAdjoint (autojacvec = false ,
212
- abstol = 1e-14 ,
213
- reltol = 1e-14 ))
225
+ sensealg = QuadratureAdjoint (autojacvec = false , abstol = 1e-14 , reltol = 1e-14 ))
214
226
_, easy_res2 = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
215
227
abstol = 1e-14 ,
216
228
reltol = 1e-14 ,
@@ -224,17 +236,15 @@ _, easy_res3 = adjoint_sensitivities(soloop, Tsit5(), t = t, dgdu_discrete = dg,
224
236
@test easy_res32 = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
225
237
abstol = 1e-14 ,
226
238
reltol = 1e-14 ,
227
- sensealg = InterpolatingAdjoint (autojacvec = false ))[1 ] isa
228
- AbstractArray
239
+ sensealg = InterpolatingAdjoint (autojacvec = false ))[1 ] isa AbstractArray
229
240
_, easy_res4 = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
230
241
abstol = 1e-14 ,
231
242
reltol = 1e-14 ,
232
243
sensealg = BacksolveAdjoint ())
233
244
@test easy_res42 = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
234
245
abstol = 1e-14 ,
235
246
reltol = 1e-14 ,
236
- sensealg = BacksolveAdjoint (autojacvec = false ))[1 ] isa
237
- AbstractArray
247
+ sensealg = BacksolveAdjoint (autojacvec = false ))[1 ] isa AbstractArray
238
248
_, easy_res5 = adjoint_sensitivities (soloop,
239
249
Kvaerno5 (nlsolve = NLAnderson (), smooth_est = false ),
240
250
t = t, dgdu_discrete = dg, abstol = 1e-12 ,
@@ -248,8 +258,7 @@ _, easy_res6 = adjoint_sensitivities(soloop_nodense, Tsit5(), t = t, dgdu_discre
248
258
_, easy_res62 = adjoint_sensitivities (soloop_nodense, Tsit5 (), t = t,
249
259
dgdu_discrete = dg, abstol = 1e-14 ,
250
260
reltol = 1e-14 ,
251
- sensealg = InterpolatingAdjoint (checkpointing = true ,
252
- autojacvec = false ),
261
+ sensealg = InterpolatingAdjoint (checkpointing = true , autojacvec = false ),
253
262
checkpoints = soloop_nodense. t[1 : 5 : end ])
254
263
255
264
_, easy_res8 = adjoint_sensitivities (soloop_nodense, Tsit5 (), t = t, dgdu_discrete = dg,
@@ -289,6 +298,39 @@ _, easy_res123 = adjoint_sensitivities(soloop_nodense, Tsit5(), t = t, dgdu_disc
289
298
reltol = 1e-14 ,
290
299
sensealg = GaussAdjoint (checkpointing = true ),
291
300
checkpoints = soloop_nodense. t[1 : 5 : end ])
301
+
302
+ _, easy_res2_mc_quad = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
303
+ abstol = 1e-14 ,
304
+ reltol = 1e-14 ,
305
+ sensealg = QuadratureAdjoint (
306
+ abstol = 1e-14 , reltol = 1e-14 , autojacvec = SciMLSensitivity. MooncakeVJP ()))
307
+ _, easy_res2_mc_interp = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
308
+ abstol = 1e-14 ,
309
+ reltol = 1e-14 ,
310
+ sensealg = InterpolatingAdjoint (autojacvec = SciMLSensitivity. MooncakeVJP ()))
311
+ _, easy_res2_mc_back = adjoint_sensitivities (soloop, Tsit5 (), t = t, dgdu_discrete = dg,
312
+ abstol = 1e-14 ,
313
+ reltol = 1e-14 ,
314
+ sensealg = BacksolveAdjoint (autojacvec = SciMLSensitivity. MooncakeVJP ()))
315
+ _, easy_res6_mc_quad = adjoint_sensitivities (soloop_nodense, Tsit5 (), t = t,
316
+ dgdu_discrete = dg,
317
+ abstol = 1e-14 ,
318
+ reltol = 1e-14 ,
319
+ sensealg = QuadratureAdjoint (
320
+ abstol = 1e-14 , reltol = 1e-14 , autojacvec = SciMLSensitivity. MooncakeVJP ()))
321
+ _, easy_res6_mc_interp = adjoint_sensitivities (soloop_nodense, Tsit5 (), t = t,
322
+ dgdu_discrete = dg,
323
+ abstol = 1e-14 ,
324
+ reltol = 1e-14 ,
325
+ sensealg = InterpolatingAdjoint (checkpointing = true ,
326
+ autojacvec = SciMLSensitivity. MooncakeVJP ()),
327
+ checkpoints = soloop_nodense. t[1 : 5 : end ])
328
+ _, easy_res6_mc_back = adjoint_sensitivities (soloop_nodense, Tsit5 (), t = t,
329
+ dgdu_discrete = dg,
330
+ abstol = 1e-14 ,
331
+ reltol = 1e-14 ,
332
+ sensealg = BacksolveAdjoint (autojacvec = SciMLSensitivity. MooncakeVJP ()))
333
+
292
334
@test isapprox (res, easy_res, rtol = 1e-10 )
293
335
@test isapprox (res, easy_res2, rtol = 1e-10 )
294
336
@test isapprox (res, easy_res22, rtol = 1e-10 )
@@ -309,6 +351,12 @@ _, easy_res123 = adjoint_sensitivities(soloop_nodense, Tsit5(), t = t, dgdu_disc
309
351
@test isapprox (res, easy_res12, rtol = 1e-9 )
310
352
@test isapprox (res, easy_res122, rtol = 1e-9 )
311
353
@test isapprox (res, easy_res123, rtol = 1e-4 )
354
+ @test isapprox (res, easy_res2_mc_quad, rtol = 1e-9 )
355
+ @test isapprox (res, easy_res2_mc_interp, rtol = 1e-9 )
356
+ @test isapprox (res, easy_res2_mc_back, rtol = 1e-9 )
357
+ @test isapprox (res, easy_res6_mc_quad, rtol = 1e-4 )
358
+ @test isapprox (res, easy_res6_mc_interp, rtol = 1e-9 )
359
+ @test isapprox (res, easy_res6_mc_back, rtol = 1e-9 )
312
360
313
361
println (" Calculate adjoint sensitivities " )
314
362
0 commit comments