From 498428f738bf1be7d2b2e7c6d41f9ac74fde9de8 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Wed, 25 May 2011 06:18:42 +0000 Subject: [PATCH] pp --- Mesh/HighOrder.cpp | 56 ++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp index 692be877de..aaa02290e3 100644 --- a/Mesh/HighOrder.cpp +++ b/Mesh/HighOrder.cpp @@ -255,8 +255,8 @@ static void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve, US[u0 < u1 ? j + 1 : nPts - 1 - (j + 1)]); if (displ2D || displ3D){ SPoint3 pc2 = edge.interpolate(t); - if (displ2D)displ2D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); - if (displ3D)displ3D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); + if(displ2D) displ2D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); + if(displ3D) displ3D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); } } temp.push_back(v); @@ -317,8 +317,8 @@ static void getEdgeVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &ve, v = new MFaceVertex(pc.x(), pc.y(), pc.z(), gf, US[j + 1], VS[j + 1]); if (displ2D || displ3D){ SPoint3 pc2 = edge.interpolate(t); - if (displ3D) displ3D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); - if (displ2D) displ2D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); + if(displ3D) displ3D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); + if(displ2D) displ2D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); } } temp.push_back(v); @@ -373,6 +373,7 @@ static void getFaceVertices(GFace *gf, MElement *incomplete, MElement *ele, if(gf->geomType() == GEntity::DiscreteSurface || gf->geomType() == GEntity::BoundaryLayerSurface) linear = true; + for(int i = 0; i < ele->getNumFaces(); i++){ MFace face = ele->getFace(i); faceContainer::iterator fIter = faceVertices.find(face); @@ -387,8 +388,8 @@ static void getFaceVertices(GFace *gf, MElement *incomplete, MElement *ele, for(int k = 0; k < incomplete->getNumVertices(); k++) reparamOK &= reparamMeshVertexOnFace(incomplete->getVertex(k), gf, pts[k]); } - int start = face.getNumVertices()*(nPts+1); - const fullMatrix<double> &points = ele->getFunctionSpace(nPts+1)->points; + int start = face.getNumVertices() * (nPts + 1); + const fullMatrix<double> &points = ele->getFunctionSpace(nPts + 1)->points; for(int k = start; k < points.size1(); k++){ MVertex *v; const double t1 = points(k, 0); @@ -425,8 +426,8 @@ static void getFaceVertices(GFace *gf, MElement *incomplete, MElement *ele, } if(displ3D || displ2D){ SPoint3 pc2 = face.interpolate(t1, t2); - if(displ3D)displ3D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); - if(displ2D)displ2D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); + if(displ3D) displ3D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); + if(displ2D) displ2D->add(v, SVector3(pc2.x(), pc2.y(), pc2.z())); } } // should be expensive -> induces a new search each time @@ -485,21 +486,21 @@ static void reorientQuadPoints(std::vector<MVertex*> &vtcs, int orientation, else{ int i1,i2,i3,i4; if (!swap){ - if (orientation == 0){i1 = 0; i2=1; i3=2; i4 = 3;} - else if (orientation == 1){i1 = 3; i2=0; i3=1; i4 = 2;} - else if (orientation == 2){i1 = 2; i2=3; i3=0; i4 = 1;} - else if (orientation == 3){i1 = 1; i2=2; i3=3; i4 = 0;} + if (orientation == 0){ i1 = 0; i2 = 1; i3 = 2; i4 = 3; } + else if (orientation == 1){ i1 = 3; i2 = 0; i3 = 1; i4 = 2; } + else if (orientation == 2){ i1 = 2; i2 = 3; i3 = 0; i4 = 1; } + else if (orientation == 3){ i1 = 1; i2 = 2; i3 = 3; i4 = 0; } } else{ - if (orientation == 0){i1 = 0; i2=3; i3=2; i4 = 1;} - else if (orientation == 3){i1 = 3; i2=2; i3=1; i4 = 0;} - else if (orientation == 2){i1 = 2; i2=1; i3=0; i4 = 3;} - else if (orientation == 1){i1 = 1; i2=0; i3=3; i4 = 2;} + if (orientation == 0){ i1 = 0; i2 = 3; i3 = 2; i4 = 1; } + else if (orientation == 3){ i1 = 3; i2 = 2; i3 = 1; i4 = 0; } + else if (orientation == 2){ i1 = 2; i2 = 1; i3 = 0; i4 = 3; } + else if (orientation == 1){ i1 = 1; i2 = 0; i3 = 3; i4 = 2; } } - int indices[4] = {i1,i2,i3,i4}; - for (int i=0;i<4;i++)tmp[i] = vtcs[start+indices[i]]; - for (int i=0;i<4;i++)vtcs[start+i] = tmp[i]; + int indices[4] = {i1, i2, i3, i4}; + for (int i = 0; i < 4; i++) tmp[i] = vtcs[start + indices[i]]; + for (int i = 0; i < 4; i++) vtcs[start + i] = tmp[i]; // EDGES for (int iEdge=0;iEdge<4;iEdge++){ @@ -530,10 +531,10 @@ static void reorientQuadPoints(std::vector<MVertex*> &vtcs, int orientation, else if (p1 == 0 && p2 == 3){ for (int i = 4+4*nbP-1; i >= 4+3*nbP; i--) tmp[index++] = vtcs[i]; } - else Msg::Error("ouuls"); + else Msg::Error("Something wrong in reorientQuadPoints"); } - for (int i=0;i<index;i++)vtcs[start+4+i] = tmp[i]; - start += (4+index); + for (int i = 0; i < index; i++)vtcs[start+4+i] = tmp[i]; + start += (4 + index); } order -= 2; @@ -651,7 +652,6 @@ static void getFaceVertices(GRegion *gr, MElement *ele, std::vector<MVertex*> &v } else if(face.getNumVertices() == 4){ // quad face for (int k = start; k < points.size1(); k++) { - // parameters are between -1 and 1 double t1 = points(k, 0); double t2 = points(k, 1); SPoint3 pc = face.interpolate(t1, t2); @@ -867,7 +867,7 @@ static void setHighOrder(GRegion *gr, edgeContainer &edgeVertices, t->getVertex(3), ve, nPts + 1); getRegionVertices(gr, &incpl, t, vr, linear, nPts); ve.insert(ve.end(), vr.begin(), vr.end()); - MTetrahedron* n = new MTetrahedronN(t->getVertex(0), t->getVertex(1), + MTetrahedron *n = new MTetrahedronN(t->getVertex(0), t->getVertex(1), t->getVertex(2), t->getVertex(3), ve, nPts + 1); tetrahedra2.push_back(n); } @@ -910,7 +910,7 @@ static void setHighOrder(GRegion *gr, edgeContainer &edgeVertices, h->getVertex(6), h->getVertex(7), ve, nPts + 1); getRegionVertices(gr, &incpl, h, vr, linear, nPts); ve.insert(ve.end(), vr.begin(), vr.end()); - MHexahedron* n = new MHexahedronN(h->getVertex(0), h->getVertex(1), h->getVertex(2), + MHexahedron *n = new MHexahedronN(h->getVertex(0), h->getVertex(1), h->getVertex(2), h->getVertex(3), h->getVertex(4), h->getVertex(5), h->getVertex(6), h->getVertex(7), ve, nPts + 1); hexahedra2.push_back(n); @@ -1024,7 +1024,7 @@ void SetOrder1(GModel *m) } void checkHighOrderTriangles(const char* cc, GModel *m, - std::vector<MElement*> &bad, double &minJGlob) + std::vector<MElement*> &bad, double &minJGlob) { bad.clear(); minJGlob = 1.0; @@ -1055,10 +1055,11 @@ void checkHighOrderTriangles(const char* cc, GModel *m, else if (disto < 0.2) nbfair++; } } + if(!count) return; if (minJGlob > 0) Msg::Info("%s : Worst Face Distorsion Mapping %g Gamma %g Nb elem. (0<d<0.2) = %d", cc, minJGlob, minGGlob,nbfair ); - else + else Msg::Warning("%s : Worst Face Distorsion Mapping %g (%d negative jacobians) " "Worst Gamma %g Avg Smoothness %g", cc, minJGlob, bad.size(), minGGlob, avg / (count ? count : 1)); @@ -1085,6 +1086,7 @@ static void checkHighOrderTetrahedron(const char* cc, GModel *m, else if (disto < 0.2) nbfair++; } } + if(!count) return; if (minJGlob < 0) Msg::Warning("%s : Worst Tetrahedron Smoothness %g Gamma %g NbFair = %d NbBad = %d", cc, minJGlob, minGGlob, nbfair, bad.size()); -- GitLab