MCPcopy Create free account
hub / github.com/FEniCS/dolfinx / rank_type

Method rank_type

cpp/dolfinx/common/IndexMap.cpp:1359–1387  ·  view source on GitHub ↗

-----------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

1357}
1358//-----------------------------------------------------------------------------
1359std::array<std::vector<int>, 2> IndexMap::rank_type(int split_type) const
1360{
1361 int ierr;
1362
1363 MPI_Comm comm_s;
1364 ierr = MPI_Comm_split_type(_comm.comm(), split_type, 0, MPI_INFO_NULL,
1365 &comm_s);
1366 dolfinx::MPI::check_error(_comm.comm(), ierr);
1367
1368 int size_s = dolfinx::MPI::size(comm_s);
1369 int rank = dolfinx::MPI::rank(_comm.comm());
1370
1371 // Note: in most cases, size_s will be much smaller than the size of
1372 // _comm
1373 std::vector<int> ranks_s(size_s);
1374 ierr = MPI_Allgather(&rank, 1, MPI_INT, ranks_s.data(), 1, MPI_INT, comm_s);
1375 dolfinx::MPI::check_error(comm_s, ierr);
1376
1377 std::vector<int> split_dest, split_src;
1378 std::ranges::set_intersection(_dest, ranks_s, std::back_inserter(split_dest));
1379 assert(std::ranges::is_sorted(split_dest));
1380 std::ranges::set_intersection(_src, ranks_s, std::back_inserter(split_src));
1381 assert(std::ranges::is_sorted(split_src));
1382
1383 ierr = MPI_Comm_free(&comm_s);
1384 dolfinx::MPI::check_error(comm_s, ierr);
1385
1386 return {std::move(split_dest), std::move(split_src)};
1387}
1388//-----------------------------------------------------------------------------

Callers 2

test_rank_splitFunction · 0.80
comm_graphMethod · 0.80

Calls 3

dataMethod · 0.80
check_errorFunction · 0.50
commMethod · 0.45

Tested by 1

test_rank_splitFunction · 0.64