109 std::vector<unsigned int> owning_ranks_of_ghosts(
114 process(indexset_has,
117 owning_ranks_of_ghosts,
122 std::pair<types::global_dof_index, types::global_dof_index>>,
123 std::vector<unsigned int>>
129 std::map<unsigned int, std::vector<types::global_dof_index>> recv_map;
131 for (
const auto &owner : owning_ranks_of_ghosts)
132 recv_map[owner] = std::vector<types::global_dof_index>();
136 recv_map[owning_ranks_of_ghosts[i]].push_back(i);
139 for (
const auto &target_with_indexset : recv_map)
141 recv_ranks.push_back(target_with_indexset.first);
143 for (
const auto cell_index : target_with_indexset.second)
154 for (
const auto &target_with_indexset : targets_with_indexset)
156 send_ranks.push_back(target_with_indexset.first);
158 for (
const auto cell_index : target_with_indexset.second)
170 const std::vector<types::global_dof_index> &indices_has,
171 const std::vector<types::global_dof_index> &indices_want,
176 std::vector<types::global_dof_index> indices_has_clean;
177 indices_has_clean.reserve(indices_has.size());
179 for (
const auto i : indices_has)
181 indices_has_clean.push_back(i);
183 std::vector<types::global_dof_index> indices_want_clean;
184 indices_want_clean.reserve(indices_want.size());
186 for (
const auto i : indices_want)
188 indices_want_clean.push_back(i);
192 indices_has_clean.empty() ?
194 (*std::max_element(indices_has_clean.begin(),
195 indices_has_clean.end()) +
199 indices_want_clean.empty() ?
201 (*std::max_element(indices_want_clean.begin(),
202 indices_want_clean.end()) +
211 index_set_has.
add_indices(indices_has_clean.begin(),
212 indices_has_clean.end());
215 index_set_want.
add_indices(indices_want_clean.begin(),
216 indices_want_clean.end());
224 std::vector<types::global_dof_index> temp_map_send(
232 i = temp_map_send[i];
236 std::vector<types::global_dof_index> temp_map_recv(
244 i = temp_map_recv[i];
virtual std::vector< unsigned int > run(const std::vector< unsigned int > &targets, const std::function< RequestType(const unsigned int)> &create_request, const std::function< AnswerType(const unsigned int, const RequestType &)> &answer_request, const std::function< void(const unsigned int, const AnswerType &)> &process_answer, const MPI_Comm comm) override
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)