@@ -115,6 +115,39 @@ wp = WorkPrecisionSet(probs, abstols, reltols, setups; appxsol = [test_sol, noth
115
115
wp = WorkPrecisionSet (probs, abstols, reltols, setups; appxsol = [test_sol, test_sol1],
116
116
save_everystep = false , numruns = 20 , maxiters = 10000 )
117
117
118
+ # Dual DAE Problems
119
+ function rober (du, u, p, t)
120
+ y₁, y₂, y₃ = u
121
+ k₁, k₂, k₃ = p
122
+ du[1 ] = - k₁ * y₁ + k₃ * y₂ * y₃
123
+ du[2 ] = k₁ * y₁ - k₂ * y₂^ 2 - k₃ * y₂ * y₃
124
+ du[3 ] = k₂ * y₂^ 2
125
+ nothing
126
+ end
127
+ prob1 = ODEProblem (rober, [1.0 , 0.0 , 0.0 ], (0.0 , 1e5 ), [0.04 , 3e7 , 1e4 ])
128
+
129
+ ode_ref_sol = solve (prob1, Rodas5 (), abstol = 1 / 10 ^ 14 , reltol = 1 / 10 ^ 14 );
130
+
131
+ function dae_rober (out, du, u, p, t)
132
+ out[1 ] = - 0.04 u[1 ] + 1e4 * u[2 ] * u[3 ] - du[1 ]
133
+ out[2 ] = + 0.04 u[1 ] - 3e7 * u[2 ]^ 2 - 1e4 * u[2 ] * u[3 ] - du[2 ]
134
+ out[3 ] = u[1 ] + u[2 ] + u[3 ] - 1.0
135
+ end
136
+ u₀ = [1.0 , 0 , 0 ]
137
+ du₀ = [- 0.04 , 0.04 , 0.0 ]
138
+ tspan = (0.0 , 100000.0 )
139
+
140
+ differential_vars = [true , true , false ]
141
+ prob2 = DAEProblem (dae_rober, du₀, u₀, tspan, differential_vars = differential_vars)
142
+
143
+ dae_ref_sol = solve (prob2, DFBDF (), abstol = 1 / 10 ^ 14 , reltol = 1 / 10 ^ 14 );
144
+
145
+ probs = [prob1, prob2]
146
+ setups = [Dict (:alg => Rodas5 ())
147
+ Dict (:alg => DFBDF (), :prob_choice => 2 )]
148
+ wp = WorkPrecisionSet (probs, abstols, reltols, setups; appxsol = [ode_ref_sol, dae_ref_sol],
149
+ save_everystep = false , numruns = 20 , maxiters = 10000 )
150
+
118
151
# DDE problem
119
152
prob = prob_dde_constant_1delay_ip
120
153
0 commit comments