Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[TRACING] Rename TIT action reduceScatter -> reducescatter
[simgrid.git] / src / smpi / bindings / smpi_pmpi_topo.cpp
1 /* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "private.hpp"
7 #include "smpi_comm.hpp"
8
9 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi_pmpi);
10
11 /* PMPI User level calls */
12
13 /* The topo part of MPI_COMM_WORLD should always be nullptr. When other topologies will be implemented, not only should we
14  * check if the topology is nullptr, but we should check if it is the good topology type (so we have to add a
15  *  MPIR_Topo_Type field, and replace the MPI_Topology field by an union)*/
16
17 int PMPI_Cart_create(MPI_Comm comm_old, int ndims, int* dims, int* periodic, int reorder, MPI_Comm* comm_cart) {
18   if (comm_old == MPI_COMM_NULL){
19     return MPI_ERR_COMM;
20   } else if (ndims < 0 || (ndims > 0 && (dims == nullptr || periodic == nullptr)) || comm_cart == nullptr) {
21     return MPI_ERR_ARG;
22   } else{
23     simgrid::smpi::Topo_Cart* topo = new simgrid::smpi::Topo_Cart(comm_old, ndims, dims, periodic, reorder, comm_cart);
24     if(*comm_cart==MPI_COMM_NULL)
25       delete topo;
26     return MPI_SUCCESS;
27   }
28 }
29
30 int PMPI_Cart_rank(MPI_Comm comm, int* coords, int* rank) {
31   if(comm == MPI_COMM_NULL || comm->topo() ==