diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp index 0ff14c610c5bae3e9fc71507c54026ddafb42bc7..20f9a789659c61f7bbff3983eae7661b6b30a797 100644 --- a/src/mesh/GmshReader.cpp +++ b/src/mesh/GmshReader.cpp @@ -39,7 +39,8 @@ GmshConnectivityBuilder<1>::GmshConnectivityBuilder(const GmshReader::GmshData& Array<int> cell_number_vector(nb_cells); Array<unsigned int> cell_to_node_row(nb_cells + 1); - parallel_for(cell_to_node_row.size(), PUGS_LAMBDA(const CellId cell_id) { cell_to_node_row[cell_id] = 2 * cell_id; }); + parallel_for( + cell_to_node_row.size(), PUGS_LAMBDA(const CellId cell_id) { cell_to_node_row[cell_id] = 2 * cell_id; }); Array<unsigned int> cell_to_node_list(cell_to_node_row[cell_to_node_row.size() - 1]); for (CellId cell_id = 0; cell_id < nb_cells; ++cell_id) { @@ -1053,7 +1054,8 @@ inline auto remove_embedding_spaces = [](std::string_view line) -> std::string_v inline constexpr int number_of_gmsh_entities = 93; -inline constexpr auto primitive_number_of_nodes = []() constexpr { +inline constexpr auto primitive_number_of_nodes = []() constexpr +{ std::array<short, number_of_gmsh_entities> number_of_nodes; number_of_nodes.fill(-1); @@ -1092,9 +1094,11 @@ inline constexpr auto primitive_number_of_nodes = []() constexpr { number_of_nodes[92] = 125; // 125-node fourth order hexahedron return number_of_nodes; -}(); +} +(); -inline constexpr auto entity_name = []() constexpr { +inline constexpr auto entity_name = []() constexpr +{ std::array<std::string_view, number_of_gmsh_entities> name; name.fill("unknown"); name[0] = "edges"; @@ -1132,9 +1136,11 @@ inline constexpr auto entity_name = []() constexpr { name[92] = "125-node fourth order hexahedron"; return name; -}(); +} +(); -inline constexpr auto supported_entity = []() constexpr { +inline constexpr auto supported_entity = []() constexpr +{ std::array<bool, number_of_gmsh_entities> supported; supported.fill(false); supported[0] = true; // edge @@ -1147,7 +1153,8 @@ inline constexpr auto supported_entity = []() constexpr { supported[14] = true; // point return supported; -}(); +} +(); inline auto tokenize = [](std::string_view& line, auto& tokens) { size_t token_idx = 0; @@ -1585,7 +1592,7 @@ struct actions<elements_section> gmsh_data.entity_number.resize(number_of_elements); gmsh_data.entity_type.resize(number_of_elements); gmsh_data.entity_reference.resize(number_of_elements); - gmsh_data.__elementVertices.resize(number_of_elements); + gmsh_data.element_vertices.resize(number_of_elements); std::vector<std::string_view> tokens; tokens.reserve(20); @@ -1628,9 +1635,9 @@ struct actions<elements_section> const size_t first_node_index = 3 + number_of_tags; const size_t number_of_nodes = primitive_number_of_nodes[entity_type]; - gmsh_data.__elementVertices[i_element].resize(number_of_nodes); + gmsh_data.element_vertices[i_element].resize(number_of_nodes); for (size_t i_node = 0; i_node < number_of_nodes; ++i_node) { - gmsh_data.__elementVertices[i_element][i_node] = parse_int(tokens[first_node_index + i_node]); + gmsh_data.element_vertices[i_element][i_node] = parse_int(tokens[first_node_index + i_node]); } } } @@ -1687,7 +1694,7 @@ struct actions<elements_section> gmsh_data.entity_number.resize(number_of_elements); gmsh_data.entity_type.resize(number_of_elements); - gmsh_data.__elementVertices.resize(number_of_elements); + gmsh_data.element_vertices.resize(number_of_elements); std::vector<std::string_view> element_tokens; element_tokens.reserve(20); @@ -1718,24 +1725,26 @@ struct actions<elements_section> parse_int(block_tokens[0]); // entity dim parse_int(block_tokens[1]); // entity tag - const size_t element_type = parse_int(block_tokens[2]); + const size_t element_type = parse_int(block_tokens[2]) - 1; const size_t number_of_block_elements = parse_size_t(block_tokens[3]); for (size_t i_block_element = 0; i_block_element < number_of_block_elements; ++i_block_element) { gmsh_data.entity_type[i_element + i_block_element] = element_type; } - const size_t number_of_nodes = primitive_number_of_nodes[element_type]; + const size_t element_number_of_nodes = primitive_number_of_nodes[element_type]; + for (size_t i_block_element = 0; i_block_element < number_of_block_elements; ++i_block_element) { - gmsh_data.__elementVertices[i_element + i_block_element].resize(number_of_nodes); + gmsh_data.element_vertices[i_element + i_block_element].resize(element_number_of_nodes); ++line_number; auto element_line = remove_embedding_spaces(get_next_line(body)); + tokenize_variable(element_line, element_tokens); gmsh_data.entity_number[i_element + i_block_element] = parse_int(element_tokens[0]); - for (size_t i_node = 0; i_node < number_of_nodes; ++i_node) { - gmsh_data.__elementVertices[i_element + i_block_element][i_node] = parse_int(element_tokens[1 + i_node]); + for (size_t i_node = 0; i_node < element_number_of_nodes; ++i_node) { + gmsh_data.element_vertices[i_element + i_block_element][i_node] = parse_int(element_tokens[1 + i_node]); } } @@ -1766,6 +1775,8 @@ struct actions<elements_section> } else { throw UnexpectedError("invalid file format " + std::to_string(gmsh_data.format.version)); } + + std::cout << rang::fgB::yellow << __FILE__ << ':' << __LINE__ << rang::fg::reset << ": read element: done\n"; } }; @@ -2033,13 +2044,13 @@ GmshReader::__proceedData() // Element structures filling for (size_t i = 0; i < m_mesh_data.entity_type.size(); ++i) { - std::vector<int>& elementVertices = m_mesh_data.__elementVertices[i]; + std::vector<int>& element_vertices = m_mesh_data.element_vertices[i]; switch (m_mesh_data.entity_type[i]) { // Supported entities case 0: { // edge int& edge_number = element_number[0]; - const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; - const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[1]]; + const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; + const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[1]]; m_mesh_data.edge_entity[edge_number] = GmshData::Edge{a, b}; m_mesh_data.edge_entity_ref[edge_number] = m_mesh_data.entity_reference[i]; @@ -2050,9 +2061,9 @@ GmshReader::__proceedData() case 1: { // triangles int& triangle_number = element_number[1]; - const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; - const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[1]]; - const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[2]]; + const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; + const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[1]]; + const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[2]]; m_mesh_data.triangle_entity[triangle_number] = GmshData::Triangle{a, b, c}; m_mesh_data.triangle_entity_ref[triangle_number] = m_mesh_data.entity_reference[i]; @@ -2063,10 +2074,10 @@ GmshReader::__proceedData() case 2: { // quadrangle int& quadrilateral_number = element_number[2]; - const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; - const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[1]]; - const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[2]]; - const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[3]]; + const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; + const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[1]]; + const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[2]]; + const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[3]]; m_mesh_data.quadrangle_entity[quadrilateral_number] = GmshData::Quadrangle{a, b, c, d}; m_mesh_data.quadrangle_entity_ref[quadrilateral_number] = m_mesh_data.entity_reference[i]; @@ -2077,10 +2088,10 @@ GmshReader::__proceedData() case 3: { // tetrahedra int& tetrahedron_number = element_number[3]; - const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; - const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[1]]; - const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[2]]; - const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[3]]; + const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; + const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[1]]; + const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[2]]; + const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[3]]; m_mesh_data.tetrahedron_entity[tetrahedron_number] = GmshData::Tetrahedron{a, b, c, d}; m_mesh_data.tetrahedron_entity_ref[tetrahedron_number] = m_mesh_data.entity_reference[i]; @@ -2091,14 +2102,14 @@ GmshReader::__proceedData() case 4: { // hexaredron int& hexahedron_number = element_number[4]; - const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; - const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[1]]; - const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[2]]; - const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[3]]; - const auto e = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[4]]; - const auto f = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[5]]; - const auto g = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[6]]; - const auto h = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[7]]; + const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; + const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[1]]; + const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[2]]; + const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[3]]; + const auto e = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[4]]; + const auto f = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[5]]; + const auto g = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[6]]; + const auto h = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[7]]; m_mesh_data.hexahedron_entity[hexahedron_number] = GmshData::Hexahedron{a, b, c, d, e, f, g, h}; m_mesh_data.hexahedron_entity_ref[hexahedron_number] = m_mesh_data.entity_reference[i]; @@ -2108,12 +2119,12 @@ GmshReader::__proceedData() } case 5: { // prism int& prism_number = element_number[5]; - const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; - const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[1]]; - const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[2]]; - const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[3]]; - const auto e = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[4]]; - const auto f = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[5]]; + const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; + const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[1]]; + const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[2]]; + const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[3]]; + const auto e = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[4]]; + const auto f = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[5]]; m_mesh_data.prism_entity[prism_number] = GmshData::Prism{a, b, c, d, e, f}; m_mesh_data.prism_entity_ref[prism_number] = m_mesh_data.entity_reference[i]; @@ -2124,11 +2135,11 @@ GmshReader::__proceedData() case 6: { // pyramid int& pyramid_number = element_number[6]; - const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; - const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[1]]; - const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[2]]; - const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[3]]; - const auto e = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[4]]; + const auto a = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; + const auto b = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[1]]; + const auto c = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[2]]; + const auto d = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[3]]; + const auto e = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[4]]; m_mesh_data.pyramid_entity[pyramid_number] = GmshData::Pyramid{a, b, c, d, e}; m_mesh_data.pyramid_entity_ref[pyramid_number] = m_mesh_data.entity_reference[i]; @@ -2139,7 +2150,7 @@ GmshReader::__proceedData() // Unsupported entities case 14: { // point int& point_number = element_number[14]; - m_mesh_data.point_entity[point_number] = m_mesh_data.gmsh_node_to_node_id_correspondance[elementVertices[0]]; + m_mesh_data.point_entity[point_number] = m_mesh_data.gmsh_node_to_node_id_correspondance[element_vertices[0]]; m_mesh_data.point_entity_ref[point_number] = m_mesh_data.entity_reference[i]; m_mesh_data.point_entity_number[point_number] = m_mesh_data.entity_number[i]; point_number++; diff --git a/src/mesh/GmshReader.hpp b/src/mesh/GmshReader.hpp index 24682243937853556e89764e2ca906d4505407af..4a5479aac937881009e97b69db158ed19a82d7f9 100644 --- a/src/mesh/GmshReader.hpp +++ b/src/mesh/GmshReader.hpp @@ -146,7 +146,7 @@ class GmshReader : public MeshBuilderBase /** * References */ - std::vector<std::vector<int>> __elementVertices; + std::vector<std::vector<int>> element_vertices; std::map<unsigned int, PhysicalRefId> m_physical_ref_map; };