From 6dc0e7687385bcbf5a00d2b51c204df87e5d1c72 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Tue, 3 Jul 2018 16:42:54 +0200 Subject: [PATCH] Support for tetrahedron --- src/mesh/Connectivity3D.hpp | 33 ++++++++++++++++++++++++++------- src/output/VTKWriter.hpp | 6 +++++- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/mesh/Connectivity3D.hpp b/src/mesh/Connectivity3D.hpp index f57829ef0..b51f137b3 100644 --- a/src/mesh/Connectivity3D.hpp +++ b/src/mesh/Connectivity3D.hpp @@ -163,8 +163,29 @@ private: switch (cell_nb_nodes) { case 4: { // tetrahedron cell_nb_faces[j] = 4; - std::cerr << "tetrahedron cell type NIY!\n"; - std::exit(0); + // face 0 + Face f0({m_cell_nodes(j,1), + m_cell_nodes(j,2), + m_cell_nodes(j,3)}); + face_cells_map[f0].push_back(std::make_tuple(j, 0, f0.reversed())); + + // face 1 + Face f1({m_cell_nodes(j,0), + m_cell_nodes(j,3), + m_cell_nodes(j,2)}); + face_cells_map[f1].push_back(std::make_tuple(j, 1, f1.reversed())); + + // face 2 + Face f2({m_cell_nodes(j,0), + m_cell_nodes(j,1), + m_cell_nodes(j,3)}); + face_cells_map[f2].push_back(std::make_tuple(j, 2, f2.reversed())); + + // face 3 + Face f3({m_cell_nodes(j,0), + m_cell_nodes(j,2), + m_cell_nodes(j,1)}); + face_cells_map[f3].push_back(std::make_tuple(j, 3, f3.reversed())); break; } case 8: { // hexahedron @@ -225,14 +246,10 @@ private: m_cell_nb_faces = cell_nb_faces; m_number_of_faces = face_cells_map.size(); - Kokkos::View<unsigned short*> face_nb_nodes("face_nb_nodes", m_number_of_faces); - Kokkos::parallel_for(m_number_of_faces, KOKKOS_LAMBDA(const unsigned int& l) { - face_nb_nodes[l] = 4; - }); - m_face_nb_nodes = face_nb_nodes; std::cerr << __FILE__ << ':' << __LINE__ << ':' << rang::fg::red << " m_max_nb_node_per_face forced to 4" << rang::fg::reset << '\n'; + Kokkos::View<unsigned short*> face_nb_nodes("face_nb_nodes", m_number_of_faces); m_max_nb_node_per_face = 4; Kokkos::View<unsigned int**> face_nodes("face_nodes", m_number_of_faces, m_max_nb_node_per_face); { @@ -242,10 +259,12 @@ private: for(size_t r=0; r<face.nodeIdList().size(); ++r) { face_nodes(l,r) = face.nodeIdList()[r]; } + face_nb_nodes[l] = face.nodeIdList().size(); ++l; } } m_face_nodes = face_nodes; + m_face_nb_nodes = face_nb_nodes; Kokkos::View<unsigned short*> face_nb_cells("face_nb_cells", m_number_of_faces); { diff --git a/src/output/VTKWriter.hpp b/src/output/VTKWriter.hpp index 50fb147c6..4e34f666c 100644 --- a/src/output/VTKWriter.hpp +++ b/src/output/VTKWriter.hpp @@ -102,7 +102,11 @@ class VTKWriter break; } case 4: { - fout << "9 "; + if (mesh.meshDimension() == 3) { + fout << "10 "; + } else { + fout << "9 "; + } break; } case 8: { -- GitLab