29 #ifdef pFlow_Build_MPI
30 parrentCommunicator_ = MPI_COMM_WORLD;
31 localCommunicator_ = MPI_COMM_WORLD;
39 const std::vector<int> &ranks
45 #ifdef pFlow_Build_MPI
46 parrentCommunicator_ = MPI_COMM_WORLD;
48 if(ranks.size()> this->globalSize() )
51 "the size of ranks is larger than parrent communicator size "<<
endl;
55 MPI_Group globalGroup;
56 MPI_Comm_group(parrentCommunicator_, &globalGroup);
59 MPI_Group_incl(globalGroup, ranks.size(), ranks.data(), &localGroup);
63 CheckMPI( MPI_Comm_create(parrentCommunicator_, localGroup, &localCommunicator_),
true);
65 isPartOfLocal_ = localCommunicator_ != MPI_COMM_NULL;
69 MPI_Comm_set_name(localCommunicator_, name.c_str());
71 MPI_Comm_size(localCommunicator_, &localSize_);
72 MPI_Comm_rank(localCommunicator_, &localRank_);
80 "rank size for processors should not be greater than 1.";
89 #ifdef pFlow_Build_MPI
95 const std::vector<int> &ranks
101 parrentCommunicator_ = parrentComm;
105 MPI_Comm_size(parrentCommunicator_, &parSize);
107 if(ranks.size()> parSize )
110 "the size of ranks is larger than parrent communicator size "<<
endl;
115 MPI_Comm_group(parrentCommunicator_, &parGroup);
117 MPI_Group localGroup;
118 MPI_Group_incl(parGroup, ranks.size(), ranks.data(), &localGroup);
122 CheckMPI( MPI_Comm_create(parrentCommunicator_, localGroup, &localCommunicator_),
true);
128 MPI_Comm_set_name(localCommunicator_,
name.c_str());
130 MPI_Comm_size(localCommunicator_, &
localSize_);
131 MPI_Comm_rank(localCommunicator_, &
localRank_);