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