From 2ef49d811f0edbf68917c1eb04cfbf4aab821f22 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Thu, 11 Oct 2007 14:34:04 +0000
Subject: [PATCH] *** empty log message ***

---
 Mesh/BDS.cpp       |  4 ++--
 Mesh/meshGFace.cpp | 26 ++++++++++++++++++--------
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/Mesh/BDS.cpp b/Mesh/BDS.cpp
index 3967e1c147..a682301007 100644
--- a/Mesh/BDS.cpp
+++ b/Mesh/BDS.cpp
@@ -1,4 +1,4 @@
-// $Id: BDS.cpp,v 1.80 2007-10-11 08:59:22 remacle Exp $
+// $Id: BDS.cpp,v 1.81 2007-10-11 14:34:04 remacle Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -217,7 +217,7 @@ BDS_Edge *BDS_Mesh::recover_edge(int num1, int num2, std::set<EdgeToRecover> *e2
   
   if (!p1 || !p2) throw;;
 
-  Msg(INFO," edge %d %d has to be recovered",num1,num2);
+  Msg(DEBUG," edge %d %d has to be recovered",num1,num2);
   
   int ix = 0;
   int ixMax = 100;
diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index 09dd5b2621..eb57e3e18d 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGFace.cpp,v 1.93 2007-10-11 13:42:12 remacle Exp $
+// $Id: meshGFace.cpp,v 1.94 2007-10-11 14:34:04 remacle Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -97,6 +97,13 @@ void remeshUnrecoveredEdges ( std::set<EdgeToRecover> & edgesNotRecovered, std::
 	      v2->getParameter(0,t2);
 	    }
 
+	    // periodic
+	    if (v1->onWhat() == g1 && v1->onWhat() == g2)
+		t1 = fabs(t2-bb.low()) < fabs(t2-bb.high()) ? bb.low() : bb.high();
+	    if (v2->onWhat() == g1 && v2->onWhat() == g2)
+		t2 = fabs(t1-bb.low()) < fabs(t1-bb.high()) ? bb.low() : bb.high();
+	    
+
 	    if (lc1 == -1)
 	      lc1 = BGM_MeshSize(v1->onWhat(),0,0,v1->x(),v1->y(),v1->z());
 	    if (lc2 == -1)
@@ -681,7 +688,7 @@ bool recover_medge ( BDS_Mesh *m, GEdge *ge, std::set<EdgeToRecover> *e2r, std::
 // domain, including embedded points 
 // and surfaces
 
-bool gmsh2DMeshGenerator ( GFace *gf , bool debug = true)
+bool gmsh2DMeshGenerator ( GFace *gf , int RECUR_ITER, bool debug = true)
 {
 
   typedef std::set<MVertex*> v_container ;
@@ -938,16 +945,19 @@ bool gmsh2DMeshGenerator ( GFace *gf , bool debug = true)
 
   if (edgesNotRecovered.size())
   {
-    Msg(GERROR,"%d edges were not recovered on model face %d, gmsh goes back and refines the 1d mesh",edgesNotRecovered.size(),gf->tag());
-    //    std::list<GFace *> facesToRemesh;
-    //    remeshUnrecoveredEdges ( edgesNotRecovered, facesToRemesh);
+    Msg(WARNING,"%d mesh edges intersect in the 1d mesh of model face %d",edgesNotRecovered.size(),gf->tag());
+    Msg(WARNING,"Gmsh now refine those edges and tries again (ITER %d)",RECUR_ITER);
+    std::list<GFace *> facesToRemesh;
+    remeshUnrecoveredEdges ( edgesNotRecovered, facesToRemesh);
     delete m;
     delete [] U_;
     delete [] V_;
-    //    if (facesToRemesh.size() == 0)
-    //      return gmsh2DMeshGenerator (gf,debug);    
+    if (RECUR_ITER < 10 && facesToRemesh.size() == 0)
+      return gmsh2DMeshGenerator (gf, RECUR_ITER+1, debug);    
     return false;
   }
+  if (RECUR_ITER > 0)
+    Msg(WARNING," :-) Gmsh was able to recover all edges using at ITER %d ",RECUR_ITER);
 
   //  Msg(INFO,"Boundary Edges recovered for surface %d",gf->tag());
   // Look for an edge that is on the boundary for which one of the
@@ -1722,7 +1732,7 @@ void meshGFace::operator() (GFace *gf)
   // temp fix until we create MEdgeLoops in gmshFace
   Msg(DEBUG1, "Generating the mesh");
   if(gf->getNativeType() == GEntity::GmshModel || gf->edgeLoops.empty()){
-    gmsh2DMeshGenerator(gf,false);
+    gmsh2DMeshGenerator(gf,0, false);
   }
   else{
     if(!gmsh2DMeshGeneratorPeriodic(gf,false))
-- 
GitLab