From bd3720c6b109bb4dba2f8ca48b98a09eedc605f0 Mon Sep 17 00:00:00 2001 From: Norihiro Watanabe <norihiro.watanabe@ufz.de> Date: Wed, 24 Aug 2016 22:39:16 +0200 Subject: [PATCH] fix the unmatched face issue in a generated tetra mesh. generate 6 tets from 1 hex --- MeshLib/MeshGenerators/MeshGenerator.cpp | 41 +++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/MeshLib/MeshGenerators/MeshGenerator.cpp b/MeshLib/MeshGenerators/MeshGenerator.cpp index 18d06ee3078..87fddf6c106 100644 --- a/MeshLib/MeshGenerators/MeshGenerator.cpp +++ b/MeshLib/MeshGenerators/MeshGenerator.cpp @@ -513,7 +513,7 @@ Mesh* MeshGenerator::generateRegularTetMesh( //elements std::vector<Element*> elements; - elements.reserve(n_x_cells * n_y_cells * n_z_cells * 5); + elements.reserve(n_x_cells * n_y_cells * n_z_cells * 6); for (std::size_t i = 0; i < n_z_cells; i++) { @@ -530,31 +530,31 @@ Mesh* MeshGenerator::generateRegularTetMesh( std::array<Node*, 4> element_nodes; // bottom element_nodes[0] = nodes[offset_z1 + offset_y1 + k]; - element_nodes[1] = nodes[offset_z1 + offset_y1 + k + 1]; - element_nodes[2] = nodes[offset_z1 + offset_y2 + k + 1]; + element_nodes[1] = nodes[offset_z1 + offset_y2 + k + 1]; + element_nodes[2] = nodes[offset_z1 + offset_y2 + k]; // top - element_nodes[3] = nodes[offset_z2 + offset_y1 + k + 1]; + element_nodes[3] = nodes[offset_z2 + offset_y1 + k]; elements.push_back (new Tet(element_nodes)); } // tet 2 { std::array<Node*, 4> element_nodes; // bottom - element_nodes[0] = nodes[offset_z1 + offset_y1 + k]; - element_nodes[1] = nodes[offset_z1 + offset_y2 + k + 1]; - element_nodes[2] = nodes[offset_z1 + offset_y2 + k]; + element_nodes[0] = nodes[offset_z1 + offset_y2 + k + 1]; + element_nodes[1] = nodes[offset_z1 + offset_y2 + k]; // top - element_nodes[3] = nodes[offset_z2 + offset_y2 + k]; + element_nodes[2] = nodes[offset_z2 + offset_y1 + k]; + element_nodes[3] = nodes[offset_z2 + offset_y2 + k + 1]; elements.push_back (new Tet(element_nodes)); } // tet 3 { std::array<Node*, 4> element_nodes; // bottom - element_nodes[0] = nodes[offset_z1 + offset_y1 + k]; + element_nodes[0] = nodes[offset_z1 + offset_y2 + k]; // top element_nodes[1] = nodes[offset_z2 + offset_y1 + k]; - element_nodes[2] = nodes[offset_z2 + offset_y1 + k + 1]; + element_nodes[2] = nodes[offset_z2 + offset_y2 + k + 1]; element_nodes[3] = nodes[offset_z2 + offset_y2 + k]; elements.push_back (new Tet(element_nodes)); } @@ -562,11 +562,11 @@ Mesh* MeshGenerator::generateRegularTetMesh( { std::array<Node*, 4> element_nodes; // bottom - element_nodes[0] = nodes[offset_z1 + offset_y2 + k + 1]; + element_nodes[0] = nodes[offset_z1 + offset_y1 + k]; + element_nodes[1] = nodes[offset_z1 + offset_y1 + k + 1]; + element_nodes[2] = nodes[offset_z1 + offset_y2 + k + 1]; // top - element_nodes[1] = nodes[offset_z2 + offset_y1 + k + 1]; - element_nodes[2] = nodes[offset_z2 + offset_y2 + k + 1]; - element_nodes[3] = nodes[offset_z2 + offset_y2 + k]; + element_nodes[3] = nodes[offset_z2 + offset_y1 + k + 1]; elements.push_back (new Tet(element_nodes)); } // tet 5 @@ -576,10 +576,21 @@ Mesh* MeshGenerator::generateRegularTetMesh( element_nodes[0] = nodes[offset_z1 + offset_y1 + k]; element_nodes[1] = nodes[offset_z1 + offset_y2 + k + 1]; // top - element_nodes[2] = nodes[offset_z2 + offset_y2 + k]; + element_nodes[2] = nodes[offset_z2 + offset_y1 + k]; element_nodes[3] = nodes[offset_z2 + offset_y1 + k + 1]; elements.push_back (new Tet(element_nodes)); } + // tet 6 + { + std::array<Node*, 4> element_nodes; + // bottom + element_nodes[0] = nodes[offset_z1 + offset_y2 + k + 1]; + // top + element_nodes[1] = nodes[offset_z2 + offset_y1 + k]; + element_nodes[2] = nodes[offset_z2 + offset_y1 + k + 1]; + element_nodes[3] = nodes[offset_z2 + offset_y2 + k + 1]; + elements.push_back (new Tet(element_nodes)); + } } } } -- GitLab