Skip to content
Snippets Groups Projects
Commit d2340a01 authored by Emilie Marchandise's avatar Emilie Marchandise
Browse files

mmg3D memory

parent 610447b1
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
......@@ -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);
}
......
......@@ -331,7 +331,7 @@ void meshMetric::computeMetric(){
//smoothMetric (sol);
//curvatureContributionToMetric();
putOnNewView();
//putOnNewView();
}
......
......@@ -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;
}
......
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment