source: XIOS/dev/dev_olga/src/extern/remap/src/mpi_cascade.cpp @ 1022

Last change on this file since 1022 was 1022, checked in by mhnguyen, 7 years ago
File size: 719 bytes
Line 
1#include "mpi_cascade.hpp"
2#include <iostream>
3
4namespace sphereRemap {
5
6CMPICascade::CMPICascade(int nodes_per_level, MPI_Comm comm)
7{
8        int remaining_levels;
9        MPI_Comm intraComm;
10        int l = 0; // current level
11        do {
12                level.push_back(comm);
13                remaining_levels = ilog(nodes_per_level /*base*/, level[l].size /*arg*/) + 1;
14                level[l].group_size = iroot(remaining_levels, level[l].size); // group_size^remaining_levels <= size
15                level[l].p_grp_size = level[l].size/level[l].group_size;
16       
17                MPI_Comm_split(comm, level[l].colour(), level[l].key(), &intraComm);
18                MPI_Comm_split(comm, level[l].p_colour(), level[l].p_key(), &(level[l].pg_comm));
19                comm = intraComm;
20                l++;
21        } while (--remaining_levels);
22        num_levels = l;
23}
24
25}
Note: See TracBrowser for help on using the repository browser.