11using OrdinaryDiffEq, LinearSolve, Test, IncompleteLU, ModelingToolkit
2- import AlgebraicMultigrid
32
43# Required due to https://github.com/JuliaSmoothOptimizers/Krylov.jl/pull/477
54Base. eltype (:: IncompleteLU.ILUFactorization{Tv, Ti} ) where {Tv, Ti} = Tv
6- Base. eltype (:: AlgebraicMultigrid.Preconditioner ) = Float64
75
86const N = 32
97const xyd_brusselator = range (0 , stop = 1 , length = N)
@@ -67,52 +65,6 @@ function incompletelu(W, du, u, p, t, newW, Plprev, Prprev, solverdata)
6765 return Pl, nothing
6866end
6967
70- function algebraicmultigrid (W, du, u, p, t, newW, Plprev, Prprev, solverdata)
71- if newW === nothing || newW
72- Pl = AlgebraicMultigrid. aspreconditioner (
73- AlgebraicMultigrid. ruge_stuben (
74- convert (
75- AbstractMatrix,
76- W
77- )
78- )
79- )
80- else
81- Pl = Plprev
82- end
83- return Pl, nothing
84- end
85-
86- function algebraicmultigrid2 (W, du, u, p, t, newW, Plprev, Prprev, solverdata)
87- if newW === nothing || newW
88- A = convert (AbstractMatrix, W)
89- Pl = AlgebraicMultigrid. aspreconditioner (
90- AlgebraicMultigrid. ruge_stuben (
91- A,
92- presmoother = AlgebraicMultigrid. Jacobi (
93- rand (
94- size (
95- A,
96- 1
97- )
98- )
99- ),
100- postsmoother = AlgebraicMultigrid. Jacobi (
101- rand (
102- size (
103- A,
104- 1
105- )
106- )
107- )
108- )
109- )
110- else
111- Pl = Plprev
112- end
113- return Pl, nothing
114- end
115-
11668iter[] = 0
11769sol1 = solve (
11870 prob_ode_brusselator_2d, KenCarp47 (linsolve = KrylovJL_GMRES ()),
@@ -128,35 +80,12 @@ sol2 = solve(
12880 ), save_everystep = false
12981);
13082iter2 = iter[];
131- iter[] = 0 ;
132- sol3 = solve (
133- prob_ode_brusselator_2d_sparse,
134- KenCarp47 (
135- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid,
136- concrete_jac = true
137- ), save_everystep = false
138- );
139- iter3 = iter[];
140- iter[] = 0 ;
141- sol4 = solve (
142- prob_ode_brusselator_2d_sparse,
143- KenCarp47 (
144- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid2,
145- concrete_jac = true
146- ), save_everystep = false
147- );
148- iter4 = iter[];
149- iter[] = 0 ;
15083
15184@test sol1. retcode === ReturnCode. Success
15285@test sol2. retcode === ReturnCode. Success
153- @test sol3. retcode === ReturnCode. Success
154- @test sol4. retcode === ReturnCode. Success
155-
15686@test iter2 < iter1
157- @test iter3 < iter1
158- @test iter4 < iter1
15987
88+ iter[] = 0 ;
16089sol1 = solve (
16190 prob_ode_brusselator_2d, Rosenbrock23 (linsolve = KrylovJL_GMRES ()),
16291 save_everystep = false
@@ -171,35 +100,12 @@ sol2 = solve(
171100 ), save_everystep = false
172101);
173102iter2 = iter[];
174- iter[] = 0 ;
175- sol3 = solve (
176- prob_ode_brusselator_2d_sparse,
177- Rosenbrock23 (
178- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid,
179- concrete_jac = true
180- ), save_everystep = false
181- );
182- iter3 = iter[];
183- iter[] = 0 ;
184- sol4 = solve (
185- prob_ode_brusselator_2d_sparse,
186- Rosenbrock23 (
187- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid2,
188- concrete_jac = true
189- ), save_everystep = false
190- );
191- iter4 = iter[];
192- iter[] = 0 ;
193103
194104@test sol1. retcode === ReturnCode. Success
195105@test sol2. retcode === ReturnCode. Success
196- @test sol3. retcode === ReturnCode. Success
197- @test sol4. retcode === ReturnCode. Success
198-
199106@test iter2 < iter1
200- @test iter3 < iter1
201- @test iter4 < iter1
202107
108+ iter[] = 0 ;
203109sol1 = solve (
204110 prob_ode_brusselator_2d, Rodas4 (linsolve = KrylovJL_GMRES ()),
205111 save_everystep = false
@@ -212,35 +118,12 @@ sol2 = solve(
212118 save_everystep = false
213119);
214120iter2 = iter[];
215- iter[] = 0 ;
216- sol3 = solve (
217- prob_ode_brusselator_2d_sparse,
218- Rodas4 (
219- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid,
220- concrete_jac = true
221- ), save_everystep = false
222- );
223- iter3 = iter[];
224- iter[] = 0 ;
225- sol4 = solve (
226- prob_ode_brusselator_2d_sparse,
227- Rodas4 (
228- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid2,
229- concrete_jac = true
230- ), save_everystep = false
231- );
232- iter4 = iter[];
233- iter[] = 0 ;
234121
235122@test sol1. retcode === ReturnCode. Success
236123@test sol2. retcode === ReturnCode. Success
237- @test sol3. retcode === ReturnCode. Success
238- @test sol4. retcode === ReturnCode. Success
239-
240124@test iter2 < iter1
241- @test iter3 < iter1
242- @test iter4 < iter1
243125
126+ iter[] = 0 ;
244127sol1 = solve (
245128 prob_ode_brusselator_2d, Rodas5 (linsolve = KrylovJL_GMRES ()),
246129 save_everystep = false
@@ -253,35 +136,12 @@ sol2 = solve(
253136 save_everystep = false
254137);
255138iter2 = iter[];
256- iter[] = 0 ;
257- sol3 = solve (
258- prob_ode_brusselator_2d_sparse,
259- Rodas5 (
260- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid,
261- concrete_jac = true
262- ), save_everystep = false
263- );
264- iter3 = iter[];
265- iter[] = 0 ;
266- sol4 = solve (
267- prob_ode_brusselator_2d_sparse,
268- Rodas5 (
269- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid2,
270- concrete_jac = true
271- ), save_everystep = false
272- );
273- iter4 = iter[];
274- iter[] = 0 ;
275139
276140@test sol1. retcode === ReturnCode. Success
277141@test sol2. retcode === ReturnCode. Success
278- @test sol3. retcode === ReturnCode. Success
279- @test sol4. retcode === ReturnCode. Success
280-
281142@test iter2 < iter1
282- @test iter3 < iter1
283- @test iter4 < iter1
284143
144+ iter[] = 0 ;
285145sol1 = solve (
286146 prob_ode_brusselator_2d, TRBDF2 (linsolve = KrylovJL_GMRES ()),
287147 save_everystep = false
@@ -294,35 +154,12 @@ sol2 = solve(
294154 save_everystep = false
295155);
296156iter2 = iter[];
297- iter[] = 0 ;
298- sol3 = solve (
299- prob_ode_brusselator_2d_sparse,
300- TRBDF2 (
301- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid,
302- concrete_jac = true
303- ), save_everystep = false
304- );
305- iter3 = iter[];
306- iter[] = 0 ;
307- sol4 = solve (
308- prob_ode_brusselator_2d_sparse,
309- TRBDF2 (
310- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid2,
311- concrete_jac = true
312- ), save_everystep = false
313- );
314- iter4 = iter[];
315- iter[] = 0 ;
316157
317158@test sol1. retcode === ReturnCode. Success
318159@test sol2. retcode === ReturnCode. Success
319- @test sol3. retcode === ReturnCode. Success
320- @test sol4. retcode === ReturnCode. Success
321-
322160@test iter2 < iter1
323- @test iter3 < iter1
324- @test iter4 < iter1
325161
162+ iter[] = 0 ;
326163sol1 = solve (
327164 prob_ode_brusselator_2d, TRBDF2 (linsolve = KrylovJL_GMRES ()),
328165 save_everystep = false
@@ -337,31 +174,7 @@ sol2 = solve(
337174 ), save_everystep = false
338175);
339176iter2 = iter[];
340- iter[] = 0 ;
341- sol3 = solve (
342- prob_ode_brusselator_2d_sparse,
343- TRBDF2 (
344- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid,
345- concrete_jac = true
346- ), save_everystep = false
347- );
348- iter3 = iter[];
349- iter[] = 0 ;
350- sol4 = solve (
351- prob_ode_brusselator_2d_sparse,
352- TRBDF2 (
353- linsolve = KrylovJL_GMRES (), precs = algebraicmultigrid2,
354- concrete_jac = true
355- ), save_everystep = false
356- );
357- iter4 = iter[];
358- iter[] = 0 ;
359177
360178@test sol1. retcode === ReturnCode. Success
361179@test sol2. retcode === ReturnCode. Success
362- @test sol3. retcode === ReturnCode. Success
363- @test sol4. retcode === ReturnCode. Success
364-
365180@test iter2 < iter1
366- @test iter3 < iter1
367- @test iter4 < iter1
0 commit comments