-----------------------------------------------------------------------------
| 1329 | } |
| 1330 | //----------------------------------------------------------------------------- |
| 1331 | std::vector<std::int32_t> IndexMap::weights_dest() const |
| 1332 | { |
| 1333 | int ierr = 0; |
| 1334 | std::vector<std::int32_t> w_src = this->weights_src(); |
| 1335 | |
| 1336 | std::vector<MPI_Request> requests(_dest.size() + _src.size()); |
| 1337 | |
| 1338 | std::vector<std::int32_t> w_dest(_dest.size()); |
| 1339 | for (std::size_t i = 0; i < _dest.size(); ++i) |
| 1340 | { |
| 1341 | ierr = MPI_Irecv(w_dest.data() + i, 1, MPI_INT32_T, _dest[i], MPI_ANY_TAG, |
| 1342 | _comm.comm(), &requests[i]); |
| 1343 | dolfinx::MPI::check_error(_comm.comm(), ierr); |
| 1344 | } |
| 1345 | |
| 1346 | for (std::size_t i = 0; i < _src.size(); ++i) |
| 1347 | { |
| 1348 | ierr = MPI_Isend(w_src.data() + i, 1, MPI_INT32_T, _src[i], 0, _comm.comm(), |
| 1349 | &requests[i + _dest.size()]); |
| 1350 | dolfinx::MPI::check_error(_comm.comm(), ierr); |
| 1351 | } |
| 1352 | |
| 1353 | ierr = MPI_Waitall(requests.size(), requests.data(), MPI_STATUS_IGNORE); |
| 1354 | dolfinx::MPI::check_error(_comm.comm(), ierr); |
| 1355 | |
| 1356 | return w_dest; |
| 1357 | } |
| 1358 | //----------------------------------------------------------------------------- |
| 1359 | std::array<std::vector<int>, 2> IndexMap::rank_type(int split_type) const |
| 1360 | { |