35 const Teuchos::Comm<int>& comm2)
40 using Teuchos::rcpFromRef;
41 using Teuchos::MpiComm;
42 using Teuchos::rcp_dynamic_cast;
44 RCP<const MpiComm<int> > mpiComm1 =
45 rcp_dynamic_cast<const MpiComm<int> > (rcpFromRef (comm1));
46 RCP<const MpiComm<int> > mpiComm2 =
47 rcp_dynamic_cast<const MpiComm<int> > (rcpFromRef (comm2));
49 if (mpiComm1.is_null ()) {
50 return comm1.getSize () == comm2.getSize ();
52 if (mpiComm2.is_null ()) {
53 return comm1.getSize () == comm2.getSize ();
55 MPI_Comm rawMpiComm1 = * (mpiComm1->getRawMpiComm ());
56 MPI_Comm rawMpiComm2 = * (mpiComm2->getRawMpiComm ());
58 int result = MPI_UNEQUAL;
59 const int err = MPI_Comm_compare (rawMpiComm1, rawMpiComm2, &result);
60 TEUCHOS_TEST_FOR_EXCEPTION(err != MPI_SUCCESS, std::runtime_error,
61 "congruent: MPI_Comm_compare failed");
62 return result == MPI_IDENT || result == MPI_CONGRUENT;
66 return comm1.getSize () == comm2.getSize ();