xref: /petsc/src/binding/petsc4py/test/test_lgmap.py (revision 552edb6364df478b294b3111f33a8f37ca096b20)
15808f684SSatish Balayfrom petsc4py import PETSc
25808f684SSatish Balayimport unittest
35808f684SSatish Balay
45808f684SSatish Balay# --------------------------------------------------------------------
55808f684SSatish Balay
65808f684SSatish Balay
7*6f336411SStefano Zampiniclass BaseTestLGMap:
85808f684SSatish Balay    def _mk_idx(self, comm):
95808f684SSatish Balay        comm_size = comm.getSize()
105808f684SSatish Balay        comm_rank = comm.getRank()
115808f684SSatish Balay        lsize = 10
125808f684SSatish Balay        first = lsize * comm_rank
135808f684SSatish Balay        last = first + lsize
145808f684SSatish Balay        if comm_rank > 0:
155808f684SSatish Balay            first -= 1
165808f684SSatish Balay        if comm_rank < (comm_size - 1):
175808f684SSatish Balay            last += 1
185808f684SSatish Balay        return list(range(first, last))
195808f684SSatish Balay
205808f684SSatish Balay    def tearDown(self):
215808f684SSatish Balay        self.lgmap = None
2262e5d2d2SJDBetteridge        PETSc.garbage_cleanup()
235808f684SSatish Balay
245808f684SSatish Balay    def testGetSize(self):
255808f684SSatish Balay        size = self.lgmap.getSize()
265808f684SSatish Balay        self.assertTrue(size >= 0)
275808f684SSatish Balay
285808f684SSatish Balay    def testGetIndices(self):
295808f684SSatish Balay        size = self.lgmap.getSize()
305808f684SSatish Balay        idx = self.lgmap.getIndices()
315808f684SSatish Balay        self.assertEqual(len(idx), size)
325808f684SSatish Balay        for i, val in enumerate(self.idx):
335808f684SSatish Balay            self.assertEqual(idx[i], val)
345808f684SSatish Balay
355808f684SSatish Balay    def testGetInfo(self):
365808f684SSatish Balay        info = self.lgmap.getInfo()
375808f684SSatish Balay        self.assertEqual(type(info), dict)
385808f684SSatish Balay        if self.lgmap.getComm().getSize() == 1:
39*6f336411SStefano Zampini            self.assertTrue(len(info) == 1)
405808f684SSatish Balay        else:
415808f684SSatish Balay            self.assertTrue(len(info) > 1)
425808f684SSatish Balay            self.assertTrue(len(info) < 4)
435808f684SSatish Balay
445808f684SSatish Balay    def testApply(self):
455808f684SSatish Balay        idxin = list(range(self.lgmap.getSize()))
465808f684SSatish Balay        idxout = self.lgmap.apply(idxin)
475808f684SSatish Balay        self.lgmap.apply(idxin, idxout)
48*6f336411SStefano Zampini        _ = self.lgmap.applyInverse(idxout)
495808f684SSatish Balay
505808f684SSatish Balay    def testApplyIS(self):
515808f684SSatish Balay        is_in = PETSc.IS().createStride(self.lgmap.getSize())
52*6f336411SStefano Zampini        _ = self.lgmap.apply(is_in)
535808f684SSatish Balay
545808f684SSatish Balay    def testProperties(self):
555808f684SSatish Balay        for prop in ('size', 'indices', 'info'):
565808f684SSatish Balay            self.assertTrue(hasattr(self.lgmap, prop))
575808f684SSatish Balay
58*6f336411SStefano Zampini
595808f684SSatish Balay# --------------------------------------------------------------------
605808f684SSatish Balay
615808f684SSatish Balay
62*6f336411SStefano Zampiniclass TestLGMap(BaseTestLGMap, unittest.TestCase):
635808f684SSatish Balay    def setUp(self):
645808f684SSatish Balay        self.idx = self._mk_idx(PETSc.COMM_WORLD)
655808f684SSatish Balay        self.lgmap = PETSc.LGMap().create(self.idx, comm=PETSc.COMM_WORLD)
665808f684SSatish Balay
675808f684SSatish Balay
68*6f336411SStefano Zampiniclass TestLGMapIS(BaseTestLGMap, unittest.TestCase):
695808f684SSatish Balay    def setUp(self):
705808f684SSatish Balay        self.idx = self._mk_idx(PETSc.COMM_WORLD)
715808f684SSatish Balay        self.iset = PETSc.IS().createGeneral(self.idx, comm=PETSc.COMM_WORLD)
725808f684SSatish Balay        self.lgmap = PETSc.LGMap().create(self.iset)
735808f684SSatish Balay
745808f684SSatish Balay    def tearDown(self):
755808f684SSatish Balay        self.iset = None
765808f684SSatish Balay        self.lgmap = None
775808f684SSatish Balay
785808f684SSatish Balay    def testSameComm(self):
795808f684SSatish Balay        comm1 = self.lgmap.getComm()
805808f684SSatish Balay        comm2 = self.iset.getComm()
815808f684SSatish Balay        self.assertEqual(comm1, comm2)
825808f684SSatish Balay
83*6f336411SStefano Zampini
845808f684SSatish Balay# --------------------------------------------------------------------
855808f684SSatish Balay
865808f684SSatish Balay
87*6f336411SStefano Zampiniclass TestLGMapBlock(unittest.TestCase):
885808f684SSatish Balay    BS = 3
895808f684SSatish Balay
905808f684SSatish Balay    def setUp(self):
915808f684SSatish Balay        comm = PETSc.COMM_WORLD
925808f684SSatish Balay        comm_size = comm.getSize()
935808f684SSatish Balay        comm_rank = comm.getRank()
945808f684SSatish Balay        lsize = 10
955808f684SSatish Balay        first = lsize * comm_rank
965808f684SSatish Balay        last = first + lsize
975808f684SSatish Balay        if comm_rank > 0:
985808f684SSatish Balay            first -= 1
995808f684SSatish Balay        if comm_rank < (comm_size - 1):
1005808f684SSatish Balay            last += 1
1015808f684SSatish Balay        self.idx = list(range(first, last))
1025808f684SSatish Balay        bs = self.BS
1035808f684SSatish Balay        self.lgmap = PETSc.LGMap().create(self.idx, bs, comm=PETSc.COMM_WORLD)
1045808f684SSatish Balay
1055808f684SSatish Balay    def tearDown(self):
1065808f684SSatish Balay        self.lgmap = None
1075808f684SSatish Balay
1085808f684SSatish Balay    def testGetSize(self):
1095808f684SSatish Balay        size = self.lgmap.getSize()
1105808f684SSatish Balay        self.assertTrue(size >= 0)
1115808f684SSatish Balay
1125808f684SSatish Balay    def testGetBlockSize(self):
1135808f684SSatish Balay        bs = self.lgmap.getBlockSize()
1145808f684SSatish Balay        self.assertEqual(bs, self.BS)
1155808f684SSatish Balay
1165808f684SSatish Balay    def testGetBlockIndices(self):
1175808f684SSatish Balay        size = self.lgmap.getSize()
1185808f684SSatish Balay        bs = self.lgmap.getBlockSize()
1195808f684SSatish Balay        idx = self.lgmap.getBlockIndices()
1205808f684SSatish Balay        self.assertEqual(len(idx), size // bs)
1215808f684SSatish Balay        for i, val in enumerate(self.idx):
1225808f684SSatish Balay            self.assertEqual(idx[i], val)
1235808f684SSatish Balay
1245808f684SSatish Balay    def testGetIndices(self):
1255808f684SSatish Balay        size = self.lgmap.getSize()
1265808f684SSatish Balay        bs = self.lgmap.getBlockSize()
1275808f684SSatish Balay        idx = self.lgmap.getIndices()
1285808f684SSatish Balay        self.assertEqual(len(idx), size)
1295808f684SSatish Balay        for i, val in enumerate(self.idx):
1305808f684SSatish Balay            for j in range(bs):
1315808f684SSatish Balay                self.assertEqual(idx[i * bs + j], val * bs + j)
1325808f684SSatish Balay
1335808f684SSatish Balay    def testGetBlockInfo(self):
1345808f684SSatish Balay        info = self.lgmap.getBlockInfo()
1355808f684SSatish Balay        self.assertEqual(type(info), dict)
1365808f684SSatish Balay        if self.lgmap.getComm().getSize() == 1:
137*6f336411SStefano Zampini            self.assertTrue(len(info) == 1)
1385808f684SSatish Balay        else:
1395808f684SSatish Balay            self.assertTrue(len(info) > 1)
1405808f684SSatish Balay            self.assertTrue(len(info) < 4)
1415808f684SSatish Balay
1425808f684SSatish Balay    def testGetInfo(self):
1435808f684SSatish Balay        info = self.lgmap.getInfo()
1445808f684SSatish Balay        self.assertEqual(type(info), dict)
1455808f684SSatish Balay        if self.lgmap.getComm().getSize() == 1:
146*6f336411SStefano Zampini            self.assertTrue(len(info) == 1)
1475808f684SSatish Balay        else:
1485808f684SSatish Balay            self.assertTrue(len(info) > 1)
1495808f684SSatish Balay            self.assertTrue(len(info) < 4)
1505808f684SSatish Balay
151*6f336411SStefano Zampini
1525808f684SSatish Balay# --------------------------------------------------------------------
1535808f684SSatish Balay
1545808f684SSatish Balayif __name__ == '__main__':
1555808f684SSatish Balay    unittest.main()
156