-/* Copyright (c) 2014-2019. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2014-2020. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <vector>
/* static functions */
-static int assignnodes(int ndim, int nfactor, int *pfacts,int **pdims);
+static int assignnodes(int ndim, int nfactor, const int* pfacts, int** pdims);
static int getfactors(int num, int *nfators, int **factors);
namespace simgrid{
namespace smpi{
+void Topo::setComm(MPI_Comm comm)
+{
+ xbt_assert(not comm_);
+ comm_ = comm;
+ if (comm_)
+ comm_->topo_ = this;
+}
+
/*******************************************************************************
* Cartesian topologies
******************************************************************************/
*comm_cart = MPI_COMM_NULL;
return;
}
- oldGroup = comm_old->group();
- newGroup = new Group(newSize);
- for (int i = 0 ; i < newSize ; i++) {
- newGroup->set_mapping(oldGroup->actor(i), i);
- }
nnodes_ = newSize;
position_[i] = rank / nranks;
rank = rank % nranks;
}
- if(comm_cart != nullptr)
+
+ if(comm_cart != nullptr){
+ oldGroup = comm_old->group();
+ newGroup = new Group(newSize);
+ for (int i = 0 ; i < newSize ; i++) {
+ newGroup->set_mapping(oldGroup->actor(i), i);
+ }
*comm_cart = new Comm(newGroup, this);
+ }
} else {
if(comm_cart != nullptr){
if (rank == 0) {
- *comm_cart = new Comm(new Group(MPI_COMM_SELF->group()), this);
+ MPI_Group group = new Group(MPI_COMM_SELF->group());
+ *comm_cart = new Comm(group, this);
} else {
*comm_cart = MPI_COMM_NULL;
}
/* Get # of free-to-be-assigned processes and # of free dimensions */
int freeprocs = nnodes;
int freedims = 0;
- int *p = dims;
+ const int* p = dims;
for (int i = 0; i < ndims; ++i) {
if (*p == 0) {
++freedims;
* - ptr to array of dimensions (returned value)
* Returns: - 0 or ERROR
*/
-static int assignnodes(int ndim, int nfactor, int *pfacts, int **pdims)
+static int assignnodes(int ndim, int nfactor, const int* pfacts, int** pdims)
{
int *pmin;