- s_smpi_mpi_instance_t* instance = static_cast<s_smpi_mpi_instance_t*>(xbt_dict_get_or_null(smpi_instances, instance_id));
- xbt_assert(instance, "Error, unknown instance %s", instance_id);
+ Instance& instance = smpi_instances.at(instance_id);
+
+ if (instance.comm_world == MPI_COMM_NULL) {
+ MPI_Group group = new simgrid::smpi::Group(instance.size);
+ instance.comm_world = new simgrid::smpi::Comm(group, nullptr);
+ }
+ instance.present_processes++;
+ index_to_process_data[index] = instance.index + rank;
+ instance.comm_world->group()->set_mapping(index, rank);
+}
+
+//get the index of the process in the process_data array
+MPI_Comm* smpi_deployment_comm_world(const char* instance_id)
+{
+ if (smpi_instances.empty()) { // no instance registered, we probably used smpirun.
+ return nullptr;
+ }
+ Instance& instance = smpi_instances.at(instance_id);
+ return &instance.comm_world;
+}