diff --git a/Mesh/delaunay_refinement.cpp b/Mesh/delaunay_refinement.cpp index 6046d2e66c735a56768393ded3fa4b06cbb81045..5bd391a67954d7b5e80ac3ea3e41a18f527205f3 100644 --- a/Mesh/delaunay_refinement.cpp +++ b/Mesh/delaunay_refinement.cpp @@ -131,14 +131,16 @@ void saturateEdge (Edge &e, std::vector<Vertex*> &S, double (*f)(const SPoint3 & const double f1 = rr._x3; const double f2 = rr._x4; const double dL = 2.*(t2-t1) * dl / (f1+f2); + // printf("%g --> %g for %g --> %g\n",L,dL,t1,t2); double L0 = L; while (1) { const double t = t1 + (L+interval-L0)*(t2-t1) / dL; - if (t >= t2) { + if (t >= t2*.999) { break; } else { + // printf("%g ",t); SPoint3 p = p1 * (1.-t) + p2*t; double lc = e.first->lc() * (1.-t) + e.second->lc()*t; const double dx = 0;//1.e-12 * (double) rand() / RAND_MAX; @@ -149,7 +151,8 @@ void saturateEdge (Edge &e, std::vector<Vertex*> &S, double (*f)(const SPoint3 & } } } - + // printf(" press enter\n"); + // getchar(); // printf("%d points added\n",S.size()); // exit(1); @@ -254,21 +257,15 @@ public: void filterVertices (const int numThreads, vertexFilter &_filter, - std::vector<Vertex*> &S, std::vector<Vertex*> &add, double (*f)(const SPoint3 &p, void *), void *data) { - // printf("before : %d points to add\n",add.size()); - // double t1 = Cpu(); + std::vector<int> indices; + SortHilbert(add, indices); + std::vector<Vertex*> _add = add; - for (unsigned int i=0;i<S.size();i++){ - SPoint3 p (S[i]->x(),S[i]->y(),S[i]->z()); - // double l = f (p, data); - _filter.insert( S[i] ); - } add.clear(); - // double t2 = Cpu(); for (unsigned int i=0;i<_add.size();i++){ SPoint3 p (_add[i]->x(),_add[i]->y(),_add[i]->z()); volumePointWithExclusionRegion v (_add[i]); @@ -279,9 +276,6 @@ void filterVertices (const int numThreads, else delete _add[i]; } - // double t3 = Cpu(); - // printf("filter ---> %12.5E %12.5E \n",t2-t1,t3-t2); - // printf("after filter : %d points to add\n",add.size()); } @@ -415,6 +409,10 @@ void edgeBasedRefinement (const int numThreads, { // vertexFilter _filter (bb, 20); vertexFilter _filter; + for (unsigned int i=0;i<_vertices.size();i++){ + _filter.insert( _vertices[i] ); + } + int iter = 1; Msg::Info("----------------------------------- SATUR FILTR SORTH DELNY TIME TETS"); @@ -426,7 +424,7 @@ void edgeBasedRefinement (const int numThreads, double t1 = Cpu(); saturateEdges (ec, allocator, numThreads, add, _fx, NULL); double t2 = Cpu(); - filterVertices (numThreads, _filter, _vertices, add, _fx, NULL); + filterVertices (numThreads, _filter, add, _fx, NULL); double t3 = Cpu(); if (add.empty())break; // randomize vertices (EXTREMELY IMPORTANT FOR NOT DETERIORATING PERFORMANCE)