diff --git a/CMakeLists.txt b/CMakeLists.txt index 67f3999..7ab0274 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,7 @@ mark_as_advanced(FORCE FetchContent_Declare( gmshparsercpp GIT_REPOSITORY https://github.com/andrsd/gmshparsercpp.git - GIT_TAG 8e946a98fb05e6e1b23a21454d014c86c4e6d694 + GIT_TAG 1ffa75169df6febd1c4db9949f54c91d862f5ce0 ) mark_as_advanced(FORCE FETCHCONTENT_SOURCE_DIR_GMSHPARSERCPP diff --git a/src/main.cpp b/src/main.cpp index 881f1d4..f4fa932 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -459,7 +459,6 @@ build_side_sets(const std::vector exodusIIcpp::SideSet ss; // the sign on physical tag ID refers to orientation which we don't need auto id = std::abs(tag); - ss.set_id(id); auto it = phys_ent_by_tag.find(id); if (it != phys_ent_by_tag.end()) ss.set_name(it->second->name); @@ -470,36 +469,40 @@ build_side_sets(const std::vector } for (const auto & eb : el_blks) { - const auto & ent = ents_by_id[eb->tag]; - - for (const auto & tag : ent->physical_tags) { - // the sign on physical tag ID refers to orientation which we don't need - auto id = std::abs(tag); - auto & ss = side_sets[id]; + int id; + if (ents_by_id.count(eb->tag) > 0) { + const auto * ent = ents_by_id[eb->tag]; + if (ent->physical_tags.size() > 0) + id = std::abs(ent->physical_tags[0]); + else + id = eb->tag; + } + else + id = eb->tag; - for (const auto & elem : eb->elements) { - std::vector side_key; - switch (eb->element_type) { - case gmshparsercpp::LINE2: - side_key = build_side_key_edge2(elem.node_tags[0], elem.node_tags[1]); - break; - case gmshparsercpp::TRI3: - side_key = build_side_key_tri3(elem.node_tags[0], - elem.node_tags[1], - elem.node_tags[2]); - break; - case gmshparsercpp::QUAD4: - side_key = build_side_key_quad4(elem.node_tags[0], - elem.node_tags[1], - elem.node_tags[2], - elem.node_tags[3]); - break; - default: - break; - } - const auto el_side_pair = elem_sides[side_key]; - ss.add(el_side_pair.first, el_side_pair.second); + auto & ss = side_sets[id]; + ss.set_id(id); + for (const auto & elem : eb->elements) { + std::vector side_key; + switch (eb->element_type) { + case gmshparsercpp::LINE2: + side_key = build_side_key_edge2(elem.node_tags[0], elem.node_tags[1]); + break; + case gmshparsercpp::TRI3: + side_key = + build_side_key_tri3(elem.node_tags[0], elem.node_tags[1], elem.node_tags[2]); + break; + case gmshparsercpp::QUAD4: + side_key = build_side_key_quad4(elem.node_tags[0], + elem.node_tags[1], + elem.node_tags[2], + elem.node_tags[3]); + break; + default: + break; } + const auto el_side_pair = elem_sides[side_key]; + ss.add(el_side_pair.first, el_side_pair.second); } } }