1from petsc4py import PETSc 2import unittest 3 4# -------------------------------------------------------------------- 5 6 7class TestComm(unittest.TestCase): 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(), PETSc.COMM_SELF.size) 46 self.assertEqual(PETSc.COMM_SELF.getRank(), PETSc.COMM_SELF.rank) 47 self.assertEqual(PETSc.COMM_WORLD.getSize(), PETSc.COMM_WORLD.size) 48 self.assertEqual(PETSc.COMM_WORLD.getRank(), PETSc.COMM_WORLD.rank) 49 50 def testCompatMPI4PY(self): 51 try: 52 from mpi4py import MPI 53 except ImportError: 54 return 55 # mpi4py -> petsc4py 56 cn = PETSc.Comm(MPI.COMM_NULL) 57 cs = PETSc.Comm(MPI.COMM_SELF) 58 cw = PETSc.Comm(MPI.COMM_WORLD) 59 self.assertEqual(cn, PETSc.COMM_NULL) 60 self.assertEqual(cs, PETSc.COMM_SELF) 61 self.assertEqual(cw, PETSc.COMM_WORLD) 62 # petsc4py - > mpi4py 63 cn = PETSc.COMM_NULL.tompi4py() 64 self.assertTrue(isinstance(cn, MPI.Comm)) 65 self.assertFalse(cn) 66 cs = PETSc.COMM_SELF.tompi4py() 67 self.assertTrue(isinstance(cs, MPI.Intracomm)) 68 self.assertEqual(cs.Get_size(), 1) 69 self.assertEqual(cs.Get_rank(), 0) 70 cw = PETSc.COMM_WORLD.tompi4py() 71 self.assertTrue(isinstance(cw, MPI.Intracomm)) 72 self.assertEqual(cw.Get_size(), PETSc.COMM_WORLD.getSize()) 73 self.assertEqual(cw.Get_rank(), PETSc.COMM_WORLD.getRank()) 74 75 76# -------------------------------------------------------------------- 77 78if __name__ == '__main__': 79 unittest.main() 80