From d2340a01d8c2decca49319296237beb3d7162249 Mon Sep 17 00:00:00 2001 From: Emilie Marchandise <emilie.marchandise@uclouvain.be> Date: Thu, 22 Dec 2011 10:23:24 +0000 Subject: [PATCH] mmg3D memory --- Geo/GModel.cpp | 17 ++++++++--- Mesh/meshGRegionMMG3D.cpp | 18 +++++------ Mesh/meshMetric.cpp | 2 +- Numeric/cartesian.h | 32 +++++++++++++------- benchmarks/boolean/{sphere.lua => sphere.py} | 0 5 files changed, 42 insertions(+), 27 deletions(-) rename benchmarks/boolean/{sphere.lua => sphere.py} (100%) diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index b4faa37a21..884147b1dd 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -545,7 +545,7 @@ int GModel::adaptMesh(int technique, simpleFunction<double> *f, std::vector<doub fields->reset(); if (++ITER >= niter) break; - if (ITER > 5 && fabs((double)(nbElems - nbElemsOld)) < 0.005 * nbElemsOld) break; + if (ITER > 5 && fabs((double)(nbElems - nbElemsOld)) < 0.01 * nbElemsOld) break; int id = fields->newId(); (*fields)[id] = new meshMetric(this, technique, f, parameters);; @@ -565,7 +565,9 @@ int GModel::adaptMesh(int technique, simpleFunction<double> *f, std::vector<doub else{ if (getNumMeshElements() == 0) mesh(getDim()); - meshMetric *mm; + //meshMetric *mm; + FieldManager *fields = getFields(); + fields->reset(); while(1) { Msg::Info("-- adaptMesh ITER =%d ", ITER); @@ -591,8 +593,12 @@ int GModel::adaptMesh(int technique, simpleFunction<double> *f, std::vector<doub nbElems = elements.size(); if (nbElems == 0)return -1; - mm = new meshMetric(this, technique, f, parameters); - mm->setAsBackgroundMesh (this); + + int id = fields->newId(); + (*fields)[id] = new meshMetric(this, technique, f, parameters);; + fields->background_field = id; + //mm = new meshMetric(this, technique, f, parameters); + //mm->setAsBackgroundMesh (this); if (getDim() == 2){ for (fiter fit = firstFace(); fit != lastFace(); ++fit){ @@ -611,7 +617,8 @@ int GModel::adaptMesh(int technique, simpleFunction<double> *f, std::vector<doub _octree = 0; } } - delete mm; + fields->reset(); + //delete mm; if (++ITER >= niter) break; if (fabs((double)(nbElems - nbElemsOld)) < 0.01 * nbElemsOld) break; diff --git a/Mesh/meshGRegionMMG3D.cpp b/Mesh/meshGRegionMMG3D.cpp index 6683aadc25..440a385f83 100644 --- a/Mesh/meshGRegionMMG3D.cpp +++ b/Mesh/meshGRegionMMG3D.cpp @@ -74,14 +74,14 @@ static void gmsh2MMG(GRegion *gr, MMG_pMesh mmg, MMG_pSol sol, mmg->nt += (*it)->triangles.size(); } - mmg->npmax = sol->npmax = 100000; - mmg->ntmax = 70000; - mmg->nemax = 700000; + mmg->npmax = sol->npmax = 1000000; + mmg->ntmax = 700000; + mmg->nemax = 7000000; mmg->point = (MMG_pPoint)calloc(mmg->npmax+1,sizeof(MMG_Point)); mmg->tetra = (MMG_pTetra)calloc(mmg->nemax+1,sizeof(MMG_Tetra)); mmg->tria = (MMG_pTria) calloc(mmg->ntmax+1,sizeof(MMG_Tria)); - mmg->disp = (MMG_pDispl)calloc(mmg->npmax+1,sizeof(MMG_Displ)); + //mmg->disp = (MMG_pDispl)calloc(mmg->npmax+1,sizeof(MMG_Displ)); mmg->adja = (int*)calloc(4*mmg->nemax+5,sizeof(int)); sol->offset = 6; @@ -181,7 +181,7 @@ static void gmsh2MMG(GRegion *gr, MMG_pMesh mmg, MMG_pSol sol, k++; } } - mmg->disp = 0; + //mmg->disp = 0; } @@ -242,17 +242,15 @@ static void updateSizes(GRegion *gr, MMG_pMesh mmg, MMG_pSol sol) static void freeMMG(MMG_pMesh mmgMesh, MMG_pSol mmgSol) { free(mmgMesh->point); - // free(mmgMesh->disp->alpha); - // free(mmgMesh->disp->mv); - free(mmgMesh->disp); + //free(mmgMesh->disp); free(mmgMesh->adja); free(mmgMesh->tria); free(mmgMesh->tetra); free(mmgMesh); - if ( mmgSol->npfixe ){ + //if ( mmgSol->npfixe ){ free(mmgSol->met); free(mmgSol->metold); - } + //} free(mmgSol); } diff --git a/Mesh/meshMetric.cpp b/Mesh/meshMetric.cpp index eb044c02a7..f56c08b54a 100644 --- a/Mesh/meshMetric.cpp +++ b/Mesh/meshMetric.cpp @@ -331,7 +331,7 @@ void meshMetric::computeMetric(){ //smoothMetric (sol); //curvatureContributionToMetric(); - putOnNewView(); + //putOnNewView(); } diff --git a/Numeric/cartesian.h b/Numeric/cartesian.h index 164982c830..535451bda8 100644 --- a/Numeric/cartesian.h +++ b/Numeric/cartesian.h @@ -226,21 +226,31 @@ class cartesianBox { SPoint3 p7 = getNodeCoordinates(it7->first); SPoint3 p8 = getNodeCoordinates(it8->first); - MVertex v1(p1.x(), p1.y(), p1.z()); - MVertex v2(p2.x(), p2.y(), p2.z()); - MVertex v3(p3.x(), p3.y(), p3.z()); - MVertex v4(p4.x(), p4.y(), p4.z()); - MVertex v5(p5.x(), p5.y(), p5.z()); - MVertex v6(p6.x(), p6.y(), p6.z()); - MVertex v7(p7.x(), p7.y(), p7.z()); - MVertex v8(p8.x(), p8.y(), p8.z()); + MVertex *v1 = new MVertex(p1.x(), p1.y(), p1.z()); + MVertex *v2 = new MVertex(p2.x(), p2.y(), p2.z()); + MVertex *v3 = new MVertex(p3.x(), p3.y(), p3.z()); + MVertex *v4 = new MVertex(p4.x(), p4.y(), p4.z()); + MVertex *v5 = new MVertex(p5.x(), p5.y(), p5.z()); + MVertex *v6 = new MVertex(p6.x(), p6.y(), p6.z()); + MVertex *v7 = new MVertex(p7.x(), p7.y(), p7.z()); + MVertex *v8 = new MVertex(p8.x(), p8.y(), p8.z()); - MHexahedron newElem(&v1, &v2, &v3, &v4, &v5, &v6, &v7, &v8); + MHexahedron *newElem = new MHexahedron(v1, v2, v3, v4, v5, v6, v7, v8); double uvw[3]; double xyz[3] = {x,y,z}; - newElem.xyz2uvw(xyz, uvw); + newElem->xyz2uvw(xyz, uvw); //printf("uvw =%g %g %g \n", uvw[0],uvw[1],uvw[2]); - double val = newElem.interpolate(vals, uvw[0], uvw[1], uvw[2]); + double val = newElem->interpolate(vals, uvw[0], uvw[1], uvw[2]); + + delete newElem; + delete v1; + delete v2; + delete v3; + delete v4; + delete v5; + delete v6; + delete v7; + delete v8; return val; } diff --git a/benchmarks/boolean/sphere.lua b/benchmarks/boolean/sphere.py similarity index 100% rename from benchmarks/boolean/sphere.lua rename to benchmarks/boolean/sphere.py -- GitLab