diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp index 6a2995687cbff74907766d694b5443ed95551b9a..2420eb4dba02662207ec8e0e15e2300c36d72ab2 100644 --- a/src/mesh/GmshReader.cpp +++ b/src/mesh/GmshReader.cpp @@ -70,7 +70,6 @@ GmshConnectivityBuilder<1>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_point_list.second.size(); ++j) { point_list[j] = ref_point_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_point_list.first); bool is_boundary = true; for (size_t i_node = 0; i_node < point_list.size(); ++i_node) { @@ -80,7 +79,16 @@ GmshConnectivityBuilder<1>::GmshConnectivityBuilder(const GmshReader::GmshData& } } - descriptor.addRefItemList(RefNodeList(physical_ref_id.refId(), point_list, is_boundary)); + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_point_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_point_list.first}; + } + }(); + + descriptor.addRefItemList(RefNodeList(ref_id, point_list, is_boundary)); } std::map<unsigned int, std::vector<unsigned int>> ref_cells_map; @@ -95,8 +103,17 @@ GmshConnectivityBuilder<1>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_cell_list.second.size(); ++j) { cell_list[j] = ref_cell_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_cell_list.first); - descriptor.addRefItemList(RefCellList(physical_ref_id.refId(), cell_list, false)); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_cell_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_cell_list.first}; + } + }(); + + descriptor.addRefItemList(RefCellList(ref_id, cell_list, false)); } descriptor.cell_owner_vector.resize(nb_cells); @@ -157,8 +174,17 @@ GmshConnectivityBuilder<2>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_cell_list.second.size(); ++j) { cell_list[j] = ref_cell_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_cell_list.first); - descriptor.addRefItemList(RefCellList(physical_ref_id.refId(), cell_list, false)); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_cell_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_cell_list.first}; + } + }(); + + descriptor.addRefItemList(RefCellList(ref_id, cell_list, false)); } ConnectivityBuilderBase::_computeCellFaceAndFaceNodeConnectivities<2>(descriptor); @@ -229,7 +255,15 @@ GmshConnectivityBuilder<2>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_face_list.second.size(); ++j) { face_list[j] = ref_face_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_face_list.first); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_face_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_face_list.first}; + } + }(); bool is_boundary = true; for (size_t i_face = 0; i_face < face_list.size(); ++i_face) { @@ -239,7 +273,7 @@ GmshConnectivityBuilder<2>::GmshConnectivityBuilder(const GmshReader::GmshData& } } - descriptor.addRefItemList(RefFaceList{physical_ref_id.refId(), face_list, is_boundary}); + descriptor.addRefItemList(RefFaceList{ref_id, face_list, is_boundary}); } Array<bool> is_boundary_node(descriptor.node_number_vector.size()); @@ -265,7 +299,15 @@ GmshConnectivityBuilder<2>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_point_list.second.size(); ++j) { point_list[j] = ref_point_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_point_list.first); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_point_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_point_list.first}; + } + }(); bool is_boundary = true; for (size_t i_node = 0; i_node < point_list.size(); ++i_node) { @@ -274,7 +316,7 @@ GmshConnectivityBuilder<2>::GmshConnectivityBuilder(const GmshReader::GmshData& } } - descriptor.addRefItemList(RefNodeList(physical_ref_id.refId(), point_list, is_boundary)); + descriptor.addRefItemList(RefNodeList(ref_id, point_list, is_boundary)); } descriptor.cell_owner_vector.resize(nb_cells); @@ -372,8 +414,17 @@ GmshConnectivityBuilder<3>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_cell_list.second.size(); ++j) { cell_list[j] = ref_cell_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_cell_list.first); - descriptor.addRefItemList(RefCellList(physical_ref_id.refId(), cell_list, false)); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_cell_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_cell_list.first}; + } + }(); + + descriptor.addRefItemList(RefCellList(ref_id, cell_list, false)); } ConnectivityBuilderBase::_computeCellFaceAndFaceNodeConnectivities<3>(descriptor); @@ -481,7 +532,15 @@ GmshConnectivityBuilder<3>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_face_list.second.size(); ++j) { face_list[j] = ref_face_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_face_list.first); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_face_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_face_list.first}; + } + }(); bool is_boundary = true; for (size_t i_face = 0; i_face < face_list.size(); ++i_face) { @@ -490,8 +549,7 @@ GmshConnectivityBuilder<3>::GmshConnectivityBuilder(const GmshReader::GmshData& break; } } - - descriptor.addRefItemList(RefFaceList{physical_ref_id.refId(), face_list, is_boundary}); + descriptor.addRefItemList(RefFaceList(ref_id, face_list, is_boundary)); } } @@ -566,7 +624,15 @@ GmshConnectivityBuilder<3>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_edge_list.second.size(); ++j) { edge_list[j] = ref_edge_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_edge_list.first); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_edge_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_edge_list.first}; + } + }(); bool is_boundary = true; for (size_t i_node = 0; i_node < edge_list.size(); ++i_node) { @@ -575,7 +641,7 @@ GmshConnectivityBuilder<3>::GmshConnectivityBuilder(const GmshReader::GmshData& } } - descriptor.addRefItemList(RefEdgeList{physical_ref_id.refId(), edge_list, is_boundary}); + descriptor.addRefItemList(RefEdgeList(ref_id, edge_list, is_boundary)); } } @@ -602,7 +668,15 @@ GmshConnectivityBuilder<3>::GmshConnectivityBuilder(const GmshReader::GmshData& for (size_t j = 0; j < ref_point_list.second.size(); ++j) { point_list[j] = ref_point_list.second[j]; } - const GmshReader::PhysicalRefId& physical_ref_id = gmsh_data.m_physical_ref_map.at(ref_point_list.first); + + auto ref_id = [&] { + if (auto i_physical_ref = gmsh_data.m_physical_ref_map.find(ref_point_list.first); + i_physical_ref != gmsh_data.m_physical_ref_map.end()) { + return i_physical_ref->second.refId(); + } else { + return RefId{ref_point_list.first}; + } + }(); bool is_boundary = true; for (size_t i_node = 0; i_node < point_list.size(); ++i_node) { @@ -611,7 +685,7 @@ GmshConnectivityBuilder<3>::GmshConnectivityBuilder(const GmshReader::GmshData& } } - descriptor.addRefItemList(RefNodeList(physical_ref_id.refId(), point_list, is_boundary)); + descriptor.addRefItemList(RefNodeList(ref_id, point_list, is_boundary)); } descriptor.cell_owner_vector.resize(nb_cells); @@ -740,6 +814,7 @@ GmshReader::GmshReader(const std::string& filename) : m_filename(filename) this->__proceedData(); } std::cout << std::flush; + if (parallel::size() > 1) { std::cout << "Sequential mesh read! Need to be dispatched\n" << std::flush; @@ -763,6 +838,7 @@ GmshReader::GmshReader(const std::string& filename) : m_filename(filename) return *begin(dimension_set); }(); + switch (mesh_dimension) { case 1: { this->_dispatch<1>();