-/* Copyright (c) 2014-2020. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2014-2023. 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. */
static int assignnodes(int ndim, const std::vector<int>& factors, std::vector<int>& dims);
static int getfactors(int num, std::vector<int>& factors);
-namespace simgrid{
-namespace smpi{
+namespace simgrid::smpi {
void Topo::setComm(MPI_Comm comm)
{
Topo_Cart::Topo_Cart(MPI_Comm comm_old, int ndims, const int dims[], const int periods[], int /*reorder*/, MPI_Comm* comm_cart)
: Topo_Cart(ndims)
{
- MPI_Group newGroup;
- MPI_Group oldGroup;
-
int rank = comm_old->rank();
if(ndims != 0) {
position_[i] = rank / nranks;
rank = rank % nranks;
}
-
+
if(comm_cart != nullptr){
- oldGroup = comm_old->group();
- newGroup = new Group(newSize);
+ const Group* oldGroup = comm_old->group();
+ auto* newGroup = new Group(newSize);
for (int i = 0 ; i < newSize ; i++) {
newGroup->set_mapping(oldGroup->actor(i), i);
}
return MPI_SUCCESS;
}
-}
-}
+} // namespace simgrid::smpi
/*
* assignnodes
factors.push_back(2);
}
/* determine all occurrences of uneven prime numbers up to sqrt(num) */
- for (int d = 3; (num > 1) && (d * d < num); d += 2) {
+ int d = 3;
+ while ((num > 1) && (d * d < num)) {
while((num % d) == 0) {
num /= d;
factors.push_back(d);
}
+ d += 2;
}
/* as we looped only up to sqrt(num) one factor > sqrt(num) may be left over */
if(num != 1) {