diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 37686ea6e07787540bba229811d739c18f92c68f..53ebd5c08d93867e82c01e5807b1d4c71bbc83ce 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -1029,26 +1029,33 @@ int GModel::removeDuplicateMeshVertices(double tolerance) for(int k = 0; k < e->getNumVertices(); k++){ MVertex *v = e->getVertex(k); std::set<MVertex*, MVertexLessThanLexicographic>::iterator it = pos.find(v); - if(it != pos.end()) - verts.push_back(*it); - else - Msg::Error("Could not find unique vertex (%g,%g,%g)", v->x(), v->y(), v->z()); + if(it == pos.end()){ + Msg::Info("Linear search for (%.16g, %.16g, %.16g)", v->x(), v->y(), v->z()); + it = v->linearSearch(pos); + if(it == pos.end()){ + Msg::Error("Could not find unique vertex (%.16g, %.16g, %.16g)", + v->x(), v->y(), v->z()); + break; + } + } + verts.push_back(*it); } - MElementFactory factory; - MElement *e2 = factory.create(e->getTypeForMSH(), verts, e->getNum(), - e->getPartition()); - switch(e2->getType()){ - case TYPE_PNT: elements[0][entities[i]->tag()].push_back(e2); break; - case TYPE_LIN: elements[1][entities[i]->tag()].push_back(e2); break; - case TYPE_TRI: elements[2][entities[i]->tag()].push_back(e2); break; - case TYPE_QUA: elements[3][entities[i]->tag()].push_back(e2); break; - case TYPE_TET: elements[4][entities[i]->tag()].push_back(e2); break; - case TYPE_HEX: elements[5][entities[i]->tag()].push_back(e2); break; - case TYPE_PRI: elements[6][entities[i]->tag()].push_back(e2); break; - case TYPE_PYR: elements[7][entities[i]->tag()].push_back(e2); break; - case TYPE_POLYG: elements[8][entities[i]->tag()].push_back(e2); break; - case TYPE_POLYH: elements[9][entities[i]->tag()].push_back(e2); break; - + if(verts.size() == e->getNumVertices()){ + MElementFactory factory; + MElement *e2 = factory.create(e->getTypeForMSH(), verts, e->getNum(), + e->getPartition()); + switch(e2->getType()){ + case TYPE_PNT: elements[0][entities[i]->tag()].push_back(e2); break; + case TYPE_LIN: elements[1][entities[i]->tag()].push_back(e2); break; + case TYPE_TRI: elements[2][entities[i]->tag()].push_back(e2); break; + case TYPE_QUA: elements[3][entities[i]->tag()].push_back(e2); break; + case TYPE_TET: elements[4][entities[i]->tag()].push_back(e2); break; + case TYPE_HEX: elements[5][entities[i]->tag()].push_back(e2); break; + case TYPE_PRI: elements[6][entities[i]->tag()].push_back(e2); break; + case TYPE_PYR: elements[7][entities[i]->tag()].push_back(e2); break; + case TYPE_POLYG: elements[8][entities[i]->tag()].push_back(e2); break; + case TYPE_POLYH: elements[9][entities[i]->tag()].push_back(e2); break; + } } } } @@ -1068,7 +1075,7 @@ int GModel::removeDuplicateMeshVertices(double tolerance) MVertexLessThanLexicographic::tolerance = old_tol; - Msg::Info("Removed %d duplicate mesh vertices", diff); + Msg::Info("Removed %d duplicate mesh %s", diff, diff > 1 ? "vertices" : "vertex"); return diff; } diff --git a/Mesh/meshGRegionExtruded.cpp b/Mesh/meshGRegionExtruded.cpp index 83773a0c850ce052b3bf066f3f2167e5004dcbbe..365ca48b0a41c04733b5eeaeea530872f3ef5387 100644 --- a/Mesh/meshGRegionExtruded.cpp +++ b/Mesh/meshGRegionExtruded.cpp @@ -105,7 +105,7 @@ static int getExtrudedVertices(MElement *ele, ExtrudeParams *ep, int j, int k, } if(itp == pos.end()) Msg::Error("Could not find extruded vertex (%.16g, %.16g, %.16g)", - tmp.x(), tmp.y(), tmp.z()); + tmp.x(), tmp.y(), tmp.z()); else verts.push_back(*itp); }