diff --git a/src/mesh/DiamondDualConnectivityBuilder.cpp b/src/mesh/DiamondDualConnectivityBuilder.cpp index e20f972c4adecd1e2d449e82044357bac03c9ef4..0c503521fcacd80b7de7cef483ff8ebb69dd3ad4 100644 --- a/src/mesh/DiamondDualConnectivityBuilder.cpp +++ b/src/mesh/DiamondDualConnectivityBuilder.cpp @@ -30,11 +30,11 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor(const Connec const auto& primal_cell_number = primal_connectivity.cellNumber(); - const size_t max_node_number = max(primal_node_number); + const size_t cell_number_shift = max(primal_node_number) + 1; for (CellId primal_cell_id = 0; primal_cell_id < primal_number_of_cells; ++primal_cell_id) { diamond_descriptor.node_number_vector[primal_number_of_nodes + primal_cell_id] = - primal_cell_number[primal_cell_id] + max_node_number; + primal_cell_number[primal_cell_id] + cell_number_shift; } const size_t diamond_number_of_cells = primal_number_of_faces; @@ -164,21 +164,34 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor<1>(const Con diamond_descriptor.node_number_vector.resize(diamond_number_of_nodes); - const auto& primal_node_number = primal_connectivity.nodeNumber(); - const size_t diamond_number_of_cells = primal_number_of_faces; const size_t number_of_kept_nodes = 2 * (diamond_number_of_nodes - diamond_number_of_cells); const auto& primal_node_to_cell_matrix = primal_connectivity.nodeToCellMatrix(); size_t next_kept_node_id = 0; - for (NodeId node_id = 0; node_id < primal_connectivity.numberOfNodes(); ++node_id) { - const auto& primal_node_cell_list = primal_node_to_cell_matrix[node_id]; + diamond_descriptor.node_number_vector.resize(diamond_number_of_nodes); + + const auto& primal_node_number = primal_connectivity.nodeNumber(); + + for (NodeId primal_node_id = 0; primal_node_id < primal_connectivity.numberOfNodes(); ++primal_node_id) { + const auto& primal_node_cell_list = primal_node_to_cell_matrix[primal_node_id]; if (primal_node_cell_list.size() == 1) { - diamond_descriptor.node_number_vector[next_kept_node_id++] = primal_node_number[node_id]; + diamond_descriptor.node_number_vector[next_kept_node_id++] = primal_node_number[primal_node_id]; } } + const size_t primal_number_of_kept_nodes = next_kept_node_id; + + const auto& primal_cell_number = primal_connectivity.cellNumber(); + + const size_t cell_number_shift = max(primal_node_number) + 1; + + for (CellId primal_cell_id = 0; primal_cell_id < primal_number_of_cells; ++primal_cell_id) { + diamond_descriptor.node_number_vector[primal_number_of_kept_nodes + primal_cell_id] = + primal_cell_number[primal_cell_id] + cell_number_shift; + } + if (number_of_kept_nodes != next_kept_node_id) { throw UnexpectedError("unexpected number of kept node" + std::to_string(next_kept_node_id) + " != " + std::to_string(number_of_kept_nodes)); @@ -200,8 +213,6 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor<1>(const Con diamond_descriptor.cell_to_node_vector.resize(diamond_number_of_cells); - ; - const auto& primal_node_local_number_in_their_cells = primal_connectivity.nodeLocalNumbersInTheirCells(); { diff --git a/src/mesh/DiamondDualMeshBuilder.cpp b/src/mesh/DiamondDualMeshBuilder.cpp index c959899f0a20fc97e37a01b493d18b9b6e61e5d2..6554cb512f0ff2d9e556575b4b1ac23bdd047e8f 100644 --- a/src/mesh/DiamondDualMeshBuilder.cpp +++ b/src/mesh/DiamondDualMeshBuilder.cpp @@ -60,8 +60,6 @@ class MeshToDualDataMapper if constexpr (Dimension == 1) { const auto& node_to_cell_matrix = primal_connectivity.nodeToCellMatrix(); - throw UnexpectedError("Looks like diamond mesh construction is buggy in 1D"); - NodeId dual_node_id = 0; m_primal_node_to_dual_node_map = [&]() { std::vector<std::pair<NodeId, NodeId>> primal_node_to_dual_node_vector;