1 #include <libmesh/parallel.h>
2 #include <libmesh/parallel_algebra.h>
15 CPPUNIT_TEST( testAllGatherPoint );
16 CPPUNIT_TEST( testAllGatherPairPointPoint );
17 CPPUNIT_TEST( testAllGatherPairRealPoint );
20 CPPUNIT_TEST( testBroadcastVectorValueInt );
21 CPPUNIT_TEST( testBroadcastVectorValueReal );
22 CPPUNIT_TEST( testBroadcastPoint );
23 CPPUNIT_TEST( testIsendRecv );
24 CPPUNIT_TEST( testIrecvSend );
26 CPPUNIT_TEST_SUITE_END();
41 std::vector<Point> vals;
46 const std::size_t vec_size = vals.size();
47 CPPUNIT_ASSERT_EQUAL( comm_size, vec_size );
51 CPPUNIT_ASSERT_EQUAL( theirrank, vals[i](0) );
52 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.25), vals[i](1) );
53 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.5), vals[i](2) );
61 std::vector<std::pair<Point, Point>> vals;
64 (std::make_pair(
Point(myrank, myrank+0.125, myrank+0.25),
Point(myrank+0.5, myrank+0.625, myrank+0.75)), vals);
67 const std::size_t vec_size = vals.size();
68 CPPUNIT_ASSERT_EQUAL( comm_size, vec_size );
73 CPPUNIT_ASSERT_EQUAL( theirrank, vals[i].first(0) );
74 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.125), vals[i].first(1) );
75 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.25), vals[i].first(2) );
76 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.5), vals[i].second(0) );
77 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.625), vals[i].second(1) );
78 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.75), vals[i].second(2) );
85 std::vector<std::pair<Real, Point>> vals;
88 (std::make_pair(
Real(myrank+0.75),
Point(myrank, myrank+0.25, myrank+0.5)), vals);
91 const std::size_t vec_size = vals.size();
92 CPPUNIT_ASSERT_EQUAL( comm_size, vec_size );
97 CPPUNIT_ASSERT_EQUAL( theirrank, vals[i].second(0) );
98 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.25), vals[i].second(1) );
99 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.5), vals[i].second(2) );
100 CPPUNIT_ASSERT_EQUAL( theirrank+
Real(0.75), vals[i].first );
106 template <
typename T>
109 std::vector<VectorValue<T>> src(3), dest(3);
113 for (
unsigned int i=0; i<3; i++)
114 for (
unsigned int j=0; j<LIBMESH_DIM; j++)
123 for (
unsigned int i=0; i<3; i++)
124 for (
unsigned int j=0; j<LIBMESH_DIM; j++)
125 CPPUNIT_ASSERT_EQUAL (src[i](j), dest[i](j) );
132 this->testBroadcastVectorValue<int>();
139 this->testBroadcastVectorValue<Real>();
146 std::vector<Point> src(3), dest(3);
150 for (
unsigned int i=0; i<3; i++)
151 for (
unsigned int j=0; j<LIBMESH_DIM; j++)
160 for (
unsigned int i=0; i<3; i++)
161 for (
unsigned int j=0; j<LIBMESH_DIM; j++)
162 CPPUNIT_ASSERT_EQUAL (src[i](j), dest[i](j) );
175 std::vector<unsigned int> src_val(3), recv_val(3);
181 Parallel::Request request;
195 Parallel::wait (request);
197 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
199 for (std::size_t i=0; i<src_val.size(); i++)
200 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
204 TestCommWorld->send_mode(Parallel::Communicator::SYNCHRONOUS);
205 std::fill (recv_val.begin(), recv_val.end(), 0);
214 Parallel::wait (request);
216 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
218 for (std::size_t i=0; i<src_val.size(); i++)
219 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
236 std::vector<unsigned int> src_val(3), recv_val(3);
242 Parallel::Request request;
256 Parallel::wait (request);
258 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
260 for (std::size_t i=0; i<src_val.size(); i++)
261 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
264 TestCommWorld->send_mode(Parallel::Communicator::SYNCHRONOUS);
265 std::fill (recv_val.begin(), recv_val.end(), 0);
275 Parallel::wait (request);
277 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
279 for (std::size_t i=0; i<src_val.size(); i++)
280 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );