@@ -18,24 +18,23 @@ cache_kwargs = (; abstol = 1e-8, reltol = 1e-8, maxiter = 30)
1818
1919prob2 = LinearProblem (A2, b2)
2020
21- algs= LinearSolve. SciMLLinearSolveAlgorithm[PardisoJL ()]
22- solvers= Pardiso. AbstractPardisoSolver[]
23- extended_algs= LinearSolve. SciMLLinearSolveAlgorithm[PardisoJL ()]
21+ algs = LinearSolve. SciMLLinearSolveAlgorithm[PardisoJL ()]
22+ solvers = Pardiso. AbstractPardisoSolver[]
23+ extended_algs = LinearSolve. SciMLLinearSolveAlgorithm[PardisoJL ()]
2424
2525if Pardiso. mkl_is_available ()
26- push! (algs,MKLPardisoFactorize ())
27- push! (solvers,Pardiso. MKLPardisoSolver ())
28- extended_algs= vcat (extended_algs,[MKLPardisoFactorize (), MKLPardisoIterate ()])
26+ push! (algs, MKLPardisoFactorize ())
27+ push! (solvers, Pardiso. MKLPardisoSolver ())
28+ extended_algs = vcat (extended_algs, [MKLPardisoFactorize (), MKLPardisoIterate ()])
2929 @info " Testing MKL Pardiso"
3030end
31-
31+
3232if Pardiso. panua_is_available ()
33- push! (algs,PanuaPardisoFactorize ())
34- push! (solvers,Pardiso. PardisoSolver ())
35- extended_algs= vcat (extended_algs,[PanuaPardisoFactorize (), PanuaPardisoIterate ()])
33+ push! (algs, PanuaPardisoFactorize ())
34+ push! (solvers, Pardiso. PardisoSolver ())
35+ extended_algs = vcat (extended_algs, [PanuaPardisoFactorize (), PanuaPardisoIterate ()])
3636 @info " Testing Panua Pardiso"
37- end
38-
37+ end
3938
4039for alg in extended_algs
4140 u = solve (prob1, alg; cache_kwargs... ). u
@@ -46,25 +45,20 @@ for alg in extended_algs
4645 @test A2 * u ≈ b2
4746end
4847
49-
50-
5148Random. seed! (10 )
5249A = sprand (n, n, 0.8 );
5350A2 = 2.0 .* A;
5451b1 = rand (n);
5552b2 = rand (n);
5653prob = LinearProblem (copy (A), copy (b1))
5754
58-
5955linsolve = init (prob, UMFPACKFactorization ())
6056sol11 = solve! (linsolve)
6157linsolve = LinearSolve. set_b (sol11. cache, copy (b2))
6258sol12 = solve! (linsolve)
6359linsolve = LinearSolve. set_A (sol12. cache, copy (A2))
6460sol13 = solve! (linsolve)
6561
66-
67-
6862for alg in algs
6963 linsolve = init (prob, alg)
7064 sol31 = solve! (linsolve)
@@ -77,29 +71,89 @@ for alg in algs
7771 @test sol13. u ≈ sol33. u
7872end
7973
80-
8174# Test for problem from #497
8275function makeA ()
8376 n = 60
84- colptr = [1 , 4 , 7 , 11 , 15 , 17 , 22 , 26 , 30 , 34 , 38 , 40 , 46 , 50 , 54 , 58 , 62 , 64 , 70 , 74 , 78 , 82 , 86 , 88 , 94 , 98 , 102 , 106 , 110 , 112 , 118 , 122 , 126 , 130 , 134 , 136 , 142 , 146 , 150 , 154 , 158 , 160 , 166 , 170 , 174 , 178 , 182 , 184 , 190 , 194 , 198 , 202 , 206 , 208 , 214 , 218 , 222 , 224 , 226 , 228 , 232 ]
85- rowval = [1 , 3 , 4 , 1 , 2 , 4 , 2 , 4 , 9 , 10 , 3 , 5 , 11 , 12 , 1 , 3 , 2 , 4 , 6 , 11 , 12 , 2 , 7 , 9 , 10 , 2 , 7 , 8 , 10 , 8 , 10 , 15 , 16 , 9 , 11 , 17 , 18 , 7 , 9 , 2 , 8 , 10 , 12 , 17 , 18 , 8 , 13 , 15 , 16 , 8 , 13 , 14 , 16 , 14 , 16 , 21 , 22 , 15 , 17 , 23 , 24 , 13 , 15 , 8 , 14 , 16 , 18 , 23 , 24 , 14 , 19 , 21 , 22 , 14 , 19 , 20 , 22 , 20 , 22 , 27 , 28 , 21 , 23 , 29 , 30 , 19 , 21 , 14 , 20 , 22 , 24 , 29 , 30 , 20 , 25 , 27 , 28 , 20 , 25 , 26 , 28 , 26 , 28 , 33 , 34 , 27 , 29 , 35 , 36 , 25 , 27 , 20 , 26 , 28 , 30 , 35 , 36 , 26 , 31 , 33 , 34 , 26 , 31 , 32 , 34 , 32 , 34 , 39 , 40 , 33 , 35 , 41 , 42 , 31 , 33 , 26 , 32 , 34 , 36 , 41 , 42 , 32 , 37 , 39 , 40 , 32 , 37 , 38 , 40 , 38 , 40 , 45 , 46 , 39 , 41 , 47 , 48 , 37 , 39 , 32 , 38 , 40 , 42 , 47 , 48 , 38 , 43 , 45 , 46 , 38 , 43 , 44 , 46 , 44 , 46 , 51 , 52 , 45 , 47 , 53 , 54 , 43 , 45 , 38 , 44 , 46 , 48 , 53 , 54 , 44 , 49 , 51 , 52 , 44 , 49 , 50 , 52 , 50 , 52 , 57 , 58 , 51 , 53 , 59 , 60 , 49 , 51 , 44 , 50 , 52 , 54 , 59 , 60 , 50 , 55 , 57 , 58 , 50 , 55 , 56 , 58 , 56 , 58 , 57 , 59 , 55 , 57 , 50 , 56 , 58 , 60 ]
86- nzval = [-0.64, 1.0, -1.0, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -0.03510101010101016, -0.975, -1.0806825309567203, 1.0, -0.95, -0.025, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0, -0.025, -0.95, -0.3564, -0.64, 1.0, -1.0, 13.792569659442691, 0.8606811145510832, -13.792569659442691, 1.0, 0.03475000000000006, 1.0, -1.0806825309567203, 1.0, 2.370597639417811, -2.3705976394178108, 10.698449178570607, -11.083604432603583, -0.2770901108150896, 1.0]
77+ colptr = [1 , 4 , 7 , 11 , 15 , 17 , 22 , 26 , 30 , 34 , 38 , 40 , 46 , 50 , 54 , 58 ,
78+ 62 , 64 , 70 , 74 , 78 , 82 , 86 , 88 , 94 , 98 , 102 , 106 , 110 , 112 ,
79+ 118 , 122 , 126 , 130 , 134 , 136 , 142 , 146 , 150 , 154 , 158 , 160 ,
80+ 166 , 170 , 174 , 178 , 182 , 184 , 190 , 194 , 198 , 202 , 206 , 208 ,
81+ 214 , 218 , 222 , 224 , 226 , 228 , 232 ]
82+ rowval = [1 , 3 , 4 , 1 , 2 , 4 , 2 , 4 , 9 , 10 , 3 , 5 , 11 , 12 , 1 , 3 , 2 , 4 , 6 ,
83+ 11 , 12 , 2 , 7 , 9 , 10 , 2 , 7 , 8 , 10 , 8 , 10 , 15 , 16 , 9 , 11 , 17 ,
84+ 18 , 7 , 9 , 2 , 8 , 10 , 12 , 17 , 18 , 8 , 13 , 15 , 16 , 8 , 13 , 14 , 16 ,
85+ 14 , 16 , 21 , 22 , 15 , 17 , 23 , 24 , 13 , 15 , 8 , 14 , 16 , 18 , 23 , 24 ,
86+ 14 , 19 , 21 , 22 , 14 , 19 , 20 , 22 , 20 , 22 , 27 , 28 , 21 , 23 , 29 , 30 ,
87+ 19 , 21 , 14 , 20 , 22 , 24 , 29 , 30 , 20 , 25 , 27 , 28 , 20 , 25 , 26 , 28 ,
88+ 26 , 28 , 33 , 34 , 27 , 29 , 35 , 36 , 25 , 27 , 20 , 26 , 28 , 30 , 35 , 36 ,
89+ 26 , 31 , 33 , 34 , 26 , 31 , 32 , 34 , 32 , 34 , 39 , 40 , 33 , 35 , 41 , 42 ,
90+ 31 , 33 , 26 , 32 , 34 , 36 , 41 , 42 , 32 , 37 , 39 , 40 , 32 , 37 , 38 , 40 ,
91+ 38 , 40 , 45 , 46 , 39 , 41 , 47 , 48 , 37 , 39 , 32 , 38 , 40 , 42 , 47 , 48 ,
92+ 38 , 43 , 45 , 46 , 38 , 43 , 44 , 46 , 44 , 46 , 51 , 52 , 45 , 47 , 53 , 54 ,
93+ 43 , 45 , 38 , 44 , 46 , 48 , 53 , 54 , 44 , 49 , 51 , 52 , 44 , 49 , 50 , 52 ,
94+ 50 , 52 , 57 , 58 , 51 , 53 , 59 , 60 , 49 , 51 , 44 , 50 , 52 , 54 , 59 , 60 ,
95+ 50 , 55 , 57 , 58 , 50 , 55 , 56 , 58 , 56 , 58 , 57 , 59 , 55 , 57 , 50 , 56 ,
96+ 58 , 60 ]
97+ nzval = [- 0.64 , 1.0 , - 1.0 , 0.8606811145510832 , - 13.792569659442691 , 1.0 ,
98+ 0.03475000000000006 , 1.0 , - 0.03510101010101016 , - 0.975 ,
99+ - 1.0806825309567203 , 1.0 , - 0.95 , - 0.025 , 2.370597639417811 ,
100+ - 2.3705976394178108 , - 11.083604432603583 , - 0.2770901108150896 ,
101+ 1.0 , - 0.025 , - 0.95 , - 0.3564 , - 0.64 , 1.0 , - 1.0 , 13.792569659442691 ,
102+ 0.8606811145510832 , - 13.792569659442691 , 1.0 , 0.03475000000000006 ,
103+ 1.0 , - 0.03510101010101016 , - 0.975 , - 1.0806825309567203 , 1.0 , - 0.95 ,
104+ - 0.025 , 2.370597639417811 , - 2.3705976394178108 , 10.698449178570607 ,
105+ - 11.083604432603583 , - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 ,
106+ - 0.64 , 1.0 , - 1.0 , 13.792569659442691 , 0.8606811145510832 ,
107+ - 13.792569659442691 , 1.0 , 0.03475000000000006 , 1.0 ,
108+ - 0.03510101010101016 , - 0.975 , - 1.0806825309567203 , 1.0 , - 0.95 ,
109+ - 0.025 , 2.370597639417811 , - 2.3705976394178108 , 10.698449178570607 ,
110+ - 11.083604432603583 , - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 ,
111+ - 0.64 , 1.0 , - 1.0 , 13.792569659442691 , 0.8606811145510832 ,
112+ - 13.792569659442691 , 1.0 , 0.03475000000000006 , 1.0 , - 0.03510101010101016 ,
113+ - 0.975 , - 1.0806825309567203 , 1.0 , - 0.95 , - 0.025 , 2.370597639417811 ,
114+ - 2.3705976394178108 , 10.698449178570607 , - 11.083604432603583 ,
115+ - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 , - 0.64 , 1.0 ,
116+ - 1.0 , 13.792569659442691 , 0.8606811145510832 , - 13.792569659442691 ,
117+ 1.0 , 0.03475000000000006 , 1.0 , - 0.03510101010101016 , - 0.975 ,
118+ - 1.0806825309567203 , 1.0 , - 0.95 , - 0.025 , 2.370597639417811 ,
119+ - 2.3705976394178108 , 10.698449178570607 , - 11.083604432603583 ,
120+ - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 , - 0.64 , 1.0 ,
121+ - 1.0 , 13.792569659442691 , 0.8606811145510832 , - 13.792569659442691 ,
122+ 1.0 , 0.03475000000000006 , 1.0 , - 0.03510101010101016 , - 0.975 ,
123+ - 1.0806825309567203 , 1.0 , - 0.95 , - 0.025 , 2.370597639417811 ,
124+ - 2.3705976394178108 , 10.698449178570607 , - 11.083604432603583 ,
125+ - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 , - 0.64 , 1.0 ,
126+ - 1.0 , 13.792569659442691 , 0.8606811145510832 , - 13.792569659442691 ,
127+ 1.0 , 0.03475000000000006 , 1.0 , - 0.03510101010101016 , - 0.975 ,
128+ - 1.0806825309567203 , 1.0 , - 0.95 , - 0.025 , 2.370597639417811 ,
129+ - 2.3705976394178108 , 10.698449178570607 , - 11.083604432603583 ,
130+ - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 , - 0.64 , 1.0 ,
131+ - 1.0 , 13.792569659442691 , 0.8606811145510832 , - 13.792569659442691 ,
132+ 1.0 , 0.03475000000000006 , 1.0 , - 0.03510101010101016 , - 0.975 ,
133+ - 1.0806825309567203 , 1.0 , - 0.95 , - 0.025 , 2.370597639417811 ,
134+ - 2.3705976394178108 , 10.698449178570607 , - 11.083604432603583 ,
135+ - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 , - 0.64 , 1.0 ,
136+ - 1.0 , 13.792569659442691 , 0.8606811145510832 , - 13.792569659442691 ,
137+ 1.0 , 0.03475000000000006 , 1.0 , - 0.03510101010101016 , - 0.975 ,
138+ - 1.0806825309567203 , 1.0 , - 0.95 , - 0.025 , 2.370597639417811 ,
139+ - 2.3705976394178108 , 10.698449178570607 , - 11.083604432603583 ,
140+ - 0.2770901108150896 , 1.0 , - 0.025 , - 0.95 , - 0.3564 , - 0.64 , 1.0 ,
141+ - 1.0 , 13.792569659442691 , 0.8606811145510832 , - 13.792569659442691 ,
142+ 1.0 , 0.03475000000000006 , 1.0 , - 1.0806825309567203 , 1.0 ,
143+ 2.370597639417811 , - 2.3705976394178108 , 10.698449178570607 ,
144+ - 11.083604432603583 , - 0.2770901108150896 , 1.0 ]
87145 A = SparseMatrixCSC (n, n, colptr, rowval, nzval)
88- return (A)
146+ return (A)
89147end
90148
91-
92149for alg in algs
93- A= makeA ()
94- u0= fill (0.1 ,size (A,2 ))
95- linprob = LinearProblem (A, A* u0)
150+ A = makeA ()
151+ u0 = fill (0.1 , size (A, 2 ))
152+ linprob = LinearProblem (A, A * u0)
96153 u = LinearSolve. solve (linprob, alg)
97- @test norm (u- u0) < 1.0e-14
154+ @test norm (u - u0) < 1.0e-14
98155end
99156
100-
101-
102-
103157# Testing and demonstrating Pardiso.set_iparm! for MKLPardisoSolver
104158for solver in solvers
105159 iparm = [
@@ -172,7 +226,7 @@ for solver in solvers
172226 for i in iparm
173227 Pardiso. set_iparm! (solver, i... )
174228 end
175-
229+
176230 for i in Base. OneTo (length (iparm))
177231 @test Pardiso. get_iparm (solver, i) == iparm[i][2 ]
178232 end
@@ -195,22 +249,21 @@ end
195249 b0 = A0 * u0
196250 B0 = MySparseMatrixCSC2 (A0)
197251 A1 = spdiagm (1 => - ones (N - 1 ), 0 => fill (100.0 , N), - 1 => - ones (N - 1 ))
198- b1= A1 * u0
199- B1= MySparseMatrixCSC2 (A1)
252+ b1 = A1 * u0
253+ B1 = MySparseMatrixCSC2 (A1)
200254
201-
202255 pr = LinearProblem (B0, b0)
203256 # test default algorithn
204- u= solve (pr,alg)
257+ u = solve (pr, alg)
205258 @test norm (u - u0, Inf ) < 1.0e-13
206-
259+
207260 # test factorization with reinit!
208261 pr = LinearProblem (B0, b0)
209- cache= init (pr,alg)
210- u= solve! (cache)
262+ cache = init (pr, alg)
263+ u = solve! (cache)
211264 @test norm (u - u0, Inf ) < 1.0e-13
212- reinit! (cache; A= B1, b= b1)
213- u= solve! (cache)
265+ reinit! (cache; A = B1, b = b1)
266+ u = solve! (cache)
214267 @test norm (u - u0, Inf ) < 1.0e-13
215268 end
216269end
0 commit comments