From ca389bdeb1296a4c61b2889512b9a4e5dcc415c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Tue, 14 Dec 2021 18:10:07 +0100 Subject: [PATCH] Add support for polygonal cells --- src/mesh/CellType.hpp | 3 +++ src/mesh/ConnectivityBuilderBase.cpp | 8 ++++++++ src/output/VTKWriter.cpp | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/src/mesh/CellType.hpp b/src/mesh/CellType.hpp index 3a0f01520..335cfc647 100644 --- a/src/mesh/CellType.hpp +++ b/src/mesh/CellType.hpp @@ -11,6 +11,7 @@ enum class CellType : unsigned short Triangle, Quadrangle, + Polygon, Diamond, Hexahedron, @@ -28,6 +29,8 @@ name(CellType cell_type) return "line"; case CellType::Triangle: return "triangle"; + case CellType::Polygon: + return "polygon"; case CellType::Quadrangle: return "quadrangle"; case CellType::Diamond: diff --git a/src/mesh/ConnectivityBuilderBase.cpp b/src/mesh/ConnectivityBuilderBase.cpp index 3da4837ee..55c56b3a4 100644 --- a/src/mesh/ConnectivityBuilderBase.cpp +++ b/src/mesh/ConnectivityBuilderBase.cpp @@ -61,6 +61,14 @@ ConnectivityBuilderBase::_computeCellFaceAndFaceNodeConnectivities(ConnectivityD face_cells_map[f3].emplace_back(std::make_tuple(j, 3, f3.reversed())); break; } + case CellType::Polygon: { + cell_nb_faces[j] = cell_nodes.size(); + for (size_t i = 0; i < cell_nodes.size(); ++i) { + Face f({cell_nodes[i], cell_nodes[(i + 1) % cell_nodes.size()]}, node_number_vector); + face_cells_map[f].emplace_back(std::make_tuple(j, i, f.reversed())); + } + break; + } default: { std::ostringstream error_msg; error_msg << name(descriptor.cell_type_vector[j]) << ": unexpected cell type in dimension 2"; diff --git a/src/output/VTKWriter.cpp b/src/output/VTKWriter.cpp index 4f40e9af3..7b407256a 100644 --- a/src/output/VTKWriter.cpp +++ b/src/output/VTKWriter.cpp @@ -491,6 +491,10 @@ VTKWriter::_write(const std::shared_ptr<const MeshType>& mesh, types[j] = 9; break; } + case CellType::Polygon: { + types[j] = 7; + break; + } case CellType::Tetrahedron: { types[j] = 10; break; -- GitLab