1from petsc4py import PETSc 2import unittest 3 4# -------------------------------------------------------------------- 5 6class TestComm(unittest.TestCase): 7 8 def testInit(self): 9 comm_null1 = PETSc.Comm() 10 comm_null2 = PETSc.Comm(PETSc.COMM_NULL) 11 comm_world = PETSc.Comm(PETSc.COMM_WORLD) 12 comm_self = PETSc.Comm(PETSc.COMM_SELF) 13 self.assertEqual(comm_null1, PETSc.COMM_NULL) 14 self.assertEqual(comm_null2, PETSc.COMM_NULL) 15 self.assertEqual(comm_world, PETSc.COMM_WORLD) 16 self.assertEqual(comm_self, PETSc.COMM_SELF) 17 18 def testDupDestr(self): 19 self.assertRaises(ValueError, PETSc.COMM_NULL.duplicate) 20 comm = PETSc.COMM_SELF.duplicate() 21 comm.destroy() 22 self.assertEqual(comm, PETSc.COMM_NULL) 23 del comm 24 comm = PETSc.COMM_WORLD.duplicate() 25 comm.destroy() 26 self.assertEqual(comm, PETSc.COMM_NULL) 27 del comm 28 29 def testBarrier(self): 30 self.assertRaises(ValueError, PETSc.COMM_NULL.barrier) 31 PETSc.COMM_SELF.barrier() 32 PETSc.COMM_WORLD.barrier() 33 34 def testSize(self): 35 self.assertRaises(ValueError, PETSc.COMM_NULL.getSize) 36 self.assertTrue(PETSc.COMM_WORLD.getSize() >= 1) 37 self.assertEqual(PETSc.COMM_SELF.getSize(), 1) 38 39 def testRank(self): 40 self.assertRaises(ValueError, PETSc.COMM_NULL.getRank) 41 self.assertEqual(PETSc.COMM_SELF.getRank(), 0) 42 self.assertTrue(PETSc.COMM_WORLD.getRank() >= 0) 43 44 def testProperties(self): 45 self.assertEqual(PETSc.COMM_SELF.getSize(), 46 PETSc.COMM_SELF.size) 47 self.assertEqual(PETSc.COMM_SELF.getRank(), 48 PETSc.COMM_SELF.rank) 49 self.assertEqual(PETSc.COMM_WORLD.getSize(), 50 PETSc.COMM_WORLD.size) 51 self.assertEqual(PETSc.COMM_WORLD.getRank(), 52 PETSc.COMM_WORLD.rank) 53 54 def testCompatMPI4PY(self): 55 try: 56 from mpi4py import MPI 57 except ImportError: 58 return 59 # mpi4py -> petsc4py 60 cn = PETSc.Comm(MPI.COMM_NULL) 61 cs = PETSc.Comm(MPI.COMM_SELF) 62 cw = PETSc.Comm(MPI.COMM_WORLD) 63 self.assertEqual(cn, PETSc.COMM_NULL) 64 self.assertEqual(cs, PETSc.COMM_SELF) 65 self.assertEqual(cw, PETSc.COMM_WORLD) 66 # petsc4py - > mpi4py 67 cn = PETSc.COMM_NULL.tompi4py() 68 self.assertTrue(isinstance(cn, MPI.Comm)) 69 self.assertFalse(cn) 70 cs = PETSc.COMM_SELF.tompi4py() 71 self.assertTrue(isinstance(cs, MPI.Intracomm)) 72 self.assertEqual(cs.Get_size(), 1) 73 self.assertEqual(cs.Get_rank(), 0) 74 cw = PETSc.COMM_WORLD.tompi4py() 75 self.assertTrue(isinstance(cw, MPI.Intracomm)) 76 self.assertEqual(cw.Get_size(), PETSc.COMM_WORLD.getSize()) 77 self.assertEqual(cw.Get_rank(), PETSc.COMM_WORLD.getRank()) 78 79 80# -------------------------------------------------------------------- 81 82if __name__ == '__main__': 83 unittest.main() 84