1*5808f684SSatish Balayfrom petsc4py import PETSc 2*5808f684SSatish Balayimport unittest 3*5808f684SSatish Balay 4*5808f684SSatish Balay# -------------------------------------------------------------------- 5*5808f684SSatish Balay 6*5808f684SSatish Balayclass BaseTestLGMap(object): 7*5808f684SSatish Balay 8*5808f684SSatish Balay def _mk_idx(self, comm): 9*5808f684SSatish Balay comm_size = comm.getSize() 10*5808f684SSatish Balay comm_rank = comm.getRank() 11*5808f684SSatish Balay lsize = 10 12*5808f684SSatish Balay first = lsize * comm_rank 13*5808f684SSatish Balay last = first + lsize 14*5808f684SSatish Balay if comm_rank > 0: 15*5808f684SSatish Balay first -= 1 16*5808f684SSatish Balay if comm_rank < (comm_size-1): 17*5808f684SSatish Balay last += 1 18*5808f684SSatish Balay return list(range(first, last)) 19*5808f684SSatish Balay 20*5808f684SSatish Balay def tearDown(self): 21*5808f684SSatish Balay self.lgmap = None 22*5808f684SSatish Balay 23*5808f684SSatish Balay def testGetSize(self): 24*5808f684SSatish Balay size = self.lgmap.getSize() 25*5808f684SSatish Balay self.assertTrue(size >= 0) 26*5808f684SSatish Balay 27*5808f684SSatish Balay def testGetIndices(self): 28*5808f684SSatish Balay size = self.lgmap.getSize() 29*5808f684SSatish Balay idx = self.lgmap.getIndices() 30*5808f684SSatish Balay self.assertEqual(len(idx), size) 31*5808f684SSatish Balay for i, val in enumerate(self.idx): 32*5808f684SSatish Balay self.assertEqual(idx[i], val) 33*5808f684SSatish Balay 34*5808f684SSatish Balay def testGetInfo(self): 35*5808f684SSatish Balay info = self.lgmap.getInfo() 36*5808f684SSatish Balay self.assertEqual(type(info), dict) 37*5808f684SSatish Balay if self.lgmap.getComm().getSize() == 1: 38*5808f684SSatish Balay self.assertEqual(info, {}) 39*5808f684SSatish Balay else: 40*5808f684SSatish Balay self.assertTrue(len(info) > 1) 41*5808f684SSatish Balay self.assertTrue(len(info) < 4) 42*5808f684SSatish Balay 43*5808f684SSatish Balay def testApply(self): 44*5808f684SSatish Balay idxin = list(range(self.lgmap.getSize())) 45*5808f684SSatish Balay idxout = self.lgmap.apply(idxin) 46*5808f684SSatish Balay self.lgmap.apply(idxin, idxout) 47*5808f684SSatish Balay invmap = self.lgmap.applyInverse(idxout) 48*5808f684SSatish Balay 49*5808f684SSatish Balay 50*5808f684SSatish Balay def testApplyIS(self): 51*5808f684SSatish Balay is_in = PETSc.IS().createStride(self.lgmap.getSize()) 52*5808f684SSatish Balay is_out = self.lgmap.apply(is_in) 53*5808f684SSatish Balay 54*5808f684SSatish Balay def testProperties(self): 55*5808f684SSatish Balay for prop in ('size', 'indices', 'info'): 56*5808f684SSatish Balay self.assertTrue(hasattr(self.lgmap, prop)) 57*5808f684SSatish Balay 58*5808f684SSatish Balay# -------------------------------------------------------------------- 59*5808f684SSatish Balay 60*5808f684SSatish Balayclass TestLGMap(BaseTestLGMap, unittest.TestCase): 61*5808f684SSatish Balay 62*5808f684SSatish Balay def setUp(self): 63*5808f684SSatish Balay self.idx = self._mk_idx(PETSc.COMM_WORLD) 64*5808f684SSatish Balay self.lgmap = PETSc.LGMap().create(self.idx, comm=PETSc.COMM_WORLD) 65*5808f684SSatish Balay 66*5808f684SSatish Balayclass TestLGMapIS(BaseTestLGMap, unittest.TestCase): 67*5808f684SSatish Balay 68*5808f684SSatish Balay def setUp(self): 69*5808f684SSatish Balay self.idx = self._mk_idx(PETSc.COMM_WORLD) 70*5808f684SSatish Balay self.iset = PETSc.IS().createGeneral(self.idx, comm=PETSc.COMM_WORLD) 71*5808f684SSatish Balay self.lgmap = PETSc.LGMap().create(self.iset) 72*5808f684SSatish Balay 73*5808f684SSatish Balay def tearDown(self): 74*5808f684SSatish Balay self.iset = None 75*5808f684SSatish Balay self.lgmap = None 76*5808f684SSatish Balay 77*5808f684SSatish Balay def testSameComm(self): 78*5808f684SSatish Balay comm1 = self.lgmap.getComm() 79*5808f684SSatish Balay comm2 = self.iset.getComm() 80*5808f684SSatish Balay self.assertEqual(comm1, comm2) 81*5808f684SSatish Balay 82*5808f684SSatish Balay# -------------------------------------------------------------------- 83*5808f684SSatish Balay 84*5808f684SSatish Balayclass TestLGMapBlock(unittest.TestCase): 85*5808f684SSatish Balay 86*5808f684SSatish Balay BS = 3 87*5808f684SSatish Balay 88*5808f684SSatish Balay def setUp(self): 89*5808f684SSatish Balay comm = PETSc.COMM_WORLD 90*5808f684SSatish Balay comm_size = comm.getSize() 91*5808f684SSatish Balay comm_rank = comm.getRank() 92*5808f684SSatish Balay lsize = 10 93*5808f684SSatish Balay first = lsize * comm_rank 94*5808f684SSatish Balay last = first + lsize 95*5808f684SSatish Balay if comm_rank > 0: 96*5808f684SSatish Balay first -= 1 97*5808f684SSatish Balay if comm_rank < (comm_size-1): 98*5808f684SSatish Balay last += 1 99*5808f684SSatish Balay self.idx = list(range(first, last)) 100*5808f684SSatish Balay bs = self.BS 101*5808f684SSatish Balay self.lgmap = PETSc.LGMap().create(self.idx, bs, comm=PETSc.COMM_WORLD) 102*5808f684SSatish Balay 103*5808f684SSatish Balay def tearDown(self): 104*5808f684SSatish Balay self.lgmap = None 105*5808f684SSatish Balay 106*5808f684SSatish Balay def testGetSize(self): 107*5808f684SSatish Balay size = self.lgmap.getSize() 108*5808f684SSatish Balay self.assertTrue(size >= 0) 109*5808f684SSatish Balay 110*5808f684SSatish Balay def testGetBlockSize(self): 111*5808f684SSatish Balay bs = self.lgmap.getBlockSize() 112*5808f684SSatish Balay self.assertEqual(bs, self.BS) 113*5808f684SSatish Balay 114*5808f684SSatish Balay def testGetBlockIndices(self): 115*5808f684SSatish Balay size = self.lgmap.getSize() 116*5808f684SSatish Balay bs = self.lgmap.getBlockSize() 117*5808f684SSatish Balay idx = self.lgmap.getBlockIndices() 118*5808f684SSatish Balay self.assertEqual(len(idx), size//bs) 119*5808f684SSatish Balay for i, val in enumerate(self.idx): 120*5808f684SSatish Balay self.assertEqual(idx[i], val) 121*5808f684SSatish Balay 122*5808f684SSatish Balay def testGetIndices(self): 123*5808f684SSatish Balay size = self.lgmap.getSize() 124*5808f684SSatish Balay bs = self.lgmap.getBlockSize() 125*5808f684SSatish Balay idx = self.lgmap.getIndices() 126*5808f684SSatish Balay self.assertEqual(len(idx), size) 127*5808f684SSatish Balay for i, val in enumerate(self.idx): 128*5808f684SSatish Balay for j in range(bs): 129*5808f684SSatish Balay self.assertEqual(idx[i*bs+j], val*bs+j) 130*5808f684SSatish Balay 131*5808f684SSatish Balay def testGetBlockInfo(self): 132*5808f684SSatish Balay info = self.lgmap.getBlockInfo() 133*5808f684SSatish Balay self.assertEqual(type(info), dict) 134*5808f684SSatish Balay if self.lgmap.getComm().getSize() == 1: 135*5808f684SSatish Balay self.assertEqual(info, {}) 136*5808f684SSatish Balay else: 137*5808f684SSatish Balay self.assertTrue(len(info) > 1) 138*5808f684SSatish Balay self.assertTrue(len(info) < 4) 139*5808f684SSatish Balay 140*5808f684SSatish Balay def testGetInfo(self): 141*5808f684SSatish Balay info = self.lgmap.getInfo() 142*5808f684SSatish Balay self.assertEqual(type(info), dict) 143*5808f684SSatish Balay if self.lgmap.getComm().getSize() == 1: 144*5808f684SSatish Balay self.assertEqual(info, {}) 145*5808f684SSatish Balay else: 146*5808f684SSatish Balay self.assertTrue(len(info) > 1) 147*5808f684SSatish Balay self.assertTrue(len(info) < 4) 148*5808f684SSatish Balay 149*5808f684SSatish Balay# -------------------------------------------------------------------- 150*5808f684SSatish Balay 151*5808f684SSatish Balayif __name__ == '__main__': 152*5808f684SSatish Balay unittest.main() 153