- int size1 = size_;
- int size2 = group2->size();
- for (int i = 0; i < size2; i++) {
- int proc2 = group2->index(i);
- int proc1 = this->rank(proc2);
- if (proc1 == MPI_UNDEFINED) {
- size1++;
- }
- }
- if (size1 == 0) {
- *newgroup = MPI_GROUP_EMPTY;
- } else {
- *newgroup = new Group(size1);
- size2 = this->size();
- for (int i = 0; i < size2; i++) {
- int proc1 = this->index(i);
- (*newgroup)->set_mapping(proc1, i);
- }
- for (int i = size2; i < size1; i++) {
- int proc2 = group2->index(i - size2);
- (*newgroup)->set_mapping(proc2, i);
- }
- }
- return MPI_SUCCESS;