diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 5bca90578791861ce2da63e7e9ae7ac422b1c52c..167c43d4a87f940b39532647359fcbb7bf465c5d 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -1835,10 +1835,10 @@ void GModel::createTopologyFromFaces(std::vector<discreteFace*> &discFaces, int std::map<int, std::vector<int> >::iterator ite = face2Edges.find((*it)->tag()); if (ite != face2Edges.end()){ std::vector<int> bcEdges = ite->second; - (*it)->setBoundEdges(bcEdges); + (*it)->setBoundEdges(this, bcEdges); } } - + Msg::Debug("Done creating topology from faces"); Msg::Debug("Creating topology for %d edges...", discEdges.size()); @@ -2693,7 +2693,7 @@ void GModel::classifyFaces(std::set<GFace*> &_faces) std::map<discreteFace*,std::vector<int> >::iterator itFT = newFaceTopology.begin(); for (;itFT != newFaceTopology.end();++itFT){ - itFT->first->setBoundEdges(itFT->second); + itFT->first->setBoundEdges(this, itFT->second); } for (std::map<std::pair<int, int>, GEdge*>::iterator it = newEdges.begin(); diff --git a/Geo/discreteFace.cpp b/Geo/discreteFace.cpp index feacd986b2630ca2fee98739dca054aa80812b1e..562265fcc1e0c06d7596108b740ab67c76737882 100644 --- a/Geo/discreteFace.cpp +++ b/Geo/discreteFace.cpp @@ -21,10 +21,10 @@ discreteFace::discreteFace(GModel *model, int num) : GFace(model, num) meshStatistics.status = GFace::DONE; } -void discreteFace::setBoundEdges(std::vector<int> tagEdges) +void discreteFace::setBoundEdges(GModel *gm, std::vector<int> tagEdges) { for (std::vector<int>::iterator it = tagEdges.begin(); it != tagEdges.end(); it++){ - GEdge *ge = GModel::current()->getEdgeByTag(*it); + GEdge *ge = gm->getEdgeByTag(*it); l_edges.push_back(ge); l_dirs.push_back(1); ge->addFace(this); diff --git a/Geo/discreteFace.h b/Geo/discreteFace.h index 4abe2c8af8232c9c75a24479f82e6df5d2441f82..9020079fad24923201f727d8e9aabda85ec4267a 100644 --- a/Geo/discreteFace.h +++ b/Geo/discreteFace.h @@ -25,7 +25,7 @@ class discreteFace : public GFace { virtual Pair<SVector3, SVector3> firstDer(const SPoint2 ¶m) const; virtual void secondDer(const SPoint2 ¶m, SVector3 *dudu, SVector3 *dvdv, SVector3 *dudv) const; - void setBoundEdges(std::vector<int> tagEdges); + void setBoundEdges(GModel *gm, std::vector<int> tagEdges); void findEdges(std::map<MEdge, std::vector<int>, Less_Edge > &map_edges); void writeGEO(FILE *fp); }; diff --git a/Mesh/CenterlineField.cpp b/Mesh/CenterlineField.cpp index d926719b4be7a625f2c8afaaad03c3e6c53332c7..4c1a79ec2a410669a7673bfcb8a990cbf5908760 100644 --- a/Mesh/CenterlineField.cpp +++ b/Mesh/CenterlineField.cpp @@ -209,8 +209,10 @@ static void recurConnectByMEdge(const MEdge &e, group.insert(it->second); for (int i = 0; i < it->second->getNumEdges(); ++i){ MEdge me = it->second->getEdge(i); - if (theCut.find(me) != theCut.end()){ touched.insert(me); break; } - recurConnectByMEdge(me, e2e, group, touched, theCut); + if (theCut.find(me) != theCut.end()){ + touched.insert(me); //break; + } + else recurConnectByMEdge(me, e2e, group, touched, theCut); } } } @@ -257,7 +259,7 @@ void cutTriangle(MTriangle *tri, else if (cutVertices.find (tri->getVertex(1)) != cutVertices.end()) { newCut.insert(MEdge(c[0],tri->getVertex(1))); } - else{ + else if (cutVertices.find (tri->getVertex(2)) != cutVertices.end()){ newCut.insert(MEdge(c[0],tri->getVertex(2))); } } @@ -268,23 +270,23 @@ void cutTriangle(MTriangle *tri, newCut.insert(MEdge(c[1],tri->getVertex(0))); } else if (cutVertices.find (tri->getVertex(1)) != cutVertices.end()) { - newCut.insert(MEdge(c[1],tri->getVertex(1))); + newCut.insert(MEdge(tri->getVertex(1), c[1])); } - else{ + else if (cutVertices.find (tri->getVertex(2)) != cutVertices.end()){ newCut.insert(MEdge(c[1],tri->getVertex(2))); } } else if (c[2]){ - newTris.push_back(new MTriangle (tri->getVertex(0),tri->getVertex(1), c[2])); - newTris.push_back(new MTriangle (tri->getVertex(1),tri->getVertex(2), c[2])); + newTris.push_back(new MTriangle (tri->getVertex(0),tri->getVertex(1), c[2])); + newTris.push_back(new MTriangle (tri->getVertex(1),tri->getVertex(2), c[2])); if (cutVertices.find (tri->getVertex(0)) != cutVertices.end()){ newCut.insert(MEdge(c[2],tri->getVertex(0))); } else if (cutVertices.find (tri->getVertex(1)) != cutVertices.end()) { - newCut.insert(MEdge(c[2],tri->getVertex(1))); + newCut.insert(MEdge(c[2], tri->getVertex(1))); } - else{ - newCut.insert(MEdge(c[2],tri->getVertex(2))); + else if (cutVertices.find (tri->getVertex(2)) != cutVertices.end()){ + newCut.insert(MEdge(c[2], tri->getVertex(2))); } } else { @@ -292,12 +294,12 @@ void cutTriangle(MTriangle *tri, if (cutVertices.find (tri->getVertex(0)) != cutVertices.end() && cutVertices.find (tri->getVertex(1)) != cutVertices.end()) newCut.insert(MEdge(tri->getVertex(0),tri->getVertex(1))); - if (cutVertices.find (tri->getVertex(0)) != cutVertices.end() && - cutVertices.find (tri->getVertex(1)) != cutVertices.end()) - newCut.insert(MEdge(tri->getVertex(0),tri->getVertex(2))); - if (cutVertices.find (tri->getVertex(2)) != cutVertices.end() && - cutVertices.find (tri->getVertex(1)) != cutVertices.end()) - newCut.insert(MEdge(tri->getVertex(2),tri->getVertex(1))); + else if (cutVertices.find (tri->getVertex(1)) != cutVertices.end() && + cutVertices.find (tri->getVertex(2)) != cutVertices.end()) + newCut.insert(MEdge(tri->getVertex(1),tri->getVertex(2))); + else if (cutVertices.find (tri->getVertex(2)) != cutVertices.end() && + cutVertices.find (tri->getVertex(0)) != cutVertices.end()) + newCut.insert(MEdge(tri->getVertex(2),tri->getVertex(0))); } } @@ -324,6 +326,7 @@ Centerline::Centerline(): kdtree(0), nodes(0){ Centerline::~Centerline(){ if (mod) delete mod; + if (split) delete split; if(kdtree) delete kdtree; if(nodes) annDeallocPts(nodes); delete[]index; @@ -641,8 +644,10 @@ void Centerline::buildKdTree(){ } -void Centerline::createFaces(std::vector<std::vector<MTriangle*> > &faces){ +void Centerline::createFaces(){ + std::vector<std::vector<MTriangle*> > faces; + std::multimap<MEdge, MTriangle*, Less_Edge> e2e; for(unsigned int i = 0; i < triangles.size(); ++i){ for(int j = 0; j < 3; j++){ @@ -653,7 +658,15 @@ void Centerline::createFaces(std::vector<std::vector<MTriangle*> > &faces){ while(!e2e.empty()){ std::set<MTriangle*> group; std::set<MEdge, Less_Edge> touched; - recurConnectByMEdge(e2e.begin()->first, e2e, group, touched, theCut); + group.clear(); + touched.clear(); + std::multimap<MEdge, MTriangle*, Less_Edge>::iterator ite = e2e.begin(); + MEdge me = ite->first; + while (theCut.find(me) != theCut.end()){ + ite++; + me = ite->first; + } + recurConnectByMEdge(me,e2e, group, touched, theCut); std::vector<MTriangle*> temp; temp.insert(temp.begin(), group.begin(), group.end()); faces.push_back(temp); @@ -663,65 +676,81 @@ void Centerline::createFaces(std::vector<std::vector<MTriangle*> > &faces){ } printf("%d faces created \n", faces.size()); - // int numBef = current->getMaxElementaryNumber(2) + 1; - // for(unsigned int i = 0; i < faces.size(); ++i){ - // int numF = current->getMaxElementaryNumber(2) + 1; - // discreteFace *f = new discreteFace(current, numF); - // current->add(f); - // discFaces.push_back(f); - // std::set<MVertex*> myVertices; - // std::vector<MTriangle*> myFace = faces[i]; - // for(int j= 0; j< myFace.size(); j++){ - // MTriangle *t = myFace[j]; - // f->triangles.push_back(t); - // for (int k= 0; k< 3; k++){ - // MVertex *v = t->getVertex(k); - // std::set<MVertex*>::iterator it = theCutV.find(v); - // if (it != theCutV.end()) myVertices.insert(v); - // } + // FILE * f3 = fopen("myCUT.pos","w"); + // fprintf(f3, "View \"\"{\n"); + // for (int i= 0; i< faces.size(); i++){ + // std::vector<MTriangle*> tris = faces[i]; + // for (int j= 0; j< tris.size(); j++){ + // MTriangle *t = tris[j]; + // fprintf(f3, "ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g};\n", + // t->getVertex(0)->x(), t->getVertex(0)->y(), t->getVertex(0)->z(), + // t->getVertex(1)->x(), t->getVertex(1)->y(), t->getVertex(1)->z(), + // t->getVertex(2)->x(), t->getVertex(2)->y(), t->getVertex(2)->z(), + // (double)i, (double)i, (double)i); // } - // f->mesh_vertices.insert(f->mesh_vertices.begin(), - // myVertices.begin(), myVertices.end()); // } + // fprintf(f3,"};\n"); + // fclose(f3); + + + //create discFaces + int numBef = split->getMaxElementaryNumber(2) + 1; + for(unsigned int i = 0; i < faces.size(); ++i){ + int numF = split->getMaxElementaryNumber(2) + 1; + printf("creating discrete face %d \n", numF); + discreteFace *f = new discreteFace(current, numF); + split->add(f); + discFaces.push_back(f); + std::set<MVertex*> myVertices; + std::vector<MTriangle*> myFace = faces[i]; + for(int j= 0; j< myFace.size(); j++){ + MTriangle *t = myFace[j]; + f->triangles.push_back(t); + for (int k= 0; k< 3; k++){ + MVertex *v = t->getVertex(k); + myVertices.insert(v); + } + } + f->mesh_vertices.insert(f->mesh_vertices.begin(), + myVertices.begin(), myVertices.end()); + } // printf("%d discrete Faces (bef =%d) (after =%d)\n", numAfter-numBef, numBef-1, numAfter-1); } -void Centerline::createEdge(std::set<MEdge,Less_Edge> &newCut){ - - int numE = current->getMaxElementaryNumber(1) + 1; - printf("create discrete edge %d \n", numE); - discreteEdge *e = new discreteEdge(current, numE, 0, 0); - current->add(e); - discEdges.push_back(e); - std::set<MVertex*> allV; - std::set<MEdge,Less_Edge> ::iterator itcut = newCut.begin(); - for (; itcut != newCut.end(); itcut++){ - MVertex *v0 = itcut->getVertex(0); - MVertex *v1 = itcut->getVertex(1); - e->lines.push_back(new MLine(v0, v1)); - allV.insert(v0); - allV.insert(v1); - v0->setEntity(e); - v1->setEntity(e); - } - e->mesh_vertices.insert(e->mesh_vertices.begin(), allV.begin(), allV.end()); - theCutV.insert(allV.begin(), allV.end()); - -} void Centerline::splitMesh(){ Msg::Info("Splitting surface mesh (%d tris) with centerline field ", triangles.size()); + split = new GModel(); //splitMesh for(unsigned int i = 0; i < edges.size(); i++){ - printf("*** branch =%d \n", i); std::vector<MLine*> lines = edges[i].lines; double L = edges[i].length; double R = edges[i].maxRad; - if(edges[i].children.size() > 0.0 && L/R > 1.5){ + double AR = L/R; + printf("*** branch =%d \n", i, AR); + if( AR > 8.){ + int nbSplit = (int)ceil(AR/4); + double li = L/nbSplit; + double lc = 0.0; + for (int j= 0; j < lines.size(); j++){ + lc += lines[j]->getInnerRadius(); + if (lc > li && nbSplit > 1) { + MVertex *v1 = lines[j]->getVertex(0); + MVertex *v2 = lines[j]->getVertex(1); + SVector3 pt(v1->x(), v1->y(), v1->z()); + SVector3 dir(v2->x()-v1->x(),v2->y()-v1->y(),v2->z()-v1->z()); + printf("-> cut length (AR=%g) split %d\n", AR, nbSplit); + cutByDisk(pt, dir, edges[i].maxRad); + nbSplit--; + lc = 0.0; + } + } + } + if(edges[i].children.size() > 0.0 && AR > 1.5){ MVertex *v1 = lines[lines.size()-1]->getVertex(1);//end vertex MVertex *v2; if(L/R < 2.0) v2 = lines[0]->getVertex(0); @@ -729,50 +758,36 @@ void Centerline::splitMesh(){ else v2 = lines[lines.size()-1]->getVertex(0); SVector3 pt(v1->x(), v1->y(), v1->z()); SVector3 dir(v2->x()-v1->x(),v2->y()-v1->y(),v2->z()-v1->z()); + printf("-->> cut bifurcation \n"); cutByDisk(pt, dir, edges[i].maxRad); } } //create discreteFaces - std::vector<std::vector<MTriangle*> > faces; - createFaces(faces); - //createTopologyFromFace(faces); - - //print myCUT.pos - FILE * f2 = fopen("myCUT.pos","w"); - fprintf(f2, "View \"\"{\n"); - std::set<MEdge,Less_Edge>::iterator itp = theCut.begin(); - while (itp != theCut.end()){ - MEdge l = *itp; - fprintf(f2, "SL(%g,%g,%g,%g,%g,%g){%g,%g};\n", - l.getVertex(0)->x(), l.getVertex(0)->y(), l.getVertex(0)->z(), - l.getVertex(1)->x(), l.getVertex(1)->y(), l.getVertex(1)->z(), - 1.0,1.0); - itp++; - } - // for (int i= 0; i< triangles.size(); i++){ - // MTriangle *t = triangles[i]; - // fprintf(f2, "ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g};\n", - // t->getVertex(0)->x(), t->getVertex(0)->y(), t->getVertex(0)->z(), - // t->getVertex(1)->x(), t->getVertex(1)->y(), t->getVertex(1)->z(), - // t->getVertex(2)->x(), t->getVertex(2)->y(), t->getVertex(2)->z(), - // 1.0,1.0,1.0); + createFaces(); + split->createTopologyFromFaces(discFaces); + + //write + Msg::Info("Writing splitted mesh 'myPARTS.msh'"); + split->writeMSH("myPARTS.msh", 2.2, false, true); + + //print + // FILE * f2 = fopen("myCUTLINES.pos","w"); + // fprintf(f2, "View \"\"{\n"); + // std::set<MEdge,Less_Edge>::iterator itp = theCut.begin(); + // while (itp != theCut.end()){ + // MEdge l = *itp; + // fprintf(f2, "SL(%g,%g,%g,%g,%g,%g){%g,%g};\n", + // l.getVertex(0)->x(), l.getVertex(0)->y(), l.getVertex(0)->z(), + // l.getVertex(1)->x(), l.getVertex(1)->y(), l.getVertex(1)->z(), + // 1.0,1.0); + // itp++; // } - for (int i= 0; i< faces.size(); i++){ - std::vector<MTriangle*> tris = faces[i]; - for (int j= 0; j< tris.size(); j++){ - MTriangle *t = tris[j]; - fprintf(f2, "ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g};\n", - t->getVertex(0)->x(), t->getVertex(0)->y(), t->getVertex(0)->z(), - t->getVertex(1)->x(), t->getVertex(1)->y(), t->getVertex(1)->z(), - t->getVertex(2)->x(), t->getVertex(2)->y(), t->getVertex(2)->z(), - (double)i, (double)i, (double)i); - } - } - fprintf(f2,"};\n"); - fclose(f2); + // fprintf(f2,"};\n"); + // fclose(f2); Msg::Info("Splitting mesh by centerlines done "); + exit(1); } @@ -786,8 +801,7 @@ void Centerline::cutByDisk(SVector3 &PT, SVector3 &NORM, double &maxRad){ double d = -a * PT.x() - b * PT.y() - c * PT.z(); printf("cut disk (R=%g)= %g %g %g %g \n", maxRad, a, b, c, d); - //EMI STUFF - const double EPS = 0.001; + const double EPS = 0.005; std::set<MEdge,Less_Edge> allEdges; for(unsigned int i = 0; i < triangles.size(); i++){ for ( unsigned int j= 0; j < 3; j++) @@ -797,7 +811,6 @@ void Centerline::cutByDisk(SVector3 &PT, SVector3 &NORM, double &maxRad){ int step = 0; while (!closedCut && step < 10){ double rad = 1.3*maxRad+0.15*step*maxRad; - //printf("radius(%d) =%g \n", step, rad); std::map<MEdge,MVertex*,Less_Edge> cutEdges; std::set<MVertex*> cutVertices; std::vector<MTriangle*> newTris; @@ -813,31 +826,31 @@ void Centerline::cutByDisk(SVector3 &PT, SVector3 &NORM, double &maxRad){ SVector3 P2(me.getVertex(1)->x(),me.getVertex(1)->y(), me.getVertex(1)->z()); double V1 = a * P1.x() + b * P1.y() + c * P1.z() + d; double V2 = a * P2.x() + b * P2.y() + c * P2.z() + d; - bool inters = (V1*V2<0.0) ? true: false; + bool inters = (V1*V2<=0.0) ? true: false; + bool inDisk = ((norm(P1-PT) < rad ) || (norm(P2-PT) < rad)) ? true : false; double rdist = -V1/(V2-V1); if (inters && rdist > EPS && rdist < 1.-EPS){ SVector3 PZ = P1+rdist*(P2-P1); MVertex *newv = new MVertex (PZ.x(), PZ.y(), PZ.z()); - if ( norm(PZ-PT) < rad ) cutEdges.insert(std::make_pair(*it,newv)); + if (inDisk) cutEdges.insert(std::make_pair(*it,newv)); } - else if (inters && rdist <= EPS && norm(P1-PT) < rad ) + else if (inters && rdist <= EPS && inDisk ) cutVertices.insert(me.getVertex(0)); - else if (inters && rdist >= 1.-EPS && norm(P2-PT) < rad) + else if (inters && rdist >= 1.-EPS && inDisk) cutVertices.insert(me.getVertex(1)); } for(unsigned int i = 0; i < triangles.size(); i++){ cutTriangle(triangles[i], cutEdges,cutVertices, newTris, newCut); } if (isClosed(newCut)) { - printf("closed cut \n"); - createEdge(newCut); + triangles.clear(); triangles = newTris; theCut.insert(newCut.begin(),newCut.end()); //if (step > 1) printf("YOUPIIIIIIIIIIIIIIIIIIIIIII \n"); break; } else { - if (step ==9) printf("no closed cut %d \n", (int)newCut.size()); + if (step ==9) {printf("no closed cut %d \n", (int)newCut.size()); }; step++; // // triangles = newTris; // // theCut.insert(newCut.begin(),newCut.end()); @@ -859,53 +872,6 @@ void Centerline::cutByDisk(SVector3 &PT, SVector3 &NORM, double &maxRad){ } } - // //GAETAN STUFF - // //variables for using the cutting tools - // DI_Point::Container cp;//cut points - // std::vector<DI_IntegrationPoint *> ipV;//integration points vol - // std::vector<DI_IntegrationPoint *> ipS;//integration points surf - // bool isCut = false; - // gLevelset *GLS = new gLevelsetPlane(0., 0., 0., 0.); - // std::vector<gLevelset *> RPN; - // RPN.push_back(GLS); - - // //loop over all surface mesh elements - // for(unsigned int i = 0; i < triangles.size(); i++){ - // MTriangle *e = triangles[i]; - // double **nodeLs= new double*[3]; - // DI_Triangle *T = new DI_Triangle(e->getVertex(0)->x(), e->getVertex(0)->y(), e->getVertex(0)->z(), - // e->getVertex(1)->x(), e->getVertex(1)->y(), e->getVertex(1)->z(), - // e->getVertex(2)->x(), e->getVertex(2)->y(), e->getVertex(2)->z()); - // SPoint3 cg(0.333*(e->getVertex(0)->x()+e->getVertex(1)->x()+e->getVertex(2)->x()), - // 0.333*(e->getVertex(0)->y()+e->getVertex(1)->y()+e->getVertex(2)->y()), - // 0.333*(e->getVertex(0)->z()+e->getVertex(1)->z()+e->getVertex(2)->z())); - // double x0 = e->getVertex(0)->x(), y0= e->getVertex(0)->y(), z0=e->getVertex(0)->z(); - // double val0 = a * x0 + b * y0 + c * z0 + d; - // double sign0 = val0; - // bool zeroElem = false; - // nodeLs[0] = new double[1];//one ls value - // nodeLs[0][0]= val0; - // for(int i=1;i<3;i++){ - // double x = e->getVertex(i)->x(), y= e->getVertex(i)->y(), z=e->getVertex(i)->z(); - // double val = a * x + b * y + c * z + d; - // double sign = sign0*val; - // if (sign < 0.0 && !zeroElem) zeroElem = true; - // nodeLs[i] = new double[1];//one ls value - // nodeLs[i][0]= val; - // } - // if (zeroElem){ - // double radius = sqrt((cg.x()-PT.x())*(cg.x()-PT.x())+(cg.y()-PT.y())*(cg.y()-PT.y())+(cg.z()-PT.z())*(cg.z()-PT.z())); - // if (radius < rad){ - // isCut = T->cut(RPN, ipV, ipS, cp, 1, 1, 1, - // cutQUAD, cutTRI, cutLIN, 0, nodeLs); - // } - // else cutTRI.push_back(T); - // } - // else cutTRI.push_back(T); - // for(int i=0;i<3;i++) delete nodeLs[i]; - // delete []nodeLs; - // } - return; } diff --git a/Mesh/CenterlineField.h b/Mesh/CenterlineField.h index 099a935253aff77b8cc8d4c04bd0cb91ac147a89..5b5e3c86add3794c5ecacaa0a61ea20f31f817b3 100644 --- a/Mesh/CenterlineField.h +++ b/Mesh/CenterlineField.h @@ -50,12 +50,13 @@ struct Branch{ class Centerline : public Field{ protected: - GModel *current; + GModel *current; //current GModel + GModel *mod; //centerline GModel + GModel *split; //split GModel ANNkd_tree *kdtree; ANNpointArray nodes; ANNidxArray index; ANNdistArray dist; - GModel *mod; std::string fileName; //all (unique) lines of centerlines @@ -130,9 +131,8 @@ class Centerline : public Field{ // perpendicular to the tubular structure void cutByDisk(SVector3 &pt, SVector3 &dir, double &maxRad); - //create discrete Edge - void createEdge(std::set<MEdge,Less_Edge> &newCut); - void createFaces(std::vector<std::vector<MTriangle*> > &faces); + //create discrete faces + void createFaces(); //Print for debugging void printSplit() const; diff --git a/Solver/multiscaleLaplace.cpp b/Solver/multiscaleLaplace.cpp index 11d3735e1122cefc7eb7523919d198e9004e7554..af30b617160abce860e13d392b24c3963decd6cc 100644 --- a/Solver/multiscaleLaplace.cpp +++ b/Solver/multiscaleLaplace.cpp @@ -493,7 +493,7 @@ static void recur_cut_elements_ (multiscaleLaplaceLevel * root, cutVertices.find (root->elements[i]->getVertex(1)) != cutVertices.end()) theCut.insert(MEdge(root->elements[i]->getVertex(0),root->elements[i]->getVertex(1))); if (cutVertices.find (root->elements[i]->getVertex(0)) != cutVertices.end() && - cutVertices.find (root->elements[i]->getVertex(1)) != cutVertices.end()) + cutVertices.find (root->elements[i]->getVertex(2)) != cutVertices.end()) theCut.insert(MEdge(root->elements[i]->getVertex(0),root->elements[i]->getVertex(2))); if (cutVertices.find (root->elements[i]->getVertex(2)) != cutVertices.end() && cutVertices.find (root->elements[i]->getVertex(1)) != cutVertices.end()) @@ -910,8 +910,8 @@ multiscaleLaplace::multiscaleLaplace (std::vector<MElement *> &elements, //Split the mesh in left and right //or Cut the mesh in left and right - //splitElems(elements); - cutElems(elements); + splitElems(elements); + //cutElems(elements); } diff --git a/benchmarks/stl/mobilette.geo b/benchmarks/stl/mobilette.geo index e754da25569b598f8603b15ac76e945ae585e4e7..fda2e1b8306970477c5bad0cc9f3348f351e20d5 100644 --- a/benchmarks/stl/mobilette.geo +++ b/benchmarks/stl/mobilette.geo @@ -30,5 +30,5 @@ Volume(1) = {1}; Mesh.RecombineAll=1; Mesh.RecombinationAlgorithm=1; -Physical Surface(1) = {s : s + #ss[]-1}; -Physical Volume(1) = 1; +//Physical Surface(1) = {s : s + #ss[]-1}; +//Physical Volume(1) = 1;