@@ -18,24 +18,23 @@ cache_kwargs = (; abstol = 1e-8, reltol = 1e-8, maxiter = 30)
18
18
19
19
prob2 = LinearProblem (A2, b2)
20
20
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 ()]
24
24
25
25
if 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 ()])
29
29
@info " Testing MKL Pardiso"
30
30
end
31
-
31
+
32
32
if 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 ()])
36
36
@info " Testing Panua Pardiso"
37
- end
38
-
37
+ end
39
38
40
39
for alg in extended_algs
41
40
u = solve (prob1, alg; cache_kwargs... ). u
@@ -46,25 +45,20 @@ for alg in extended_algs
46
45
@test A2 * u ≈ b2
47
46
end
48
47
49
-
50
-
51
48
Random. seed! (10 )
52
49
A = sprand (n, n, 0.8 );
53
50
A2 = 2.0 .* A;
54
51
b1 = rand (n);
55
52
b2 = rand (n);
56
53
prob = LinearProblem (copy (A), copy (b1))
57
54
58
-
59
55
linsolve = init (prob, UMFPACKFactorization ())
60
56
sol11 = solve! (linsolve)
61
57
linsolve = LinearSolve. set_b (sol11. cache, copy (b2))
62
58
sol12 = solve! (linsolve)
63
59
linsolve = LinearSolve. set_A (sol12. cache, copy (A2))
64
60
sol13 = solve! (linsolve)
65
61
66
-
67
-
68
62
for alg in algs
69
63
linsolve = init (prob, alg)
70
64
sol31 = solve! (linsolve)
@@ -77,29 +71,89 @@ for alg in algs
77
71
@test sol13. u ≈ sol33. u
78
72
end
79
73
80
-
81
74
# Test for problem from #497
82
75
function makeA ()
83
76
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 ]
87
145
A = SparseMatrixCSC (n, n, colptr, rowval, nzval)
88
- return (A)
146
+ return (A)
89
147
end
90
148
91
-
92
149
for 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)
96
153
u = LinearSolve. solve (linprob, alg)
97
- @test norm (u- u0) < 1.0e-14
154
+ @test norm (u - u0) < 1.0e-14
98
155
end
99
156
100
-
101
-
102
-
103
157
# Testing and demonstrating Pardiso.set_iparm! for MKLPardisoSolver
104
158
for solver in solvers
105
159
iparm = [
@@ -172,7 +226,7 @@ for solver in solvers
172
226
for i in iparm
173
227
Pardiso. set_iparm! (solver, i... )
174
228
end
175
-
229
+
176
230
for i in Base. OneTo (length (iparm))
177
231
@test Pardiso. get_iparm (solver, i) == iparm[i][2 ]
178
232
end
@@ -195,22 +249,21 @@ end
195
249
b0 = A0 * u0
196
250
B0 = MySparseMatrixCSC2 (A0)
197
251
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)
200
254
201
-
202
255
pr = LinearProblem (B0, b0)
203
256
# test default algorithn
204
- u= solve (pr,alg)
257
+ u = solve (pr, alg)
205
258
@test norm (u - u0, Inf ) < 1.0e-13
206
-
259
+
207
260
# test factorization with reinit!
208
261
pr = LinearProblem (B0, b0)
209
- cache= init (pr,alg)
210
- u= solve! (cache)
262
+ cache = init (pr, alg)
263
+ u = solve! (cache)
211
264
@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)
214
267
@test norm (u - u0, Inf ) < 1.0e-13
215
268
end
216
269
end
0 commit comments