Index: /issm/trunk/src/c/Bamgx/Bamgx.cpp
===================================================================
--- /issm/trunk/src/c/Bamgx/Bamgx.cpp	(revision 2784)
+++ /issm/trunk/src/c/Bamgx/Bamgx.cpp	(revision 2785)
@@ -34,8 +34,8 @@
 
 	/*output: */
-	double* elementsout=NULL;
-	double* xout=NULL;
-	double* yout=NULL;
-	int     nelout, nodsout;
+	double* VerticesOut=NULL;
+	double* TrianglesOut=NULL;
+	int     NumVerticesOut;
+	int     NumTrianglesOut;
 
 	/*Bamg options*/
@@ -111,7 +111,8 @@
 		rBBeqMBB = !strcmp(rBB,fMBB);
 
-	if(bamgmesh->numberofelements==0){
+	if(bamgmesh->NumTriangles==0){
 		/*Mesh generation {{{1*/
 		if (verbosity>0) printf("Construction of a mesh from a given geometry\n");
+		if (verbosity>1) printf("   Processing geometry...\n");
 		Geometry Gh(bamggeom,bamgargs);
 		hmin = Max(hmin,Gh.MinimalHmin());
@@ -119,4 +120,5 @@
 
 		//build metric if not given in input
+		if (verbosity>1) printf("   Generating Metric...\n");
 		for(i=0;i<Gh.nbv;i++)
 		  {
@@ -129,4 +131,5 @@
 
 		//generate mesh
+		if (verbosity>1) printf("   Generating Mesh...\n");
 		Triangles Th(maxnbv,Gh);
 		if(splitcorners) Th.SplitInternalEdgeWithBorderVertices();
@@ -136,15 +139,15 @@
 
 		//Build output
-		nelout=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
-		nodsout=Th.nbv;
-
-		xout=(double*)xmalloc(nodsout*sizeof(double));
-		yout=(double*)xmalloc(nodsout*sizeof(double));
-		for (i=0;i<nodsout;i++){
-			xout[i]=Th.vertices[i].r.x;
-			yout[i]=Th.vertices[i].r.y;
-		}
-
-		elementsout=(double*)xmalloc(3*nelout*sizeof(double));
+		if (verbosity>1) printf("   Processing Output...\n");
+		NumVerticesOut=Th.nbv;
+		VerticesOut=(double*)xmalloc(3*NumVerticesOut*sizeof(double));
+		for (i=0;i<NumVerticesOut;i++){
+			VerticesOut[i*3+0]=Th.vertices[i].r.x;
+			VerticesOut[i*3+1]=Th.vertices[i].r.y;
+			VerticesOut[i*3+2]=Th.vertices[i].ReferenceNumber;
+		}
+
+		NumTrianglesOut=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
+		TrianglesOut=(double*)xmalloc(4*NumTrianglesOut*sizeof(double));
 		num=0;
 		for(i=0;i<Th.nbt;i++){ 
@@ -152,7 +155,8 @@
 			if (t.link){
 				//write the element only if it is part of the mesh (no boundary element)
-				elementsout[3*num+0]=Th.Number(t[0])+1;
-				elementsout[3*num+1]=Th.Number(t[1])+1;
-				elementsout[3*num+2]=Th.Number(t[2])+1;
+				TrianglesOut[4*num+0]=Th.Number(t[0])+1;
+				TrianglesOut[4*num+1]=Th.Number(t[1])+1;
+				TrianglesOut[4*num+2]=Th.Number(t[2])+1;
+				TrianglesOut[4*num+3]=t.color;
 				num=num+1;
 			}
@@ -166,4 +170,5 @@
 
 		/*Read background mesh from simple delaunay triangulation: */
+		if (verbosity>1) printf("   Processing initial mesh...\n");
 		Triangles BTh(bamgmesh,bamgargs); // read the background mesh 
 
@@ -378,15 +383,14 @@
 
 			//Build output
-			nelout=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
-			nodsout=Th.nbv;
-
-			xout=(double*)xmalloc(nodsout*sizeof(double));
-			yout=(double*)xmalloc(nodsout*sizeof(double));
-			for (i=0;i<nodsout;i++){
-				xout[i]=Th.vertices[i].r.x;
-				yout[i]=Th.vertices[i].r.y;
+			NumVerticesOut=Th.nbv;
+			VerticesOut=(double*)xmalloc(3*NumVerticesOut*sizeof(double));
+			for (i=0;i<NumVerticesOut;i++){
+				VerticesOut[i*3+0]=Th.vertices[i].r.x;
+				VerticesOut[i*3+1]=Th.vertices[i].r.y;
+				VerticesOut[i*3+2]=Th.vertices[i].ReferenceNumber;
 			}
 
-			elementsout=(double*)xmalloc(3*nelout*sizeof(double));
+			NumTrianglesOut=Th.nbt-Th.NbOutT; //number of triangles - number of external triangles
+			TrianglesOut=(double*)xmalloc(4*NumTrianglesOut*sizeof(double));
 			num=0;
 			for(i=0;i<Th.nbt;i++){ 
@@ -394,7 +398,8 @@
 				if (t.link){
 					//write the element only if it is part of the mesh (no boundary element)
-					elementsout[3*num+0]=Th.Number(t[0])+1;
-					elementsout[3*num+1]=Th.Number(t[1])+1;
-					elementsout[3*num+2]=Th.Number(t[2])+1;
+					TrianglesOut[4*num+0]=Th.Number(t[0])+1;
+					TrianglesOut[4*num+1]=Th.Number(t[1])+1;
+					TrianglesOut[4*num+2]=Th.Number(t[2])+1;
+					TrianglesOut[4*num+3]=t.color;
 					num=num+1;
 				}
@@ -408,14 +413,14 @@
 
 	/*Assign output pointers*/
-	bamgmesh->numberofelements=nelout;
-	bamgmesh->numberofnodes=nodsout;
-	xfree((void**)&bamgmesh->index);
-	bamgmesh->index=elementsout;
-	xfree((void**)&bamgmesh->x);
-	bamgmesh->x=xout;
-	xfree((void**)&bamgmesh->y);
-	bamgmesh->y=yout;
+	bamgmesh->NumTriangles=NumTrianglesOut;
+	xfree((void**)&bamgmesh->Triangles);
+	bamgmesh->Triangles=TrianglesOut;
+
+	bamgmesh->NumVertices=NumVerticesOut;
+	xfree((void**)&bamgmesh->Vertices);
+	bamgmesh->Vertices=VerticesOut;
 
 	/*No error return*/
+	if (verbosity>1) printf("   Exiting Bamg.\n");
 	return noerr;
 
Index: /issm/trunk/src/c/Bamgx/MeshRead.cpp
===================================================================
--- /issm/trunk/src/c/Bamgx/MeshRead.cpp	(revision 2784)
+++ /issm/trunk/src/c/Bamgx/MeshRead.cpp	(revision 2785)
@@ -52,12 +52,12 @@
 	verbose=bamgargs->verbose;
 
-	nbv=bamgmesh->numberofnodes;
+	nbv=bamgmesh->NumVertices;
 	nbvx=nbv;
-	nbt=bamgmesh->numberofelements;
+	nbt=bamgmesh->NumTriangles;
 	nbiv=nbvx;
 
 	//Vertices
-	if(bamgmesh->x){
-		if(verbose>3) printf("Reading Vertices\n");
+	if(bamgmesh->Vertices){
+		if(verbose>3) printf("      processing Vertices\n");
 
 		vertices=(Vertex*)xmalloc(nbv*sizeof(Vertex));
@@ -65,10 +65,10 @@
 
 		for (i=0;i<nbv;i++){
-			vertices[i].r.x=bamgmesh->x[i];
-			vertices[i].r.y=bamgmesh->y[i];
+			vertices[i].r.x=bamgmesh->Vertices[i*3+0];
+			vertices[i].r.y=bamgmesh->Vertices[i*3+1];
 			vertices[i].ReferenceNumber=1;
 			vertices[i].DirOfSearch =NoDirOfSearch;
 			vertices[i].m=M1;
-			vertices[i].color =0;
+			vertices[i].color=bamgmesh->Vertices[i*3+2];
 		}
 		nbtx=2*nbvx-2; // for filling The Holes and quadrilaterals 
@@ -79,14 +79,14 @@
 
 	//Triangles
-	if(bamgmesh->index){
-		if(verbose>3) printf("Reading index\n");
+	if(bamgmesh->Triangles){
+		if(verbose>3) printf("      processing Triangles\n");
 		triangles =new Triangle[nbt];
-		for (i=0;i<bamgmesh->numberofelements;i++){
+		for (i=0;i<nbt;i++){
 			Triangle & t = triangles[i];
-			i1=(Int4)bamgmesh->index[i*3+0]-1; //for C indexing
-			i2=(Int4)bamgmesh->index[i*3+1]-1; //for C indexing
-			i3=(Int4)bamgmesh->index[i*3+2]-1; //for C indexing
+			i1=(Int4)bamgmesh->Triangles[i*4+0]-1; //for C indexing
+			i2=(Int4)bamgmesh->Triangles[i*4+1]-1; //for C indexing
+			i3=(Int4)bamgmesh->Triangles[i*4+2]-1; //for C indexing
 			t=Triangle(this,i1,i2,i3);
-			t.color=1; //reference = 1 for all triangles since it has not been specified
+			t.color=(Int4)bamgmesh->Triangles[i*4+3];
 		}
 	}
@@ -97,5 +97,5 @@
 	//Quadrilaterals
 	if(bamgmesh->Quadrilaterals){
-		if(verbose>3) printf("Reading Quadrilaterals\n");
+		if(verbose>3) printf("      processing Quadrilaterals\n");
 		Int4 i1,i2,i3,i4,iref;
 		triangles =new Triangle[nbt];
@@ -116,10 +116,10 @@
 	}
 	else{
-		if(verbose>3) printf("No Quadrilaterals found\n");
+		if(verbose>3) printf("      no Quadrilaterals found\n");
 	}
 
 	//hVertices
 	if(bamgmesh->hVertices){
-		if(verbose>3) printf("Reading hVertices\n");
+		if(verbose>3) printf("      processing hVertices\n");
 		hvertices=1;
 		for (i=0;i< nbv;i++){
@@ -128,10 +128,10 @@
 	}
 	else{
-		if(verbose>3) printf("No hVertices found\n");
+		if(verbose>3) printf("      no hVertices found\n");
 	}
 
 	//VertexOnGeometricEdge
 	if(bamgmesh->VertexOnGeometricEdge){
-		if(verbose>3) printf("Reading VertexOnGeometricEdge\n");
+		if(verbose>3) printf("      processing VertexOnGeometricEdge\n");
 		NbVerticesOnGeomEdge=bamgmesh->NumVertexOnGeometricEdge;
 		VerticesOnGeomEdge= new  VertexOnGeom[NbVerticesOnGeomEdge] ;
@@ -147,5 +147,5 @@
 	}
 	else{
-		if(verbose>3) printf("No VertexOnGeometricEdge found\n");
+		if(verbose>3) printf("      no VertexOnGeometricEdge found\n");
 	}
 
@@ -156,5 +156,5 @@
 		Real4 *len =0;
 
-		if(verbose>3) printf("Reading Edges\n");
+		if(verbose>3) printf("      processing Edges\n");
 		nbe=bamgmesh->NumEdges;
 		edges = new Edge[nbe];
@@ -219,10 +219,10 @@
 	}
 	else{
-		if(verbose>3) printf("No Edges found\n");
+		if(verbose>3) printf("      no Edges found\n");
 	}
 
 	//EdgeOnGeometricEdge
 	if(bamgmesh->EdgeOnGeometricEdge){
-		if(verbose>3) printf("Reading EdgeOnGeometricEdge\n");
+		if(verbose>3) printf("      processing EdgeOnGeometricEdge\n");
 		int i1,i2,i,j;
 		i2=bamgmesh->NumEdgeOnGeometricEdge;
@@ -237,5 +237,5 @@
 	}
 	else{
-		if(verbose>3) printf("No EdgeOnGeometricEdge found\n");
+		if(verbose>3) printf("      no EdgeOnGeometricEdge found\n");
 	}
 
@@ -243,5 +243,5 @@
 	if(bamgmesh->SubDomain){
 		Int4 i3,head,sens;
-		if(verbose>3) printf("Reading SubDomain\n");
+		if(verbose>3) printf("      processing SubDomain\n");
 		NbSubDomains=bamgmesh->NumSubDomain;
 		subdomains = new SubDomain [ NbSubDomains ];
@@ -256,5 +256,5 @@
 	}
 	else{
-		if(verbose>3) printf("No SubDomain found\n");
+		if(verbose>3) printf("      no SubDomain found\n");
 	}
 
@@ -1181,5 +1181,4 @@
 
 	//some checks
-	if(verbose>3) printf("Enter ReadGeometry\n"); 
 	if (bamggeom->NumVertices<=0 || bamggeom->Vertices==NULL){
 		throw ErrorException(__FUNCT__,exprintf("the domain provided does not contain any vertex"));
@@ -1191,5 +1190,5 @@
 	//Vertices
 	if (bamggeom->Vertices){
-		if(verbose>3) printf("Reading Vertices\n");
+		if(verbose>3) printf("      processing Vertices\n");
 		vertices = new GeometricalVertex[nbvx];
 		for (i=0;i<nbv;i++) {
@@ -1228,5 +1227,5 @@
 		Real4 *len =0;
 
-		if(verbose>3) printf("Reading Edges\n");
+		if(verbose>3) printf("      processing Edges\n");
 		edges = new GeometricalEdge[nbe];
 
@@ -1276,5 +1275,5 @@
 	//hVertices
 	if(bamggeom->hVertices){
-		if(verbose>3) printf("Reading hVertices\n");
+		if(verbose>3) printf("      processing hVertices\n");
 		for (i=0;i< nbv;i++){
 			vertices[i].m=Metric((Real4)bamggeom->hVertices[i]);
@@ -1282,10 +1281,10 @@
 	}
 	else{
-		if(verbose>3) printf("No hVertices found\n");
+		if(verbose>3) printf("      no hVertices found\n");
 	}
 
 	//MetricVertices
 	if(bamggeom->MetricVertices){
-		if(verbose>3) printf("Reading MetricVertices\n");
+		if(verbose>3) printf("      processing MetricVertices\n");
 		hvertices=1;
 		for (i=0;i< nbv;i++) {
@@ -1294,10 +1293,10 @@
 	}
 	else{
-		if(verbose>3) printf("No MetricVertices found\n");
+		if(verbose>3) printf("      no MetricVertices found\n");
 	}
 
 	//h1h2VpVertices
 	if(bamggeom->h1h2VpVertices){
-		if(verbose>3) printf("Reading h1h2VpVertices\n");
+		if(verbose>3) printf("      processing h1h2VpVertices\n");
 		Real4 h1,h2,v1,v2;
 		hvertices =1;
@@ -1311,19 +1310,19 @@
 	}
 	else{
-		if(verbose>3) printf("No h1h2VpVertices found\n");
+		if(verbose>3) printf("      no h1h2VpVertices found\n");
 	}
 
 	//MaximalAngleOfCorner
 	if (bamggeom->MaximalAngleOfCorner){
-		if(verbose>3) printf("Reading MaximalAngleOfCorner\n");
+		if(verbose>3) printf("      processing MaximalAngleOfCorner\n");
 		MaximalAngleOfCorner=bamggeom->MaximalAngleOfCorner*Pi/180;
 	}
 	else{
-		if(verbose>3) printf("No MaximalAngleOfCorner found\n");
+		if(verbose>3) printf("      no MaximalAngleOfCorner found\n");
 	}
 
 	//TangentAtEdges
 	if (bamggeom->TangentAtEdges){
-		if(verbose>3) printf("Reading TangentAtEdges");
+		if(verbose>3) printf("      processing TangentAtEdges");
 		int n,i,j,k;
 		R2 tg;
@@ -1342,10 +1341,10 @@
 	}
 	else{
-		if(verbose>3) printf("No TangentAtEdges found\n");
+		if(verbose>3) printf("      no TangentAtEdges found\n");
 	}
 
 	//Corners
 	if(bamggeom->Corners){
-		if(verbose>3) printf("Reading Corners");
+		if(verbose>3) printf("      processing Corners");
 		n=bamggeom->NumCorners;
 		for (i=0;i<n;i++) {     
@@ -1358,10 +1357,10 @@
 	}
 	else{
-		if(verbose>3) printf("No Corners found\n");
+		if(verbose>3) printf("      no Corners found\n");
 	}
 
 	//RequiredVertices
 	if(bamggeom->RequiredVertices){
-		if(verbose>3) printf("Reading RequiredVertices");
+		if(verbose>3) printf("      processing RequiredVertices");
 		n=bamggeom->NumRequiredVertices;
 		for (i=0;i<n;i++) {     
@@ -1373,10 +1372,10 @@
 	}
 	else{
-		if(verbose>3) printf("No RequiredVertices found\n");
+		if(verbose>3) printf("      no RequiredVertices found\n");
 	}
 
 	//RequiredEdges
 	if(bamggeom->RequiredEdges){
-		if(verbose>3) printf("Reading RequiredEdges");
+		if(verbose>3) printf("      processing RequiredEdges");
 		n=bamggeom->NumRequiredEdges;
 		for (i=0;i<n;i++) {     
@@ -1388,5 +1387,5 @@
 	}
 	else{
-		if(verbose>3) printf("No RequiredEdges found\n");
+		if(verbose>3) printf("      no RequiredEdges found\n");
 	}
 
@@ -1394,5 +1393,5 @@
 	if(bamggeom->SubDomain){
 		Int4 i0,i1,i2,i3;
-		if(verbose>3) printf("Reading SubDomain\n");
+		if(verbose>3) printf("      processing SubDomain\n");
 		NbSubDomains=bamggeom->NumSubDomain;
 		subdomains = new GeometricalSubDomain[NbSubDomains];
@@ -1410,5 +1409,5 @@
 	}
 	else{
-		if(verbose>3) printf("No SubDomain found\n");
+		if(verbose>3) printf("      no SubDomain found\n");
 	}
 }
Index: /issm/trunk/src/c/objects/BamgMesh.h
===================================================================
--- /issm/trunk/src/c/objects/BamgMesh.h	(revision 2784)
+++ /issm/trunk/src/c/objects/BamgMesh.h	(revision 2785)
@@ -8,10 +8,26 @@
 struct BamgMesh{
 
-	int     numberofelements;
-	int     numberofnodes;
-	double* x;
-	double* y;
-	double* index;
+	int     NumTriangles;
+	double* Triangles;
 
+	int     NumVertices;
+	double* Vertices;
+
+	int     NumEdges;
+	double* Edges;
+
+	int     NumQuadrilaterals;
+	double* Quadrilaterals;
+
+	int     NumVertexOnGeometricEdge;
+	double* VertexOnGeometricEdge;
+
+	int     NumEdgeOnGeometricEdge;
+	double* EdgeOnGeometricEdge;
+
+	int     NumSubDomain;
+	double* SubDomain;
+
+	double* hVertices;
 };
 #endif
Index: /issm/trunk/src/m/classes/public/bamg.m
===================================================================
--- /issm/trunk/src/m/classes/public/bamg.m	(revision 2784)
+++ /issm/trunk/src/m/classes/public/bamg.m	(revision 2785)
@@ -51,15 +51,14 @@
 
 % Bamg Mesh parameters {{{1
-bamg_mesh.numberofelements=0;
-bamg_mesh.numberofnodes=0;
-bamg_mesh.x=[];
-bamg_mesh.y=[];
+bamg_mesh.NumVertices=0;
+bamg_mesh.Vertices=[];
+bamg_mesh.NumTriangles=0;
+bamg_mesh.Triangles=[];
 bamg_mesh.index=zeros(0,3);
 if (~exist(options,'domain') & md.numberofgrids~=0 & strcmpi(md.type,'2d')),
-	bamg_mesh.numberofelements=md.numberofelements;
-	bamg_mesh.numberofnodes=md.numberofgrids;
-	bamg_mesh.x=md.x;
-	bamg_mesh.y=md.y;
-	bamg_mesh.index=md.elements;
+	bamg_mesh.NumVertices=md.numberofgrids;
+	bamg_mesh.Vertices=[md.x md.y ones(md.numberofgrids,1)];
+	bamg_mesh.NumTriangles=md.numberofelements;
+	bamg_mesh.Triangles=[md.elements ones(md.numberofgrids,1)];
 end
 %}}}
@@ -78,10 +77,10 @@
 
 %call Bamg
-[elements,x,y]=Bamg(bamg_mesh,bamg_geometry,bamg_options);
+[triangles vertices]=Bamg(bamg_mesh,bamg_geometry,bamg_options);
 
 % plug results onto model
-md.x=x;
-md.y=y;
-md.elements=elements;
+md.x=vertices(:,1);
+md.y=vertices(:,2);
+md.elements=triangles(:,1:3);
 
 %Fill in rest of fields:
Index: /issm/trunk/src/mex/Bamg/Bamg.cpp
===================================================================
--- /issm/trunk/src/mex/Bamg/Bamg.cpp	(revision 2784)
+++ /issm/trunk/src/mex/Bamg/Bamg.cpp	(revision 2785)
@@ -14,19 +14,18 @@
 
 	/*Mesh inputs*/
-	int     numberofnodes;
-	int     numberofelements;
-	double* x;
-	double* y;
-	double* index;
+	int     NumVerticesMesh;
+	double* VerticesMesh=NULL;
+	int     NumTrianglesMesh;
+	double* TrianglesMesh=NULL;
 
 	/*Geom inputs: */
-	int     NumVertices;
-	double* Vertices=NULL;
-	int     NumEdges;
-	double* Edges=NULL;
-	double* hVertices=NULL;
+	int     NumVerticesGeom;
+	double* VerticesGeom=NULL;
+	int     NumEdgesGeom;
+	double* EdgesGeom=NULL;
+	double* hVerticesGeom=NULL;
 	double  MaximalAngleOfCorner;
-	int     NumSubDomain;
-	double* SubDomain=NULL;
+	int     NumSubDomainGeom;
+	double* SubDomainGeom=NULL;
 
 	/*Options inputs*/
@@ -44,15 +43,14 @@
 
 	/*create bamg geometry input*/
-	FetchData(&NumVertices,mxGetField(BAMGGEOMETRY,0,"NumVertices"));
-	bamggeom.NumVertices=NumVertices;
-	FetchData(&Vertices,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Vertices"));
-	bamggeom.Vertices=Vertices;
-	FetchData(&NumEdges,mxGetField(BAMGGEOMETRY,0,"NumEdges"));
-	bamggeom.NumEdges=NumEdges;
-	FetchData(&Edges,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Edges"));
-	bamggeom.Edges=Edges;
-	FetchData(&hVertices,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"hVertices"));
-	bamggeom.hVertices=hVertices;
-	bamggeom.Edges=Edges;
+	FetchData(&NumVerticesGeom,mxGetField(BAMGGEOMETRY,0,"NumVertices"));
+	bamggeom.NumVertices=NumVerticesGeom;
+	FetchData(&VerticesGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Vertices"));
+	bamggeom.Vertices=VerticesGeom;
+	FetchData(&NumEdgesGeom,mxGetField(BAMGGEOMETRY,0,"NumEdges"));
+	bamggeom.NumEdges=NumEdgesGeom;
+	FetchData(&EdgesGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"Edges"));
+	bamggeom.Edges=EdgesGeom;
+	FetchData(&hVerticesGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"hVertices"));
+	bamggeom.hVertices=hVerticesGeom;
 	bamggeom.MetricVertices=NULL;
 	bamggeom.h1h2VpVertices=NULL;
@@ -67,20 +65,29 @@
 	bamggeom.NumRequiredEdges=0;
 	bamggeom.RequiredEdges=NULL;
-	FetchData(&NumSubDomain,mxGetField(BAMGGEOMETRY,0,"NumSubDomain"));
-	bamggeom.NumSubDomain=NumSubDomain;
-	FetchData(&SubDomain,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"SubDomain"));
-	bamggeom.SubDomain=SubDomain;
+	FetchData(&NumSubDomainGeom,mxGetField(BAMGGEOMETRY,0,"NumSubDomain"));
+	bamggeom.NumSubDomain=NumSubDomainGeom;
+	FetchData(&SubDomainGeom,NULL,NULL,mxGetField(BAMGGEOMETRY,0,"SubDomain"));
+	bamggeom.SubDomain=SubDomainGeom;
 
 	/*create bamg mesh input*/
-	FetchData(&numberofnodes,mxGetField(BAMGMESH,0,"numberofnodes"));
-	bamgmesh.numberofnodes=numberofnodes;
-	FetchData(&numberofelements,mxGetField(BAMGMESH,0,"numberofelements"));
-	bamgmesh.numberofelements=numberofelements;
-	FetchData(&x,NULL,NULL,mxGetField(BAMGMESH,0,"x"));
-	bamgmesh.x=x;
-	FetchData(&y,NULL,NULL,mxGetField(BAMGMESH,0,"y"));
-	bamgmesh.y=y;
-	FetchData(&index,NULL,NULL,mxGetField(BAMGMESH,0,"index"));
-	bamgmesh.index=index;
+	FetchData(&NumVerticesMesh,mxGetField(BAMGMESH,0,"NumVertices"));
+	bamgmesh.NumVertices=NumVerticesMesh;
+	FetchData(&VerticesMesh,NULL,NULL,mxGetField(BAMGMESH,0,"Vertices"));
+	bamgmesh.Vertices=VerticesMesh;
+	FetchData(&NumTrianglesMesh,mxGetField(BAMGMESH,0,"NumVertices"));
+	bamgmesh.NumTriangles=NumTrianglesMesh;
+	FetchData(&TrianglesMesh,NULL,NULL,mxGetField(BAMGMESH,0,"Vertices"));
+	bamgmesh.Triangles=TrianglesMesh;
+	bamgmesh.hVertices=NULL;
+	bamgmesh.NumQuadrilaterals=0;
+	bamgmesh.Quadrilaterals=NULL;
+	bamgmesh.NumVertexOnGeometricEdge=0;
+	bamgmesh.VertexOnGeometricEdge=NULL;
+	bamgmesh.NumEdgeOnGeometricEdge=0;
+	bamgmesh.EdgeOnGeometricEdge=NULL;
+	bamgmesh.NumEdges=0;
+	bamgmesh.Edges=NULL;
+	bamgmesh.NumSubDomain=0;
+	bamgmesh.SubDomain=NULL;
 
 	/*create bamg options input*/
@@ -108,13 +115,14 @@
 
 	/*write output datasets: */
-	WriteData(ELEMENTSOUT,bamgmesh.index,bamgmesh.numberofelements,3);
-	WriteData(XOUT,bamgmesh.x,bamgmesh.numberofnodes);
-	WriteData(YOUT,bamgmesh.y,bamgmesh.numberofnodes);
+	WriteData(TRIANGLESOUT,bamgmesh.Triangles,bamgmesh.NumTriangles,4);
+	WriteData(VERTICESOUT,bamgmesh.Vertices,bamgmesh.NumVertices,3);
 
 	/*Free ressources: */
-	xfree((void**)&Vertices);
-	xfree((void**)&Edges);
-	xfree((void**)&hVertices);
-	xfree((void**)&SubDomain);
+	xfree((void**)&VerticesGeom);
+	xfree((void**)&EdgesGeom);
+	xfree((void**)&hVerticesGeom);
+	xfree((void**)&SubDomainGeom);
+	xfree((void**)&TrianglesMesh);
+	xfree((void**)&VerticesMesh);
 
 	/*end module: */
Index: /issm/trunk/src/mex/Bamg/Bamg.h
===================================================================
--- /issm/trunk/src/mex/Bamg/Bamg.h	(revision 2784)
+++ /issm/trunk/src/mex/Bamg/Bamg.h	(revision 2785)
@@ -23,11 +23,10 @@
 
 /* serial output macros: */
-#define ELEMENTSOUT (mxArray**)&plhs[0]
-#define XOUT (mxArray**)&plhs[1]
-#define YOUT (mxArray**)&plhs[2]
+#define TRIANGLESOUT (mxArray**)&plhs[0]
+#define VERTICESOUT  (mxArray**)&plhs[1]
 
 /* serial arg counts: */
 #undef NLHS
-#define NLHS  3
+#define NLHS  2
 #undef NRHS
 #define NRHS  3
