libMesh
parallel_test.C
Go to the documentation of this file.
1 #include <libmesh/parallel.h>
2 
3 #include "test_comm.h"
4 #include "libmesh_cppunit.h"
5 
6 
7 using namespace libMesh;
8 
9 class ParallelTest : public CppUnit::TestCase {
10 public:
11  LIBMESH_CPPUNIT_TEST_SUITE( ParallelTest );
12 
13  CPPUNIT_TEST( testGather );
14  CPPUNIT_TEST( testAllGather );
15  CPPUNIT_TEST( testGatherString );
16  CPPUNIT_TEST( testAllGatherString );
17  CPPUNIT_TEST( testAllGatherVectorString );
18  CPPUNIT_TEST( testAllGatherEmptyVectorString );
19  CPPUNIT_TEST( testAllGatherHalfEmptyVectorString );
20  CPPUNIT_TEST( testBroadcast );
21  CPPUNIT_TEST( testBroadcastNestedType );
22  CPPUNIT_TEST( testScatter );
23  CPPUNIT_TEST( testBarrier );
24  CPPUNIT_TEST( testMin );
25  CPPUNIT_TEST( testMax );
26  CPPUNIT_TEST( testMinloc );
27  CPPUNIT_TEST( testMaxloc );
28  CPPUNIT_TEST( testMinlocReal );
29  CPPUNIT_TEST( testMaxlocReal );
30  CPPUNIT_TEST( testInfinityMin );
31  CPPUNIT_TEST( testInfinityMax );
32  CPPUNIT_TEST( testIsendRecv );
33  CPPUNIT_TEST( testIrecvSend );
34  CPPUNIT_TEST( testRecvIsendSets );
35  CPPUNIT_TEST( testRecvIsendVecVecs );
36  CPPUNIT_TEST( testSendRecvVecVecs );
37  CPPUNIT_TEST( testSemiVerify );
38  CPPUNIT_TEST( testSplit );
39 
40  CPPUNIT_TEST_SUITE_END();
41 
42 private:
43  std::vector<std::string> _number;
44 
45 public:
46  void setUp()
47  {
48  _number.resize(10);
49  _number[0] = "Zero";
50  _number[1] = "One";
51  _number[2] = "Two";
52  _number[3] = "Three";
53  _number[4] = "Four";
54  _number[5] = "Five";
55  _number[6] = "Six";
56  _number[7] = "Seven";
57  _number[8] = "Eight";
58  _number[9] = "Nine";
59  }
60 
61  void tearDown()
62  {}
63 
64 
65 
66  void testGather()
67  {
68  LOG_UNIT_TEST;
69 
70  std::vector<processor_id_type> vals;
71  TestCommWorld->gather(0,cast_int<processor_id_type>(TestCommWorld->rank()),vals);
72 
73  if (TestCommWorld->rank() == 0)
74  for (processor_id_type i=0; i<vals.size(); i++)
75  CPPUNIT_ASSERT_EQUAL( i , vals[i] );
76  }
77 
78 
79 
81  {
82  LOG_UNIT_TEST;
83 
84  std::vector<std::string> vals;
85  TestCommWorld->gather(0, "Processor" + _number[TestCommWorld->rank() % 10], vals);
86 
87  if (TestCommWorld->rank() == 0)
88  for (processor_id_type i=0; i<vals.size(); i++)
89  CPPUNIT_ASSERT_EQUAL( "Processor" + _number[i % 10] , vals[i] );
90  }
91 
92 
93 
95  {
96  LOG_UNIT_TEST;
97 
98  std::vector<processor_id_type> vals;
99  TestCommWorld->allgather(cast_int<processor_id_type>(TestCommWorld->rank()),vals);
100 
101  for (processor_id_type i=0; i<vals.size(); i++)
102  CPPUNIT_ASSERT_EQUAL( i , vals[i] );
103  }
104 
105 
106 
108  {
109  LOG_UNIT_TEST;
110 
111  std::vector<std::string> vals;
112  TestCommWorld->gather(0, "Processor" + _number[TestCommWorld->rank() % 10], vals);
113 
114  for (processor_id_type i=0; i<vals.size(); i++)
115  CPPUNIT_ASSERT_EQUAL( "Processor" + _number[i % 10] , vals[i] );
116  }
117 
118 
119 
121  {
122  LOG_UNIT_TEST;
123 
124  std::vector<std::string> vals;
125  vals.push_back("Processor" + _number[TestCommWorld->rank() % 10] + "A");
126  vals.push_back("Processor" + _number[TestCommWorld->rank() % 10] + "B");
127  TestCommWorld->allgather(vals);
128 
129  for (processor_id_type i=0; i<(vals.size()/2); i++)
130  {
131  CPPUNIT_ASSERT_EQUAL( "Processor" + _number[i % 10] + "A" , vals[2*i] );
132  CPPUNIT_ASSERT_EQUAL( "Processor" + _number[i % 10] + "B" , vals[2*i+1] );
133  }
134  }
135 
136 
137 
139  {
140  LOG_UNIT_TEST;
141 
142  std::vector<std::string> vals;
143  TestCommWorld->allgather(vals);
144 
145  CPPUNIT_ASSERT( vals.empty() );
146  }
147 
148 
149 
151  {
152  LOG_UNIT_TEST;
153 
154  std::vector<std::string> vals;
155 
156  if (!TestCommWorld->rank())
157  vals.push_back("Proc 0 only");
158 
159  TestCommWorld->allgather(vals);
160 
161  CPPUNIT_ASSERT_EQUAL( vals[0], std::string("Proc 0 only") );
162  }
163 
164 
165 
167  {
168  LOG_UNIT_TEST;
169 
170  // Workaround for spurious warning from operator=
171  // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100366
172  std::vector<unsigned int> src{0,1,2}, dest(3,0);
173 
174  if (TestCommWorld->rank() == 0)
175  dest = src;
176 
177  TestCommWorld->broadcast(dest);
178 
179  for (std::size_t i=0; i<3; i++)
180  CPPUNIT_ASSERT_EQUAL( src[i] , dest[i] );
181  }
182 
183 
184 
186  {
187  LOG_UNIT_TEST;
188 
189  using std::pair;
190  typedef pair<pair<pair<pair<int, int>, int>, int>, int> pppp;
191  std::vector<pppp> src(3), dest(3);
192 
193  src[0].first.first.first.first=0;
194  src[0].first.first.first.second=-1;
195  src[0].first.second = -2;
196  src[0].second = -3;
197  src[1].first.first.first.first=10;
198  src[1].first.first.first.second=9;
199  src[1].first.second = 8;
200  src[1].second = 7;
201  src[2].first.first.first.first=20;
202  src[2].first.first.first.second=19;
203  src[2].first.second = 18;
204  src[2].second = 17;
205 
206  if (TestCommWorld->rank() == 0)
207  dest = src;
208 
209  TestCommWorld->broadcast(dest);
210 
211  for (std::size_t i=0; i<src.size(); i++)
212  {
213  CPPUNIT_ASSERT_EQUAL(src[i].first.first.first.first,
214  dest[i].first.first.first.first);
215  CPPUNIT_ASSERT_EQUAL(src[i].first.first.first.second,
216  dest[i].first.first.first.second);
217  CPPUNIT_ASSERT_EQUAL(src[i].first.first.second,
218  dest[i].first.first.second);
219  CPPUNIT_ASSERT_EQUAL(src[i].first.second,
220  dest[i].first.second);
221  CPPUNIT_ASSERT_EQUAL(src[i].second,
222  dest[i].second);
223  }
224  }
225 
226 
227 
228  void testScatter()
229  {
230  LOG_UNIT_TEST;
231 
232  // Test Scalar scatter
233  {
234  std::vector<processor_id_type> src;
235  processor_id_type dest;
236 
237  if (TestCommWorld->rank() == 0)
238  {
239  src.resize(TestCommWorld->size());
240  for (processor_id_type i=0; i<src.size(); i++)
241  src[i] = i;
242  }
243 
244  TestCommWorld->scatter(src, dest);
245 
246  CPPUNIT_ASSERT_EQUAL( TestCommWorld->rank(), dest );
247  }
248 
249  // Test Vector Scatter (equal-sized chunks)
250  {
251  std::vector<unsigned int> src;
252  std::vector<unsigned int> dest;
253  static const unsigned int CHUNK_SIZE = 3;
254 
255  if (TestCommWorld->rank() == 0)
256  {
257  src.resize(TestCommWorld->size() * CHUNK_SIZE);
258  for (std::size_t i=0; i<src.size(); i++)
259  src[i] = i;
260  }
261 
262  TestCommWorld->scatter(src, dest);
263 
264  for (unsigned int i=0; i<CHUNK_SIZE; i++)
265  CPPUNIT_ASSERT_EQUAL( TestCommWorld->rank() * CHUNK_SIZE + i, dest[i] );
266  }
267 
268  // Test Vector Scatter (jagged chunks)
269  {
270  std::vector<unsigned int> src;
271  std::vector<unsigned int> dest;
272  std::vector<int> counts;
273 
274  if (TestCommWorld->rank() == 0)
275  {
276  // Give each processor "rank" number of items ( Sum i=1..n == (n * (n + 1))/2 )
277  src.resize((TestCommWorld->size() * (TestCommWorld->size() + 1)) / 2);
278  counts.resize(TestCommWorld->size());
279 
280  for (std::size_t i=0; i<src.size(); i++)
281  src[i] = i;
282  for (unsigned int i=0; i<TestCommWorld->size(); i++)
283  counts[i] = static_cast<int>(i+1);
284  }
285 
286  TestCommWorld->scatter(src, counts, dest);
287 
288  unsigned int start_value = (TestCommWorld->rank() * (TestCommWorld->rank() + 1)) / 2;
289  for (unsigned int i=0; i<=TestCommWorld->rank(); i++)
290  CPPUNIT_ASSERT_EQUAL( start_value + i, dest[i] );
291  }
292 
293  // Test Vector of Vector Scatter
294  {
295  std::vector<std::vector<unsigned int>> src;
296  std::vector<unsigned int> dest;
297 
298  if (TestCommWorld->rank() == 0)
299  {
300  // Give each processor "rank" number of items ( Sum i=1..n == (n * (n + 1))/2 )
301  src.resize(TestCommWorld->size());
302  for (std::size_t i=0; i<src.size(); ++i)
303  src[i].resize(i+1);
304 
305  unsigned int global_counter = 0;
306  for (std::size_t i=0; i<src.size(); i++)
307  for (std::size_t j=0; j<src[i].size(); j++)
308  src[i][j] = global_counter++;
309  }
310 
311  TestCommWorld->scatter(src, dest);
312 
313  unsigned int start_value = (TestCommWorld->rank() * (TestCommWorld->rank() + 1)) / 2;
314  for (unsigned int i=0; i<=TestCommWorld->rank(); i++)
315  CPPUNIT_ASSERT_EQUAL( start_value + i, dest[i] );
316  }
317  }
318 
319 
320 
321  void testBarrier()
322  {
323  LOG_UNIT_TEST;
324 
326  }
327 
328 
329 
330  void testMin ()
331  {
332  LOG_UNIT_TEST;
333 
334  unsigned int min = TestCommWorld->rank();
335 
336  TestCommWorld->min(min);
337 
338  CPPUNIT_ASSERT_EQUAL (min, static_cast<unsigned int>(0));
339  }
340 
341 
342 
343  void testMax ()
344  {
345  LOG_UNIT_TEST;
346 
348 
349  TestCommWorld->max(max);
350 
351  CPPUNIT_ASSERT_EQUAL (cast_int<processor_id_type>(max+1),
352  cast_int<processor_id_type>(TestCommWorld->size()));
353  }
354 
355 
356 
357  void testMinloc ()
358  {
359  LOG_UNIT_TEST;
360 
361  int min = (TestCommWorld->rank() + 1) % TestCommWorld->size();
362  unsigned int minid = 0;
363 
364  TestCommWorld->minloc(min, minid);
365 
366  CPPUNIT_ASSERT_EQUAL (min, static_cast<int>(0));
367  CPPUNIT_ASSERT_EQUAL (minid, static_cast<unsigned int>(TestCommWorld->size()-1));
368  }
369 
370 
371 
372  void testMaxloc ()
373  {
374  LOG_UNIT_TEST;
375 
376  int max = TestCommWorld->rank();
377  unsigned int maxid = 0;
378 
379  TestCommWorld->maxloc(max, maxid);
380 
381  CPPUNIT_ASSERT_EQUAL (max+1,
382  cast_int<int>(TestCommWorld->size()));
383  CPPUNIT_ASSERT_EQUAL (maxid, static_cast<unsigned int>(TestCommWorld->size()-1));
384  }
385 
386 
387 
389  {
390  LOG_UNIT_TEST;
391 
392  Real min = (TestCommWorld->rank() + 1) % TestCommWorld->size();
393  unsigned int minid = 0;
394 
395  TestCommWorld->minloc(min, minid);
396 
397  CPPUNIT_ASSERT_EQUAL (min, Real(0));
398  CPPUNIT_ASSERT_EQUAL (minid, static_cast<unsigned int>(TestCommWorld->size()-1));
399  }
400 
401 
402 
404  {
405  LOG_UNIT_TEST;
406 
407  Real max = TestCommWorld->rank();
408  unsigned int maxid = 0;
409 
410  TestCommWorld->maxloc(max, maxid);
411 
412  // Hope nobody uses 1677216 procs with single precision
413  CPPUNIT_ASSERT_EQUAL (max+1, Real(TestCommWorld->size()));
414  CPPUNIT_ASSERT_EQUAL (maxid, static_cast<unsigned int>(TestCommWorld->size()-1));
415  }
416 
417 
418 
420  {
421  LOG_UNIT_TEST;
422 
423  double min = std::numeric_limits<double>::infinity();
424 
425  TestCommWorld->min(min);
426 
427  CPPUNIT_ASSERT_EQUAL (min, std::numeric_limits<double>::infinity());
428 
429  min = -std::numeric_limits<double>::infinity();
430 
431  TestCommWorld->min(min);
432 
433  CPPUNIT_ASSERT_EQUAL (min, -std::numeric_limits<double>::infinity());
434  }
435 
436 
437 
439  {
440  LOG_UNIT_TEST;
441 
442  double max = std::numeric_limits<double>::infinity();
443 
444  TestCommWorld->max(max);
445 
446  CPPUNIT_ASSERT_EQUAL (max, std::numeric_limits<double>::infinity());
447 
448  max = -std::numeric_limits<double>::infinity();
449 
450  TestCommWorld->max(max);
451 
452  CPPUNIT_ASSERT_EQUAL (max, -std::numeric_limits<double>::infinity());
453  }
454 
455 
456 
458  {
459  LOG_UNIT_TEST;
460 
461  unsigned int procup = (TestCommWorld->rank() + 1) %
462  TestCommWorld->size();
463  unsigned int procdown = (TestCommWorld->size() +
464  TestCommWorld->rank() - 1) %
465  TestCommWorld->size();
466 
467  std::vector<unsigned int> src_val(3), recv_val(3);
468 
469  src_val[0] = 0;
470  src_val[1] = 1;
471  src_val[2] = 2;
472 
473  Parallel::Request request;
474 
475  if (TestCommWorld->size() > 1)
476  {
477  // Default communication
479 
480  TestCommWorld->send (procup,
481  src_val,
482  request);
483 
484  TestCommWorld->receive (procdown,
485  recv_val);
486 
487  Parallel::wait (request);
488 
489  CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
490 
491  for (std::size_t i=0; i<src_val.size(); i++)
492  CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
493 
494 
495  // Synchronous communication
497  std::fill (recv_val.begin(), recv_val.end(), 0);
498 
499  TestCommWorld->send (procup,
500  src_val,
501  request);
502 
503  TestCommWorld->receive (procdown,
504  recv_val);
505 
506  Parallel::wait (request);
507 
508  CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
509 
510  for (std::size_t i=0; i<src_val.size(); i++)
511  CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
512 
513  // Restore default communication
515  }
516  }
517 
518 
519 
521  {
522  LOG_UNIT_TEST;
523 
524  unsigned int procup = (TestCommWorld->rank() + 1) %
525  TestCommWorld->size();
526  unsigned int procdown = (TestCommWorld->size() +
527  TestCommWorld->rank() - 1) %
528  TestCommWorld->size();
529 
530  std::vector<unsigned int> src_val(3), recv_val(3);
531 
532  src_val[0] = 0;
533  src_val[1] = 1;
534  src_val[2] = 2;
535 
536  Parallel::Request request;
537 
538  if (TestCommWorld->size() > 1)
539  {
540  // Default communication
542 
543  TestCommWorld->receive (procdown,
544  recv_val,
545  request);
546 
547  TestCommWorld->send (procup,
548  src_val);
549 
550  Parallel::wait (request);
551 
552  CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
553 
554  for (std::size_t i=0; i<src_val.size(); i++)
555  CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
556 
557  // Synchronous communication
559  std::fill (recv_val.begin(), recv_val.end(), 0);
560 
561 
562  TestCommWorld->receive (procdown,
563  recv_val,
564  request);
565 
566  TestCommWorld->send (procup,
567  src_val);
568 
569  Parallel::wait (request);
570 
571  CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
572 
573  for (std::size_t i=0; i<src_val.size(); i++)
574  CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
575 
576  // Restore default communication
578  }
579  }
580 
581 
583  {
584  LOG_UNIT_TEST;
585 
586  unsigned int procup = (TestCommWorld->rank() + 1) %
587  TestCommWorld->size();
588  unsigned int procdown = (TestCommWorld->size() +
589  TestCommWorld->rank() - 1) %
590  TestCommWorld->size();
591 
592  std::set<unsigned int> src_val, recv_val;
593 
594  src_val.insert(4); // Chosen by fair dice roll
595  src_val.insert(42);
596  src_val.insert(1337);
597 
598  Parallel::Request request;
599 
600  if (TestCommWorld->size() > 1)
601  {
602  TestCommWorld->send (procup, src_val, request);
603 
604  TestCommWorld->receive (procdown,
605  recv_val);
606 
607  CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
608 
609  for (std::set<unsigned int>::const_iterator
610  it = src_val.begin(), end = src_val.end(); it != end;
611  ++it)
612  CPPUNIT_ASSERT ( recv_val.count(*it) );
613 
614  Parallel::wait (request);
615 
616  recv_val.clear();
617  }
618  }
619 
620 
621 
623  {
624  LOG_UNIT_TEST;
625 
626  unsigned int procup = (TestCommWorld->rank() + 1) %
627  TestCommWorld->size();
628  unsigned int procdown = (TestCommWorld->size() +
629  TestCommWorld->rank() - 1) %
630  TestCommWorld->size();
631 
632  std::vector<std::vector<unsigned int> > src_val(3), recv_val;
633 
634  src_val[0].push_back(4); // Chosen by fair dice roll
635  src_val[2].push_back(procup);
636  src_val[2].push_back(TestCommWorld->rank());
637 
638  Parallel::Request request;
639 
640  if (TestCommWorld->size() > 1)
641  {
642  TestCommWorld->send (procup, src_val, request);
643 
644  TestCommWorld->receive (procdown,
645  recv_val);
646 
647  CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
648 
649  for (std::size_t i = 0; i != 3; ++i)
650  CPPUNIT_ASSERT_EQUAL ( src_val[i].size(), recv_val[i].size() );
651 
652  CPPUNIT_ASSERT_EQUAL ( recv_val[0][0], static_cast<unsigned int> (4) );
653  CPPUNIT_ASSERT_EQUAL ( recv_val[2][0], static_cast<unsigned int> (TestCommWorld->rank()) );
654  CPPUNIT_ASSERT_EQUAL ( recv_val[2][1], procdown );
655 
656  Parallel::wait (request);
657 
658  recv_val.clear();
659  }
660  }
661 
662 
664  {
665  LOG_UNIT_TEST;
666 
667  unsigned int procup = (TestCommWorld->rank() + 1) %
668  TestCommWorld->size();
669  unsigned int procdown = (TestCommWorld->size() +
670  TestCommWorld->rank() - 1) %
671  TestCommWorld->size();
672 
673  // Any odd processor out does nothing
674  if ((TestCommWorld->size() % 2) && procup == 0)
675  return;
676 
677  std::vector<std::vector<unsigned int> > src_val(3), recv_val;
678 
679  src_val[0].push_back(4); // Chosen by fair dice roll
680  src_val[2].push_back(procup);
681  src_val[2].push_back(TestCommWorld->rank());
682 
683  // Other even numbered processors send
684  if (TestCommWorld->rank() % 2 == 0)
685  TestCommWorld->send (procup, src_val);
686  // Other odd numbered processors receive
687  else
688  {
689  TestCommWorld->receive (procdown,
690  recv_val);
691 
692  CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
693 
694  for (std::size_t i = 0; i != 3; ++i)
695  CPPUNIT_ASSERT_EQUAL ( src_val[i].size(), recv_val[i].size() );
696 
697  CPPUNIT_ASSERT_EQUAL ( recv_val[0][0], static_cast<unsigned int> (4) );
698  CPPUNIT_ASSERT_EQUAL ( recv_val[2][0], static_cast<unsigned int> (TestCommWorld->rank()) );
699  CPPUNIT_ASSERT_EQUAL ( recv_val[2][1], procdown );
700 
701  recv_val.clear();
702  }
703  }
704 
705 
706 
708  {
709  LOG_UNIT_TEST;
710 
711  double inf = std::numeric_limits<double>::infinity();
712 
713  double *infptr = TestCommWorld->rank()%2 ? NULL : &inf;
714 
715  CPPUNIT_ASSERT (TestCommWorld->semiverify(infptr));
716 
717  inf = -std::numeric_limits<double>::infinity();
718 
719  CPPUNIT_ASSERT (TestCommWorld->semiverify(infptr));
720  }
721 
722 
723  void testSplit ()
724  {
725  LOG_UNIT_TEST;
726 
727  Parallel::Communicator subcomm;
728  unsigned int rank = TestCommWorld->rank();
729  unsigned int color = rank % 2;
730  TestCommWorld->split(color, rank, subcomm);
731 
732  CPPUNIT_ASSERT(subcomm.size() >= 1);
733  CPPUNIT_ASSERT(subcomm.size() >= TestCommWorld->size() / 2);
734  CPPUNIT_ASSERT(subcomm.size() <= TestCommWorld->size() / 2 + 1);
735  }
736 
737 
739  {
740  LOG_UNIT_TEST;
741 
742  Parallel::Communicator subcomm;
743  unsigned int rank = TestCommWorld->rank();
744  Parallel::info i = 0;
745  int type = 0;
746 #ifdef LIBMESH_HAVE_MPI
747  type = MPI_COMM_TYPE_SHARED;
748  i = MPI_INFO_NULL;
749 #endif
750  TestCommWorld->split_by_type(type, rank, i, subcomm);
751 
752  CPPUNIT_ASSERT(subcomm.size() >= 1);
753  CPPUNIT_ASSERT(subcomm.size() <= TestCommWorld->size());
754  }
755 };
756 
void testBroadcast(Container &&src)
MPI_Request request
void send_mode(const SendMode sm)
void allgather(const T &send_data, std::vector< T, A > &recv_data) const
void testAllGatherHalfEmptyVectorString()
void testIsendRecv()
void testAllGatherEmptyVectorString()
void testBarrier()
void scatter(const std::vector< T, A > &data, T &recv, const unsigned int root_id=0) const
void testBroadcastNestedType()
void minloc(T &r, unsigned int &min_id) const
libMesh::Parallel::Communicator * TestCommWorld
Definition: driver.C:159
void testAllGatherEmptyVectorString()
void tearDown()
Definition: parallel_test.C:61
void gather(const unsigned int root_id, const T &send_data, std::vector< T, A > &recv) const
void testScatter()
void barrier() const
void testAllGatherString()
processor_id_type rank() const
void testSplitByType()
void testBroadcastNestedType()
The libMesh namespace provides an interface to certain functionality in the library.
void testAllGatherHalfEmptyVectorString()
void testBroadcast()
void testIrecvSend()
void testIrecvSend()
void testRecvIsendVecVecs()
void testSplit()
void testAllGatherString()
void testSendRecvVecVecs()
void testRecvIsendSets()
processor_id_type size() const
uint8_t processor_id_type
void testMinlocReal()
Status receive(const unsigned int dest_processor_id, T &buf, const MessageTag &tag=any_tag) const
void testMin()
void min(const T &r, T &o, Request &req) const
void testGatherString()
Definition: parallel_test.C:80
void testScatter()
void testAllGatherVectorString()
void testGather()
Definition: parallel_test.C:66
bool semiverify(const T *r) const
void testAllGatherVectorString()
void split(int color, int key, Communicator &target) const
void testRecvIsendSets()
void testMaxloc()
void maxloc(T &r, unsigned int &max_id) const
void testMinloc()
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
void testMinloc()
void split_by_type(int split_type, int key, info i, Communicator &target) const
void testSemiVerify()
void testInfinityMin()
void testMaxlocReal()
void testInfinityMax()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void testAllGather()
void max(const T &r, T &o, Request &req) const
void testMaxloc()
void testIsendRecv()
void send(const unsigned int dest_processor_id, const T &buf, const MessageTag &tag=no_tag) const
void testInfinityMax()
void testGather()
void testMax()
void testBarrier()
void testSplit()
CPPUNIT_TEST_SUITE_REGISTRATION(ParallelTest)
void testInfinityMin()
void testRecvIsendVecVecs()
void testSendRecvVecVecs()
void testAllGather()
Definition: parallel_test.C:94
void testGatherString()
std::vector< std::string > _number
Definition: parallel_test.C:43