xref: /petsc/src/binding/petsc4py/test/test_mat_aij.py (revision 552edb6364df478b294b3111f33a8f37ca096b20)
15808f684SSatish Balayfrom petsc4py import PETSc
25808f684SSatish Balayimport unittest
35808f684SSatish Balay
45808f684SSatish Balayimport numpy as N
55808f684SSatish Balayimport numpy as np
65808f684SSatish Balay
7*6f336411SStefano Zampini
85808f684SSatish Balaydef mkgraph(comm, m, n):
95808f684SSatish Balay    start = m * n * comm.rank
105808f684SSatish Balay    end = start + m * n
115808f684SSatish Balay    idt = PETSc.IntType
125808f684SSatish Balay    rows = []
13*6f336411SStefano Zampini    for gridI in range(start, end):
145808f684SSatish Balay        rows.append([])
155808f684SSatish Balay        adj = rows[-1]
16*6f336411SStefano Zampini        i = gridI // n
17*6f336411SStefano Zampini        j = gridI - i * n
18*6f336411SStefano Zampini        if i > 0:
19*6f336411SStefano Zampini            gridJ = gridI - n
20*6f336411SStefano Zampini            adj.append(gridJ)
21*6f336411SStefano Zampini        if j > 0:
22*6f336411SStefano Zampini            gridJ = gridI - 1
23*6f336411SStefano Zampini            adj.append(gridJ)
24*6f336411SStefano Zampini        adj.append(gridI)
25*6f336411SStefano Zampini        if j < n - 1:
26*6f336411SStefano Zampini            gridJ = gridI + 1
27*6f336411SStefano Zampini            adj.append(gridJ)
28*6f336411SStefano Zampini        if i < m - 1:
29*6f336411SStefano Zampini            gridJ = gridI + n
30*6f336411SStefano Zampini            adj.append(gridJ)
315808f684SSatish Balay    nods = N.array(range(start, end), dtype=idt)
325808f684SSatish Balay    xadj = N.array([0] * (len(rows) + 1), dtype=idt)
335808f684SSatish Balay    xadj[0] = 0
345808f684SSatish Balay    xadj[1:] = N.cumsum([len(r) for r in rows], dtype=idt)
35*6f336411SStefano Zampini    if not rows:
36*6f336411SStefano Zampini        adjy = N.array([], dtype=idt)
37*6f336411SStefano Zampini    else:
38*6f336411SStefano Zampini        adjy = N.concatenate(rows).astype(idt)
395808f684SSatish Balay    return nods, xadj, adjy
405808f684SSatish Balay
415808f684SSatish Balay
42*6f336411SStefano Zampiniclass BaseTestMatAnyAIJ:
435808f684SSatish Balay    COMM = PETSc.COMM_NULL
445808f684SSatish Balay    TYPE = None
455808f684SSatish Balay    GRID = 0, 0
465808f684SSatish Balay    BSIZE = None
475808f684SSatish Balay
485808f684SSatish Balay    def setUp(self):
495808f684SSatish Balay        COMM = self.COMM
505808f684SSatish Balay        GM, GN = self.GRID
515808f684SSatish Balay        BS = self.BSIZE
525808f684SSatish Balay        #
535808f684SSatish Balay        try:
545808f684SSatish Balay            rbs, cbs = BS
555808f684SSatish Balay            rbs = rbs or 1
565808f684SSatish Balay            cbs = cbs or 1
575808f684SSatish Balay        except (TypeError, ValueError):
585808f684SSatish Balay            rbs = cbs = BS or 1
59*6f336411SStefano Zampini        sdt = PETSc.ScalarType
605808f684SSatish Balay        self.rows, self.xadj, self.adjy = mkgraph(COMM, GM, GN)
615808f684SSatish Balay        self.vals = N.array(range(1, 1 + len(self.adjy) * rbs * cbs), dtype=sdt)
625808f684SSatish Balay        self.vals.shape = (-1, rbs, cbs)
635808f684SSatish Balay        #
645808f684SSatish Balay        m, n = GM, GN
655808f684SSatish Balay        rowsz = (m * n * rbs, None)
665808f684SSatish Balay        colsz = (m * n * cbs, None)
675808f684SSatish Balay        A = self.A = PETSc.Mat().create(comm=COMM)
685808f684SSatish Balay        A.setType(self.TYPE)
695808f684SSatish Balay        A.setSizes([rowsz, colsz], BS)
705808f684SSatish Balay
715808f684SSatish Balay    def tearDown(self):
725808f684SSatish Balay        self.A.destroy()
735808f684SSatish Balay        self.A = None
7462e5d2d2SJDBetteridge        PETSc.garbage_cleanup()
755808f684SSatish Balay
765808f684SSatish Balay    def testSetPreallocNNZ(self):
775808f684SSatish Balay        nnz = [5, 2]
785808f684SSatish Balay        self.A.setPreallocationNNZ(nnz)
795808f684SSatish Balay        self._chk_bs(self.A, self.BSIZE)
805808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
815808f684SSatish Balay        self.A.setOption(opt, True)
825808f684SSatish Balay        ai, aj, av = self._set_values()
835808f684SSatish Balay        self.A.assemble()
845808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
855808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
865808f684SSatish Balay        self.A.setOption(opt, True)
875808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
885808f684SSatish Balay        self.A.assemble()
895808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
905808f684SSatish Balay
915808f684SSatish Balay    def testSetPreallocNNZ_2(self):
925808f684SSatish Balay        _, ai, _, _ = self._get_aijv()
935808f684SSatish Balay        d_nnz = N.diff(ai)
945808f684SSatish Balay        nnz = [d_nnz, 3]
955808f684SSatish Balay        self.A.setPreallocationNNZ(nnz)
965808f684SSatish Balay        self._chk_bs(self.A, self.BSIZE)
975808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
985808f684SSatish Balay        self.A.setOption(opt, True)
995808f684SSatish Balay        ai, aj, av = self._set_values()
1005808f684SSatish Balay        self.A.assemble()
1015808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1025808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
1035808f684SSatish Balay        self.A.setOption(opt, True)
1045808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
1055808f684SSatish Balay        self.A.assemble()
1065808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1075808f684SSatish Balay
1085808f684SSatish Balay    def testSetPreallocCSR(self):
109*6f336411SStefano Zampini        if 'is' in self.A.getType():
110*6f336411SStefano Zampini            return  # XXX
1115808f684SSatish Balay        _, ai, aj, _ = self._get_aijv()
1125808f684SSatish Balay        csr = [ai, aj]
1135808f684SSatish Balay        self.A.setPreallocationCSR(csr)
1145808f684SSatish Balay        self._chk_bs(self.A, self.BSIZE)
1155808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1165808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
1175808f684SSatish Balay        self.A.setOption(opt, True)
1185808f684SSatish Balay        self._set_values()
1195808f684SSatish Balay        self.A.assemble()
1205808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1215808f684SSatish Balay        self._set_values_ijv()
1225808f684SSatish Balay        self.A.assemble()
1235808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1245808f684SSatish Balay
1255808f684SSatish Balay    def testSetPreallocCSR_2(self):
126*6f336411SStefano Zampini        if 'is' in self.A.getType():
127*6f336411SStefano Zampini            return  # XXX
1285808f684SSatish Balay        _, ai, aj, av = self._get_aijv()
1295808f684SSatish Balay        csr = [ai, aj, av]
1305808f684SSatish Balay        self.A.setPreallocationCSR(csr)
1315808f684SSatish Balay        self._chk_bs(self.A, self.BSIZE)
1325808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1335808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
1345808f684SSatish Balay        self.A.setOption(opt, True)
1355808f684SSatish Balay        self._set_values()
1365808f684SSatish Balay        self.A.assemble()
1375808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1385808f684SSatish Balay        self._set_values_ijv()
1395808f684SSatish Balay        self.A.assemble()
1405808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1415808f684SSatish Balay
1425808f684SSatish Balay    def testSetValues(self):
1435808f684SSatish Balay        self._preallocate()
1445808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
1455808f684SSatish Balay        self.A.setOption(opt, True)
1465808f684SSatish Balay        ai, aj, av = self._set_values()
1475808f684SSatish Balay        self.A.assemble()
1485808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1495808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
1505808f684SSatish Balay        self.A.setOption(opt, True)
1515808f684SSatish Balay        ai, aj, av = self._set_values()
1525808f684SSatish Balay        self.A.assemble()
1535808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1545808f684SSatish Balay
1555808f684SSatish Balay    def testSetValuesIJV(self):
1565808f684SSatish Balay        self._preallocate()
1575808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
1585808f684SSatish Balay        self.A.setOption(opt, True)
1595808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
1605808f684SSatish Balay        self.A.assemble()
1615808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1625808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
1635808f684SSatish Balay        self.A.setOption(opt, True)
1645808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
1655808f684SSatish Balay        self.A.assemble()
1665808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1675808f684SSatish Balay
1685808f684SSatish Balay    def testGetValuesCSR(self):
169*6f336411SStefano Zampini        if 'is' in self.A.getType():
170*6f336411SStefano Zampini            return  # XXX
1715808f684SSatish Balay        self._preallocate()
1725808f684SSatish Balay        self._set_values_ijv()
1735808f684SSatish Balay        A = self.A
1745808f684SSatish Balay        A.assemble()
1755808f684SSatish Balay        if 'sbaij' in A.getType():
1765808f684SSatish Balay            opt = PETSc.Mat.Option.GETROW_UPPERTRIANGULAR
1775808f684SSatish Balay            self.A.setOption(opt, True)
1785808f684SSatish Balay        ai, aj, av = A.getValuesCSR()
1795808f684SSatish Balay        rstart, rend = A.getOwnershipRange()
1805808f684SSatish Balay        for row in range(rstart, rend):
1815808f684SSatish Balay            cols, vals = A.getRow(row)
1825808f684SSatish Balay            i = row - rstart
1835808f684SSatish Balay            self.assertTrue(N.allclose(aj[ai[i] : ai[i + 1]], cols))
1845808f684SSatish Balay            self.assertTrue(N.allclose(av[ai[i] : ai[i + 1]], vals))
1855808f684SSatish Balay
1865808f684SSatish Balay    def testConvertToSAME(self):
1875808f684SSatish Balay        self._preallocate()
1885808f684SSatish Balay        self._set_values_ijv()
1895808f684SSatish Balay        A = self.A
1905808f684SSatish Balay        A.assemble()
1915808f684SSatish Balay        A.convert('same')
1925808f684SSatish Balay
1935808f684SSatish Balay    def testConvertToDENSE(self):
1945808f684SSatish Balay        self._preallocate()
1955808f684SSatish Balay        self._set_values_ijv()
1965808f684SSatish Balay        A = self.A
1975808f684SSatish Balay        A.assemble()
1985808f684SSatish Balay        x, y = A.getVecs()
1995808f684SSatish Balay        x.setRandom()
2005808f684SSatish Balay        z = y.duplicate()
2015808f684SSatish Balay        A.mult(x, y)
202*6f336411SStefano Zampini        if A.type.endswith('sbaij'):
203*6f336411SStefano Zampini            return
2045808f684SSatish Balay        B = PETSc.Mat()
2055808f684SSatish Balay        A.convert('dense', B)  # initial
2065808f684SSatish Balay        B.mult(x, z)
2075808f684SSatish Balay        self.assertTrue(np.allclose(y.array, z.array))
2085808f684SSatish Balay        A.convert('dense', B)  # reuse
2095808f684SSatish Balay        B.mult(x, z)
2105808f684SSatish Balay        self.assertTrue(np.allclose(y.array, z.array))
2115808f684SSatish Balay        A.convert('dense')  # inplace
2125808f684SSatish Balay        A.mult(x, z)
2135808f684SSatish Balay        self.assertTrue(np.allclose(y.array, z.array))
2145808f684SSatish Balay
2155808f684SSatish Balay    def testConvertToAIJ(self):
2165808f684SSatish Balay        self._preallocate()
2175808f684SSatish Balay        self._set_values_ijv()
2185808f684SSatish Balay        A = self.A
2195808f684SSatish Balay        A.assemble()
2205808f684SSatish Balay        x, y = A.getVecs()
2215808f684SSatish Balay        x.setRandom()
2225808f684SSatish Balay        z = y.duplicate()
2235808f684SSatish Balay        A.mult(x, y)
224*6f336411SStefano Zampini        if A.type.endswith('sbaij'):
225*6f336411SStefano Zampini            return
2265808f684SSatish Balay        B = PETSc.Mat()
2275808f684SSatish Balay        A.convert('aij', B)  # initial
2285808f684SSatish Balay        B.mult(x, z)
2295808f684SSatish Balay        self.assertTrue(np.allclose(y.array, z.array))
2305808f684SSatish Balay        A.convert('aij', B)  # reuse
2315808f684SSatish Balay        B.mult(x, z)
2325808f684SSatish Balay        self.assertTrue(np.allclose(y.array, z.array))
2335808f684SSatish Balay        A.convert('aij')  # inplace
2345808f684SSatish Balay        A.mult(x, z)
2355808f684SSatish Balay        self.assertTrue(np.allclose(y.array, z.array))
2365808f684SSatish Balay
2375808f684SSatish Balay    def testGetDiagonalBlock(self):
238*6f336411SStefano Zampini        if 'is' in self.A.getType():
239*6f336411SStefano Zampini            return  # XXX
2405808f684SSatish Balay        self._preallocate()
2415808f684SSatish Balay        self._set_values_ijv()
2425808f684SSatish Balay        self.A.assemble()
2435808f684SSatish Balay        B = self.A.getDiagonalBlock()
2445808f684SSatish Balay        self.assertEqual(self.A.getLocalSize(), B.getSize())
2455808f684SSatish Balay        B.destroy()
2465808f684SSatish Balay
2475808f684SSatish Balay    def testInvertBlockDiagonal(self):
248*6f336411SStefano Zampini        if 'is' in self.A.getType():
249*6f336411SStefano Zampini            return  # XXX
2505808f684SSatish Balay        try:
2515808f684SSatish Balay            _ = len(self.BSIZE)
2525808f684SSatish Balay            return
2535808f684SSatish Balay        except (TypeError, ValueError):
2545808f684SSatish Balay            pass
2555808f684SSatish Balay        self._preallocate()
2565808f684SSatish Balay        rbs, cbs = self.A.getBlockSizes()
257*6f336411SStefano Zampini        if rbs != cbs:
258*6f336411SStefano Zampini            return
2595808f684SSatish Balay        self._set_values_ijv()
2605808f684SSatish Balay        self.A.assemble()
2615808f684SSatish Balay        self.A.shift(1000)  # Make nonsingular
2625808f684SSatish Balay        ibdiag = self.A.invertBlockDiagonal()
2635808f684SSatish Balay        bs = self.A.getBlockSize()
2645808f684SSatish Balay        m, _ = self.A.getLocalSize()
2655808f684SSatish Balay        self.assertEqual(ibdiag.shape, (m // bs, bs, bs))
2665808f684SSatish Balay        tmp = N.empty((m // bs, bs, bs), dtype=PETSc.ScalarType)
2675808f684SSatish Balay        rstart, rend = self.A.getOwnershipRange()
2685808f684SSatish Balay        s, e = rstart // bs, rend // bs
2695808f684SSatish Balay        for i in range(s, e):
2705808f684SSatish Balay            rows = cols = N.arange(i * bs, (i + 1) * bs, dtype=PETSc.IntType)
2715808f684SSatish Balay            vals = self.A.getValues(rows, cols)
2725808f684SSatish Balay            tmp[i - s, :, :] = N.linalg.inv(vals)
2735808f684SSatish Balay        self.assertTrue(N.allclose(ibdiag, tmp))
2745808f684SSatish Balay
2755808f684SSatish Balay    def testCreateSubMatrix(self):
276*6f336411SStefano Zampini        if 'baij' in self.A.getType():
277*6f336411SStefano Zampini            return  # XXX
2785808f684SSatish Balay        self._preallocate()
2795808f684SSatish Balay        self._set_values_ijv()
2805808f684SSatish Balay        self.A.assemble()
2815808f684SSatish Balay        #
2825808f684SSatish Balay        rs, re = self.A.getOwnershipRange()
2835808f684SSatish Balay        cs, ce = self.A.getOwnershipRangeColumn()
2845808f684SSatish Balay        rows = N.array(range(rs, re), dtype=PETSc.IntType)
2855808f684SSatish Balay        cols = N.array(range(cs, ce), dtype=PETSc.IntType)
2865808f684SSatish Balay        rows = PETSc.IS().createGeneral(rows, comm=self.A.getComm())
2875808f684SSatish Balay        cols = PETSc.IS().createGeneral(cols, comm=self.A.getComm())
2885808f684SSatish Balay        #
2895808f684SSatish Balay        S = self.A.createSubMatrix(rows, None)
2905808f684SSatish Balay        S.zeroEntries()
2915808f684SSatish Balay        self.A.createSubMatrix(rows, None, S)
2925808f684SSatish Balay        S.destroy()
2935808f684SSatish Balay        #
2945808f684SSatish Balay        S = self.A.createSubMatrix(rows, cols)
2955808f684SSatish Balay        S.zeroEntries()
2965808f684SSatish Balay        self.A.createSubMatrix(rows, cols, S)
2975808f684SSatish Balay        S.destroy()
2985808f684SSatish Balay
2995808f684SSatish Balay    def testCreateSubMatrices(self):
300*6f336411SStefano Zampini        if 'baij' in self.A.getType():
301*6f336411SStefano Zampini            return  # XXX
302*6f336411SStefano Zampini        if 'is' in self.A.getType():
303*6f336411SStefano Zampini            return  # XXX
3045808f684SSatish Balay        self._preallocate()
3055808f684SSatish Balay        self._set_values_ijv()
3065808f684SSatish Balay        self.A.assemble()
3075808f684SSatish Balay        #
3085808f684SSatish Balay        rs, re = self.A.getOwnershipRange()
3095808f684SSatish Balay        cs, ce = self.A.getOwnershipRangeColumn()
3105808f684SSatish Balay        rows = N.array(range(rs, re), dtype=PETSc.IntType)
3115808f684SSatish Balay        cols = N.array(range(cs, ce), dtype=PETSc.IntType)
3125808f684SSatish Balay        rows = PETSc.IS().createGeneral(rows, comm=self.A.getComm())
3135808f684SSatish Balay        cols = PETSc.IS().createGeneral(cols, comm=self.A.getComm())
3145808f684SSatish Balay        #
3155808f684SSatish Balay        (S,) = self.A.createSubMatrices(rows, cols)
3165808f684SSatish Balay        S.zeroEntries()
3175808f684SSatish Balay        self.A.createSubMatrices(rows, cols, submats=[S])
3185808f684SSatish Balay        S.destroy()
3195808f684SSatish Balay        #
3205808f684SSatish Balay        (S1,) = self.A.createSubMatrices([rows], [cols])
3215808f684SSatish Balay        (S2,) = self.A.createSubMatrices([rows], [cols])
3225808f684SSatish Balay        self.assertTrue(S1.equal(S2))
3235808f684SSatish Balay        S2.zeroEntries()
3245808f684SSatish Balay        self.A.createSubMatrices([rows], [cols], [S2])
3255808f684SSatish Balay        self.assertTrue(S1.equal(S2))
3265808f684SSatish Balay        S1.destroy()
3275808f684SSatish Balay        S2.destroy()
3285808f684SSatish Balay        #
329*6f336411SStefano Zampini        if 'seq' not in self.A.getType():
330*6f336411SStefano Zampini            return  # XXX
3315808f684SSatish Balay        S1, S2 = self.A.createSubMatrices([rows, rows], [cols, cols])
3325808f684SSatish Balay        self.assertTrue(S1.equal(S2))
3335808f684SSatish Balay        S1.zeroEntries()
3345808f684SSatish Balay        S2.zeroEntries()
3355808f684SSatish Balay        self.A.createSubMatrices([rows, rows], [cols, cols], [S1, S2])
3365808f684SSatish Balay        self.assertTrue(S1.equal(S2))
3375808f684SSatish Balay        S1.destroy()
3385808f684SSatish Balay        S2.destroy()
3395808f684SSatish Balay
3405808f684SSatish Balay    def testGetRedundantMatrix(self):
341*6f336411SStefano Zampini        if 'aijcrl' in self.A.getType():
342*6f336411SStefano Zampini            return  # duplicate not supported
343*6f336411SStefano Zampini        if 'mpisbaij' in self.A.getType():
344*6f336411SStefano Zampini            return  # not working
345*6f336411SStefano Zampini        if 'is' in self.A.getType():
346*6f336411SStefano Zampini            return  # XXX
3475808f684SSatish Balay        self._preallocate()
3485808f684SSatish Balay        self._set_values_ijv()
3495808f684SSatish Balay        self.A.assemble()
3505808f684SSatish Balay        # Test the most simple case
3515808f684SSatish Balay        sizecommA = self.A.getComm().getSize()
3525808f684SSatish Balay        Ared = self.A.getRedundantMatrix(sizecommA)
3535808f684SSatish Balay        sizecommAred = Ared.getComm().getSize()
3545808f684SSatish Balay        self.assertEqual(1, sizecommAred)
3555808f684SSatish Balay        Ared.destroy()
3565808f684SSatish Balay
3575808f684SSatish Balay    def testCreateTranspose(self):
3585808f684SSatish Balay        self._preallocate()
3595808f684SSatish Balay        self._set_values_ijv()
3605808f684SSatish Balay        self.A.assemble()
3615808f684SSatish Balay        A = self.A
3625808f684SSatish Balay        AT = PETSc.Mat().createTranspose(A)
3635808f684SSatish Balay        x, y = A.createVecs()
3645808f684SSatish Balay        xt, yt = AT.createVecs()
3655808f684SSatish Balay        #
3665808f684SSatish Balay        y.setRandom()
3675808f684SSatish Balay        A.multTranspose(y, x)
3685808f684SSatish Balay        y.copy(xt)
3695808f684SSatish Balay        AT.mult(xt, yt)
3705808f684SSatish Balay        self.assertTrue(yt.equal(x))
3715808f684SSatish Balay        #
3725808f684SSatish Balay        x.setRandom()
3735808f684SSatish Balay        A.mult(x, y)
3745808f684SSatish Balay        x.copy(yt)
3755808f684SSatish Balay        AT.multTranspose(yt, xt)
3765808f684SSatish Balay        self.assertTrue(xt.equal(y))
3775808f684SSatish Balay
3785808f684SSatish Balay    def _get_aijv(self):
379*6f336411SStefano Zampini        return (
380*6f336411SStefano Zampini            self.rows,
381*6f336411SStefano Zampini            self.xadj,
382*6f336411SStefano Zampini            self.adjy,
383*6f336411SStefano Zampini            self.vals,
384*6f336411SStefano Zampini        )
3855808f684SSatish Balay
3865808f684SSatish Balay    def _preallocate(self):
3875808f684SSatish Balay        self.A.setPreallocationNNZ([5, 2])
3885808f684SSatish Balay
3895808f684SSatish Balay    def _set_values(self):
3905808f684SSatish Balay        import sys
391*6f336411SStefano Zampini
3925808f684SSatish Balay        if hasattr(sys, 'gettotalrefcount'):
3935808f684SSatish Balay            return self._set_values_ijv()
3945808f684SSatish Balay        # XXX Why the code below leak refs as a beast ???
3955808f684SSatish Balay        row, ai, aj, av = self._get_aijv()
3965808f684SSatish Balay        if not self.BSIZE:
3975808f684SSatish Balay            setvalues = self.A.setValues
3985808f684SSatish Balay        else:
3995808f684SSatish Balay            setvalues = self.A.setValuesBlocked
4005808f684SSatish Balay        for i, r in enumerate(row):
4015808f684SSatish Balay            s, e = ai[i], ai[i + 1]
4025808f684SSatish Balay            setvalues(r, aj[s:e], av[s:e])
4035808f684SSatish Balay        return ai, aj, av
4045808f684SSatish Balay
4055808f684SSatish Balay    def _set_values_ijv(self):
4065808f684SSatish Balay        row, ai, aj, av = self._get_aijv()
4075808f684SSatish Balay        if not self.BSIZE:
4085808f684SSatish Balay            setvalues = self.A.setValuesIJV
4095808f684SSatish Balay        else:
4105808f684SSatish Balay            setvalues = self.A.setValuesBlockedIJV
4115808f684SSatish Balay        setvalues(ai, aj, av, rowmap=row)
4125808f684SSatish Balay        setvalues(ai, aj, av, rowmap=None)
4135808f684SSatish Balay        return ai, aj, av
4145808f684SSatish Balay
4155808f684SSatish Balay    def _chk_bs(self, A, bs):
4165808f684SSatish Balay        self.assertEqual(A.getBlockSize(), bs or 1)
4175808f684SSatish Balay
4185808f684SSatish Balay    def _chk_bsizes(self, A, bsizes):
4195808f684SSatish Balay        try:
4205808f684SSatish Balay            rbs, cbs = bsizes
4215808f684SSatish Balay        except (TypeError, ValueError):
4225808f684SSatish Balay            rbs = cbs = bsizes
4235808f684SSatish Balay        self.assertEqual(A.getBlockSizes(), (rbs, cbs))
4245808f684SSatish Balay
4255808f684SSatish Balay    def _chk_aij(self, A, i, j):
4265808f684SSatish Balay        compressed = bool(self.BSIZE)
4275808f684SSatish Balay        ai, aj = A.getRowIJ(compressed=compressed)
4285808f684SSatish Balay        if ai is not None and aj is not None:
4295808f684SSatish Balay            self.assertTrue(N.all(i == ai))
4305808f684SSatish Balay            self.assertTrue(N.all(j == aj))
4315808f684SSatish Balay        ai, aj = A.getColumnIJ(compressed=compressed)
4325808f684SSatish Balay        if ai is not None and aj is not None:
4335808f684SSatish Balay            self.assertTrue(N.all(i == ai))
4345808f684SSatish Balay            self.assertTrue(N.all(j == aj))
4355808f684SSatish Balay
436*6f336411SStefano Zampini
4375808f684SSatish Balay# -- AIJ ---------------------
4385808f684SSatish Balay
439*6f336411SStefano Zampini
4405808f684SSatish Balayclass BaseTestMatAIJ(BaseTestMatAnyAIJ, unittest.TestCase):
4415808f684SSatish Balay    COMM = PETSc.COMM_WORLD
4425808f684SSatish Balay    TYPE = PETSc.Mat.Type.AIJ
4435808f684SSatish Balay    GRID = 0, 0
4445808f684SSatish Balay    BSIZE = None
4455808f684SSatish Balay
446*6f336411SStefano Zampini
4475808f684SSatish Balay# -- Seq AIJ --
4485808f684SSatish Balay
449*6f336411SStefano Zampini
4505808f684SSatish Balayclass TestMatSeqAIJ(BaseTestMatAIJ):
4515808f684SSatish Balay    COMM = PETSc.COMM_SELF
4525808f684SSatish Balay    TYPE = PETSc.Mat.Type.SEQAIJ
453*6f336411SStefano Zampini
454*6f336411SStefano Zampini
4555808f684SSatish Balayclass TestMatSeqAIJ_G23(TestMatSeqAIJ):
4565808f684SSatish Balay    GRID = 2, 3
457*6f336411SStefano Zampini
458*6f336411SStefano Zampini
4595808f684SSatish Balayclass TestMatSeqAIJ_G45(TestMatSeqAIJ):
4605808f684SSatish Balay    GRID = 4, 5
461*6f336411SStefano Zampini
462*6f336411SStefano Zampini
4635808f684SSatish Balayclass TestMatSeqAIJ_G89(TestMatSeqAIJ):
4645808f684SSatish Balay    GRID = 8, 9
4655808f684SSatish Balay
466*6f336411SStefano Zampini
4675808f684SSatish Balay# -- MPI AIJ --
4685808f684SSatish Balay
469*6f336411SStefano Zampini
4705808f684SSatish Balayclass TestMatMPIAIJ(BaseTestMatAIJ):
4715808f684SSatish Balay    COMM = PETSc.COMM_WORLD
4725808f684SSatish Balay    TYPE = PETSc.Mat.Type.MPIAIJ
473*6f336411SStefano Zampini
474*6f336411SStefano Zampini
4755808f684SSatish Balayclass TestMatMPIAIJ_G23(TestMatMPIAIJ):
4765808f684SSatish Balay    GRID = 2, 3
477*6f336411SStefano Zampini
478*6f336411SStefano Zampini
4795808f684SSatish Balayclass TestMatMPIAIJ_G45(TestMatMPIAIJ):
4805808f684SSatish Balay    GRID = 4, 5
481*6f336411SStefano Zampini
482*6f336411SStefano Zampini
4835808f684SSatish Balayclass TestMatMPIAIJ_G89(TestMatMPIAIJ):
4845808f684SSatish Balay    GRID = 8, 9
4855808f684SSatish Balay
4865808f684SSatish Balay
4875808f684SSatish Balay# -- Block AIJ ---------------
4885808f684SSatish Balay
489*6f336411SStefano Zampini
4905808f684SSatish Balayclass BaseTestMatBAIJ(BaseTestMatAnyAIJ, unittest.TestCase):
4915808f684SSatish Balay    COMM = PETSc.COMM_WORLD
4925808f684SSatish Balay    TYPE = PETSc.Mat.Type.BAIJ
4935808f684SSatish Balay    GRID = 0, 0
4945808f684SSatish Balay    BSIZE = 1
4955808f684SSatish Balay
496*6f336411SStefano Zampini
4975808f684SSatish Balay# -- Seq Block AIJ --
4985808f684SSatish Balay
499*6f336411SStefano Zampini
5005808f684SSatish Balayclass TestMatSeqBAIJ(BaseTestMatBAIJ):
5015808f684SSatish Balay    COMM = PETSc.COMM_SELF
5025808f684SSatish Balay    TYPE = PETSc.Mat.Type.SEQBAIJ
503*6f336411SStefano Zampini
504*6f336411SStefano Zampini
5055808f684SSatish Balay# bs = 1
5065808f684SSatish Balayclass TestMatSeqBAIJ_G23(TestMatSeqBAIJ):
5075808f684SSatish Balay    GRID = 2, 3
508*6f336411SStefano Zampini
509*6f336411SStefano Zampini
5105808f684SSatish Balayclass TestMatSeqBAIJ_G45(TestMatSeqBAIJ):
5115808f684SSatish Balay    GRID = 4, 5
512*6f336411SStefano Zampini
513*6f336411SStefano Zampini
5145808f684SSatish Balayclass TestMatSeqBAIJ_G89(TestMatSeqBAIJ):
5155808f684SSatish Balay    GRID = 8, 9
516*6f336411SStefano Zampini
517*6f336411SStefano Zampini
5185808f684SSatish Balay# bs = 2
5195808f684SSatish Balayclass TestMatSeqBAIJ_G23_B2(TestMatSeqBAIJ_G23):
5205808f684SSatish Balay    BSIZE = 2
521*6f336411SStefano Zampini
522*6f336411SStefano Zampini
5235808f684SSatish Balayclass TestMatSeqBAIJ_G45_B2(TestMatSeqBAIJ_G45):
5245808f684SSatish Balay    BSIZE = 2
525*6f336411SStefano Zampini
526*6f336411SStefano Zampini
5275808f684SSatish Balayclass TestMatSeqBAIJ_G89_B2(TestMatSeqBAIJ_G89):
5285808f684SSatish Balay    BSIZE = 2
529*6f336411SStefano Zampini
530*6f336411SStefano Zampini
5315808f684SSatish Balay# bs = 3
5325808f684SSatish Balayclass TestMatSeqBAIJ_G23_B3(TestMatSeqBAIJ_G23):
5335808f684SSatish Balay    BSIZE = 3
534*6f336411SStefano Zampini
535*6f336411SStefano Zampini
5365808f684SSatish Balayclass TestMatSeqBAIJ_G45_B3(TestMatSeqBAIJ_G45):
5375808f684SSatish Balay    BSIZE = 3
538*6f336411SStefano Zampini
539*6f336411SStefano Zampini
5405808f684SSatish Balayclass TestMatSeqBAIJ_G89_B3(TestMatSeqBAIJ_G89):
5415808f684SSatish Balay    BSIZE = 3
542*6f336411SStefano Zampini
543*6f336411SStefano Zampini
5445808f684SSatish Balay# bs = 4
5455808f684SSatish Balayclass TestMatSeqBAIJ_G23_B4(TestMatSeqBAIJ_G23):
5465808f684SSatish Balay    BSIZE = 4
547*6f336411SStefano Zampini
548*6f336411SStefano Zampini
5495808f684SSatish Balayclass TestMatSeqBAIJ_G45_B4(TestMatSeqBAIJ_G45):
5505808f684SSatish Balay    BSIZE = 4
551*6f336411SStefano Zampini
552*6f336411SStefano Zampini
5535808f684SSatish Balayclass TestMatSeqBAIJ_G89_B4(TestMatSeqBAIJ_G89):
5545808f684SSatish Balay    BSIZE = 4
555*6f336411SStefano Zampini
556*6f336411SStefano Zampini
5575808f684SSatish Balay# bs = 5
5585808f684SSatish Balayclass TestMatSeqBAIJ_G23_B5(TestMatSeqBAIJ_G23):
5595808f684SSatish Balay    BSIZE = 5
560*6f336411SStefano Zampini
561*6f336411SStefano Zampini
5625808f684SSatish Balayclass TestMatSeqBAIJ_G45_B5(TestMatSeqBAIJ_G45):
5635808f684SSatish Balay    BSIZE = 5
564*6f336411SStefano Zampini
565*6f336411SStefano Zampini
5665808f684SSatish Balayclass TestMatSeqBAIJ_G89_B5(TestMatSeqBAIJ_G89):
5675808f684SSatish Balay    BSIZE = 5
5685808f684SSatish Balay
5695808f684SSatish Balay
5705808f684SSatish Balay# -- MPI Block AIJ --
5715808f684SSatish Balay
572*6f336411SStefano Zampini
5735808f684SSatish Balayclass TestMatMPIBAIJ(BaseTestMatBAIJ):
5745808f684SSatish Balay    COMM = PETSc.COMM_WORLD
5755808f684SSatish Balay    TYPE = PETSc.Mat.Type.MPIBAIJ
576*6f336411SStefano Zampini
577*6f336411SStefano Zampini
5785808f684SSatish Balay# bs = 1
5795808f684SSatish Balayclass TestMatMPIBAIJ_G23(TestMatMPIBAIJ):
5805808f684SSatish Balay    GRID = 2, 3
581*6f336411SStefano Zampini
582*6f336411SStefano Zampini
5835808f684SSatish Balayclass TestMatMPIBAIJ_G45(TestMatMPIBAIJ):
5845808f684SSatish Balay    GRID = 4, 5
585*6f336411SStefano Zampini
586*6f336411SStefano Zampini
5875808f684SSatish Balayclass TestMatMPIBAIJ_G89(TestMatMPIBAIJ):
5885808f684SSatish Balay    GRID = 8, 9
589*6f336411SStefano Zampini
590*6f336411SStefano Zampini
5915808f684SSatish Balay# bs = 2
5925808f684SSatish Balayclass TestMatMPIBAIJ_G23_B2(TestMatMPIBAIJ_G23):
5935808f684SSatish Balay    BSIZE = 2
594*6f336411SStefano Zampini
595*6f336411SStefano Zampini
5965808f684SSatish Balayclass TestMatMPIBAIJ_G45_B2(TestMatMPIBAIJ_G45):
5975808f684SSatish Balay    BSIZE = 2
598*6f336411SStefano Zampini
599*6f336411SStefano Zampini
6005808f684SSatish Balayclass TestMatMPIBAIJ_G89_B2(TestMatMPIBAIJ_G89):
6015808f684SSatish Balay    BSIZE = 2
602*6f336411SStefano Zampini
603*6f336411SStefano Zampini
6045808f684SSatish Balay# bs = 3
6055808f684SSatish Balayclass TestMatMPIBAIJ_G23_B3(TestMatMPIBAIJ_G23):
6065808f684SSatish Balay    BSIZE = 3
607*6f336411SStefano Zampini
608*6f336411SStefano Zampini
6095808f684SSatish Balayclass TestMatMPIBAIJ_G45_B3(TestMatMPIBAIJ_G45):
6105808f684SSatish Balay    BSIZE = 3
611*6f336411SStefano Zampini
612*6f336411SStefano Zampini
6135808f684SSatish Balayclass TestMatMPIBAIJ_G89_B3(TestMatMPIBAIJ_G89):
6145808f684SSatish Balay    BSIZE = 3
615*6f336411SStefano Zampini
616*6f336411SStefano Zampini
6175808f684SSatish Balay# bs = 4
6185808f684SSatish Balayclass TestMatMPIBAIJ_G23_B4(TestMatMPIBAIJ_G23):
6195808f684SSatish Balay    BSIZE = 4
620*6f336411SStefano Zampini
621*6f336411SStefano Zampini
6225808f684SSatish Balayclass TestMatMPIBAIJ_G45_B4(TestMatMPIBAIJ_G45):
6235808f684SSatish Balay    BSIZE = 4
624*6f336411SStefano Zampini
625*6f336411SStefano Zampini
6265808f684SSatish Balayclass TestMatMPIBAIJ_G89_B4(TestMatMPIBAIJ_G89):
6275808f684SSatish Balay    BSIZE = 4
628*6f336411SStefano Zampini
629*6f336411SStefano Zampini
6305808f684SSatish Balay# bs = 5
6315808f684SSatish Balayclass TestMatMPIBAIJ_G23_B5(TestMatMPIBAIJ_G23):
6325808f684SSatish Balay    BSIZE = 5
633*6f336411SStefano Zampini
634*6f336411SStefano Zampini
6355808f684SSatish Balayclass TestMatMPIBAIJ_G45_B5(TestMatMPIBAIJ_G45):
6365808f684SSatish Balay    BSIZE = 5
637*6f336411SStefano Zampini
638*6f336411SStefano Zampini
6395808f684SSatish Balayclass TestMatMPIBAIJ_G89_B5(TestMatMPIBAIJ_G89):
6405808f684SSatish Balay    BSIZE = 5
6415808f684SSatish Balay
642*6f336411SStefano Zampini
6435808f684SSatish Balay# -- SymmBlock AIJ ---------------
6445808f684SSatish Balay
645*6f336411SStefano Zampini
6465808f684SSatish Balayclass BaseTestMatSBAIJ(BaseTestMatAnyAIJ, unittest.TestCase):
6475808f684SSatish Balay    COMM = PETSc.COMM_WORLD
6485808f684SSatish Balay    TYPE = PETSc.Mat.Type.SBAIJ
6495808f684SSatish Balay    GRID = 0, 0
6505808f684SSatish Balay    BSIZE = 1
651*6f336411SStefano Zampini
652*6f336411SStefano Zampini    def testInvertBlockDiagonal(self):
653*6f336411SStefano Zampini        pass
654*6f336411SStefano Zampini
6555808f684SSatish Balay    def _chk_aij(self, A, i, j):
6565808f684SSatish Balay        ai, aj = A.getRowIJ(compressed=True)
6575808f684SSatish Balay        if ai is not None and aj is not None:
6585808f684SSatish Balay            if 0:  # XXX Implement
6595808f684SSatish Balay                self.assertTrue(N.all(i == ai))
6605808f684SSatish Balay                self.assertTrue(N.all(j == aj))
6615808f684SSatish Balay        ai, aj = A.getColumnIJ(compressed=True)
6625808f684SSatish Balay        if ai is not None and aj is not None:
6635808f684SSatish Balay            if 0:  # XXX Implement
6645808f684SSatish Balay                self.assertTrue(N.all(i == ai))
6655808f684SSatish Balay                self.assertTrue(N.all(j == aj))
6665808f684SSatish Balay
667*6f336411SStefano Zampini
6685808f684SSatish Balay# -- Seq SymmBlock AIJ --
6695808f684SSatish Balay
670*6f336411SStefano Zampini
6715808f684SSatish Balayclass TestMatSeqSBAIJ(BaseTestMatSBAIJ):
6725808f684SSatish Balay    COMM = PETSc.COMM_SELF
6735808f684SSatish Balay    TYPE = PETSc.Mat.Type.SEQSBAIJ
674*6f336411SStefano Zampini
675*6f336411SStefano Zampini
6765808f684SSatish Balay# bs = 1
6775808f684SSatish Balayclass TestMatSeqSBAIJ_G23(TestMatSeqSBAIJ):
6785808f684SSatish Balay    GRID = 2, 3
679*6f336411SStefano Zampini
680*6f336411SStefano Zampini
6815808f684SSatish Balayclass TestMatSeqSBAIJ_G45(TestMatSeqSBAIJ):
6825808f684SSatish Balay    GRID = 4, 5
683*6f336411SStefano Zampini
684*6f336411SStefano Zampini
6855808f684SSatish Balayclass TestMatSeqSBAIJ_G89(TestMatSeqSBAIJ):
6865808f684SSatish Balay    GRID = 8, 9
687*6f336411SStefano Zampini
688*6f336411SStefano Zampini
6895808f684SSatish Balay# bs = 2
6905808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B2(TestMatSeqSBAIJ_G23):
6915808f684SSatish Balay    BSIZE = 2
692*6f336411SStefano Zampini
693*6f336411SStefano Zampini
6945808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B2(TestMatSeqSBAIJ_G45):
6955808f684SSatish Balay    BSIZE = 2
696*6f336411SStefano Zampini
697*6f336411SStefano Zampini
6985808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B2(TestMatSeqSBAIJ_G89):
6995808f684SSatish Balay    BSIZE = 2
700*6f336411SStefano Zampini
701*6f336411SStefano Zampini
7025808f684SSatish Balay# bs = 3
7035808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B3(TestMatSeqSBAIJ_G23):
7045808f684SSatish Balay    BSIZE = 3
705*6f336411SStefano Zampini
706*6f336411SStefano Zampini
7075808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B3(TestMatSeqSBAIJ_G45):
7085808f684SSatish Balay    BSIZE = 3
709*6f336411SStefano Zampini
710*6f336411SStefano Zampini
7115808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B3(TestMatSeqSBAIJ_G89):
7125808f684SSatish Balay    BSIZE = 3
713*6f336411SStefano Zampini
714*6f336411SStefano Zampini
7155808f684SSatish Balay# bs = 4
7165808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B4(TestMatSeqSBAIJ_G23):
7175808f684SSatish Balay    BSIZE = 4
718*6f336411SStefano Zampini
719*6f336411SStefano Zampini
7205808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B4(TestMatSeqSBAIJ_G45):
7215808f684SSatish Balay    BSIZE = 4
722*6f336411SStefano Zampini
723*6f336411SStefano Zampini
7245808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B4(TestMatSeqSBAIJ_G89):
7255808f684SSatish Balay    BSIZE = 4
726*6f336411SStefano Zampini
727*6f336411SStefano Zampini
7285808f684SSatish Balay# bs = 5
7295808f684SSatish Balayclass TestMatSeqSBAIJ_G23_B5(TestMatSeqSBAIJ_G23):
7305808f684SSatish Balay    BSIZE = 5
731*6f336411SStefano Zampini
732*6f336411SStefano Zampini
7335808f684SSatish Balayclass TestMatSeqSBAIJ_G45_B5(TestMatSeqSBAIJ_G45):
7345808f684SSatish Balay    BSIZE = 5
735*6f336411SStefano Zampini
736*6f336411SStefano Zampini
7375808f684SSatish Balayclass TestMatSeqSBAIJ_G89_B5(TestMatSeqSBAIJ_G89):
7385808f684SSatish Balay    BSIZE = 5
7395808f684SSatish Balay
7405808f684SSatish Balay
7415808f684SSatish Balay# -- MPI SymmBlock AIJ --
7425808f684SSatish Balay
743*6f336411SStefano Zampini
7445808f684SSatish Balayclass TestMatMPISBAIJ(BaseTestMatSBAIJ):
7455808f684SSatish Balay    COMM = PETSc.COMM_WORLD
7465808f684SSatish Balay    TYPE = PETSc.Mat.Type.MPISBAIJ
747*6f336411SStefano Zampini
748*6f336411SStefano Zampini
7495808f684SSatish Balay# bs = 1
7505808f684SSatish Balayclass TestMatMPISBAIJ_G23(TestMatMPISBAIJ):
7515808f684SSatish Balay    GRID = 2, 3
752*6f336411SStefano Zampini
753*6f336411SStefano Zampini
7545808f684SSatish Balayclass TestMatMPISBAIJ_G45(TestMatMPISBAIJ):
7555808f684SSatish Balay    GRID = 4, 5
756*6f336411SStefano Zampini
757*6f336411SStefano Zampini
7585808f684SSatish Balayclass TestMatMPISBAIJ_G89(TestMatMPISBAIJ):
7595808f684SSatish Balay    GRID = 8, 9
760*6f336411SStefano Zampini
761*6f336411SStefano Zampini
7625808f684SSatish Balay# bs = 2
7635808f684SSatish Balayclass TestMatMPISBAIJ_G23_B2(TestMatMPISBAIJ_G23):
7645808f684SSatish Balay    BSIZE = 2
765*6f336411SStefano Zampini
766*6f336411SStefano Zampini
7675808f684SSatish Balayclass TestMatMPISBAIJ_G45_B2(TestMatMPISBAIJ_G45):
7685808f684SSatish Balay    BSIZE = 2
769*6f336411SStefano Zampini
770*6f336411SStefano Zampini
7715808f684SSatish Balayclass TestMatMPISBAIJ_G89_B2(TestMatMPISBAIJ_G89):
7725808f684SSatish Balay    BSIZE = 2
773*6f336411SStefano Zampini
774*6f336411SStefano Zampini
7755808f684SSatish Balay# bs = 3
7765808f684SSatish Balayclass TestMatMPISBAIJ_G23_B3(TestMatMPISBAIJ_G23):
7775808f684SSatish Balay    BSIZE = 3
778*6f336411SStefano Zampini
779*6f336411SStefano Zampini
7805808f684SSatish Balayclass TestMatMPISBAIJ_G45_B3(TestMatMPISBAIJ_G45):
7815808f684SSatish Balay    BSIZE = 3
782*6f336411SStefano Zampini
783*6f336411SStefano Zampini
7845808f684SSatish Balayclass TestMatMPISBAIJ_G89_B3(TestMatMPISBAIJ_G89):
7855808f684SSatish Balay    BSIZE = 3
786*6f336411SStefano Zampini
787*6f336411SStefano Zampini
7885808f684SSatish Balay# bs = 4
7895808f684SSatish Balayclass TestMatMPISBAIJ_G23_B4(TestMatMPISBAIJ_G23):
7905808f684SSatish Balay    BSIZE = 4
791*6f336411SStefano Zampini
792*6f336411SStefano Zampini
7935808f684SSatish Balayclass TestMatMPISBAIJ_G45_B4(TestMatMPISBAIJ_G45):
7945808f684SSatish Balay    BSIZE = 4
795*6f336411SStefano Zampini
796*6f336411SStefano Zampini
7975808f684SSatish Balayclass TestMatMPISBAIJ_G89_B4(TestMatMPISBAIJ_G89):
7985808f684SSatish Balay    BSIZE = 4
799*6f336411SStefano Zampini
800*6f336411SStefano Zampini
8015808f684SSatish Balay# bs = 5
8025808f684SSatish Balayclass TestMatMPISBAIJ_G23_B5(TestMatMPISBAIJ_G23):
8035808f684SSatish Balay    BSIZE = 5
804*6f336411SStefano Zampini
805*6f336411SStefano Zampini
8065808f684SSatish Balayclass TestMatMPISBAIJ_G45_B5(TestMatMPISBAIJ_G45):
8075808f684SSatish Balay    BSIZE = 5
808*6f336411SStefano Zampini
809*6f336411SStefano Zampini
8105808f684SSatish Balayclass TestMatMPISBAIJ_G89_B5(TestMatMPISBAIJ_G89):
8115808f684SSatish Balay    BSIZE = 5
8125808f684SSatish Balay
813*6f336411SStefano Zampini
8145808f684SSatish Balay# -- AIJ + Block ---------------
8155808f684SSatish Balay
816*6f336411SStefano Zampini
8175808f684SSatish Balayclass BaseTestMatAIJ_B(BaseTestMatAnyAIJ, unittest.TestCase):
8185808f684SSatish Balay    COMM = PETSc.COMM_WORLD
8195808f684SSatish Balay    TYPE = PETSc.Mat.Type.AIJ
8205808f684SSatish Balay    GRID = 0, 0
8215808f684SSatish Balay    BSIZE = 1
8225808f684SSatish Balay
823*6f336411SStefano Zampini    def testSetPreallocNNZ(self):
824*6f336411SStefano Zampini        pass
825*6f336411SStefano Zampini
826*6f336411SStefano Zampini    def testSetPreallocNNZ_2(self):
827*6f336411SStefano Zampini        pass
828*6f336411SStefano Zampini
829*6f336411SStefano Zampini    def testSetPreallocCSR(self):
830*6f336411SStefano Zampini        pass
831*6f336411SStefano Zampini
832*6f336411SStefano Zampini    def testSetPreallocCSR_2(self):
833*6f336411SStefano Zampini        pass
834*6f336411SStefano Zampini
8355808f684SSatish Balay    def testSetValues(self):
8365808f684SSatish Balay        self._preallocate()
8375808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
8385808f684SSatish Balay        self.A.setOption(opt, True)
8395808f684SSatish Balay        ai, aj, av = self._set_values()
8405808f684SSatish Balay        self.A.assemble()
8415808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
8425808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
8435808f684SSatish Balay        self.A.setOption(opt, True)
8445808f684SSatish Balay        ai, aj, av = self._set_values()
8455808f684SSatish Balay        self.A.assemble()
8465808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
847*6f336411SStefano Zampini
8485808f684SSatish Balay    def testSetValuesIJV(self):
8495808f684SSatish Balay        self._preallocate()
8505808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
8515808f684SSatish Balay        self.A.setOption(opt, True)
8525808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
8535808f684SSatish Balay        self.A.assemble()
8545808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
8555808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
8565808f684SSatish Balay        self.A.setOption(opt, True)
8575808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
8585808f684SSatish Balay        self.A.assemble()
8595808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
860*6f336411SStefano Zampini
8615808f684SSatish Balay    def _preallocate(self):
8625808f684SSatish Balay        self.A.setPreallocationNNZ([5 * self.BSIZE, 3 * self.BSIZE])
8635808f684SSatish Balay        self._chk_bs(self.A, self.BSIZE)
864*6f336411SStefano Zampini
8655808f684SSatish Balay    def _chk_aij(self, A, i, j):
8665808f684SSatish Balay        ai, aj = A.getRowIJ()
8675808f684SSatish Balay        if ai is not None and aj is not None:  ## XXX map and check !!
8685808f684SSatish Balay            # self.assertTrue(N.all(i==ai))
8695808f684SSatish Balay            # self.assertTrue(N.all(j==aj))
8705808f684SSatish Balay            pass
8715808f684SSatish Balay        ai, aj = A.getColumnIJ(compressed=bool(self.BSIZE))
8725808f684SSatish Balay        if ai is not None and aj is not None:  ## XXX map and check !!
8735808f684SSatish Balay            # self.assertTrue(N.all(i==ai))
8745808f684SSatish Balay            # self.assertTrue(N.all(j==aj))
8755808f684SSatish Balay            pass
8765808f684SSatish Balay
877*6f336411SStefano Zampini
8785808f684SSatish Balay# -- Seq AIJ + Block --
8795808f684SSatish Balay
880*6f336411SStefano Zampini
8815808f684SSatish Balayclass TestMatSeqAIJ_B(BaseTestMatAIJ_B):
8825808f684SSatish Balay    COMM = PETSc.COMM_SELF
8835808f684SSatish Balay    TYPE = PETSc.Mat.Type.SEQAIJ
884*6f336411SStefano Zampini
885*6f336411SStefano Zampini
8865808f684SSatish Balay# bs = 1
8875808f684SSatish Balayclass TestMatSeqAIJ_B_G23(TestMatSeqAIJ_B):
8885808f684SSatish Balay    GRID = 2, 3
889*6f336411SStefano Zampini
890*6f336411SStefano Zampini
8915808f684SSatish Balayclass TestMatSeqAIJ_B_G45(TestMatSeqAIJ_B):
8925808f684SSatish Balay    GRID = 4, 5
893*6f336411SStefano Zampini
894*6f336411SStefano Zampini
8955808f684SSatish Balayclass TestMatSeqAIJ_B_G89(TestMatSeqAIJ_B):
8965808f684SSatish Balay    GRID = 8, 9
897*6f336411SStefano Zampini
898*6f336411SStefano Zampini
8995808f684SSatish Balay# bs = 2
9005808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B2(TestMatSeqAIJ_B_G23):
9015808f684SSatish Balay    BSIZE = 2
902*6f336411SStefano Zampini
903*6f336411SStefano Zampini
9045808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B2(TestMatSeqAIJ_B_G45):
9055808f684SSatish Balay    BSIZE = 2
906*6f336411SStefano Zampini
907*6f336411SStefano Zampini
9085808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B2(TestMatSeqAIJ_B_G89):
9095808f684SSatish Balay    BSIZE = 2
910*6f336411SStefano Zampini
911*6f336411SStefano Zampini
9125808f684SSatish Balay# bs = 3
9135808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B3(TestMatSeqAIJ_B_G23):
9145808f684SSatish Balay    BSIZE = 3
915*6f336411SStefano Zampini
916*6f336411SStefano Zampini
9175808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B3(TestMatSeqAIJ_B_G45):
9185808f684SSatish Balay    BSIZE = 3
919*6f336411SStefano Zampini
920*6f336411SStefano Zampini
9215808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B3(TestMatSeqAIJ_B_G89):
9225808f684SSatish Balay    BSIZE = 3
923*6f336411SStefano Zampini
924*6f336411SStefano Zampini
9255808f684SSatish Balay# bs = 4
9265808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B4(TestMatSeqAIJ_B_G23):
9275808f684SSatish Balay    BSIZE = 4
928*6f336411SStefano Zampini
929*6f336411SStefano Zampini
9305808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B4(TestMatSeqAIJ_B_G45):
9315808f684SSatish Balay    BSIZE = 4
932*6f336411SStefano Zampini
933*6f336411SStefano Zampini
9345808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B4(TestMatSeqAIJ_B_G89):
9355808f684SSatish Balay    BSIZE = 4
936*6f336411SStefano Zampini
937*6f336411SStefano Zampini
9385808f684SSatish Balay# bs = 5
9395808f684SSatish Balayclass TestMatSeqAIJ_B_G23_B5(TestMatSeqAIJ_B_G23):
9405808f684SSatish Balay    BSIZE = 5
941*6f336411SStefano Zampini
942*6f336411SStefano Zampini
9435808f684SSatish Balayclass TestMatSeqAIJ_B_G45_B5(TestMatSeqAIJ_B_G45):
9445808f684SSatish Balay    BSIZE = 5
945*6f336411SStefano Zampini
946*6f336411SStefano Zampini
9475808f684SSatish Balayclass TestMatSeqAIJ_B_G89_B5(TestMatSeqAIJ_B_G89):
9485808f684SSatish Balay    BSIZE = 5
9495808f684SSatish Balay
9505808f684SSatish Balay
9515808f684SSatish Balay# -- MPI AIJ + Block --
9525808f684SSatish Balay
953*6f336411SStefano Zampini
9545808f684SSatish Balayclass TestMatMPIAIJ_B(BaseTestMatAIJ_B):
9555808f684SSatish Balay    COMM = PETSc.COMM_WORLD
9565808f684SSatish Balay    TYPE = PETSc.Mat.Type.MPIAIJ
957*6f336411SStefano Zampini
958*6f336411SStefano Zampini
9595808f684SSatish Balay# bs = 1
9605808f684SSatish Balayclass TestMatMPIAIJ_B_G23(TestMatMPIAIJ_B):
9615808f684SSatish Balay    GRID = 2, 3
962*6f336411SStefano Zampini
963*6f336411SStefano Zampini
9645808f684SSatish Balayclass TestMatMPIAIJ_B_G45(TestMatMPIAIJ_B):
9655808f684SSatish Balay    GRID = 4, 5
966*6f336411SStefano Zampini
967*6f336411SStefano Zampini
9685808f684SSatish Balayclass TestMatMPIAIJ_B_G89(TestMatMPIAIJ_B):
9695808f684SSatish Balay    GRID = 8, 9
970*6f336411SStefano Zampini
971*6f336411SStefano Zampini
9725808f684SSatish Balay# bs = 2
9735808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B2(TestMatMPIAIJ_B_G23):
9745808f684SSatish Balay    BSIZE = 2
975*6f336411SStefano Zampini
976*6f336411SStefano Zampini
9775808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B2(TestMatMPIAIJ_B_G45):
9785808f684SSatish Balay    BSIZE = 2
979*6f336411SStefano Zampini
980*6f336411SStefano Zampini
9815808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B2(TestMatMPIAIJ_B_G89):
9825808f684SSatish Balay    BSIZE = 2
983*6f336411SStefano Zampini
984*6f336411SStefano Zampini
9855808f684SSatish Balay# bs = 3
9865808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B3(TestMatMPIAIJ_B_G23):
9875808f684SSatish Balay    BSIZE = 3
988*6f336411SStefano Zampini
989*6f336411SStefano Zampini
9905808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B3(TestMatMPIAIJ_B_G45):
9915808f684SSatish Balay    BSIZE = 3
992*6f336411SStefano Zampini
993*6f336411SStefano Zampini
9945808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B3(TestMatMPIAIJ_B_G89):
9955808f684SSatish Balay    BSIZE = 3
996*6f336411SStefano Zampini
997*6f336411SStefano Zampini
9985808f684SSatish Balay# bs = 4
9995808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B4(TestMatMPIAIJ_B_G23):
10005808f684SSatish Balay    BSIZE = 4
1001*6f336411SStefano Zampini
1002*6f336411SStefano Zampini
10035808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B4(TestMatMPIAIJ_B_G45):
10045808f684SSatish Balay    BSIZE = 4
1005*6f336411SStefano Zampini
1006*6f336411SStefano Zampini
10075808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B4(TestMatMPIAIJ_B_G89):
10085808f684SSatish Balay    BSIZE = 4
1009*6f336411SStefano Zampini
1010*6f336411SStefano Zampini
10115808f684SSatish Balay# bs = 5
10125808f684SSatish Balayclass TestMatMPIAIJ_B_G23_B5(TestMatMPIAIJ_B_G23):
10135808f684SSatish Balay    BSIZE = 5
1014*6f336411SStefano Zampini
1015*6f336411SStefano Zampini
10165808f684SSatish Balayclass TestMatMPIAIJ_B_G45_B5(TestMatMPIAIJ_B_G45):
10175808f684SSatish Balay    BSIZE = 5
1018*6f336411SStefano Zampini
1019*6f336411SStefano Zampini
10205808f684SSatish Balayclass TestMatMPIAIJ_B_G89_B5(TestMatMPIAIJ_B_G89):
10215808f684SSatish Balay    BSIZE = 5
10225808f684SSatish Balay
1023*6f336411SStefano Zampini
10245808f684SSatish Balay# -- Non-square blocks --
10255808f684SSatish Balayclass BaseTestMatAIJ_B(BaseTestMatAnyAIJ, unittest.TestCase):
10265808f684SSatish Balay    COMM = PETSc.COMM_WORLD
10275808f684SSatish Balay    TYPE = PETSc.Mat.Type.AIJ
10285808f684SSatish Balay    GRID = 0, 0
10295808f684SSatish Balay    BSIZE = 4, 2
10305808f684SSatish Balay
10315808f684SSatish Balay    def _preallocate(self):
10325808f684SSatish Balay        try:
10335808f684SSatish Balay            rbs, cbs = self.BSIZE
10345808f684SSatish Balay        except (TypeError, ValueError):
10355808f684SSatish Balay            rbs = cbs = self.BSIZE
10365808f684SSatish Balay        self.A.setPreallocationNNZ([5 * rbs, 3 * cbs])
10375808f684SSatish Balay        self._chk_bsizes(self.A, self.BSIZE)
1038*6f336411SStefano Zampini
1039*6f336411SStefano Zampini    def testSetPreallocNNZ(self):
1040*6f336411SStefano Zampini        pass
1041*6f336411SStefano Zampini
1042*6f336411SStefano Zampini    def testSetPreallocNNZ_2(self):
1043*6f336411SStefano Zampini        pass
1044*6f336411SStefano Zampini
1045*6f336411SStefano Zampini    def testSetPreallocCSR(self):
1046*6f336411SStefano Zampini        pass
1047*6f336411SStefano Zampini
1048*6f336411SStefano Zampini    def testSetPreallocCSR_2(self):
1049*6f336411SStefano Zampini        pass
1050*6f336411SStefano Zampini
10515808f684SSatish Balay    def testSetValues(self):
10525808f684SSatish Balay        self._preallocate()
10535808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
10545808f684SSatish Balay        self.A.setOption(opt, True)
10555808f684SSatish Balay        ai, aj, av = self._set_values()
10565808f684SSatish Balay        self.A.assemble()
10575808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
10585808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
10595808f684SSatish Balay        self.A.setOption(opt, True)
10605808f684SSatish Balay        ai, aj, av = self._set_values()
10615808f684SSatish Balay        self.A.assemble()
10625808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1063*6f336411SStefano Zampini
10645808f684SSatish Balay    def testSetValuesIJV(self):
10655808f684SSatish Balay        self._preallocate()
10665808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR
10675808f684SSatish Balay        self.A.setOption(opt, True)
10685808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
10695808f684SSatish Balay        self.A.assemble()
10705808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
10715808f684SSatish Balay        opt = PETSc.Mat.Option.NEW_NONZERO_LOCATION_ERR
10725808f684SSatish Balay        self.A.setOption(opt, True)
10735808f684SSatish Balay        ai, aj, av = self._set_values_ijv()
10745808f684SSatish Balay        self.A.assemble()
10755808f684SSatish Balay        self._chk_aij(self.A, ai, aj)
1076*6f336411SStefano Zampini
10775808f684SSatish Balay    def _chk_aij(self, A, i, j):
10785808f684SSatish Balay        ai, aj = A.getRowIJ()
10795808f684SSatish Balay        if ai is not None and aj is not None:  ## XXX map and check !!
10805808f684SSatish Balay            # self.assertTrue(N.all(i==ai))
10815808f684SSatish Balay            # self.assertTrue(N.all(j==aj))
10825808f684SSatish Balay            pass
10835808f684SSatish Balay        ai, aj = A.getColumnIJ()
10845808f684SSatish Balay        if ai is not None and aj is not None:  ## XXX map and check !!
10855808f684SSatish Balay            # self.assertTrue(N.all(i==ai))
10865808f684SSatish Balay            # self.assertTrue(N.all(j==aj))
10875808f684SSatish Balay            pass
10885808f684SSatish Balay
1089*6f336411SStefano Zampini
10905808f684SSatish Balay# -- AIJCRL ---------------------
10915808f684SSatish Balay
1092*6f336411SStefano Zampini
10935808f684SSatish Balayclass BaseTestMatAIJCRL(BaseTestMatAIJ, unittest.TestCase):
10945808f684SSatish Balay    TYPE = PETSc.Mat.Type.AIJCRL
10955808f684SSatish Balay
1096*6f336411SStefano Zampini
10975808f684SSatish Balay# -- Seq AIJCRL --
10985808f684SSatish Balay
1099*6f336411SStefano Zampini
11005808f684SSatish Balayclass TestMatSeqAIJCRL(BaseTestMatAIJCRL):
11015808f684SSatish Balay    COMM = PETSc.COMM_SELF
11025808f684SSatish Balay    TYPE = PETSc.Mat.Type.SEQAIJCRL
1103*6f336411SStefano Zampini
1104*6f336411SStefano Zampini
11055808f684SSatish Balayclass TestMatSeqAIJCRL_G23(TestMatSeqAIJCRL):
11065808f684SSatish Balay    GRID = 2, 3
1107*6f336411SStefano Zampini
1108*6f336411SStefano Zampini
11095808f684SSatish Balayclass TestMatSeqAIJCRL_G45(TestMatSeqAIJCRL):
11105808f684SSatish Balay    GRID = 4, 5
1111*6f336411SStefano Zampini
1112*6f336411SStefano Zampini
11135808f684SSatish Balayclass TestMatSeqAIJCRL_G89(TestMatSeqAIJCRL):
11145808f684SSatish Balay    GRID = 8, 9
11155808f684SSatish Balay
1116*6f336411SStefano Zampini
11175808f684SSatish Balay# -- MPI AIJCRL --
11185808f684SSatish Balay
1119*6f336411SStefano Zampini
11205808f684SSatish Balayclass TestMatMPIAIJCRL(BaseTestMatAIJCRL):
11215808f684SSatish Balay    COMM = PETSc.COMM_WORLD
11225808f684SSatish Balay    TYPE = PETSc.Mat.Type.MPIAIJCRL
1123*6f336411SStefano Zampini
1124*6f336411SStefano Zampini
11255808f684SSatish Balayclass TestMatMPIAIJCRL_G23(TestMatMPIAIJCRL):
11265808f684SSatish Balay    GRID = 2, 3
1127*6f336411SStefano Zampini
1128*6f336411SStefano Zampini
11295808f684SSatish Balayclass TestMatMPIAIJCRL_G45(TestMatMPIAIJCRL):
11305808f684SSatish Balay    GRID = 4, 5
1131*6f336411SStefano Zampini
1132*6f336411SStefano Zampini
11335808f684SSatish Balayclass TestMatMPIAIJCRL_G89(TestMatMPIAIJCRL):
11345808f684SSatish Balay    GRID = 8, 9
11355808f684SSatish Balay
1136*6f336411SStefano Zampini
11375808f684SSatish Balay# -- AIJCRL + Block -------------
11385808f684SSatish Balay
1139*6f336411SStefano Zampini
11405808f684SSatish Balayclass BaseTestMatAIJCRL_B(BaseTestMatAIJ_B, unittest.TestCase):
11415808f684SSatish Balay    TYPE = PETSc.Mat.Type.AIJCRL
11425808f684SSatish Balay
1143*6f336411SStefano Zampini
11445808f684SSatish Balay# -- Seq AIJCRL + Block --
11455808f684SSatish Balay
1146*6f336411SStefano Zampini
11475808f684SSatish Balayclass TestMatSeqAIJCRL_B(BaseTestMatAIJCRL_B):
11485808f684SSatish Balay    COMM = PETSc.COMM_SELF
11495808f684SSatish Balay    TYPE = PETSc.Mat.Type.SEQAIJCRL
1150*6f336411SStefano Zampini
1151*6f336411SStefano Zampini
11525808f684SSatish Balay# bs = 1
11535808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23(TestMatSeqAIJCRL_B):
11545808f684SSatish Balay    GRID = 2, 3
1155*6f336411SStefano Zampini
1156*6f336411SStefano Zampini
11575808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45(TestMatSeqAIJCRL_B):
11585808f684SSatish Balay    GRID = 4, 5
1159*6f336411SStefano Zampini
1160*6f336411SStefano Zampini
11615808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89(TestMatSeqAIJCRL_B):
11625808f684SSatish Balay    GRID = 8, 9
1163*6f336411SStefano Zampini
1164*6f336411SStefano Zampini
11655808f684SSatish Balay# bs = 2
11665808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B2(TestMatSeqAIJCRL_B_G23):
11675808f684SSatish Balay    BSIZE = 2
1168*6f336411SStefano Zampini
1169*6f336411SStefano Zampini
11705808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B2(TestMatSeqAIJCRL_B_G45):
11715808f684SSatish Balay    BSIZE = 2
1172*6f336411SStefano Zampini
1173*6f336411SStefano Zampini
11745808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B2(TestMatSeqAIJCRL_B_G89):
11755808f684SSatish Balay    BSIZE = 2
1176*6f336411SStefano Zampini
1177*6f336411SStefano Zampini
11785808f684SSatish Balay# bs = 3
11795808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B3(TestMatSeqAIJCRL_B_G23):
11805808f684SSatish Balay    BSIZE = 3
1181*6f336411SStefano Zampini
1182*6f336411SStefano Zampini
11835808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B3(TestMatSeqAIJCRL_B_G45):
11845808f684SSatish Balay    BSIZE = 3
1185*6f336411SStefano Zampini
1186*6f336411SStefano Zampini
11875808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B3(TestMatSeqAIJCRL_B_G89):
11885808f684SSatish Balay    BSIZE = 3
1189*6f336411SStefano Zampini
1190*6f336411SStefano Zampini
11915808f684SSatish Balay# bs = 4
11925808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B4(TestMatSeqAIJCRL_B_G23):
11935808f684SSatish Balay    BSIZE = 4
1194*6f336411SStefano Zampini
1195*6f336411SStefano Zampini
11965808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B4(TestMatSeqAIJCRL_B_G45):
11975808f684SSatish Balay    BSIZE = 4
1198*6f336411SStefano Zampini
1199*6f336411SStefano Zampini
12005808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B4(TestMatSeqAIJCRL_B_G89):
12015808f684SSatish Balay    BSIZE = 4
1202*6f336411SStefano Zampini
1203*6f336411SStefano Zampini
12045808f684SSatish Balay# bs = 5
12055808f684SSatish Balayclass TestMatSeqAIJCRL_B_G23_B5(TestMatSeqAIJCRL_B_G23):
12065808f684SSatish Balay    BSIZE = 5
1207*6f336411SStefano Zampini
1208*6f336411SStefano Zampini
12095808f684SSatish Balayclass TestMatSeqAIJCRL_B_G45_B5(TestMatSeqAIJCRL_B_G45):
12105808f684SSatish Balay    BSIZE = 5
1211*6f336411SStefano Zampini
1212*6f336411SStefano Zampini
12135808f684SSatish Balayclass TestMatSeqAIJCRL_B_G89_B5(TestMatSeqAIJCRL_B_G89):
12145808f684SSatish Balay    BSIZE = 5
12155808f684SSatish Balay
12165808f684SSatish Balay
12175808f684SSatish Balay# -- MPI AIJCRL + Block --
12185808f684SSatish Balay
1219*6f336411SStefano Zampini
12205808f684SSatish Balayclass TestMatMPIAIJCRL_B(BaseTestMatAIJCRL_B):
12215808f684SSatish Balay    COMM = PETSc.COMM_WORLD
12225808f684SSatish Balay    TYPE = PETSc.Mat.Type.MPIAIJCRL
1223*6f336411SStefano Zampini
1224*6f336411SStefano Zampini
12255808f684SSatish Balay# bs = 1
12265808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23(TestMatMPIAIJCRL_B):
12275808f684SSatish Balay    GRID = 2, 3
1228*6f336411SStefano Zampini
1229*6f336411SStefano Zampini
12305808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45(TestMatMPIAIJCRL_B):
12315808f684SSatish Balay    GRID = 4, 5
1232*6f336411SStefano Zampini
1233*6f336411SStefano Zampini
12345808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89(TestMatMPIAIJCRL_B):
12355808f684SSatish Balay    GRID = 8, 9
1236*6f336411SStefano Zampini
1237*6f336411SStefano Zampini
12385808f684SSatish Balay# bs = 2
12395808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B2(TestMatMPIAIJCRL_B_G23):
12405808f684SSatish Balay    BSIZE = 2
1241*6f336411SStefano Zampini
1242*6f336411SStefano Zampini
12435808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B2(TestMatMPIAIJCRL_B_G45):
12445808f684SSatish Balay    BSIZE = 2
1245*6f336411SStefano Zampini
1246*6f336411SStefano Zampini
12475808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B2(TestMatMPIAIJCRL_B_G89):
12485808f684SSatish Balay    BSIZE = 2
1249*6f336411SStefano Zampini
1250*6f336411SStefano Zampini
12515808f684SSatish Balay# bs = 3
12525808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B3(TestMatMPIAIJCRL_B_G23):
12535808f684SSatish Balay    BSIZE = 3
1254*6f336411SStefano Zampini
1255*6f336411SStefano Zampini
12565808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B3(TestMatMPIAIJCRL_B_G45):
12575808f684SSatish Balay    BSIZE = 3
1258*6f336411SStefano Zampini
1259*6f336411SStefano Zampini
12605808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B3(TestMatMPIAIJCRL_B_G89):
12615808f684SSatish Balay    BSIZE = 3
1262*6f336411SStefano Zampini
1263*6f336411SStefano Zampini
12645808f684SSatish Balay# bs = 4
12655808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B4(TestMatMPIAIJCRL_B_G23):
12665808f684SSatish Balay    BSIZE = 4
1267*6f336411SStefano Zampini
1268*6f336411SStefano Zampini
12695808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B4(TestMatMPIAIJCRL_B_G45):
12705808f684SSatish Balay    BSIZE = 4
1271*6f336411SStefano Zampini
1272*6f336411SStefano Zampini
12735808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B4(TestMatMPIAIJCRL_B_G89):
12745808f684SSatish Balay    BSIZE = 4
1275*6f336411SStefano Zampini
1276*6f336411SStefano Zampini
12775808f684SSatish Balay# bs = 5
12785808f684SSatish Balayclass TestMatMPIAIJCRL_B_G23_B5(TestMatMPIAIJCRL_B_G23):
12795808f684SSatish Balay    BSIZE = 5
1280*6f336411SStefano Zampini
1281*6f336411SStefano Zampini
12825808f684SSatish Balayclass TestMatMPIAIJCRL_B_G45_B5(TestMatMPIAIJCRL_B_G45):
12835808f684SSatish Balay    BSIZE = 5
1284*6f336411SStefano Zampini
1285*6f336411SStefano Zampini
12865808f684SSatish Balayclass TestMatMPIAIJCRL_B_G89_B5(TestMatMPIAIJCRL_B_G89):
12875808f684SSatish Balay    BSIZE = 5
12885808f684SSatish Balay
1289*6f336411SStefano Zampini
1290fc989267SStefano Zampini# -- MATIS --
1291fc989267SStefano Zampini
1292*6f336411SStefano Zampini
1293fc989267SStefano Zampiniclass TestMatIS(BaseTestMatAIJ):
1294fc989267SStefano Zampini    COMM = PETSc.COMM_WORLD
1295fc989267SStefano Zampini    TYPE = PETSc.Mat.Type.IS
1296*6f336411SStefano Zampini
1297*6f336411SStefano Zampini
1298fc989267SStefano Zampiniclass TestMatIS_G23(TestMatIS):
1299fc989267SStefano Zampini    GRID = 2, 3
1300*6f336411SStefano Zampini
1301*6f336411SStefano Zampini
1302fc989267SStefano Zampiniclass TestMatIS_G45(TestMatIS):
1303fc989267SStefano Zampini    GRID = 4, 5
1304*6f336411SStefano Zampini
1305*6f336411SStefano Zampini
1306fc989267SStefano Zampiniclass TestMatIS_G89(TestMatIS):
1307fc989267SStefano Zampini    GRID = 8, 9
1308fc989267SStefano Zampini
13095808f684SSatish Balay
1310*6f336411SStefano Zampini# -----
13115808f684SSatish Balay
13125808f684SSatish Balay
13135808f684SSatish Balayif __name__ == '__main__':
13145808f684SSatish Balay    unittest.main()
1315