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