Skip to content
Snippets Groups Projects
Commit 17c37aa7 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Fix node numbering for diamond dual mesh

It was actually wrong for all dimensions (not only for 1D)
parent 4472d432
No related branches found
No related tags found
1 merge request!42Feature/diamond dual mesh manager
...@@ -30,11 +30,11 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor(const Connec ...@@ -30,11 +30,11 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor(const Connec
const auto& primal_cell_number = primal_connectivity.cellNumber(); 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) { 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] = 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; const size_t diamond_number_of_cells = primal_number_of_faces;
...@@ -164,21 +164,34 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor<1>(const Con ...@@ -164,21 +164,34 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor<1>(const Con
diamond_descriptor.node_number_vector.resize(diamond_number_of_nodes); 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 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 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(); const auto& primal_node_to_cell_matrix = primal_connectivity.nodeToCellMatrix();
size_t next_kept_node_id = 0; size_t next_kept_node_id = 0;
for (NodeId node_id = 0; node_id < primal_connectivity.numberOfNodes(); ++node_id) { diamond_descriptor.node_number_vector.resize(diamond_number_of_nodes);
const auto& primal_node_cell_list = primal_node_to_cell_matrix[node_id];
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) { 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) { if (number_of_kept_nodes != next_kept_node_id) {
throw UnexpectedError("unexpected number of kept node" + std::to_string(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)); " != " + std::to_string(number_of_kept_nodes));
...@@ -200,8 +213,6 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor<1>(const Con ...@@ -200,8 +213,6 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor<1>(const Con
diamond_descriptor.cell_to_node_vector.resize(diamond_number_of_cells); diamond_descriptor.cell_to_node_vector.resize(diamond_number_of_cells);
;
const auto& primal_node_local_number_in_their_cells = primal_connectivity.nodeLocalNumbersInTheirCells(); const auto& primal_node_local_number_in_their_cells = primal_connectivity.nodeLocalNumbersInTheirCells();
{ {
......
...@@ -60,8 +60,6 @@ class MeshToDualDataMapper ...@@ -60,8 +60,6 @@ class MeshToDualDataMapper
if constexpr (Dimension == 1) { if constexpr (Dimension == 1) {
const auto& node_to_cell_matrix = primal_connectivity.nodeToCellMatrix(); 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; NodeId dual_node_id = 0;
m_primal_node_to_dual_node_map = [&]() { m_primal_node_to_dual_node_map = [&]() {
std::vector<std::pair<NodeId, NodeId>> primal_node_to_dual_node_vector; std::vector<std::pair<NodeId, NodeId>> primal_node_to_dual_node_vector;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment