CArl
Code Arlequin / C++ implementation
mpi_carl_tools.cpp
Go to the documentation of this file.
1 #include "mpi_carl_tools.h"
2 
4  std::unordered_map<int,int>& index_map,
5  const libMesh::Parallel::Communicator& CommComm,
6  int origin_rank)
7 {
8  int rank = CommComm.rank();
9  int dummy_vector_size = -1;
10  std::vector<int> dummy_vector;
11 
12  if(rank == origin_rank)
13  {
14  dummy_vector_size = index_map.size();
15  dummy_vector.resize(2*dummy_vector_size);
16 
17  std::unordered_map<int,int>::iterator mapIt = index_map.begin();
18  std::unordered_map<int,int>::iterator end_mapIt = index_map.end();
19  int dummy_iii = 0;
20  for( ; mapIt != end_mapIt; ++mapIt)
21  {
22  dummy_vector[2*dummy_iii] = mapIt->first;
23  dummy_vector[2*dummy_iii + 1] = mapIt->second;
24  ++dummy_iii;
25  }
26  }
27 
28  CommComm.barrier();
29  CommComm.broadcast(dummy_vector_size,origin_rank);
30 
31  if( rank != origin_rank )
32  {
33  dummy_vector.resize(2*dummy_vector_size);
34  }
35  CommComm.broadcast(dummy_vector,origin_rank);
36 
37  if( rank != origin_rank)
38  {
39  index_map.reserve(dummy_vector_size);
40  for(int iii = 0; iii < dummy_vector_size; ++iii)
41  {
42  index_map[dummy_vector[2*iii]] = dummy_vector[2*iii+1];
43  }
44  }
45 };
void broadcast_index_unordered_map(std::unordered_map< int, int > &index_map, const libMesh::Parallel::Communicator &CommComm, int origin_rank=0)