From aa2f6201f34cd50d39e7ec111bc9d816b1ed404a Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Thu, 18 Feb 2010 08:32:21 +0000 Subject: [PATCH] missing mesh cache invalidation --- Geo/GEdge.cpp | 2 ++ Geo/GEntity.cpp | 5 ----- Geo/GEntity.h | 2 +- Geo/GFace.cpp | 6 ++++-- Geo/GModel.cpp | 1 + Geo/GRegion.cpp | 2 ++ Geo/GVertex.cpp | 3 +++ Geo/discreteEdge.cpp | 2 ++ Mesh/HighOrder.cpp | 5 ++++- Mesh/highOrderSmoother.cpp | 4 ++-- Mesh/meshGEdge.cpp | 3 --- Mesh/meshGFace.cpp | 7 +------ Mesh/meshGFaceLloyd.cpp | 4 ++-- Mesh/meshGRegion.cpp | 4 +--- Solver/multiscaleLaplace.cpp | 34 +++++++++++++++++----------------- 15 files changed, 42 insertions(+), 42 deletions(-) diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp index 018c0c0ce6..4aa0af1655 100644 --- a/Geo/GEdge.cpp +++ b/Geo/GEdge.cpp @@ -37,6 +37,8 @@ void GEdge::deleteMesh() mesh_vertices.clear(); for(unsigned int i = 0; i < lines.size(); i++) delete lines[i]; lines.clear(); + deleteVertexArrays(); + model()->destroyMeshCaches(); } void GEdge::reverse() diff --git a/Geo/GEntity.cpp b/Geo/GEntity.cpp index 17247cb3a6..abd2baef4a 100644 --- a/Geo/GEntity.cpp +++ b/Geo/GEntity.cpp @@ -17,11 +17,6 @@ GEntity::GEntity(GModel *m, int t) _color = CTX::instance()->packColor(0, 0, 255, 0); } -GEntity::~GEntity() -{ - deleteVertexArrays(); -} - void GEntity::deleteVertexArrays() { if(va_lines) delete va_lines; va_lines = 0; diff --git a/Geo/GEntity.h b/Geo/GEntity.h index b24b6db0d7..a4d2f2d593 100644 --- a/Geo/GEntity.h +++ b/Geo/GEntity.h @@ -158,7 +158,7 @@ class GEntity { GEntity(GModel *m, int t); - virtual ~GEntity(); + virtual ~GEntity(){} // delete the mesh data virtual void deleteMesh(){} diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp index 7032c53b1a..e1f4a904ef 100644 --- a/Geo/GFace.cpp +++ b/Geo/GFace.cpp @@ -37,10 +37,10 @@ GFace::~GFace() ++it; } - deleteMesh(); - if(va_geom_triangles) delete va_geom_triangles; + + deleteMesh(); } void GFace::delFreeEdge(GEdge *e) @@ -83,6 +83,8 @@ void GFace::deleteMesh() quadrangles.clear(); for(unsigned int i = 0; i < polygons.size(); i++) delete polygons[i]; polygons.clear(); + deleteVertexArrays(); + model()->destroyMeshCaches(); } unsigned int GFace::getNumMeshElements() diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 82707ba698..2b5700d570 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -704,6 +704,7 @@ void GModel::removeInvisibleElements() removeInvisible((*it)->lines, all); (*it)->deleteVertexArrays(); } + destroyMeshCaches(); } int GModel::indexMeshVertices(bool all, int singlePartition) diff --git a/Geo/GRegion.cpp b/Geo/GRegion.cpp index ca75fff6a6..a09843cc76 100644 --- a/Geo/GRegion.cpp +++ b/Geo/GRegion.cpp @@ -46,6 +46,8 @@ void GRegion::deleteMesh() pyramids.clear(); for(unsigned int i = 0; i < polyhedra.size(); i++) delete polyhedra[i]; polyhedra.clear(); + deleteVertexArrays(); + model()->destroyMeshCaches(); } unsigned int GRegion::getNumMeshElements() diff --git a/Geo/GVertex.cpp b/Geo/GVertex.cpp index 2e465d05e1..206abc9515 100644 --- a/Geo/GVertex.cpp +++ b/Geo/GVertex.cpp @@ -5,6 +5,7 @@ #include <sstream> #include <algorithm> +#include "GModel.h" #include "GVertex.h" #include "GFace.h" #include "MPoint.h" @@ -25,6 +26,8 @@ void GVertex::deleteMesh() mesh_vertices.clear(); for(unsigned int i = 0; i < points.size(); i++) delete points[i]; points.clear(); + deleteVertexArrays(); + model()->destroyMeshCaches(); } void GVertex::setPosition(GPoint &p) diff --git a/Geo/discreteEdge.cpp b/Geo/discreteEdge.cpp index cc28500503..baa8ee5e7c 100644 --- a/Geo/discreteEdge.cpp +++ b/Geo/discreteEdge.cpp @@ -277,6 +277,8 @@ void discreteEdge::parametrize() mesh_vertices = newVertices; deleteVertexArrays(); + model()->destroyMeshCaches(); + lines.clear(); lines = newLines; diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp index 4399e427f1..73f512ba6d 100644 --- a/Mesh/HighOrder.cpp +++ b/Mesh/HighOrder.cpp @@ -737,7 +737,8 @@ static void setHighOrder(GFace *gf, edgeContainer &edgeVertices, std::vector<MQuadrangle*> quadrangles2; for(unsigned int i = 0; i < gf->quadrangles.size(); i++){ MQuadrangle *q = gf->quadrangles[i]; - MQuadrangle *qNew = setHighOrder(q,gf,edgeVertices,faceVertices,linear,incomplete,nPts,displ2D,displ3D); + MQuadrangle *qNew = setHighOrder(q, gf, edgeVertices, faceVertices, linear, + incomplete, nPts, displ2D, displ3D); quadrangles2.push_back(qNew); delete q; } @@ -898,6 +899,8 @@ static void removeHighOrderVertices(GEntity *e) void SetOrder1(GModel *m) { + m->destroyMeshCaches(); + // replace all elements with first order elements for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); ++it){ setFirstOrder(*it, (*it)->lines); diff --git a/Mesh/highOrderSmoother.cpp b/Mesh/highOrderSmoother.cpp index 94d016b437..6500b83aab 100644 --- a/Mesh/highOrderSmoother.cpp +++ b/Mesh/highOrderSmoother.cpp @@ -1396,7 +1396,7 @@ static int swapHighOrderTriangles(GFace *gf, } } gf->mesh_vertices = mesh_vertices2; - printf("Deleted %d vertices from %d\n",c2,gf->mesh_vertices.size()); + printf("Deleted %d vertices from %d\n", c2, (int)gf->mesh_vertices.size()); printf("Added %d vertices\n",c1); for (unsigned int i = 0; i < gf->triangles.size(); i++){ @@ -1408,7 +1408,7 @@ static int swapHighOrderTriangles(GFace *gf, } } - printf("replacing %d by %d\n",gf->triangles.size(),triangles2.size()); + printf("replacing %d by %d\n", (int)gf->triangles.size(), (int)triangles2.size()); gf->triangles = triangles2; return nbSwap; } diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp index da4ef33df7..d3b3a345df 100644 --- a/Mesh/meshGEdge.cpp +++ b/Mesh/meshGEdge.cpp @@ -235,10 +235,7 @@ static double Integration(GEdge *ge, double t1, double t2, void deMeshGEdge::operator() (GEdge *ge) { if(ge->geomType() == GEntity::DiscreteCurve) return; - ge->deleteMesh(); - ge->deleteVertexArrays(); - ge->model()->destroyMeshCaches(); } void meshGEdge::operator() (GEdge *ge) diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp index 822e029a63..45b80b95f8 100644 --- a/Mesh/meshGFace.cpp +++ b/Mesh/meshGFace.cpp @@ -1229,17 +1229,12 @@ static bool meshGeneratorPeriodic(GFace *gf, bool debug = true) void deMeshGFace::operator() (GFace *gf) { if(gf->geomType() == GEntity::DiscreteSurface) return; - gf->deleteMesh(); - - gf->deleteVertexArrays(); - gf->model()->destroyMeshCaches(); - gf->meshStatistics.status = GFace::PENDING; gf->meshStatistics.nbTriangle = gf->meshStatistics.nbEdge = 0; } -int debugSurface = -100; +int debugSurface = -1; void meshGFace::operator() (GFace *gf) { diff --git a/Mesh/meshGFaceLloyd.cpp b/Mesh/meshGFaceLloyd.cpp index 8978c5d878..f7f8da4879 100644 --- a/Mesh/meshGFaceLloyd.cpp +++ b/Mesh/meshGFaceLloyd.cpp @@ -30,8 +30,8 @@ void lloydAlgorithm::operator () ( GFace * gf) { const double LC2D = sqrt ((du.high()-du.low())*(du.high()-du.low()) + (dv.high()-dv.low())*(dv.high()-dv.low())); - printf("Lloyd on face %d %d elements %d nodes LC %g\n",gf->tag(), - gf->getNumMeshElements(),all.size(),LC2D); + printf("Lloyd on face %d %d elements %d nodes LC %g\n", gf->tag(), + gf->getNumMeshElements(), (int)all.size(), LC2D); int i = 0; diff --git a/Mesh/meshGRegion.cpp b/Mesh/meshGRegion.cpp index 073ba271cf..2bc09056ce 100644 --- a/Mesh/meshGRegion.cpp +++ b/Mesh/meshGRegion.cpp @@ -124,6 +124,7 @@ void TransferTetgenMesh(GRegion *gr, tetgenio &in, tetgenio &out, // Tetgen modifies both surface & edge mesh, so we need to re-create // everything + gr->model()->destroyMeshCaches(); std::list<GFace*> faces = gr->faces(); std::list<GFace*>::iterator it = faces.begin(); while(it != faces.end()){ @@ -438,10 +439,7 @@ void TransferVolumeMesh(GRegion *gr, Ng_Mesh *ngmesh, void deMeshGRegion::operator() (GRegion *gr) { if(gr->geomType() == GEntity::DiscreteVolume) return; - gr->deleteMesh(); - gr->deleteVertexArrays(); - gr->model()->destroyMeshCaches(); } int intersect_line_triangle(double X[3], double Y[3], double Z[3] , diff --git a/Solver/multiscaleLaplace.cpp b/Solver/multiscaleLaplace.cpp index 5852f1d9bf..6430614ccd 100644 --- a/Solver/multiscaleLaplace.cpp +++ b/Solver/multiscaleLaplace.cpp @@ -585,16 +585,16 @@ static void connected_left_right (std::vector<MElement *> &left, } //-------------------------------------------------------------- -static void printLevel ( const char* fn, - std::vector<MElement *> &elements, - std::map<MVertex*,SPoint2> *coordinates, - double version){ - - if( !CTX::instance()->mesh.saveAll) return; +static void printLevel(const char* fn, + std::vector<MElement *> &elements, + std::map<MVertex*,SPoint2> *coordinates, + double version) +{ + if(!CTX::instance()->mesh.saveAll) return; std::set<MVertex*> vs; - for (int i=0;i<elements.size();i++) - for (int j=0;j<elements[i]->getNumVertices();j++) + for (int i = 0; i < elements.size(); i++) + for (int j = 0; j < elements[i]->getNumVertices(); j++) vs.insert(elements[i]->getVertex(j)); bool binary = false; @@ -603,23 +603,23 @@ static void printLevel ( const char* fn, fprintf(fp, "%g %d %d\n", version, binary ? 1 : 0, (int)sizeof(double)); fprintf(fp, "$EndMeshFormat\n"); - fprintf(fp,"$Nodes\n%d\n",vs.size()); + fprintf(fp, "$Nodes\n%d\n", (int)vs.size()); std::set<MVertex*> :: iterator it = vs.begin(); int index = 1; for (; it != vs.end() ; ++it){ (*it)->setIndex(index++); SPoint2 p = (coordinates) ? (*coordinates)[*it] : SPoint2(0,0); - if (coordinates) fprintf(fp,"%d %g %g 0\n",(*it)->getIndex(),p.x(),p.y()); - else fprintf(fp,"%d %g %g %g\n",(*it)->getIndex(), - (*it)->x(),(*it)->y(),(*it)->z()); + if (coordinates) fprintf(fp, "%d %g %g 0\n", (*it)->getIndex(), p.x(), p.y()); + else fprintf(fp, "%d %g %g %g\n", (*it)->getIndex(), + (*it)->x(), (*it)->y(), (*it)->z()); } - fprintf(fp,"$EndNodes\n",elements.size()); + fprintf(fp, "$EndNodes\n"); - fprintf(fp,"$Elements\n%d\n",elements.size()); - for (int i=0;i<elements.size();i++){ - elements[i]->writeMSH(fp,version); + fprintf(fp, "$Elements\n%d\n", (int)elements.size()); + for (int i = 0; i < elements.size(); i++){ + elements[i]->writeMSH(fp, version); } - fprintf(fp,"$EndElements\n%d\n",elements.size()); + fprintf(fp, "$EndElements\n"); fclose(fp); } -- GitLab