From 42cebbc328d67d88180cc404192db720403b23b8 Mon Sep 17 00:00:00 2001 From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be> Date: Wed, 22 Aug 2012 12:36:28 +0000 Subject: [PATCH] bug in adaptation corrected --- Geo/GModel.cpp | 7 +++++++ Mesh/meshGRegion.cpp | 4 ++-- Post/PViewAsSimpleFunction.cpp | 2 +- benchmarks/centerlines/cerebral_centerlines.geo | 4 ++-- contrib/HighOrderMeshOptimizer/OptHomRun.cpp | 15 +++++++++++++++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 5964e115ca..74a24c70e9 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -539,6 +539,10 @@ int GModel::adaptMesh(std::vector<int> technique, int niter, bool meshAll) { #if defined(HAVE_MESH) + + // copy context (in order to allow multiple calls) + CTX _backup = *(CTX::instance()); + if (getNumMeshElements() == 0) mesh(getDim()); int nbElemsOld = getNumMeshElements(); int nbElems; @@ -642,6 +646,9 @@ int GModel::adaptMesh(std::vector<int> technique, } fields->reset(); + // copy context (in order to allow multiple calls) + *(CTX::instance()) = _backup ; + return 0; #else diff --git a/Mesh/meshGRegion.cpp b/Mesh/meshGRegion.cpp index 09e5c7295f..ca5aa46d86 100644 --- a/Mesh/meshGRegion.cpp +++ b/Mesh/meshGRegion.cpp @@ -670,14 +670,14 @@ void MeshDelaunayVolume(std::vector<GRegion*> ®ions) CTX::instance()->mesh.algo3d == ALGO_3D_MMG3D || CTX::instance()->mesh.algo2d == ALGO_2D_FRONTAL_QUAD || CTX::instance()->mesh.algo2d == ALGO_2D_BAMG){ - sprintf(opts, "-pY%c", (Msg::GetVerbosity() < 3) ? 'Q': + sprintf(opts, "-q1.3pY%c", (Msg::GetVerbosity() < 3) ? 'Q': (Msg::GetVerbosity() > 6) ? 'V': '\0'); // removed -q because mesh sizes at vertices were wrong... // sprintf(opts, "-q1.5pY%c", (Msg::GetVerbosity() < 3) ? 'Q': // (Msg::GetVerbosity() > 6) ? 'V': '\0'); } else { - sprintf(opts, "-Ype%c", (Msg::GetVerbosity() < 3) ? 'Q': + sprintf(opts, "-q1.5Ype%c", (Msg::GetVerbosity() < 3) ? 'Q': (Msg::GetVerbosity() > 6) ? 'V': '\0'); } try{ diff --git a/Post/PViewAsSimpleFunction.cpp b/Post/PViewAsSimpleFunction.cpp index aeaabce2db..c4d34f4ce6 100644 --- a/Post/PViewAsSimpleFunction.cpp +++ b/Post/PViewAsSimpleFunction.cpp @@ -12,7 +12,7 @@ double PViewEvaluator::operator() (const double x, const double y, const double PViewData * pvd = _pv->getData(); double value; bool found = pvd->searchScalar(x, y, z, &value, _step); - printf("found %d %g %g %g %g\n",found,x,y,value,x*x+y*y); + // printf("found %d %g %g %g %g\n",found,x,y,value,x*x+y*y); if (found) return value; return 1.e22; } diff --git a/benchmarks/centerlines/cerebral_centerlines.geo b/benchmarks/centerlines/cerebral_centerlines.geo index bc8c2fa9a4..da6689dc35 100644 --- a/benchmarks/centerlines/cerebral_centerlines.geo +++ b/benchmarks/centerlines/cerebral_centerlines.geo @@ -1,5 +1,5 @@ Mesh.Algorithm = 6; //(1=MeshAdapt, 2=Automatic, 5=Delaunay, 6=Frontal, 7=bamg, 8=delquad) -Mesh.Algorithm3D = 7; //(1=tetgen, 4=netgen, 7=mmg3D +//Mesh.Algorithm3D = 7; //(1=tetgen, 4=netgen, 7=mmg3D Mesh.LcIntegrationPrecision = 1.e-2; @@ -16,7 +16,7 @@ Field[1].nbElemLayer = 4; Field[1].hLayer = 0.2;//percent of vessel radius Field[1].closeVolume =1; -//Field[1].extrudeWall =1; +Field[1].extrudeWall =1; Field[1].reMesh =1; Field[1].run; diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp index 1f75111c40..ec46317f4f 100644 --- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp +++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp @@ -401,6 +401,19 @@ static std::vector<std::pair<std::set<MElement*> , std::set<MVertex*> > > getCon return result; } + +static void PrintBlob (std::set<MElement*> &eles, int iTag){ + char name[256]; + sprintf(name,"BLOB%d.pos",iTag); + FILE *f = fopen (name,"w"); + fprintf(f,"View\"%s\"{\n",name); + for (std::set<MElement*>::iterator it = eles.begin(); it != eles.end();++it){ + (*it)->writePOS(f,true,false,false,false,false,false,1.0,iTag); + } + fprintf(f,"};\n"); + fclose(f); +} + void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p) { @@ -454,6 +467,7 @@ void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p) //#pragma omp parallel for schedule(dynamic, 1) p.SUCCESS = 1; for (int i = 0; i < toOptimize.size(); ++i) { + PrintBlob (toOptimize[i].first, i+1); OptHomMessage("Optimizing a blob %i/%i composed of %4d elements", i+1, toOptimize.size(), toOptimize[i].first.size()); fflush(stdout); OptHOM temp(&entity, toOptimize[i].first, toOptimize[i].second, method); @@ -524,6 +538,7 @@ void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p) // std::ostringstream ossF; // ossF << "final_" << (*itf)->tag() << ".msh"; // temp.mesh.writeMSH(ossF.str().c_str()); + PrintBlob (toOptimize, ITER); } double DTF = Cpu()-tf1; if (p.SUCCESS == 1){ -- GitLab