return MPI_ERR_ARG;
} else if (n == 0) {
*newgroup = group;
- if (group != MPI_COMM_WORLD->group() && group != MPI_COMM_SELF->group() && group != MPI_GROUP_EMPTY)
+ if (group != MPI_GROUP_EMPTY &&
+ group != MPI_COMM_WORLD->group() &&
+ ((smpi_process()->comm_self_is_set()) || (group != MPI_COMM_SELF->group())))
group->ref();
return MPI_SUCCESS;
} else if (n == group->size()) {
}
if (n == 0) {
*newgroup = group;
- if (group != MPI_COMM_WORLD->group() && group != MPI_COMM_SELF->group() &&
- group != MPI_GROUP_EMPTY)
+ if (group != MPI_GROUP_EMPTY &&
+ group != MPI_COMM_WORLD->group() &&
+ ((smpi_process()->comm_self_is_set()) || (group != MPI_COMM_SELF->group())))
group->ref();
return MPI_SUCCESS;
} else {
void simulated_start();
double simulated_elapsed() const;
MPI_Comm comm_world() const;
+ bool comm_self_is_set() {return (comm_self_ != MPI_COMM_NULL);};
MPI_Comm comm_self();
MPI_Comm comm_intra();
void set_comm_intra(MPI_Comm comm);
if (comm_self_ == MPI_COMM_NULL) {
auto* group = new Group(1);
comm_self_ = new Comm(group, nullptr);
+ comm_self_->set_name("MPI_COMM_SELF");
group->set_mapping(actor_, 0);
}
return comm_self_;
if(this == MPI_COMM_WORLD && name_.empty()) {
strncpy(name, "MPI_COMM_WORLD", 15);
*len = 14;
- } else if(this == MPI_COMM_SELF && name_.empty()) {
- strncpy(name, "MPI_COMM_SELF", 14);
- *len = 13;
} else {
*len = snprintf(name, MPI_MAX_NAME_STRING+1, "%s", name_.c_str());
}