diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 88b7ff256dcf99a416b515b8abbe67236475352b..5c522ef45c6c39d473bbc99799f9bc2851b94a2a 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -577,8 +577,9 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou nbElemsOld = nbElems; } } + //adapt only upper most dimension else{ - + while(1) { Msg::Info("-- adaptMesh ITER =%d ", ITER); std::vector<MElement*> elements; @@ -608,9 +609,6 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou metric->addMetric(technique[imetric], f[imetric], parameters[imetric]); } fields->setBackgroundField(metric); - // int id = fields->newId(); - // (*fields)[id] = new meshMetric(this, technique, f, parameters); - // fields->background_field = id; if (getDim() == 2){ for (fiter fit = firstFace(); fit != lastFace(); ++fit){ @@ -632,7 +630,7 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou nbElems = getNumMeshElements(); if (++ITER >= niter) break; - if (fabs((double)(nbElems - nbElemsOld)) < 0.01 * nbElemsOld) break; + if (ITER > 3 && fabs((double)(nbElems - nbElemsOld)) < 0.01 * nbElemsOld) break; nbElemsOld = nbElems; } diff --git a/Geo/MVertex.cpp b/Geo/MVertex.cpp index 5a4f724a8156bb90f18e952d9ede0662d7ea162d..2730f10aeed0ce2f6486ee8d95f9c7c41c7916e0 100644 --- a/Geo/MVertex.cpp +++ b/Geo/MVertex.cpp @@ -374,8 +374,8 @@ bool reparamMeshVertexOnFace(MVertex *v, const GFace *gf, SPoint2 ¶m, } if(v->onWhat()->geomType() == GEntity::DiscreteCurve || - v->onWhat()->geomType() == GEntity::BoundaryLayerCurve){ - param = gf->parFromPoint(SPoint3(v->x(), v->y(), v->z()), onSurface); + v->onWhat()->geomType() == GEntity::BoundaryLayerCurve){ + param = gf->parFromPoint(SPoint3(v->x(), v->y(), v->z()), onSurface); return true; } @@ -396,6 +396,11 @@ bool reparamMeshVertexOnFace(MVertex *v, const GFace *gf, SPoint2 ¶m, double t; v->getParameter(0, t); param = ge->reparamOnFace(gf, t, 1); + if(!v->getParameter(0,t)) { + Msg::Error("vertex v %p not MedgeVertex", v); + Msg::Exit(1); + //param = gf->parFromPoint(SPoint3(v->x(), v->y(), v->z()), onSurface); + } // shout, we are on a seam if(ge->isSeam(gf)) @@ -404,8 +409,7 @@ bool reparamMeshVertexOnFace(MVertex *v, const GFace *gf, SPoint2 ¶m, else{ double uu, vv; if(v->onWhat() == gf && v->getParameter(0, uu) && v->getParameter(1, vv)){ - //printf("%d face %d pos %g %g\n",v->getNum(),gf->tag(),uu,vv); - param = SPoint2(uu, vv); + param = SPoint2(uu, vv); } else { // brute force! diff --git a/Mesh/meshGFaceBamg.cpp b/Mesh/meshGFaceBamg.cpp index dd19a7459e5faeabb8dd710abb046d5cecf61476..5c0498505e0bbf668a50c4b3d65663814cfad009 100644 --- a/Mesh/meshGFaceBamg.cpp +++ b/Mesh/meshGFaceBamg.cpp @@ -72,11 +72,12 @@ static void computeMeshMetricsForBamg(GFace *gf, int numV, void meshGFaceBamg(GFace *gf){ - //Replace edges by their compounds std::list<GEdge*> edges = gf->edges(); + bool hasCompounds = false; + + //Replace edges by their compounds std::set<GEdge*> mySet; std::list<GEdge*>::iterator it = edges.begin(); - bool hasCompounds = false; while(it != edges.end()){ if((*it)->getCompound()){ hasCompounds = true; @@ -120,6 +121,7 @@ void meshGFaceBamg(GFace *gf){ (*it)->setIndex(index++); } } + //exit(1); int nbFixedVertices = index; for(std::set<MVertex*>::iterator it = all.begin(); it!=all.end(); ++it){ //FIXME : SEAMS should have to be taken into account here !!! @@ -226,7 +228,7 @@ void meshGFaceBamg(GFace *gf){ args[16] = CTX::instance()->mesh.anisoMax; args[ 7] = CTX::instance()->mesh.smoothRatio; //args[ 21] = 90.0;//cutoffrad = 90 degree - computeMeshMetricsForBamg (gf, nbVert, bamgMesh->vertices , mm11,mm12,mm22); + computeMeshMetricsForBamg (gf, nbVert, bamgMesh->vertices, mm11,mm12,mm22); try{ refinedBamgMesh = Bamg(bamgMesh, args, mm11, mm12, mm22, false); diff --git a/Mesh/meshMetric.cpp b/Mesh/meshMetric.cpp index 242d3a52e7a94c7e63b0b3af4778b4e2dd2c3124..8ba87063ad9318234fa6bc0e152785ca955b3d40 100644 --- a/Mesh/meshMetric.cpp +++ b/Mesh/meshMetric.cpp @@ -371,8 +371,8 @@ void meshMetric::computeMetric(){ //printf("%d elements are considered in the meshMetric \n",(int)_elements.size()); computeValues(); - //computeHessian_FE(); - computeHessian_LS(); + computeHessian_FE(); + //computeHessian_LS(); int metricNumber = setOfMetrics.size();