(self, A, Ps=[])
| 94 | |
| 95 | |
| 96 | def build_levels(self, A, Ps=[]): |
| 97 | class MultiLevel: |
| 98 | A = None |
| 99 | P = None |
| 100 | R = None |
| 101 | |
| 102 | '''Give A and a list of prolongation matrices Ps, return a list of levels''' |
| 103 | lvl = len(Ps) + 1 # number of levels |
| 104 | |
| 105 | levels = [MultiLevel() for i in range(lvl)] |
| 106 | |
| 107 | levels[0].A = A |
| 108 | |
| 109 | for i in range(lvl-1): |
| 110 | levels[i].P = Ps[i] |
| 111 | levels[i].R = Ps[i].T |
| 112 | levels[i+1].A = Ps[i].T @ levels[i].A @ Ps[i] |
| 113 | |
| 114 | return levels |
| 115 | |
| 116 | |
| 117 | def diag_sweep(self, A,x,b,iterations=1): |