diff --git a/Fltk/statisticsWindow.cpp b/Fltk/statisticsWindow.cpp index e1a86fdaed0d34a2575eb607c8d5b49909925b03..ed9da209ed6579d078a603b518deb641c721438a 100644 --- a/Fltk/statisticsWindow.cpp +++ b/Fltk/statisticsWindow.cpp @@ -180,6 +180,27 @@ statisticsWindow::statisticsWindow(int deltaFontSize) void statisticsWindow::compute(bool elementQuality) { + //emi hack + // double minAngle = 120.0; + // double meanAngle = 0.0; + // int count = 0; + // std::vector<GEntity*> entities; + // GModel::current()->getEntities(entities); + // std::map<int, std::vector<double> > d; + // for(unsigned int i = 0; i < entities.size(); i++){ + // if(entities[i]->dim() < 2) continue; + // for(unsigned int j = 0; j < entities[i]->getNumMeshElements(); j++){ + // MElement *e = entities[i]->getMeshElement(j); + // double angle = e->angleShapeMeasure(); + // minAngle = std::min(minAngle, angle); + // meanAngle += angle; + // count++; + // } + // } + // meanAngle = meanAngle / count; + // printf("Angles = min=%g av=%g \n", minAngle, meanAngle); + //hack emi + int num = 0; static double s[50]; static char label[50][256]; diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp index 67a8158b8a7d285a265595bc01f9a130befeb404..f2d2cefc793f61889587163e545f568e1534e2d5 100644 --- a/Geo/GFaceCompound.cpp +++ b/Geo/GFaceCompound.cpp @@ -2005,7 +2005,7 @@ void GFaceCompound::printStuff() const { if( !CTX::instance()->mesh.saveAll) return; - + std::list<GFace*>::const_iterator it = _compound.begin(); char name0[256], name1[256], name2[256], name3[256]; diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp index cda67e04a5fd17cd7e98b217fdf491469722843f..5741ff0d00438a36d29a80263994959cbafed879 100644 --- a/Mesh/meshGFace.cpp +++ b/Mesh/meshGFace.cpp @@ -1545,7 +1545,7 @@ void partitionAndRemesh(GFaceCompound *gf) //Partition the mesh and createTopology for new faces //----------------------------------------------------- - + double tbegin = Cpu(); std::list<GFace*> cFaces = gf->getCompounds(); std::vector<MElement *> elements; for (std::list<GFace*>::iterator it = cFaces.begin(); it != cFaces.end(); it++) @@ -1555,7 +1555,7 @@ void partitionAndRemesh(GFaceCompound *gf) typeOfPartition method; if(gf->nbSplit > 0) method = MULTILEVEL; else method = LAPLACIAN; - + multiscalePartition *msp = new multiscalePartition(elements, abs(gf->nbSplit), method); //gf->partitionFaceCM(); @@ -1569,13 +1569,15 @@ void partitionAndRemesh(GFaceCompound *gf) gf->model()->createTopologyFromFaces(pFaces); - Msg::Info("Multiscale Partition SUCCESSFULLY PERFORMED : %d parts", NF ); + double tmult = Cpu(); + Msg::Info("Multiscale Partition SUCCESSFULLY PERFORMED : %d parts (%g s)", NF , tmult -tbegin); gf->model()->writeMSH("multiscalePARTS.msh", 2.2, false, true); //Remesh new faces (Compound Lines and Compound Surfaces) //----------------------------------------------------- - Msg::Info("--- Parametrize Compounds:"); - + Msg::Info("*** Starting parametrize compounds:"); + double t0 = Cpu(); + //Parametrize Compound Lines int NE = gf->model()->getMaxElementaryNumber(1) - nume + 1; for (int i=0; i < NE; i++){ @@ -1610,13 +1612,17 @@ void partitionAndRemesh(GFaceCompound *gf) gfc->parametrize(); } - Msg::Info("*** Mesh Compounds:"); - + double t1 = Cpu(); + Msg::Info("*** Parametrize compounds done (%g s)", t1-t0); + + Msg::Info("*** Starting meshing 1D edges ...:"); for (int i = 0; i < NE; i++){ GEdge *gec = gf->model()->getEdgeByTag(nume + NE + i); meshGEdge mge; mge(gec); } + double t2 = Cpu(); + Msg::Info("*** Meshing 1D edges done (%gs)", t2-t1); Msg::Info("*** Starting Mesh of surface %d ...", gf->tag()); @@ -1706,7 +1712,8 @@ void partitionAndRemesh(GFaceCompound *gf) } } - Msg::Info("*** Mesh of surface %d done by assembly remeshed faces", gf->tag()); + double t3 = Cpu(); + Msg::Info("*** Mesh of surface %d done by assembly remeshed faces (%g s)", gf->tag(), t3-t2); Msg::Info("-----------------------------------------------------------"); gf->coherenceNormals(); diff --git a/Mesh/qualityMeasures.cpp b/Mesh/qualityMeasures.cpp index f7559c0480c309c24011dff135a4c17eadc7ad92..5a9738360601c81093024b37a871cd9214f7c349 100644 --- a/Mesh/qualityMeasures.cpp +++ b/Mesh/qualityMeasures.cpp @@ -341,6 +341,7 @@ double qmTriangleAngles (MTriangle *e) { rot[2][0]= 0; rot[2][1]=0; rot[2][2]=1; double tmp[3][3]; + double minAngle = 120.0; for (int i = 0; i < e->getNumPrimaryVertices(); i++) { const double u = i == 1 ? 1 : 0; const double v = i == 2 ? 1 : 0; @@ -375,12 +376,18 @@ double qmTriangleAngles (MTriangle *e) { double c; prosca(v1,v2,&c); double x = acos(c)-M_PI/3; - // printf("Angle %g ", (x+M_PI/3)/M_PI*180); + double angle = (x+M_PI/3)/M_PI*180; double quality = (atan(a*(x+M_PI/9)) + atan(a*(M_PI/9-x)))/den; - // printf("Quality %g\n",quality); worst_quality = std::min(worst_quality, quality); + + // minAngle = std::min(angle, minAngle); + // printf("Angle %g ", angle); + // printf("Quality %g\n",quality); } - //printf("\n"); + // printf("MinAngle %g ", minAngle); + // printf("\n"); + // return minAngle; + return worst_quality; } diff --git a/benchmarks/2d/square.geo b/benchmarks/2d/square.geo index 62bd5d191c4c25b5f0dddc76bf1bac1d3aa0abed..90e3adbf43013a26c20632857513e4100d7c0cc5 100644 --- a/benchmarks/2d/square.geo +++ b/benchmarks/2d/square.geo @@ -13,3 +13,12 @@ Line Loop(5) = {1, 2, 3, 4}; Plane Surface(10) = {5}; +Field[1] = Attractor; +Field[1].EdgesList = {1}; +Field[2] = BoundaryLayer; +Field[2].DistMax = 0.1; +Field[2].DistMin = 0.002; +Background Field = 2; +Background Field = -1; +Background Field = 1; +Background Field = 2;