xref: /petsc/src/binding/petsc4py/test/test_comm.py (revision 59af0bd3658d6c64d35e37f76ad6a8a026fa611f)
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