Salome HOME
Corrected environment files and enabled testing
[tools/solverlab.git] / CDMATH / tests / swig / linearSolverTests.py
1 #!/usr/bin/env python
2 # -*-coding:utf-8 -*-
3
4 import unittest
5
6 from cdmath import *
7
8
9 class TestsLinearSolverSwig(unittest.TestCase):
10
11     def testClassLinearSolver(self):
12         A = Matrix(2, 2)
13         A[0, 0] = 3.
14         A[0, 1] = -2.
15         A[1, 0] = -2.
16         A[1, 1] = 4.
17
18         A *= A.transpose()
19
20         self.assertEqual(A[0,0], 13)
21         self.assertEqual(A[0,1],-14)
22         self.assertEqual(A[1,0],-14)
23         self.assertEqual(A[1,1], 20)
24
25         Xana = Vector(2)
26         Xana[0] = 1.
27         Xana[1] = 2.
28
29         B = A * Xana
30
31         self.assertEqual(B[0],-15)
32         self.assertEqual(B[1], 26)
33
34         LS=LinearSolver(A,B,500,1.E-10,"GMRES","LU");
35         X=LS.solve();
36         self.assertTrue(abs(X[0]-Xana[0])<1.E-10);
37         self.assertTrue(abs(X[1]-Xana[1])<1.E-10);
38         self.assertEqual(LS.getStatus(),True);
39
40         self.assertEqual(LS.getNumberMaxOfIter(),500);
41         self.assertEqual(LS.getTolerance(),1.E-10);
42         self.assertEqual(LS.getNameOfMethod(),"GMRES");
43         self.assertEqual(LS.getNumberOfIter(),1);
44         self.assertEqual(LS.isMatrixSingular(),False);
45         self.assertEqual(LS.getNameOfPc(),"LU");
46
47         LS2 = LinearSolver(A, B, 500, 1.E-10, "CG")
48         A1 = SparseMatrixPetsc(2, 2,4)
49         A1[0, 0] =  1.
50         A1[0, 1] = -1.
51         A1[1, 0] = -1.
52         A1[1, 1] =  1.
53
54         B1 = Vector(2)
55         B1[0] = 2.
56         B1[1] =-2.
57
58         LS2.setMatrix(A1 * -1.)
59         # LS2.setSndMember(B1 * -1)
60         # LS2.setTolerance(1.E-10)
61         # LS2.setNumberMaxOfIter(10)
62         # LS2.setMatrixIsSingular(True)
63         # X2 = LS2.solve()
64         # self.assertTrue(abs(X2[0] -   1) < 1.E-10)
65         # self.assertTrue(abs(X2[1] - (-1)) < 1.E-10)
66         # self.assertEqual(LS2.getStatus(), True)
67         # self.assertEqual(LS2.getNumberOfIter(), 1)
68         # self.assertEqual(LS2.isMatrixSingular(), True)
69         # self.assertEqual(LS2.getNameOfMethod(), "CG")
70 # #
71         # LS3 = LinearSolver(A, B, 500, 1.E-10, "BICG")
72         # X3 = LS3.solve()
73         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
74         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
75         # self.assertEqual(LS3.getStatus(), True)
76         # self.assertEqual(LS3.getNameOfMethod(), "BICG")
77 # #
78         # LS3 = LinearSolver(A, B, 500, 1.E-10, "CR")
79         # X3 = LS3.solve()
80         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
81         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
82         # self.assertEqual(LS3.getStatus(), True)
83         # self.assertEqual(LS3.getNameOfMethod(), "CR")
84 # #
85         # LS3 = LinearSolver(A, B, 500, 1.E-10, "CGS")
86         # X3 = LS3.solve()
87         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
88         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
89         # self.assertEqual(LS3.getStatus(), True)
90         # self.assertEqual(LS3.getNameOfMethod(), "CGS")
91
92         # LS3 = LinearSolver(A, B, 500, 1.E-10, "GMRES")
93         # X3 = LS3.solve()
94         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
95         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
96         # self.assertEqual(LS3.getStatus(), True)
97         # self.assertEqual(LS3.getNameOfMethod(), "GMRES")
98
99         # LS3=LinearSolver(A,B,500,1.E-10,"BICG","LU");
100         # X3=LS3.solve();
101         # self.assertTrue(abs(X3[0]-Xana[0])<1.E-10);
102         # self.assertTrue(abs(X3[1]-Xana[1])<1.E-10);
103         # self.assertEqual(LS3.getStatus(),True);
104         # self.assertEqual(LS3.getNameOfMethod(),"BICG");
105         # self.assertEqual(LS3.getNameOfPc(),"LU");
106
107         # LS3 = LinearSolver(A, B, 500, 1.E-10, "BICG")
108         # X3 = LS3.solve()
109         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
110         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
111         # self.assertEqual(LS3.getStatus(), True)
112         # self.assertEqual(LS3.getNameOfMethod(), "BICG")
113         # self.assertEqual(LS3.getNameOfPc(),"");
114
115         # LS3 = LinearSolver(A, B, 500, 1.E-10, "GCR")
116         # X3 = LS3.solve()
117         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
118         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
119         # self.assertEqual(LS3.getStatus(), True)
120         # self.assertEqual(LS3.getNameOfMethod(), "GCR")
121
122         # LS3 = LinearSolver(A, B, 500, 1.E-10, "LSQR")
123         # X3 = LS3.solve()
124         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
125         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
126         # self.assertEqual(LS3.getStatus(), True)
127         # self.assertEqual(LS3.getNameOfMethod(), "LSQR")
128 # #
129         # LS3 = LinearSolver(A, B, 500, 1.E-10, "CHOLESKY")
130         # X3 = LS3.solve()
131         # self.assertTrue(abs(X3[0] - Xana[0]) < 1.E-10)
132         # self.assertTrue(abs(X3[1] - Xana[1]) < 1.E-10)
133         # self.assertEqual(LS3.getStatus(), True)
134         # self.assertEqual(LS3.getNameOfMethod(), "CHOLESKY")
135
136         # LS3=LinearSolver(A,B,500,1.E-10,"LU");
137         # X3=LS3.solve();
138         # self.assertTrue(abs(X3[0]-Xana[0])<1.E-10);
139         # self.assertTrue(abs(X3[1]-Xana[1])<1.E-10);
140         # self.assertEqual(LS3.getStatus(),True);
141         # self.assertEqual(LS3.getNameOfMethod(),"LU");
142         # self.assertEqual(LS3.getNameOfPc(),"");
143
144         A2 = SparseMatrixPetsc(6, 6, 16)
145         A2[0, 0] = 2.
146         A2[0, 1] = -1.
147
148         A2[1, 0] = -1.
149         A2[1, 1] = 2.
150         A2[1, 2] = -1.
151
152         A2[2, 1] = -1.
153         A2[2, 2] = 2.
154         A2[2, 3] = -1.
155
156         A2[3, 2] = -1.
157         A2[3, 3] = 2.
158         A2[3, 4] = -1.
159
160         A2[4, 3] = -1.
161         A2[4, 4] = 2.
162         A2[4, 5] = -1.
163
164         A2[5, 4] = -1.
165         A2[5, 5] = 2.
166
167         Xana2 = Vector(6)
168         Xana2[0] = 1.
169         Xana2[1] = 2.
170         Xana2[2] = 3.
171         Xana2[3] = 4.
172         Xana2[4] = 5.
173         Xana2[5] = 6.
174
175         B2 = A2 * Xana2
176
177         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "GMRES", "ILU")
178         X11 = LS11.solve()
179         for i in range(X11.getNumberOfRows()):
180             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
181             pass
182
183         self.assertEqual(LS11.getStatus(), True)
184
185         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
186         self.assertEqual(LS11.getTolerance(), 1.E-10)
187         self.assertEqual(LS11.getNumberOfIter(), 1)
188
189         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "CG", "ILU")
190         X11 = LS11.solve()
191         for i in range(X11.getNumberOfRows()):
192             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
193             pass
194
195         self.assertEqual(LS11.getStatus(), True)
196
197         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
198         self.assertEqual(LS11.getTolerance(), 1.E-10)
199         self.assertEqual(LS11.getNumberOfIter(), 1)
200
201         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "LGMRES", "ILU")
202         X11 = LS11.solve()
203         for i in range(X11.getNumberOfRows()):
204             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
205             pass
206
207         self.assertEqual(LS11.getStatus(), True)
208
209         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
210         self.assertEqual(LS11.getTolerance(), 1.E-10)
211         self.assertEqual(LS11.getNumberOfIter(), 1)
212
213         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "BICG", "ILU")
214         X11 = LS11.solve()
215         for i in range(X11.getNumberOfRows()):
216             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
217             pass
218
219         self.assertEqual(LS11.getStatus(), True)
220
221         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
222         self.assertEqual(LS11.getTolerance(), 1.E-10)
223         self.assertEqual(LS11.getNumberOfIter(), 1)
224
225         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "CR", "ILU")
226         X11 = LS11.solve()
227         for i in range(X11.getNumberOfRows()):
228             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
229             pass
230
231         self.assertEqual(LS11.getStatus(), True)
232
233         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
234         self.assertEqual(LS11.getTolerance(), 1.E-10)
235         self.assertEqual(LS11.getNumberOfIter(), 1)
236
237         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "CGS", "ILU")
238         X11 = LS11.solve()
239         for i in range(X11.getNumberOfRows()):
240             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
241             pass
242
243         self.assertEqual(LS11.getStatus(), True)
244
245         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
246         self.assertEqual(LS11.getTolerance(), 1.E-10)
247         self.assertEqual(LS11.getNumberOfIter(), 1)
248
249         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "BICG", "ILU")
250         X11 = LS11.solve()
251         for i in range(X11.getNumberOfRows()):
252             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
253             pass
254
255         self.assertEqual(LS11.getStatus(), True)
256
257         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
258         self.assertEqual(LS11.getTolerance(), 1.E-10)
259         self.assertEqual(LS11.getNumberOfIter(), 1)
260
261         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "GCR", "ILU")
262         X11 = LS11.solve()
263         for i in range(X11.getNumberOfRows()):
264             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
265             pass
266
267         self.assertEqual(LS11.getStatus(), True)
268
269         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
270         self.assertEqual(LS11.getTolerance(), 1.E-10)
271         self.assertEqual(LS11.getNumberOfIter(), 1)
272
273         LS11 = LinearSolver(A2, B2, 500, 1.E-10, "LSQR", "ILU")
274         X11 = LS11.solve()
275         for i in range(X11.getNumberOfRows()):
276             self.assertTrue(abs(X11[i] - Xana2[i]) < 1.E-10)
277             pass
278
279         self.assertEqual(LS11.getStatus(), True)
280
281         self.assertEqual(LS11.getNumberMaxOfIter(), 500)
282         self.assertEqual(LS11.getTolerance(), 1.E-10)
283         self.assertEqual(LS11.getNumberOfIter(), 6)
284
285
286 if __name__ == """__main__""":
287     unittest.main()