diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp index 465e7f01220249508f9df4088c7fe651a57ed3b2..11188d9a0efda9704022960bd0dd8a2cc1a07e07 100644 --- a/src/mesh/ConnectivityDispatcher.cpp +++ b/src/mesh/ConnectivityDispatcher.cpp @@ -327,13 +327,19 @@ ConnectivityDispatcher<Dimension>::_buildSubItemNumberToIdMap() this->_dispatchedInfo<ItemOfItemT>().m_sub_item_numbers_to_recv_by_proc; auto& sub_item_number_id_map = this->_dispatchedInfo<ItemOfItemT::sub_item_type>().m_number_to_id_map; + int sub_item_id = 0; for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) { - int sub_item_id = 0; for (size_t i = 0; i < cell_sub_item_number_to_recv_by_proc[i_rank].size(); ++i) { - int sub_item_number = cell_sub_item_number_to_recv_by_proc[i_rank][i]; + int sub_item_number = cell_sub_item_number_to_recv_by_proc[i_rank][i]; + + std::cout << "looking for " << sub_item_number; auto [iterator, inserted] = sub_item_number_id_map.insert(std::make_pair(sub_item_number, sub_item_id)); - if (inserted) - sub_item_id++; + if (inserted) { + std::cout << ": inserted with item_id " << sub_item_id << '\n'; + ++sub_item_id; + } else { + std::cout << ": *exists* with item_id " << iterator->second << '\n'; + } } } } @@ -444,9 +450,22 @@ ConnectivityDispatcher<Dimension>::_buildItemToSubItemDescriptor() const auto& sub_item_number_id_map = this->_dispatchedInfo<sub_item_type>().m_number_to_id_map; + std::cout << "sub_item_number_id_map = "; + std::cout << rang::fgB::magenta << rang::style::reversed; + for (auto&& i_sub : sub_item_number_id_map) { + std::cout << ' ' << i_sub.first << "->" << i_sub.second; + } + std::cout << rang::fg::reset << rang::style::reset; + std::cout << '\n'; + const auto& recv_item_of_item_numbers_by_proc = this->_dispatchedInfo<ItemOfItemT>().m_sub_item_numbers_to_recv_by_proc; + for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) { + std::cout << rang::fgB::blue << "recv_item_of_item_numbers_by_proc[" << i_rank + << "] = " << recv_item_of_item_numbers_by_proc[i_rank] << rang::fg::reset << '\n'; + } + std::vector<std::vector<unsigned int>> item_to_subitem_legacy; size_t number_of_node_by_cell = 0; for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) { @@ -903,10 +922,13 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType this->_buildItemReferenceList<ItemType::node>(); std::cout << "m_new_descriptor.nodeNumberVector() = " << m_new_descriptor.nodeNumberVector() << '\n'; + std::cout << rang::fgB::blue << m_new_descriptor.nodeNumberVector() << rang::fg::reset << '\n'; std::cout << "m_new_descriptor.nodeOwnerVector() = " << m_new_descriptor.nodeOwnerVector() << '\n'; + std::cout << rang::fgB::blue << m_new_descriptor.nodeOwnerVector() << rang::fg::reset << '\n'; std::cout << "m_new_descriptor.cellOwnerVector().size() = " << m_new_descriptor.cellOwnerVector().size() << '\n'; + std::cout << rang::fgB::blue << m_new_descriptor.cellOwnerVector() << rang::fg::reset << '\n'; std::cout << "m_new_descriptor.cellTypeVector().size() = " << m_new_descriptor.cellTypeVector().size() << '\n'; std::cout << "m_new_descriptor.cellToNodeMatrix().numberOfRows() = " @@ -917,9 +939,6 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType << ")" << m_new_descriptor.cellToNodeMatrix()[cell_id] << '\n'; } - std::cout.flush(); - parallel::barrier(); - m_dispatched_connectivity = ConnectivityType::build(m_new_descriptor); { diff --git a/src/mesh/ConnectivityDispatcher.hpp b/src/mesh/ConnectivityDispatcher.hpp index 9d9d6a14fa95f10a8b78553c0cd69732b8804393..dae37d986ebb620f8333b6fec3fb3203c1da1bb1 100644 --- a/src/mesh/ConnectivityDispatcher.hpp +++ b/src/mesh/ConnectivityDispatcher.hpp @@ -273,14 +273,16 @@ class ConnectivityDispatcher const auto& recv_item_id_correspondance_by_proc = this->_dispatchedInfo<item_type>().m_recv_id_correspondance_by_proc; ItemValue<MutableDataType, item_type> new_item_value(*m_dispatched_connectivity); + size_t shift = 0; for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) { const auto& recv_item_id_correspondance = recv_item_id_correspondance_by_proc[i_rank]; const auto& recv_item_value = recv_item_value_by_proc[i_rank]; parallel_for( - recv_item_value.size(), PUGS_LAMBDA(size_t r) { - const ItemId& item_id = recv_item_id_correspondance[r]; - new_item_value[item_id] = recv_item_value[r]; + recv_item_value.size(), PUGS_LAMBDA(size_t index) { + const ItemId shifted_item_id = recv_item_id_correspondance[index] + shift; + new_item_value[shifted_item_id] = recv_item_value[index]; }); + shift += recv_item_value.size(); } return new_item_value; } diff --git a/src/mesh/MeshBuilderBase.cpp b/src/mesh/MeshBuilderBase.cpp index 861050ed7e3cfd070ab13d6eaa7eed489f4352a4..9bc0b5ddd8605b06109072f2dc8d1fe2d7f55f16 100644 --- a/src/mesh/MeshBuilderBase.cpp +++ b/src/mesh/MeshBuilderBase.cpp @@ -42,7 +42,27 @@ MeshBuilderBase::_dispatch() std::shared_ptr dispatched_connectivity = p_dispatcher->dispatchedConnectivity(); NodeValue<Rd> dispatched_xr = p_dispatcher->dispatch(mesh.xr()); - m_mesh = std::make_shared<MeshVariant>(std::make_shared<const MeshType>(dispatched_connectivity, dispatched_xr)); + std::cout << rang::fgB::magenta << "dispatched xr=" << dispatched_xr << rang::fg::reset << '\n'; + + auto dispatched_mesh = std::make_shared<const MeshType>(dispatched_connectivity, dispatched_xr); + + { + const auto& d_connectivity = dispatched_mesh->connectivity(); + auto cell_to_node_matrix = d_connectivity.cellToNodeMatrix(); + auto d_xr = dispatched_mesh->xr(); + auto d_cell_number = d_connectivity.cellNumber(); + + for (CellId cell_id = 0; cell_id < dispatched_mesh->numberOfCells(); ++cell_id) { + std::cout << cell_id << "(" << d_cell_number[cell_id] << "):\n"; + const auto cell_nodes = cell_to_node_matrix[cell_id]; + for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { + const NodeId node_id = cell_nodes[i_node]; + std::cout << i_node << ": " << d_xr[node_id] << '\n'; + } + } + } + m_mesh = std::make_shared<MeshVariant>(dispatched_mesh); + // m_mesh = std::make_shared<MeshVariant>(std::make_shared<const MeshType>(dispatched_connectivity, dispatched_xr)); } template void MeshBuilderBase::_dispatch<1>();