15808f684SSatish Balayfrom petsc4py import PETSc 25808f684SSatish Balayimport unittest 35808f684SSatish Balay 45808f684SSatish Balayimport numpy as N 55808f684SSatish Balayimport numpy as np 65808f684SSatish Balay 75808f684SSatish Balaydef mkgraph(comm, m, n): 85808f684SSatish Balay start = m*n * comm.rank 95808f684SSatish Balay end = start + m*n 105808f684SSatish Balay idt = PETSc.IntType 115808f684SSatish Balay rows = [] 125808f684SSatish Balay for I in range(start, end) : 135808f684SSatish Balay rows.append([]) 145808f684SSatish Balay adj = rows[-1] 155808f684SSatish Balay i = I//n; j = I - i*n 165808f684SSatish Balay if i> 0 : J = I-n; adj.append(J) 175808f684SSatish Balay if j> 0 : J = I-1; adj.append(J) 185808f684SSatish Balay adj.append(I) 195808f684SSatish Balay if j< n-1: J = I+1; adj.append(J) 205808f684SSatish Balay if i< m-1: J = I+n; adj.append(J) 215808f684SSatish Balay nods = N.array(range(start, end), dtype=idt) 225808f684SSatish Balay xadj = N.array([0]*(len(rows)+1), dtype=idt) 235808f684SSatish Balay xadj[0] = 0 245808f684SSatish Balay xadj[1:] = N.cumsum([len(r) for r in rows], dtype=idt) 255808f684SSatish Balay if not rows: adjy = N.array([],dtype=idt) 265808f684SSatish Balay else: adjy = N.concatenate(rows).astype(idt) 275808f684SSatish Balay return nods, xadj, adjy 285808f684SSatish Balay 295808f684SSatish Balay 305808f684SSatish Balayclass BaseTestMatAnyAIJ(object): 315808f684SSatish Balay 325808f684SSatish Balay COMM = PETSc.COMM_NULL 335808f684SSatish Balay TYPE = None 345808f684SSatish Balay GRID = 0, 0 355808f684SSatish Balay BSIZE = None 365808f684SSatish Balay 375808f684SSatish Balay def setUp(self): 385808f684SSatish Balay COMM = self.COMM 395808f684SSatish Balay GM, GN = self.GRID 405808f684SSatish Balay BS = self.BSIZE 415808f684SSatish Balay # 425808f684SSatish Balay try: 435808f684SSatish Balay rbs, cbs = BS 445808f684SSatish Balay rbs = rbs or 1 455808f684SSatish Balay cbs = cbs or 1 465808f684SSatish Balay except (TypeError, ValueError): 475808f684SSatish Balay rbs = cbs = BS or 1 485808f684SSatish Balay sdt = dtype = PETSc.ScalarType 495808f684SSatish Balay self.rows, self.xadj, self.adjy = mkgraph(COMM, GM, GN) 505808f684SSatish Balay self.vals = N.array(range(1, 1 + len(self.adjy)*rbs*cbs), dtype=sdt) 515808f684SSatish Balay self.vals.shape = (-1, rbs, cbs) 525808f684SSatish Balay # 535808f684SSatish Balay m, n = GM, GN 545808f684SSatish Balay rowsz = (m*n*rbs, None) 555808f684SSatish Balay colsz = (m*n*cbs, None) 565808f684SSatish Balay A = self.A = PETSc.Mat().create(comm=COMM) 575808f684SSatish Balay A.setType(self.TYPE) 585808f684SSatish Balay A.setSizes([rowsz, colsz], BS) 595808f684SSatish Balay 605808f684SSatish Balay def tearDown(self): 615808f684SSatish Balay self.A.destroy() 625808f684SSatish Balay self.A = None 635808f684SSatish Balay 645808f684SSatish Balay def testSetPreallocNNZ(self): 655808f684SSatish Balay nnz = [5, 2] 665808f684SSatish Balay self.A.setPreallocationNNZ(nnz) 675808f684SSatish Balay self._chk_bs(self.A, self.BSIZE) 685808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 695808f684SSatish Balay self.A.setOption(opt, True) 705808f684SSatish Balay ai, aj, av = self._set_values() 715808f684SSatish Balay self.A.assemble() 725808f684SSatish Balay self._chk_aij(self.A, ai, aj) 735808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 745808f684SSatish Balay self.A.setOption(opt, True) 755808f684SSatish Balay ai, aj, av = self._set_values_ijv() 765808f684SSatish Balay self.A.assemble() 775808f684SSatish Balay self._chk_aij(self.A, ai, aj) 785808f684SSatish Balay 795808f684SSatish Balay def testSetPreallocNNZ_2(self): 805808f684SSatish Balay _, ai, _, _ =self._get_aijv() 815808f684SSatish Balay d_nnz = N.diff(ai) 825808f684SSatish Balay nnz = [d_nnz, 3] 835808f684SSatish Balay self.A.setPreallocationNNZ(nnz) 845808f684SSatish Balay self._chk_bs(self.A, self.BSIZE) 855808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 865808f684SSatish Balay self.A.setOption(opt, True) 875808f684SSatish Balay ai, aj, av = self._set_values() 885808f684SSatish Balay self.A.assemble() 895808f684SSatish Balay self._chk_aij(self.A, ai, aj) 905808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 915808f684SSatish Balay self.A.setOption(opt, True) 925808f684SSatish Balay ai, aj, av =self._set_values_ijv() 935808f684SSatish Balay self.A.assemble() 945808f684SSatish Balay self._chk_aij(self.A, ai, aj) 955808f684SSatish Balay 965808f684SSatish Balay def testSetPreallocCSR(self): 97*fc989267SStefano Zampini if 'is' in self.A.getType(): return # XXX 985808f684SSatish Balay _, ai, aj, _ = self._get_aijv() 995808f684SSatish Balay csr = [ai, aj] 1005808f684SSatish Balay self.A.setPreallocationCSR(csr) 1015808f684SSatish Balay self._chk_bs(self.A, self.BSIZE) 1025808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1035808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 1045808f684SSatish Balay self.A.setOption(opt, True) 1055808f684SSatish Balay self._set_values() 1065808f684SSatish Balay self.A.assemble() 1075808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1085808f684SSatish Balay self._set_values_ijv() 1095808f684SSatish Balay self.A.assemble() 1105808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1115808f684SSatish Balay 1125808f684SSatish Balay def testSetPreallocCSR_2(self): 113*fc989267SStefano Zampini if 'is' in self.A.getType(): return # XXX 1145808f684SSatish Balay _, ai, aj, av =self._get_aijv() 1155808f684SSatish Balay csr = [ai, aj, av] 1165808f684SSatish Balay self.A.setPreallocationCSR(csr) 1175808f684SSatish Balay self._chk_bs(self.A, self.BSIZE) 1185808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1195808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 1205808f684SSatish Balay self.A.setOption(opt, True) 1215808f684SSatish Balay self._set_values() 1225808f684SSatish Balay self.A.assemble() 1235808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1245808f684SSatish Balay self._set_values_ijv() 1255808f684SSatish Balay self.A.assemble() 1265808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1275808f684SSatish Balay 1285808f684SSatish Balay def testSetValues(self): 1295808f684SSatish Balay self._preallocate() 1305808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 1315808f684SSatish Balay self.A.setOption(opt, True) 1325808f684SSatish Balay ai, aj, av = self._set_values() 1335808f684SSatish Balay self.A.assemble() 1345808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1355808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 1365808f684SSatish Balay self.A.setOption(opt, True) 1375808f684SSatish Balay ai, aj, av = self._set_values() 1385808f684SSatish Balay self.A.assemble() 1395808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1405808f684SSatish Balay 1415808f684SSatish Balay def testSetValuesIJV(self): 1425808f684SSatish Balay self._preallocate() 1435808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 1445808f684SSatish Balay self.A.setOption(opt, True) 1455808f684SSatish Balay ai, aj, av = self._set_values_ijv() 1465808f684SSatish Balay self.A.assemble() 1475808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1485808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 1495808f684SSatish Balay self.A.setOption(opt, True) 1505808f684SSatish Balay ai, aj, av = self._set_values_ijv() 1515808f684SSatish Balay self.A.assemble() 1525808f684SSatish Balay self._chk_aij(self.A, ai, aj) 1535808f684SSatish Balay 1545808f684SSatish Balay def testGetValuesCSR(self): 155*fc989267SStefano Zampini if 'is' in self.A.getType(): return # XXX 1565808f684SSatish Balay self._preallocate() 1575808f684SSatish Balay self._set_values_ijv() 1585808f684SSatish Balay A = self.A 1595808f684SSatish Balay A.assemble() 1605808f684SSatish Balay if 'sbaij' in A.getType(): 1615808f684SSatish Balay opt = PETSc.Mat.Option.GETROW_UPPERTRIANGULAR 1625808f684SSatish Balay self.A.setOption(opt, True) 1635808f684SSatish Balay ai, aj, av = A.getValuesCSR() 1645808f684SSatish Balay rstart, rend = A.getOwnershipRange() 1655808f684SSatish Balay for row in range(rstart, rend): 1665808f684SSatish Balay cols, vals = A.getRow(row) 1675808f684SSatish Balay i = row - rstart 1685808f684SSatish Balay self.assertTrue(N.allclose(aj[ai[i]:ai[i+1]], cols)) 1695808f684SSatish Balay self.assertTrue(N.allclose(av[ai[i]:ai[i+1]], vals)) 1705808f684SSatish Balay 1715808f684SSatish Balay def testConvertToSAME(self): 1725808f684SSatish Balay self._preallocate() 1735808f684SSatish Balay self._set_values_ijv() 1745808f684SSatish Balay A = self.A 1755808f684SSatish Balay A.assemble() 1765808f684SSatish Balay A.convert('same') 1775808f684SSatish Balay 1785808f684SSatish Balay def testConvertToDENSE(self): 1795808f684SSatish Balay self._preallocate() 1805808f684SSatish Balay self._set_values_ijv() 1815808f684SSatish Balay A = self.A 1825808f684SSatish Balay A.assemble() 1835808f684SSatish Balay x, y = A.getVecs() 1845808f684SSatish Balay x.setRandom() 1855808f684SSatish Balay z = y.duplicate() 1865808f684SSatish Balay A.mult(x, y) 1875808f684SSatish Balay if A.type.endswith('sbaij'): return 1885808f684SSatish Balay B = PETSc.Mat() 1895808f684SSatish Balay A.convert('dense', B) # initial 1905808f684SSatish Balay B.mult(x, z) 1915808f684SSatish Balay self.assertTrue(np.allclose(y.array, z.array)) 1925808f684SSatish Balay A.convert('dense', B) # reuse 1935808f684SSatish Balay B.mult(x, z) 1945808f684SSatish Balay self.assertTrue(np.allclose(y.array, z.array)) 1955808f684SSatish Balay A.convert('dense') # inplace 1965808f684SSatish Balay A.mult(x, z) 1975808f684SSatish Balay self.assertTrue(np.allclose(y.array, z.array)) 1985808f684SSatish Balay 1995808f684SSatish Balay def testConvertToAIJ(self): 2005808f684SSatish Balay self._preallocate() 2015808f684SSatish Balay self._set_values_ijv() 2025808f684SSatish Balay A = self.A 2035808f684SSatish Balay A.assemble() 2045808f684SSatish Balay x, y = A.getVecs() 2055808f684SSatish Balay x.setRandom() 2065808f684SSatish Balay z = y.duplicate() 2075808f684SSatish Balay A.mult(x, y) 2085808f684SSatish Balay if A.type.endswith('sbaij'): return 2095808f684SSatish Balay B = PETSc.Mat() 2105808f684SSatish Balay A.convert('aij', B) # initial 2115808f684SSatish Balay B.mult(x, z) 2125808f684SSatish Balay self.assertTrue(np.allclose(y.array, z.array)) 2135808f684SSatish Balay A.convert('aij', B) # reuse 2145808f684SSatish Balay B.mult(x, z) 2155808f684SSatish Balay self.assertTrue(np.allclose(y.array, z.array)) 2165808f684SSatish Balay A.convert('aij') # inplace 2175808f684SSatish Balay A.mult(x, z) 2185808f684SSatish Balay self.assertTrue(np.allclose(y.array, z.array)) 2195808f684SSatish Balay 2205808f684SSatish Balay def testGetDiagonalBlock(self): 221*fc989267SStefano Zampini if 'is' in self.A.getType(): return # XXX 2225808f684SSatish Balay self._preallocate() 2235808f684SSatish Balay self._set_values_ijv() 2245808f684SSatish Balay self.A.assemble() 2255808f684SSatish Balay B = self.A.getDiagonalBlock() 2265808f684SSatish Balay self.assertEqual(self.A.getLocalSize(), B.getSize()) 2275808f684SSatish Balay B.destroy() 2285808f684SSatish Balay 2295808f684SSatish Balay def testInvertBlockDiagonal(self): 230*fc989267SStefano Zampini if 'is' in self.A.getType(): return # XXX 2315808f684SSatish Balay try: 2325808f684SSatish Balay _ = len(self.BSIZE) 2335808f684SSatish Balay return 2345808f684SSatish Balay except (TypeError, ValueError): 2355808f684SSatish Balay pass 2365808f684SSatish Balay self._preallocate() 2375808f684SSatish Balay rbs, cbs = self.A.getBlockSizes() 2385808f684SSatish Balay if rbs != cbs: return 2395808f684SSatish Balay self._set_values_ijv() 2405808f684SSatish Balay self.A.assemble() 2415808f684SSatish Balay self.A.shift(1000) # Make nonsingular 2425808f684SSatish Balay ibdiag = self.A.invertBlockDiagonal() 2435808f684SSatish Balay bs = self.A.getBlockSize() 2445808f684SSatish Balay m, _ = self.A.getLocalSize() 2455808f684SSatish Balay self.assertEqual(ibdiag.shape, (m//bs, bs, bs)) 2465808f684SSatish Balay tmp = N.empty((m//bs, bs, bs), dtype=PETSc.ScalarType) 2475808f684SSatish Balay rstart, rend = self.A.getOwnershipRange() 2485808f684SSatish Balay s, e = rstart//bs, rend//bs 2495808f684SSatish Balay for i in range(s, e): 2505808f684SSatish Balay rows = cols = N.arange(i*bs,(i+1)*bs, dtype=PETSc.IntType) 2515808f684SSatish Balay vals = self.A.getValues(rows,cols) 2525808f684SSatish Balay tmp[i-s,:,:] = N.linalg.inv(vals) 2535808f684SSatish Balay self.assertTrue(N.allclose(ibdiag, tmp)) 2545808f684SSatish Balay 2555808f684SSatish Balay def testCreateSubMatrix(self): 2565808f684SSatish Balay if 'baij' in self.A.getType(): return # XXX 2575808f684SSatish Balay self._preallocate() 2585808f684SSatish Balay self._set_values_ijv() 2595808f684SSatish Balay self.A.assemble() 2605808f684SSatish Balay # 2615808f684SSatish Balay rank = self.A.getComm().getRank() 2625808f684SSatish Balay rs, re = self.A.getOwnershipRange() 2635808f684SSatish Balay cs, ce = self.A.getOwnershipRangeColumn() 2645808f684SSatish Balay rows = N.array(range(rs, re), dtype=PETSc.IntType) 2655808f684SSatish Balay cols = N.array(range(cs, ce), dtype=PETSc.IntType) 2665808f684SSatish Balay rows = PETSc.IS().createGeneral(rows, comm=self.A.getComm()) 2675808f684SSatish Balay cols = PETSc.IS().createGeneral(cols, comm=self.A.getComm()) 2685808f684SSatish Balay # 2695808f684SSatish Balay S = self.A.createSubMatrix(rows, None) 2705808f684SSatish Balay S.zeroEntries() 2715808f684SSatish Balay self.A.createSubMatrix(rows, None, S) 2725808f684SSatish Balay S.destroy() 2735808f684SSatish Balay # 2745808f684SSatish Balay S = self.A.createSubMatrix(rows, cols) 2755808f684SSatish Balay S.zeroEntries() 2765808f684SSatish Balay self.A.createSubMatrix(rows, cols, S) 2775808f684SSatish Balay S.destroy() 2785808f684SSatish Balay 2795808f684SSatish Balay def testCreateSubMatrices(self): 2805808f684SSatish Balay if 'baij' in self.A.getType(): return # XXX 281*fc989267SStefano Zampini if 'is' in self.A.getType(): return # XXX 2825808f684SSatish Balay self._preallocate() 2835808f684SSatish Balay self._set_values_ijv() 2845808f684SSatish Balay self.A.assemble() 2855808f684SSatish Balay # 2865808f684SSatish Balay rs, re = self.A.getOwnershipRange() 2875808f684SSatish Balay cs, ce = self.A.getOwnershipRangeColumn() 2885808f684SSatish Balay rows = N.array(range(rs, re), dtype=PETSc.IntType) 2895808f684SSatish Balay cols = N.array(range(cs, ce), dtype=PETSc.IntType) 2905808f684SSatish Balay rows = PETSc.IS().createGeneral(rows, comm=self.A.getComm()) 2915808f684SSatish Balay cols = PETSc.IS().createGeneral(cols, comm=self.A.getComm()) 2925808f684SSatish Balay # 2935808f684SSatish Balay (S,) = self.A.createSubMatrices(rows, cols) 2945808f684SSatish Balay S.zeroEntries() 2955808f684SSatish Balay self.A.createSubMatrices(rows, cols, submats=[S]) 2965808f684SSatish Balay S.destroy() 2975808f684SSatish Balay # 2985808f684SSatish Balay (S1,) = self.A.createSubMatrices([rows], [cols]) 2995808f684SSatish Balay (S2,) = self.A.createSubMatrices([rows], [cols]) 3005808f684SSatish Balay self.assertTrue(S1.equal(S2)) 3015808f684SSatish Balay S2.zeroEntries() 3025808f684SSatish Balay self.A.createSubMatrices([rows], [cols], [S2]) 3035808f684SSatish Balay self.assertTrue(S1.equal(S2)) 3045808f684SSatish Balay S1.destroy() 3055808f684SSatish Balay S2.destroy() 3065808f684SSatish Balay # 3075808f684SSatish Balay if 'seq' not in self.A.getType(): return # XXX 3085808f684SSatish Balay S1, S2 = self.A.createSubMatrices([rows, rows], [cols, cols]) 3095808f684SSatish Balay self.assertTrue(S1.equal(S2)) 3105808f684SSatish Balay S1.zeroEntries() 3115808f684SSatish Balay S2.zeroEntries() 3125808f684SSatish Balay self.A.createSubMatrices([rows, rows], [cols, cols], [S1, S2]) 3135808f684SSatish Balay self.assertTrue(S1.equal(S2)) 3145808f684SSatish Balay S1.destroy() 3155808f684SSatish Balay S2.destroy() 3165808f684SSatish Balay 3175808f684SSatish Balay def testGetRedundantMatrix(self): 3185808f684SSatish Balay if 'aijcrl' in self.A.getType(): return # duplicate not supported 3195808f684SSatish Balay if 'mpisbaij' in self.A.getType(): return # not working 320*fc989267SStefano Zampini if 'is' in self.A.getType(): return # XXX 3215808f684SSatish Balay self._preallocate() 3225808f684SSatish Balay self._set_values_ijv() 3235808f684SSatish Balay self.A.assemble() 3245808f684SSatish Balay #Test the most simple case 3255808f684SSatish Balay sizecommA = self.A.getComm().getSize() 3265808f684SSatish Balay Ared = self.A.getRedundantMatrix(sizecommA) 3275808f684SSatish Balay sizecommAred = Ared.getComm().getSize() 3285808f684SSatish Balay self.assertEqual(1, sizecommAred) 3295808f684SSatish Balay Ared.destroy() 3305808f684SSatish Balay 3315808f684SSatish Balay def testCreateTranspose(self): 3325808f684SSatish Balay self._preallocate() 3335808f684SSatish Balay self._set_values_ijv() 3345808f684SSatish Balay self.A.assemble() 3355808f684SSatish Balay A = self.A 3365808f684SSatish Balay AT = PETSc.Mat().createTranspose(A) 3375808f684SSatish Balay x, y = A.createVecs() 3385808f684SSatish Balay xt, yt = AT.createVecs() 3395808f684SSatish Balay # 3405808f684SSatish Balay y.setRandom() 3415808f684SSatish Balay A.multTranspose(y, x) 3425808f684SSatish Balay y.copy(xt) 3435808f684SSatish Balay AT.mult(xt, yt) 3445808f684SSatish Balay self.assertTrue(yt.equal(x)) 3455808f684SSatish Balay # 3465808f684SSatish Balay x.setRandom() 3475808f684SSatish Balay A.mult(x, y) 3485808f684SSatish Balay x.copy(yt) 3495808f684SSatish Balay AT.multTranspose(yt, xt) 3505808f684SSatish Balay self.assertTrue(xt.equal(y)) 3515808f684SSatish Balay 3525808f684SSatish Balay def _get_aijv(self): 3535808f684SSatish Balay return (self.rows, self.xadj, self.adjy, self.vals,) 3545808f684SSatish Balay 3555808f684SSatish Balay def _preallocate(self): 3565808f684SSatish Balay self.A.setPreallocationNNZ([5, 2]) 3575808f684SSatish Balay 3585808f684SSatish Balay def _set_values(self): 3595808f684SSatish Balay import sys 3605808f684SSatish Balay if hasattr(sys, 'gettotalrefcount'): 3615808f684SSatish Balay return self._set_values_ijv() 3625808f684SSatish Balay # XXX Why the code below leak refs as a beast ??? 3635808f684SSatish Balay row, ai, aj, av =self._get_aijv() 3645808f684SSatish Balay if not self.BSIZE: 3655808f684SSatish Balay setvalues = self.A.setValues 3665808f684SSatish Balay else: 3675808f684SSatish Balay setvalues = self.A.setValuesBlocked 3685808f684SSatish Balay for i, r in enumerate(row): 3695808f684SSatish Balay s, e = ai[i], ai[i+1] 3705808f684SSatish Balay setvalues(r, aj[s:e], av[s:e]) 3715808f684SSatish Balay return ai, aj, av 3725808f684SSatish Balay 3735808f684SSatish Balay def _set_values_ijv(self): 3745808f684SSatish Balay row, ai, aj, av =self._get_aijv() 3755808f684SSatish Balay if not self.BSIZE: 3765808f684SSatish Balay setvalues = self.A.setValuesIJV 3775808f684SSatish Balay else: 3785808f684SSatish Balay setvalues = self.A.setValuesBlockedIJV 3795808f684SSatish Balay setvalues(ai, aj, av, rowmap=row) 3805808f684SSatish Balay setvalues(ai, aj, av, rowmap=None) 3815808f684SSatish Balay return ai, aj, av 3825808f684SSatish Balay 3835808f684SSatish Balay def _chk_bs(self, A, bs): 3845808f684SSatish Balay self.assertEqual(A.getBlockSize(), bs or 1) 3855808f684SSatish Balay 3865808f684SSatish Balay def _chk_bsizes(self, A, bsizes): 3875808f684SSatish Balay try: 3885808f684SSatish Balay rbs, cbs = bsizes 3895808f684SSatish Balay except (TypeError, ValueError): 3905808f684SSatish Balay rbs = cbs = bsizes 3915808f684SSatish Balay self.assertEqual(A.getBlockSizes(), (rbs, cbs)) 3925808f684SSatish Balay 3935808f684SSatish Balay def _chk_aij(self, A, i, j): 3945808f684SSatish Balay compressed = bool(self.BSIZE) 3955808f684SSatish Balay ai, aj = A.getRowIJ(compressed=compressed) 3965808f684SSatish Balay if ai is not None and aj is not None: 3975808f684SSatish Balay self.assertTrue(N.all(i==ai)) 3985808f684SSatish Balay self.assertTrue(N.all(j==aj)) 3995808f684SSatish Balay ai, aj = A.getColumnIJ(compressed=compressed) 4005808f684SSatish Balay if ai is not None and aj is not None: 4015808f684SSatish Balay self.assertTrue(N.all(i==ai)) 4025808f684SSatish Balay self.assertTrue(N.all(j==aj)) 4035808f684SSatish Balay 4045808f684SSatish Balay# -- AIJ --------------------- 4055808f684SSatish Balay 4065808f684SSatish Balayclass BaseTestMatAIJ(BaseTestMatAnyAIJ, unittest.TestCase): 4075808f684SSatish Balay COMM = PETSc.COMM_WORLD 4085808f684SSatish Balay TYPE = PETSc.Mat.Type.AIJ 4095808f684SSatish Balay GRID = 0, 0 4105808f684SSatish Balay BSIZE = None 4115808f684SSatish Balay 4125808f684SSatish Balay# -- Seq AIJ -- 4135808f684SSatish Balay 4145808f684SSatish Balayclass TestMatSeqAIJ(BaseTestMatAIJ): 4155808f684SSatish Balay COMM = PETSc.COMM_SELF 4165808f684SSatish Balay TYPE = PETSc.Mat.Type.SEQAIJ 4175808f684SSatish Balayclass TestMatSeqAIJ_G23(TestMatSeqAIJ): 4185808f684SSatish Balay GRID = 2, 3 4195808f684SSatish Balayclass TestMatSeqAIJ_G45(TestMatSeqAIJ): 4205808f684SSatish Balay GRID = 4, 5 4215808f684SSatish Balayclass TestMatSeqAIJ_G89(TestMatSeqAIJ): 4225808f684SSatish Balay GRID = 8, 9 4235808f684SSatish Balay 4245808f684SSatish Balay# -- MPI AIJ -- 4255808f684SSatish Balay 4265808f684SSatish Balayclass TestMatMPIAIJ(BaseTestMatAIJ): 4275808f684SSatish Balay COMM = PETSc.COMM_WORLD 4285808f684SSatish Balay TYPE = PETSc.Mat.Type.MPIAIJ 4295808f684SSatish Balayclass TestMatMPIAIJ_G23(TestMatMPIAIJ): 4305808f684SSatish Balay GRID = 2, 3 4315808f684SSatish Balayclass TestMatMPIAIJ_G45(TestMatMPIAIJ): 4325808f684SSatish Balay GRID = 4, 5 4335808f684SSatish Balayclass TestMatMPIAIJ_G89(TestMatMPIAIJ): 4345808f684SSatish Balay GRID = 8, 9 4355808f684SSatish Balay 4365808f684SSatish Balay 4375808f684SSatish Balay# -- Block AIJ --------------- 4385808f684SSatish Balay 4395808f684SSatish Balayclass BaseTestMatBAIJ(BaseTestMatAnyAIJ, unittest.TestCase): 4405808f684SSatish Balay COMM = PETSc.COMM_WORLD 4415808f684SSatish Balay TYPE = PETSc.Mat.Type.BAIJ 4425808f684SSatish Balay GRID = 0, 0 4435808f684SSatish Balay BSIZE = 1 4445808f684SSatish Balay 4455808f684SSatish Balay# -- Seq Block AIJ -- 4465808f684SSatish Balay 4475808f684SSatish Balayclass TestMatSeqBAIJ(BaseTestMatBAIJ): 4485808f684SSatish Balay COMM = PETSc.COMM_SELF 4495808f684SSatish Balay TYPE = PETSc.Mat.Type.SEQBAIJ 4505808f684SSatish Balay# bs = 1 4515808f684SSatish Balayclass TestMatSeqBAIJ_G23(TestMatSeqBAIJ): 4525808f684SSatish Balay GRID = 2, 3 4535808f684SSatish Balayclass TestMatSeqBAIJ_G45(TestMatSeqBAIJ): 4545808f684SSatish Balay GRID = 4, 5 4555808f684SSatish Balayclass TestMatSeqBAIJ_G89(TestMatSeqBAIJ): 4565808f684SSatish Balay GRID = 8, 9 4575808f684SSatish Balay# bs = 2 4585808f684SSatish Balayclass TestMatSeqBAIJ_G23_B2(TestMatSeqBAIJ_G23): 4595808f684SSatish Balay BSIZE = 2 4605808f684SSatish Balayclass TestMatSeqBAIJ_G45_B2(TestMatSeqBAIJ_G45): 4615808f684SSatish Balay BSIZE = 2 4625808f684SSatish Balayclass TestMatSeqBAIJ_G89_B2(TestMatSeqBAIJ_G89): 4635808f684SSatish Balay BSIZE = 2 4645808f684SSatish Balay# bs = 3 4655808f684SSatish Balayclass TestMatSeqBAIJ_G23_B3(TestMatSeqBAIJ_G23): 4665808f684SSatish Balay BSIZE = 3 4675808f684SSatish Balayclass TestMatSeqBAIJ_G45_B3(TestMatSeqBAIJ_G45): 4685808f684SSatish Balay BSIZE = 3 4695808f684SSatish Balayclass TestMatSeqBAIJ_G89_B3(TestMatSeqBAIJ_G89): 4705808f684SSatish Balay BSIZE = 3 4715808f684SSatish Balay# bs = 4 4725808f684SSatish Balayclass TestMatSeqBAIJ_G23_B4(TestMatSeqBAIJ_G23): 4735808f684SSatish Balay BSIZE = 4 4745808f684SSatish Balayclass TestMatSeqBAIJ_G45_B4(TestMatSeqBAIJ_G45): 4755808f684SSatish Balay BSIZE = 4 4765808f684SSatish Balayclass TestMatSeqBAIJ_G89_B4(TestMatSeqBAIJ_G89): 4775808f684SSatish Balay BSIZE = 4 4785808f684SSatish Balay# bs = 5 4795808f684SSatish Balayclass TestMatSeqBAIJ_G23_B5(TestMatSeqBAIJ_G23): 4805808f684SSatish Balay BSIZE = 5 4815808f684SSatish Balayclass TestMatSeqBAIJ_G45_B5(TestMatSeqBAIJ_G45): 4825808f684SSatish Balay BSIZE = 5 4835808f684SSatish Balayclass TestMatSeqBAIJ_G89_B5(TestMatSeqBAIJ_G89): 4845808f684SSatish Balay BSIZE = 5 4855808f684SSatish Balay 4865808f684SSatish Balay 4875808f684SSatish Balay# -- MPI Block AIJ -- 4885808f684SSatish Balay 4895808f684SSatish Balayclass TestMatMPIBAIJ(BaseTestMatBAIJ): 4905808f684SSatish Balay COMM = PETSc.COMM_WORLD 4915808f684SSatish Balay TYPE = PETSc.Mat.Type.MPIBAIJ 4925808f684SSatish Balay# bs = 1 4935808f684SSatish Balayclass TestMatMPIBAIJ_G23(TestMatMPIBAIJ): 4945808f684SSatish Balay GRID = 2, 3 4955808f684SSatish Balayclass TestMatMPIBAIJ_G45(TestMatMPIBAIJ): 4965808f684SSatish Balay GRID = 4, 5 4975808f684SSatish Balayclass TestMatMPIBAIJ_G89(TestMatMPIBAIJ): 4985808f684SSatish Balay GRID = 8, 9 4995808f684SSatish Balay# bs = 2 5005808f684SSatish Balayclass TestMatMPIBAIJ_G23_B2(TestMatMPIBAIJ_G23): 5015808f684SSatish Balay BSIZE = 2 5025808f684SSatish Balayclass TestMatMPIBAIJ_G45_B2(TestMatMPIBAIJ_G45): 5035808f684SSatish Balay BSIZE = 2 5045808f684SSatish Balayclass TestMatMPIBAIJ_G89_B2(TestMatMPIBAIJ_G89): 5055808f684SSatish Balay BSIZE = 2 5065808f684SSatish Balay# bs = 3 5075808f684SSatish Balayclass TestMatMPIBAIJ_G23_B3(TestMatMPIBAIJ_G23): 5085808f684SSatish Balay BSIZE = 3 5095808f684SSatish Balayclass TestMatMPIBAIJ_G45_B3(TestMatMPIBAIJ_G45): 5105808f684SSatish Balay BSIZE = 3 5115808f684SSatish Balayclass TestMatMPIBAIJ_G89_B3(TestMatMPIBAIJ_G89): 5125808f684SSatish Balay BSIZE = 3 5135808f684SSatish Balay# bs = 4 5145808f684SSatish Balayclass TestMatMPIBAIJ_G23_B4(TestMatMPIBAIJ_G23): 5155808f684SSatish Balay BSIZE = 4 5165808f684SSatish Balayclass TestMatMPIBAIJ_G45_B4(TestMatMPIBAIJ_G45): 5175808f684SSatish Balay BSIZE = 4 5185808f684SSatish Balayclass TestMatMPIBAIJ_G89_B4(TestMatMPIBAIJ_G89): 5195808f684SSatish Balay BSIZE = 4 5205808f684SSatish Balay# bs = 5 5215808f684SSatish Balayclass TestMatMPIBAIJ_G23_B5(TestMatMPIBAIJ_G23): 5225808f684SSatish Balay BSIZE = 5 5235808f684SSatish Balayclass TestMatMPIBAIJ_G45_B5(TestMatMPIBAIJ_G45): 5245808f684SSatish Balay BSIZE = 5 5255808f684SSatish Balayclass TestMatMPIBAIJ_G89_B5(TestMatMPIBAIJ_G89): 5265808f684SSatish Balay BSIZE = 5 5275808f684SSatish Balay 5285808f684SSatish Balay# -- SymmBlock AIJ --------------- 5295808f684SSatish Balay 5305808f684SSatish Balayclass BaseTestMatSBAIJ(BaseTestMatAnyAIJ, unittest.TestCase): 5315808f684SSatish Balay COMM = PETSc.COMM_WORLD 5325808f684SSatish Balay TYPE = PETSc.Mat.Type.SBAIJ 5335808f684SSatish Balay GRID = 0, 0 5345808f684SSatish Balay BSIZE = 1 5355808f684SSatish Balay def testInvertBlockDiagonal(self): pass 5365808f684SSatish Balay def _chk_aij(self, A, i, j): 5375808f684SSatish Balay ai, aj = A.getRowIJ(compressed=True) 5385808f684SSatish Balay if ai is not None and aj is not None: 5395808f684SSatish Balay if 0: # XXX Implement 5405808f684SSatish Balay self.assertTrue(N.all(i==ai)) 5415808f684SSatish Balay self.assertTrue(N.all(j==aj)) 5425808f684SSatish Balay ai, aj = A.getColumnIJ(compressed=True) 5435808f684SSatish Balay if ai is not None and aj is not None: 5445808f684SSatish Balay if 0: # XXX Implement 5455808f684SSatish Balay self.assertTrue(N.all(i==ai)) 5465808f684SSatish Balay self.assertTrue(N.all(j==aj)) 5475808f684SSatish Balay 5485808f684SSatish Balay# -- Seq SymmBlock AIJ -- 5495808f684SSatish Balay 5505808f684SSatish Balayclass TestMatSeqSBAIJ(BaseTestMatSBAIJ): 5515808f684SSatish Balay COMM = PETSc.COMM_SELF 5525808f684SSatish Balay TYPE = PETSc.Mat.Type.SEQSBAIJ 5535808f684SSatish Balay# bs = 1 5545808f684SSatish Balayclass TestMatSeqSBAIJ_G23(TestMatSeqSBAIJ): 5555808f684SSatish Balay GRID = 2, 3 5565808f684SSatish Balayclass TestMatSeqSBAIJ_G45(TestMatSeqSBAIJ): 5575808f684SSatish Balay GRID = 4, 5 5585808f684SSatish Balayclass TestMatSeqSBAIJ_G89(TestMatSeqSBAIJ): 5595808f684SSatish Balay GRID = 8, 9 5605808f684SSatish Balay# bs = 2 5615808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B2(TestMatSeqSBAIJ_G23): 5625808f684SSatish Balay BSIZE = 2 5635808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B2(TestMatSeqSBAIJ_G45): 5645808f684SSatish Balay BSIZE = 2 5655808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B2(TestMatSeqSBAIJ_G89): 5665808f684SSatish Balay BSIZE = 2 5675808f684SSatish Balay# bs = 3 5685808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B3(TestMatSeqSBAIJ_G23): 5695808f684SSatish Balay BSIZE = 3 5705808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B3(TestMatSeqSBAIJ_G45): 5715808f684SSatish Balay BSIZE = 3 5725808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B3(TestMatSeqSBAIJ_G89): 5735808f684SSatish Balay BSIZE = 3 5745808f684SSatish Balay# bs = 4 5755808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B4(TestMatSeqSBAIJ_G23): 5765808f684SSatish Balay BSIZE = 4 5775808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B4(TestMatSeqSBAIJ_G45): 5785808f684SSatish Balay BSIZE = 4 5795808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B4(TestMatSeqSBAIJ_G89): 5805808f684SSatish Balay BSIZE = 4 5815808f684SSatish Balay# bs = 5 5825808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B5(TestMatSeqSBAIJ_G23): 5835808f684SSatish Balay BSIZE = 5 5845808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B5(TestMatSeqSBAIJ_G45): 5855808f684SSatish Balay BSIZE = 5 5865808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B5(TestMatSeqSBAIJ_G89): 5875808f684SSatish Balay BSIZE = 5 5885808f684SSatish Balay 5895808f684SSatish Balay 5905808f684SSatish Balay# -- MPI SymmBlock AIJ -- 5915808f684SSatish Balay 5925808f684SSatish Balayclass TestMatMPISBAIJ(BaseTestMatSBAIJ): 5935808f684SSatish Balay COMM = PETSc.COMM_WORLD 5945808f684SSatish Balay TYPE = PETSc.Mat.Type.MPISBAIJ 5955808f684SSatish Balay# bs = 1 5965808f684SSatish Balayclass TestMatMPISBAIJ_G23(TestMatMPISBAIJ): 5975808f684SSatish Balay GRID = 2, 3 5985808f684SSatish Balayclass TestMatMPISBAIJ_G45(TestMatMPISBAIJ): 5995808f684SSatish Balay GRID = 4, 5 6005808f684SSatish Balayclass TestMatMPISBAIJ_G89(TestMatMPISBAIJ): 6015808f684SSatish Balay GRID = 8, 9 6025808f684SSatish Balay# bs = 2 6035808f684SSatish Balayclass TestMatMPISBAIJ_G23_B2(TestMatMPISBAIJ_G23): 6045808f684SSatish Balay BSIZE = 2 6055808f684SSatish Balayclass TestMatMPISBAIJ_G45_B2(TestMatMPISBAIJ_G45): 6065808f684SSatish Balay BSIZE = 2 6075808f684SSatish Balayclass TestMatMPISBAIJ_G89_B2(TestMatMPISBAIJ_G89): 6085808f684SSatish Balay BSIZE = 2 6095808f684SSatish Balay# bs = 3 6105808f684SSatish Balayclass TestMatMPISBAIJ_G23_B3(TestMatMPISBAIJ_G23): 6115808f684SSatish Balay BSIZE = 3 6125808f684SSatish Balayclass TestMatMPISBAIJ_G45_B3(TestMatMPISBAIJ_G45): 6135808f684SSatish Balay BSIZE = 3 6145808f684SSatish Balayclass TestMatMPISBAIJ_G89_B3(TestMatMPISBAIJ_G89): 6155808f684SSatish Balay BSIZE = 3 6165808f684SSatish Balay# bs = 4 6175808f684SSatish Balayclass TestMatMPISBAIJ_G23_B4(TestMatMPISBAIJ_G23): 6185808f684SSatish Balay BSIZE = 4 6195808f684SSatish Balayclass TestMatMPISBAIJ_G45_B4(TestMatMPISBAIJ_G45): 6205808f684SSatish Balay BSIZE = 4 6215808f684SSatish Balayclass TestMatMPISBAIJ_G89_B4(TestMatMPISBAIJ_G89): 6225808f684SSatish Balay BSIZE = 4 6235808f684SSatish Balay# bs = 5 6245808f684SSatish Balayclass TestMatMPISBAIJ_G23_B5(TestMatMPISBAIJ_G23): 6255808f684SSatish Balay BSIZE = 5 6265808f684SSatish Balayclass TestMatMPISBAIJ_G45_B5(TestMatMPISBAIJ_G45): 6275808f684SSatish Balay BSIZE = 5 6285808f684SSatish Balayclass TestMatMPISBAIJ_G89_B5(TestMatMPISBAIJ_G89): 6295808f684SSatish Balay BSIZE = 5 6305808f684SSatish Balay 6315808f684SSatish Balay# -- AIJ + Block --------------- 6325808f684SSatish Balay 6335808f684SSatish Balayclass BaseTestMatAIJ_B(BaseTestMatAnyAIJ, unittest.TestCase): 6345808f684SSatish Balay COMM = PETSc.COMM_WORLD 6355808f684SSatish Balay TYPE = PETSc.Mat.Type.AIJ 6365808f684SSatish Balay GRID = 0, 0 6375808f684SSatish Balay BSIZE = 1 6385808f684SSatish Balay 6395808f684SSatish Balay def testSetPreallocNNZ(self):pass 6405808f684SSatish Balay def testSetPreallocNNZ_2(self):pass 6415808f684SSatish Balay def testSetPreallocCSR(self):pass 6425808f684SSatish Balay def testSetPreallocCSR_2(self):pass 6435808f684SSatish Balay def testSetValues(self): 6445808f684SSatish Balay self._preallocate() 6455808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 6465808f684SSatish Balay self.A.setOption(opt, True) 6475808f684SSatish Balay ai, aj, av = self._set_values() 6485808f684SSatish Balay self.A.assemble() 6495808f684SSatish Balay self._chk_aij(self.A, ai, aj) 6505808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 6515808f684SSatish Balay self.A.setOption(opt, True) 6525808f684SSatish Balay ai, aj, av = self._set_values() 6535808f684SSatish Balay self.A.assemble() 6545808f684SSatish Balay self._chk_aij(self.A, ai, aj) 6555808f684SSatish Balay def testSetValuesIJV(self): 6565808f684SSatish Balay self._preallocate() 6575808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 6585808f684SSatish Balay self.A.setOption(opt, True) 6595808f684SSatish Balay ai, aj, av = self._set_values_ijv() 6605808f684SSatish Balay self.A.assemble() 6615808f684SSatish Balay self._chk_aij(self.A, ai, aj) 6625808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 6635808f684SSatish Balay self.A.setOption(opt, True) 6645808f684SSatish Balay ai, aj, av = self._set_values_ijv() 6655808f684SSatish Balay self.A.assemble() 6665808f684SSatish Balay self._chk_aij(self.A, ai, aj) 6675808f684SSatish Balay def _preallocate(self): 6685808f684SSatish Balay self.A.setPreallocationNNZ([5*self.BSIZE, 3*self.BSIZE]) 6695808f684SSatish Balay self._chk_bs(self.A, self.BSIZE) 6705808f684SSatish Balay def _chk_aij(self, A, i, j): 6715808f684SSatish Balay bs = self.BSIZE or 1 6725808f684SSatish Balay ai, aj = A.getRowIJ() 6735808f684SSatish Balay if ai is not None and aj is not None: ## XXX map and check !! 6745808f684SSatish Balay #self.assertTrue(N.all(i==ai)) 6755808f684SSatish Balay #self.assertTrue(N.all(j==aj)) 6765808f684SSatish Balay pass 6775808f684SSatish Balay ai, aj = A.getColumnIJ(compressed=bool(self.BSIZE)) 6785808f684SSatish Balay if ai is not None and aj is not None: ## XXX map and check !! 6795808f684SSatish Balay #self.assertTrue(N.all(i==ai)) 6805808f684SSatish Balay #self.assertTrue(N.all(j==aj)) 6815808f684SSatish Balay pass 6825808f684SSatish Balay 6835808f684SSatish Balay# -- Seq AIJ + Block -- 6845808f684SSatish Balay 6855808f684SSatish Balayclass TestMatSeqAIJ_B(BaseTestMatAIJ_B): 6865808f684SSatish Balay COMM = PETSc.COMM_SELF 6875808f684SSatish Balay TYPE = PETSc.Mat.Type.SEQAIJ 6885808f684SSatish Balay# bs = 1 6895808f684SSatish Balayclass TestMatSeqAIJ_B_G23(TestMatSeqAIJ_B): 6905808f684SSatish Balay GRID = 2, 3 6915808f684SSatish Balayclass TestMatSeqAIJ_B_G45(TestMatSeqAIJ_B): 6925808f684SSatish Balay GRID = 4, 5 6935808f684SSatish Balayclass TestMatSeqAIJ_B_G89(TestMatSeqAIJ_B): 6945808f684SSatish Balay GRID = 8, 9 6955808f684SSatish Balay# bs = 2 6965808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B2(TestMatSeqAIJ_B_G23): 6975808f684SSatish Balay BSIZE = 2 6985808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B2(TestMatSeqAIJ_B_G45): 6995808f684SSatish Balay BSIZE = 2 7005808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B2(TestMatSeqAIJ_B_G89): 7015808f684SSatish Balay BSIZE = 2 7025808f684SSatish Balay# bs = 3 7035808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B3(TestMatSeqAIJ_B_G23): 7045808f684SSatish Balay BSIZE = 3 7055808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B3(TestMatSeqAIJ_B_G45): 7065808f684SSatish Balay BSIZE = 3 7075808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B3(TestMatSeqAIJ_B_G89): 7085808f684SSatish Balay BSIZE = 3 7095808f684SSatish Balay# bs = 4 7105808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B4(TestMatSeqAIJ_B_G23): 7115808f684SSatish Balay BSIZE = 4 7125808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B4(TestMatSeqAIJ_B_G45): 7135808f684SSatish Balay BSIZE = 4 7145808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B4(TestMatSeqAIJ_B_G89): 7155808f684SSatish Balay BSIZE = 4 7165808f684SSatish Balay# bs = 5 7175808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B5(TestMatSeqAIJ_B_G23): 7185808f684SSatish Balay BSIZE = 5 7195808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B5(TestMatSeqAIJ_B_G45): 7205808f684SSatish Balay BSIZE = 5 7215808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B5(TestMatSeqAIJ_B_G89): 7225808f684SSatish Balay BSIZE = 5 7235808f684SSatish Balay 7245808f684SSatish Balay 7255808f684SSatish Balay# -- MPI AIJ + Block -- 7265808f684SSatish Balay 7275808f684SSatish Balayclass TestMatMPIAIJ_B(BaseTestMatAIJ_B): 7285808f684SSatish Balay COMM = PETSc.COMM_WORLD 7295808f684SSatish Balay TYPE = PETSc.Mat.Type.MPIAIJ 7305808f684SSatish Balay# bs = 1 7315808f684SSatish Balayclass TestMatMPIAIJ_B_G23(TestMatMPIAIJ_B): 7325808f684SSatish Balay GRID = 2, 3 7335808f684SSatish Balayclass TestMatMPIAIJ_B_G45(TestMatMPIAIJ_B): 7345808f684SSatish Balay GRID = 4, 5 7355808f684SSatish Balayclass TestMatMPIAIJ_B_G89(TestMatMPIAIJ_B): 7365808f684SSatish Balay GRID = 8, 9 7375808f684SSatish Balay# bs = 2 7385808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B2(TestMatMPIAIJ_B_G23): 7395808f684SSatish Balay BSIZE = 2 7405808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B2(TestMatMPIAIJ_B_G45): 7415808f684SSatish Balay BSIZE = 2 7425808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B2(TestMatMPIAIJ_B_G89): 7435808f684SSatish Balay BSIZE = 2 7445808f684SSatish Balay# bs = 3 7455808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B3(TestMatMPIAIJ_B_G23): 7465808f684SSatish Balay BSIZE = 3 7475808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B3(TestMatMPIAIJ_B_G45): 7485808f684SSatish Balay BSIZE = 3 7495808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B3(TestMatMPIAIJ_B_G89): 7505808f684SSatish Balay BSIZE = 3 7515808f684SSatish Balay# bs = 4 7525808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B4(TestMatMPIAIJ_B_G23): 7535808f684SSatish Balay BSIZE = 4 7545808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B4(TestMatMPIAIJ_B_G45): 7555808f684SSatish Balay BSIZE = 4 7565808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B4(TestMatMPIAIJ_B_G89): 7575808f684SSatish Balay BSIZE = 4 7585808f684SSatish Balay# bs = 5 7595808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B5(TestMatMPIAIJ_B_G23): 7605808f684SSatish Balay BSIZE = 5 7615808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B5(TestMatMPIAIJ_B_G45): 7625808f684SSatish Balay BSIZE = 5 7635808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B5(TestMatMPIAIJ_B_G89): 7645808f684SSatish Balay BSIZE = 5 7655808f684SSatish Balay 7665808f684SSatish Balay# -- Non-square blocks -- 7675808f684SSatish Balayclass BaseTestMatAIJ_B(BaseTestMatAnyAIJ, unittest.TestCase): 7685808f684SSatish Balay COMM = PETSc.COMM_WORLD 7695808f684SSatish Balay TYPE = PETSc.Mat.Type.AIJ 7705808f684SSatish Balay GRID = 0, 0 7715808f684SSatish Balay BSIZE = 4, 2 7725808f684SSatish Balay 7735808f684SSatish Balay def _preallocate(self): 7745808f684SSatish Balay try: 7755808f684SSatish Balay rbs, cbs = self.BSIZE 7765808f684SSatish Balay except (TypeError, ValueError): 7775808f684SSatish Balay rbs = cbs = self.BSIZE 7785808f684SSatish Balay self.A.setPreallocationNNZ([5*rbs, 3*cbs]) 7795808f684SSatish Balay self._chk_bsizes(self.A, self.BSIZE) 7805808f684SSatish Balay def testSetPreallocNNZ(self):pass 7815808f684SSatish Balay def testSetPreallocNNZ_2(self):pass 7825808f684SSatish Balay def testSetPreallocCSR(self):pass 7835808f684SSatish Balay def testSetPreallocCSR_2(self):pass 7845808f684SSatish Balay def testSetValues(self): 7855808f684SSatish Balay self._preallocate() 7865808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 7875808f684SSatish Balay self.A.setOption(opt, True) 7885808f684SSatish Balay ai, aj, av = self._set_values() 7895808f684SSatish Balay self.A.assemble() 7905808f684SSatish Balay self._chk_aij(self.A, ai, aj) 7915808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 7925808f684SSatish Balay self.A.setOption(opt, True) 7935808f684SSatish Balay ai, aj, av = self._set_values() 7945808f684SSatish Balay self.A.assemble() 7955808f684SSatish Balay self._chk_aij(self.A, ai, aj) 7965808f684SSatish Balay def testSetValuesIJV(self): 7975808f684SSatish Balay self._preallocate() 7985808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR 7995808f684SSatish Balay self.A.setOption(opt, True) 8005808f684SSatish Balay ai, aj, av = self._set_values_ijv() 8015808f684SSatish Balay self.A.assemble() 8025808f684SSatish Balay self._chk_aij(self.A, ai, aj) 8035808f684SSatish Balay opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR 8045808f684SSatish Balay self.A.setOption(opt, True) 8055808f684SSatish Balay ai, aj, av = self._set_values_ijv() 8065808f684SSatish Balay self.A.assemble() 8075808f684SSatish Balay self._chk_aij(self.A, ai, aj) 8085808f684SSatish Balay def _chk_aij(self, A, i, j): 8095808f684SSatish Balay bs = self.BSIZE or 1 8105808f684SSatish Balay ai, aj = A.getRowIJ() 8115808f684SSatish Balay if ai is not None and aj is not None: ## XXX map and check !! 8125808f684SSatish Balay #self.assertTrue(N.all(i==ai)) 8135808f684SSatish Balay #self.assertTrue(N.all(j==aj)) 8145808f684SSatish Balay pass 8155808f684SSatish Balay ai, aj = A.getColumnIJ() 8165808f684SSatish Balay if ai is not None and aj is not None: ## XXX map and check !! 8175808f684SSatish Balay #self.assertTrue(N.all(i==ai)) 8185808f684SSatish Balay #self.assertTrue(N.all(j==aj)) 8195808f684SSatish Balay pass 8205808f684SSatish Balay 8215808f684SSatish Balay# -- AIJCRL --------------------- 8225808f684SSatish Balay 8235808f684SSatish Balayclass BaseTestMatAIJCRL(BaseTestMatAIJ, unittest.TestCase): 8245808f684SSatish Balay TYPE = PETSc.Mat.Type.AIJCRL 8255808f684SSatish Balay 8265808f684SSatish Balay# -- Seq AIJCRL -- 8275808f684SSatish Balay 8285808f684SSatish Balayclass TestMatSeqAIJCRL(BaseTestMatAIJCRL): 8295808f684SSatish Balay COMM = PETSc.COMM_SELF 8305808f684SSatish Balay TYPE = PETSc.Mat.Type.SEQAIJCRL 8315808f684SSatish Balayclass TestMatSeqAIJCRL_G23(TestMatSeqAIJCRL): 8325808f684SSatish Balay GRID = 2, 3 8335808f684SSatish Balayclass TestMatSeqAIJCRL_G45(TestMatSeqAIJCRL): 8345808f684SSatish Balay GRID = 4, 5 8355808f684SSatish Balayclass TestMatSeqAIJCRL_G89(TestMatSeqAIJCRL): 8365808f684SSatish Balay GRID = 8, 9 8375808f684SSatish Balay 8385808f684SSatish Balay# -- MPI AIJCRL -- 8395808f684SSatish Balay 8405808f684SSatish Balayclass TestMatMPIAIJCRL(BaseTestMatAIJCRL): 8415808f684SSatish Balay COMM = PETSc.COMM_WORLD 8425808f684SSatish Balay TYPE = PETSc.Mat.Type.MPIAIJCRL 8435808f684SSatish Balayclass TestMatMPIAIJCRL_G23(TestMatMPIAIJCRL): 8445808f684SSatish Balay GRID = 2, 3 8455808f684SSatish Balayclass TestMatMPIAIJCRL_G45(TestMatMPIAIJCRL): 8465808f684SSatish Balay GRID = 4, 5 8475808f684SSatish Balayclass TestMatMPIAIJCRL_G89(TestMatMPIAIJCRL): 8485808f684SSatish Balay GRID = 8, 9 8495808f684SSatish Balay 8505808f684SSatish Balay# -- AIJCRL + Block ------------- 8515808f684SSatish Balay 8525808f684SSatish Balayclass BaseTestMatAIJCRL_B(BaseTestMatAIJ_B, unittest.TestCase): 8535808f684SSatish Balay TYPE = PETSc.Mat.Type.AIJCRL 8545808f684SSatish Balay 8555808f684SSatish Balay# -- Seq AIJCRL + Block -- 8565808f684SSatish Balay 8575808f684SSatish Balayclass TestMatSeqAIJCRL_B(BaseTestMatAIJCRL_B): 8585808f684SSatish Balay COMM = PETSc.COMM_SELF 8595808f684SSatish Balay TYPE = PETSc.Mat.Type.SEQAIJCRL 8605808f684SSatish Balay# bs = 1 8615808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23(TestMatSeqAIJCRL_B): 8625808f684SSatish Balay GRID = 2, 3 8635808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45(TestMatSeqAIJCRL_B): 8645808f684SSatish Balay GRID = 4, 5 8655808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89(TestMatSeqAIJCRL_B): 8665808f684SSatish Balay GRID = 8, 9 8675808f684SSatish Balay# bs = 2 8685808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B2(TestMatSeqAIJCRL_B_G23): 8695808f684SSatish Balay BSIZE = 2 8705808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B2(TestMatSeqAIJCRL_B_G45): 8715808f684SSatish Balay BSIZE = 2 8725808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B2(TestMatSeqAIJCRL_B_G89): 8735808f684SSatish Balay BSIZE = 2 8745808f684SSatish Balay# bs = 3 8755808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B3(TestMatSeqAIJCRL_B_G23): 8765808f684SSatish Balay BSIZE = 3 8775808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B3(TestMatSeqAIJCRL_B_G45): 8785808f684SSatish Balay BSIZE = 3 8795808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B3(TestMatSeqAIJCRL_B_G89): 8805808f684SSatish Balay BSIZE = 3 8815808f684SSatish Balay# bs = 4 8825808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B4(TestMatSeqAIJCRL_B_G23): 8835808f684SSatish Balay BSIZE = 4 8845808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B4(TestMatSeqAIJCRL_B_G45): 8855808f684SSatish Balay BSIZE = 4 8865808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B4(TestMatSeqAIJCRL_B_G89): 8875808f684SSatish Balay BSIZE = 4 8885808f684SSatish Balay# bs = 5 8895808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B5(TestMatSeqAIJCRL_B_G23): 8905808f684SSatish Balay BSIZE = 5 8915808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B5(TestMatSeqAIJCRL_B_G45): 8925808f684SSatish Balay BSIZE = 5 8935808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B5(TestMatSeqAIJCRL_B_G89): 8945808f684SSatish Balay BSIZE = 5 8955808f684SSatish Balay 8965808f684SSatish Balay 8975808f684SSatish Balay# -- MPI AIJCRL + Block -- 8985808f684SSatish Balay 8995808f684SSatish Balayclass TestMatMPIAIJCRL_B(BaseTestMatAIJCRL_B): 9005808f684SSatish Balay COMM = PETSc.COMM_WORLD 9015808f684SSatish Balay TYPE = PETSc.Mat.Type.MPIAIJCRL 9025808f684SSatish Balay# bs = 1 9035808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23(TestMatMPIAIJCRL_B): 9045808f684SSatish Balay GRID = 2, 3 9055808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45(TestMatMPIAIJCRL_B): 9065808f684SSatish Balay GRID = 4, 5 9075808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89(TestMatMPIAIJCRL_B): 9085808f684SSatish Balay GRID = 8, 9 9095808f684SSatish Balay# bs = 2 9105808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B2(TestMatMPIAIJCRL_B_G23): 9115808f684SSatish Balay BSIZE = 2 9125808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B2(TestMatMPIAIJCRL_B_G45): 9135808f684SSatish Balay BSIZE = 2 9145808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B2(TestMatMPIAIJCRL_B_G89): 9155808f684SSatish Balay BSIZE = 2 9165808f684SSatish Balay# bs = 3 9175808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B3(TestMatMPIAIJCRL_B_G23): 9185808f684SSatish Balay BSIZE = 3 9195808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B3(TestMatMPIAIJCRL_B_G45): 9205808f684SSatish Balay BSIZE = 3 9215808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B3(TestMatMPIAIJCRL_B_G89): 9225808f684SSatish Balay BSIZE = 3 9235808f684SSatish Balay# bs = 4 9245808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B4(TestMatMPIAIJCRL_B_G23): 9255808f684SSatish Balay BSIZE = 4 9265808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B4(TestMatMPIAIJCRL_B_G45): 9275808f684SSatish Balay BSIZE = 4 9285808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B4(TestMatMPIAIJCRL_B_G89): 9295808f684SSatish Balay BSIZE = 4 9305808f684SSatish Balay# bs = 5 9315808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B5(TestMatMPIAIJCRL_B_G23): 9325808f684SSatish Balay BSIZE = 5 9335808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B5(TestMatMPIAIJCRL_B_G45): 9345808f684SSatish Balay BSIZE = 5 9355808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B5(TestMatMPIAIJCRL_B_G89): 9365808f684SSatish Balay BSIZE = 5 9375808f684SSatish Balay 938*fc989267SStefano Zampini# -- MATIS -- 939*fc989267SStefano Zampini 940*fc989267SStefano Zampiniclass TestMatIS(BaseTestMatAIJ): 941*fc989267SStefano Zampini COMM = PETSc.COMM_WORLD 942*fc989267SStefano Zampini TYPE = PETSc.Mat.Type.IS 943*fc989267SStefano Zampiniclass TestMatIS_G23(TestMatIS): 944*fc989267SStefano Zampini GRID = 2, 3 945*fc989267SStefano Zampiniclass TestMatIS_G45(TestMatIS): 946*fc989267SStefano Zampini GRID = 4, 5 947*fc989267SStefano Zampiniclass TestMatIS_G89(TestMatIS): 948*fc989267SStefano Zampini GRID = 8, 9 949*fc989267SStefano Zampini 9505808f684SSatish Balay# ----- 9515808f684SSatish Balay 9525808f684SSatish Balay 9535808f684SSatish Balay 9545808f684SSatish Balayif __name__ == '__main__': 9555808f684SSatish Balay unittest.main() 956