diff --git a/src/mesh/CellType.hpp b/src/mesh/CellType.hpp index 3a0f01520bba191ff4535dfb407ddda55edab3c9..335cfc6471b9baf41af1642c40c4325938ce53cb 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 3da4837ee005fffaf7744165e1470f6ac5730183..55c56b3a4b78f28ecdf8613d04d4d0348b9e5c4a 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 4f40e9af371333d2879ca28a2671278c365d6bbb..7b407256ac7cfac5e354330a99a081b73e822540 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;