diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp index 6f3d10539e655a3d72d60c9b3f059aeef5e869e8..24dc24a4eb3ec153c441d266f96978135ac3d743 100644 --- a/src/mesh/GmshReader.cpp +++ b/src/mesh/GmshReader.cpp @@ -803,6 +803,41 @@ void GmshReader::_dispatch() } } + std::vector<Array<bool>> cell_face_is_reversed_to_send_by_proc(parallel::size()); + { + const auto& cell_face_is_reversed = mesh.connectivity().cellFaceIsReversed(); + for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) { + std::vector<bool> face_is_reversed_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& face_is_reversed = cell_face_is_reversed.itemValues(cell_id); + for (size_t L=0; L<face_is_reversed.size(); ++L) { + face_is_reversed_by_cell_vector.push_back(face_is_reversed[L]); + } + } + cell_face_is_reversed_to_send_by_proc[i_rank] = convert_to_array(face_is_reversed_by_cell_vector); + } + } + + std::vector<Array<bool>> recv_cell_face_is_reversed_by_proc(parallel::size()); + for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) { + recv_cell_face_is_reversed_by_proc[i_rank] + = Array<bool>(sum(recv_number_of_face_per_cell_by_proc[i_rank])); + } + + parallel::exchange(cell_face_is_reversed_to_send_by_proc, recv_cell_face_is_reversed_by_proc); + + for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) { + int l=0; + for (size_t i=0; i<recv_cell_number_by_proc[i_rank].size(); ++i) { + std::vector<bool> face_is_reversed_vector; + for (int k=0; k<recv_number_of_face_per_cell_by_proc[i_rank][i]; ++k) { + face_is_reversed_vector.push_back(recv_cell_face_is_reversed_by_proc[i_rank][l++]); + } + new_descriptor.cell_face_is_reversed_vector.emplace_back(face_is_reversed_vector); + } + } + std::vector<Array<const FaceId>> send_face_id_by_proc(parallel::size()); for (size_t i_rank=0; i_rank<parallel::size(); ++i_rank) { Array<bool> tag(mesh.numberOfFaces());