Index: /issm/trunk/src/c/Bamgx/objects/Triangle.cpp
===================================================================
--- /issm/trunk/src/c/Bamgx/objects/Triangle.cpp	(revision 2959)
+++ /issm/trunk/src/c/Bamgx/objects/Triangle.cpp	(revision 2960)
@@ -19,13 +19,13 @@
 	/*Methods*/
 	/*FUNCTION Triangle::FindBoundaryEdge{{{1*/
-	TriangleAdjacent Triangle::FindBoundaryEdge(int i) const
-	  {
+	TriangleAdjacent Triangle::FindBoundaryEdge(int i) const{
 		// turn around  the vertex ns[i] also call  s
-		Triangle   *t = (Triangle *) this , *ttc;
+		Triangle* t = (Triangle*)this;
+		Triangle* ttc=NULL;
+
 		int k=0,j = EdgesVertexTriangle[i][0],jc;
 		int exterieur  = !link  ;
 
-		do 
-		  {
+		do{
 			int exterieurp = exterieur;
 			k++; 
@@ -38,9 +38,9 @@
 			j = NextEdge[jc];
 			if (k>=2000){
-				throw ErrorException(__FUNCT__,exprintf("k>=2000"));
+				throw ErrorException(__FUNCT__,exprintf("too many iteration in Triangle::FindBoundaryEdge (k>=2000)"));
 			}
-		  } while ( (this!= t)); 
+		} while (this!= t); 
 		return TriangleAdjacent(0,0);
-	  }
+	}
 	/*}}}1*/
 	/*FUNCTION Triangle::Echo {{{1*/
Index: /issm/trunk/src/c/Bamgx/objects/Triangles.cpp
===================================================================
--- /issm/trunk/src/c/Bamgx/objects/Triangles.cpp	(revision 2959)
+++ /issm/trunk/src/c/Bamgx/objects/Triangles.cpp	(revision 2960)
@@ -20,5 +20,4 @@
 	long NbUnSwap =0;
 	int  Triangles::counter = 0;
-	Triangles* CurrentTh=NULL; //To delete
 
 	/*Constructors/Destructors*/
@@ -137,5 +136,4 @@
 	Triangles::~Triangles() {
 		long int verbosity=2;
-		if (CurrentTh == this) CurrentTh=0;
 		//if(vertices)  delete [] vertices; //TEST  crash if not commented
 		if(edges)     delete [] edges;
@@ -415,4 +413,19 @@
 			if(verbose>3) printf("      no Edges found\n");
 		}
+		//CrackedEdges
+		if(bamgmesh->CrackedEdges){
+			if(verbose>3) printf("      processing CrackedEdges\n");
+			NbCrackedEdges=bamgmesh->NumCrackedEdges;
+			CrackedEdges=new CrackedEdge[NbCrackedEdges];
+			printf("NbCrackedEdges = %i\n",bamgmesh->NumCrackedEdges);
+			for (i=0;i<NbCrackedEdges;i++){
+				//CrackedEdges[i].a.edge=bamgmesh->CrackedEdges[i*2+0]-1; //C indexing
+				//CrackedEdges[i].b.edge=bamgmesh->CrackedEdges[i*1+0]-1; //C indexing
+				throw ErrorException(__FUNCT__,exprintf("not implemented yet"));
+			}
+		}
+		else{
+			if(verbose>3) printf("      no CrackedEdges found\n");
+		}
 
 		//EdgeOnGeometricEdge
@@ -886,5 +899,4 @@
 		int    verbosity=bamgopts->verbose;
 		double cutoffradian=bamgopts->MaximalAngleOfCorner*Pi/180;
-		CurrentTh=this;
 
 		//display info
@@ -967,6 +979,6 @@
 			printf("            - number of triangles   = %i \n",nbt); 
 			printf("            - number of given edges = %i \n",nbe); 
-			printf("            - number of all edges   = %i \n"  ,edge4->nb()); 
-			printf("            - Euler number 1 - nb of holes = %i \n"  ,nbt-edge4->nb()+nbv); 
+			printf("            - number of all edges   = %i \n",nbedges); 
+			printf("            - Euler number 1 - nb of holes = %i \n"  ,nbt-nbedges+nbv); 
 		}
 
@@ -1858,12 +1870,11 @@
 		/*FUNCTION Triangles::CrackMesh{{{1*/
 		int Triangles::CrackMesh() {
-			long int verbosity=0;
-			Triangles *CurrentThOld = CurrentTh;
+
+			int verbosity=0;
+			int i,k;
 			//  computed the number of cracked edge
-			int i,k;
 			for (k=i=0;i<nbe;i++)
 			 if(edges[i].onGeometry->Cracked()) k++;
 			if( k==0) return 0;
-			CurrentTh = this;
 			printf("      number of Cracked Edges = %i\n",k);
 			NbCrackedEdges =k;
@@ -1996,5 +2007,4 @@
 				throw ErrorException(__FUNCT__,exprintf("Not enougth vertices: to crack the mesh we need %i vertices",nbv));
 			}
-			CurrentTh = CurrentThOld;
 			return  NbCrackedVertices;
 		}
