From 5f04dfad2e09609e8adfb95c9ef49b595aed7da0 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Thu, 25 Oct 2018 19:10:15 +0200 Subject: [PATCH] Begin exchange of cell nodes --- src/mesh/GmshReader.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp index 51435e729..c411552b7 100644 --- a/src/mesh/GmshReader.cpp +++ b/src/mesh/GmshReader.cpp @@ -271,13 +271,41 @@ void GmshReader::_dispatch() std::vector<Array<int>> recv_number_of_node_per_cell_by_proc = dispatcher.exchange(number_of_node_per_cell); + const auto& cell_list_to_send_by_proc = dispatcher.cell_list_to_send_by_proc(); + const NodeValue<const int>& node_number = mesh.connectivity().nodeNumber(); + + + std::vector<Array<int>> cell_node_number_to_send_by_proc(parallel::size()); + for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) { + std::vector<int> node_number_by_cell_vector; + for (size_t j=0; j<cell_list_to_send_by_proc[i_rank].size(); ++j) { + const CellId& cell_id = cell_list_to_send_by_proc[i_rank][j]; + const auto& cell_node_list = cell_to_node_matrix[cell_id]; + for (size_t r=0; r<cell_node_list.size(); ++r) { + const NodeId& node_id = cell_node_list[r]; + node_number_by_cell_vector.push_back(node_number[node_id]); + } + } + cell_node_number_to_send_by_proc[i_rank] = convert_to_array(node_number_by_cell_vector); + } + + std::vector<Array<int>> recv_cell_node_number_by_proc(parallel::size()); + for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) { + recv_cell_node_number_by_proc[i_rank] + = Array<int>(Sum(recv_number_of_node_per_cell_by_proc[i_rank])); + } + + parallel::exchange(cell_node_number_to_send_by_proc, recv_cell_node_number_by_proc); + for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) { if (parallel::rank() == i_rank) { std::cout << "----- rank=" << i_rank << " -----\n"; for (size_t j_rank=0; j_rank < parallel::size(); ++j_rank) { std::cout << "recv from " << j_rank << ':'; for (size_t i=0; i<recv_cell_number_by_proc[j_rank].size(); ++i) { - std::cout << ' ' << recv_cell_number_by_proc[j_rank][i] << '[' << name(recv_cell_type_by_proc[j_rank][i])<< ':' << recv_number_of_node_per_cell_by_proc[j_rank][i] << "] "; + std::cout << ' ' << recv_cell_number_by_proc[j_rank][i] + << '[' << name(recv_cell_type_by_proc[j_rank][i]) + << ':' << recv_number_of_node_per_cell_by_proc[j_rank][i] << "] "; } std::cout << '\n' << std::flush; } -- GitLab