@@ -46,6 +46,15 @@ sol = solve(prob, Tsit5())
46
46
@test du == gs
47
47
end
48
48
49
+ # @testset "AD Observable Functions for Initialization" begin
50
+ # iprob = prob.f.initialization_data.initalizeprob
51
+ # isol = solve(iprob)
52
+ # gs, = gradient(isol) do isol
53
+ # isol[w]
54
+ # end
55
+
56
+ # end
57
+
49
58
# DAE
50
59
51
60
function create_model (; C₁ = 3e-5 , C₂ = 1e-6 )
84
93
du_ = [0.2 , 1.0 ]
85
94
du = [du_ for _ in sol. u]
86
95
@test gs == du
96
+
97
+ @testset " DAE Initialization Observable function AD" begin
98
+ iprob = prob. f. initialization_data. initializeprob
99
+ isol = solve (iprob)
100
+ tunables, repack, _ = SS. canonicalize (SS. Tunable (), parameter_values (iprob))
101
+ gs, = gradient (isol) do isol
102
+ isol[sys. ampermeter. i]
103
+ end
104
+ gt = gs. prob. p
105
+ @test findall (! iszero, gt) == [22 ]
106
+ end
87
107
end
88
108
89
- # @testset "Adjoints with DAE" begin
90
- # gs_mtkp, gs_p_new = gradient(mtkparams, p_new ) do p, new_tunables
91
- # new_p = SciMLStructures.replace(SciMLStructures.Tunable(), p, new_tunables)
92
- # new_prob = remake(prob, p = new_p)
93
- # sol = solve(new_prob, Rodas4())
94
- # @show size(sol)
95
- # # mean(abs.(sol[sys.ampermeter.i] .- gt))
96
- # sum(sol[sys.ampermeter.i])
97
- # end
98
- #
99
- # @test isnothing(gs_mtkp)
100
- # @test length(gs_p_new) == length(p_new)
101
- # end
109
+ @testset " Adjoints with DAE" begin
110
+ gs_mtkp, gs_p_new = gradient (prob . p, prob . p . tunable ) do p, new_tunables
111
+ new_p = SciMLStructures. replace (SciMLStructures. Tunable (), p, new_tunables)
112
+ new_prob = remake (prob, p = new_p)
113
+ sol = solve (new_prob, Rodas4 ())
114
+ @show size (sol)
115
+ # mean(abs.(sol[sys.ampermeter.i] .- gt))
116
+ sum (sol[sys. ampermeter. i])
117
+ end
118
+
119
+ @test isnothing (gs_mtkp)
120
+ @test length (gs_p_new) == length (p_new)
121
+ end
0 commit comments