@@ -2039,7 +2049,4 @@
 	/*FUNCTION Triangles::FillHoleInMesh{{{1*/
 	void Triangles::FillHoleInMesh() {
-
-		Triangles* OldCurrentTh =CurrentTh;
-		CurrentTh=this;
 
 		int verbosity=0;
@@ -2105,5 +2112,5 @@
 			}
 			if(verbosity>5) {
-				printf("         info on Mesh\n");
+				printf("         info on Mesh:\n");
 				printf("            - number of vertices    = %i \n",nbv); 
 				printf("            - number of triangles   = %i \n",nbt); 
@@ -2325,5 +2332,4 @@
 				 }
 		  }
-		CurrentTh=OldCurrentTh;
 	}
 	/*}}}1*/
@@ -2947,5 +2953,4 @@
 		// NewPointsOld(*this) ;
 		NewPoints(*this,0) ;
-		CurrentTh = 0;
 	}
 	/*}}}1*/
@@ -3288,5 +3293,4 @@
 
 		NewPoints(BTh,KeepVertices) ;
-		CurrentTh = 0;
 	}
 	/*}}}1*/
@@ -3367,6 +3371,4 @@
 		long int verbosity=2;
 		if (verbosity>2) printf("   Insert initial %i vertices\n",nbv);
-		Triangles* OldCurrentTh=CurrentTh;
-		CurrentTh=this;
 		SetIntCoor();
 		Int4 i;
@@ -3473,5 +3475,4 @@
 		// because we break the TriangleContainingTheVertex
 #endif
-		CurrentTh=OldCurrentTh;
 	}
 	/*}}}1*/
@@ -4516,6 +4517,4 @@
 		int ret =0;
 		if (nbvx<nbv+nbe) return 1;//   
-		Triangles *  OCurrentTh= CurrentTh;
-		CurrentTh = this;
 		// 1) create  the new points by spliting the internal edges 
 		// set the 
@@ -4984,5 +4983,4 @@
 		}
 
-		CurrentTh=OCurrentTh;
 		return 0; //ok
 
@@ -4999,6 +4997,4 @@
 		if(newVertexOnBThEdge) delete []  newVertexOnBThEdge;
 
-
-		CurrentTh= OCurrentTh;
 		return ret; // ok 
 	}
@@ -5246,5 +5242,4 @@
 	/*FUNCTION FindTriangle{{{1*/
 	Int4 FindTriangle(Triangles &Th, Real8 x, Real8 y, double* a,int & inside){
-		CurrentTh=&Th;
 		I2 I = Th.toI2(R2(Min(Max(Th.pmin.x,x),Th.pmax.x),Min(Max(Th.pmin.y,y),Th.pmax.y))); 
 		Icoor2 dete[3];
Index: /issm/trunk/src/m/classes/public/bamg.m
===================================================================
--- /issm/trunk/src/m/classes/public/bamg.m	(revision 2959)
+++ /issm/trunk/src/m/classes/public/bamg.m	(revision 2960)
@@ -66,6 +66,9 @@
 bamg_mesh.NumTriangles=0;
 bamg_mesh.Triangles=[];
-bamg_mesh.index=zeros(0,3);
+bamg_mesh.NumEdges=0;
+bamg_mesh.Edges=zeros(0,3);
 bamg_mesh.hVertices=[];
+bamg_mesh.NumCrackedEdges=0;
+bamg_mesh.CrackedEdges=zeros(0,2);
 if (~exist(options,'domain') & md.numberofgrids~=0 & strcmpi(md.type,'2d')),
 	bamg_mesh.NumVertices=md.numberofgrids;
@@ -78,4 +81,12 @@
 			error(['hVertices option should be of size [' num2str(md.numberofgrids) ',1]']);
 		end
+	end
+	if isstruct(md.rifts)
+		for i=1:length(md.rifts)
+			bamg_mesh.Edges=[bamg_mesh.Edges;md.rifts(i).segments];
+		end
+		bamg_mesh.NumEdges=size(bamg_mesh.Edges,1);
+		bamg_mesh.NumCrackedEdges=bamg_mesh.NumEdges;
+		bamg_mesh.CrackedEdges=[1 2;3 4];
 	end
 end
Index: /issm/trunk/src/mex/Bamg/Bamg.cpp
===================================================================
--- /issm/trunk/src/mex/Bamg/Bamg.cpp	(revision 2959)
+++ /issm/trunk/src/mex/Bamg/Bamg.cpp	(revision 2960)
@@ -20,4 +20,6 @@
 	double* TrianglesMesh=NULL;
 	double* hVerticesMesh=NULL;
+	int     NumCrackedEdgesMesh;
+	double* CrackedEdgesMesh=NULL;
 
 	/*Geom inputs: */
@@ -105,6 +107,8 @@
 	bamgmesh.NumEdges=0;
 	bamgmesh.Edges=NULL;
-	bamgmesh.NumCrackedEdges=0;
-	bamgmesh.CrackedEdges=NULL;
+	FetchData(&NumCrackedEdgesMesh,mxGetField(BAMGMESH,0,"NumCrackedEdges"));
+	bamgmesh.NumCrackedEdges=NumCrackedEdgesMesh;
+	FetchData(&CrackedEdgesMesh,NULL,NULL,mxGetField(BAMGMESH,0,"CrackedEdges"));
+	bamgmesh.CrackedEdges=CrackedEdgesMesh;
 	bamgmesh.NumSubDomains=0;
 	bamgmesh.SubDomains=NULL;
