From cda108fc4dbb64975ec2e072d0154aa400ed27a0 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Tue, 9 Oct 2018 18:44:49 +0200 Subject: [PATCH] Begin use of item ids to create dispatching messages - need to read item ids from the mesh - need to generate ids for non specified ones (e.g. Gmsh does not provide numbers for all boundary elements) --- src/mesh/GmshReader.cpp | 42 +++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp index c258855f3..6b071de30 100644 --- a/src/mesh/GmshReader.cpp +++ b/src/mesh/GmshReader.cpp @@ -177,14 +177,14 @@ void GmshReader::_dispatch() Partitioner P; Array<int> cell_new_owner = P.partition(mesh_graph); - const std::vector<Array<const int>> cell_to_send_by_proc + const std::vector<Array<const CellId>> cell_to_send_by_proc = [&] () { - std::vector<std::vector<int>> cell_vector_to_send_by_proc(commSize()); + std::vector<std::vector<CellId>> cell_vector_to_send_by_proc(commSize()); for (size_t i=0; i<cell_new_owner.size(); ++i) { - cell_vector_to_send_by_proc[cell_new_owner[i]].push_back(i); + cell_vector_to_send_by_proc[cell_new_owner[i]].push_back(CellId{i}); } - std::vector<Array<const int>> cell_to_send_by_proc(commSize()); + std::vector<Array<const CellId>> cell_to_send_by_proc(commSize()); for (size_t i=0; i<commSize(); ++i) { cell_to_send_by_proc[i] = convert_to_array(cell_vector_to_send_by_proc[i]); } @@ -192,6 +192,20 @@ void GmshReader::_dispatch() return std::move(cell_to_send_by_proc); } (); + const std::vector<Array<const int>> cell_number_to_send_by_proc + = [&] () { + std::vector<Array<const int>> cell_number_to_send_by_proc(commSize()); + for (size_t i=0; i<commSize(); ++i) { + const Array<const CellId>& cell_list = cell_to_send_by_proc[i]; + Array<int> cell_number_list(cell_list.size()); + parallel_for (cell_list.size(), PASTIS_LAMBDA(const CellId& cell_id) { +#warning must use table of cell numbers + cell_number_list[cell_id] = cell_list[cell_id]; + }); + cell_number_to_send_by_proc[i] = cell_number_list; + } + return std::move(cell_number_to_send_by_proc); + } (); Array<int> nb_cell_to_send_by_proc(commSize()); for (size_t i=0; i<commSize(); ++i) { @@ -206,22 +220,30 @@ void GmshReader::_dispatch() + Sum(nb_cell_to_recv_by_proc) - Sum(nb_cell_to_send_by_proc); - std::vector<Array<int>> recv_cell_by_proc(commSize()); + std::vector<Array<int>> recv_cell_number_by_proc(commSize()); for (size_t i=0; i<commSize(); ++i) { - recv_cell_by_proc[i] = Array<int>(nb_cell_to_recv_by_proc[i]); + recv_cell_number_by_proc[i] = Array<int>(nb_cell_to_recv_by_proc[i]); } - exchange(cell_to_send_by_proc, recv_cell_by_proc); + exchange(cell_number_to_send_by_proc, recv_cell_number_by_proc); - Array<int> new_cell_id(new_cell_number); + // std::vector<Array<CellType>> cell_type_to_send_by_proc + // = [&] () { + // CellValue<const CellType> cell_type = mesh.connectivity().cellType(); + // std::vector<std::vector<CellType>> cell_type_vector_to_send_by_proc(commSize()); + // for (CellId i=0; i<mesh.numberOfCells(); ++i) { + // cell_type_vector_to_send_by_proc[cell_new_owner[i]].push_back(cell_type[i]); + // } + // return cell_type_vector_to_send_by_proc; + // } (); for (int i_rank=0; i_rank < commSize(); ++i_rank) { if (commRank() == i_rank) { std::cout << "----- rank=" << i_rank << " -----\n"; for (int j_rank=0; j_rank < commSize(); ++j_rank) { std::cout << "recv from " << j_rank << ':'; - for (size_t i=0; i<recv_cell_by_proc[j_rank].size(); ++i) { - std::cout << ' ' << recv_cell_by_proc[j_rank][i]; + 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]; } std::cout << '\n' << std::flush; } -- GitLab