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