Index: /issm/trunk/src/c/Bamgx/Bamgx.cpp
===================================================================
--- /issm/trunk/src/c/Bamgx/Bamgx.cpp	(revision 3311)
+++ /issm/trunk/src/c/Bamgx/Bamgx.cpp	(revision 3312)
@@ -43,5 +43,5 @@
 	/*If no mesh in input, generate one*/
 
-	if(bamgmesh_in->NumTriangles==0){
+	if(bamgmesh_in->TrianglesSize[0]==0){
 		/*Mesh generation {{{1*/
 
Index: /issm/trunk/src/c/Bamgx/objects/Geometry.cpp
===================================================================
--- /issm/trunk/src/c/Bamgx/objects/Geometry.cpp	(revision 3311)
+++ /issm/trunk/src/c/Bamgx/objects/Geometry.cpp	(revision 3312)
@@ -63,160 +63,4 @@
 
 	/*IO*/
-	/*FUNCTION Geometry::WriteGeometry{{{1*/
-	void Geometry::WriteGeometry(BamgGeom* bamggeom, BamgOpts* bamgopts){
-
-		int verbose;
-		int nbreq=0;
-		int nbreqv=0;
-		int nbtan=0;
-		int nbcracked=0;
-		int i,count;
-
-		/*Get options*/
-		verbose=bamgopts->verbose;
-
-		/*Initialize output*/
-		BamgGeomInit(bamggeom);
-
-		//Vertices
-		if(verbose>5) printf("      writing Vertices\n");
-		bamggeom->NumVertices=nbv;
-		if (nbv){
-			bamggeom->Vertices=(double*)xmalloc(3*nbv*sizeof(double));
-			for (i=0;i<nbv;i++){
-				bamggeom->Vertices[i*3+0]=vertices[i].r.x;
-				bamggeom->Vertices[i*3+1]=vertices[i].r.y;
-				bamggeom->Vertices[i*3+2]=vertices[i].ref();
-
-				//update counters
-				if (vertices[i].Required()) nbreqv++;
-			}
-		}
-		else{
-			bamggeom->Vertices=NULL;
-		}
-
-		//Edges
-		if(verbose>5) printf("      writing Edges\n");
-		bamggeom->NumEdges=nbe;
-		if (nbe){
-			bamggeom->Edges=(double*)xmalloc(3*nbe*sizeof(double));
-			for (i=0;i<nbe;i++){
-				bamggeom->Edges[i*3+0]=Number(edges[i][0])+1; //back to Matlab indexing
-				bamggeom->Edges[i*3+1]=Number(edges[i][1])+1; //back to Matlab indexing
-				bamggeom->Edges[i*3+2]=(double)edges[i].ref;
-
-				//update counters
-				if (edges[i].Required()) nbreq++;
-				if (edges[i].Cracked()){
-					if (i<=Number(edges[i].link)) nbcracked++;
-				}
-				if (edges[i].TgA() && edges[i][0].Corner()) nbtan++;
-				if (edges[i].TgB() && edges[i][1].Corner()) nbtan++;
-			}
-		}
-		else{
-			bamggeom->Edges=NULL;
-		}
-
-		//CrackedEdges
-		if(verbose>5) printf("      writing CrackedEdges\n");
-		bamggeom->NumCrackedEdges=nbcracked;
-		if (nbcracked){
-			bamggeom->CrackedEdges=(double*)xmalloc(2*nbcracked*sizeof(double));
-			count=0;
-			for (i=0;i<nbe;i++){
-				if (edges[i].Cracked()){
-					if (i<=Number(edges[i].link)){
-						bamggeom->CrackedEdges[count*2+0]=i+1;                     //back to Matlab indexing
-						bamggeom->CrackedEdges[count*2+1]=Number(edges[i].link)+1; //back to Matlab indexing
-						count=count+1;
-					}
-				}
-			}
-		}
-		else{
-			bamggeom->CrackedEdges=NULL;
-		}
-
-		//RequiredEdges
-		if(verbose>5) printf("      writing %i RequiredEdges\n",nbreq);
-		bamggeom->NumRequiredEdges=nbreq;
-		if (nbreq){
-			bamggeom->RequiredEdges=(double*)xmalloc(1*nbreq*sizeof(double));
-			count=0;
-			for (i=0;i<nbe;i++){
-				if (edges[i].Required()){
-					bamggeom->RequiredEdges[count]=i+1; //back to Matlab indexing
-					count=count+1;
-				}
-			}
-		}
-		else{
-			bamggeom->RequiredEdges=NULL;
-		}
-
-		//No corners
-
-		//RequiredVertices
-		if(verbose>5) printf("      writing %i RequiredVertices\n",nbreqv);
-		bamggeom->NumRequiredVertices=nbreqv;
-		if (nbreqv){
-			bamggeom->RequiredVertices=(double*)xmalloc(1*nbreqv*sizeof(double));
-			count=0;
-			for (i=0;i<nbv;i++){
-				if (vertices[i].Required()){
-					bamggeom->RequiredVertices[count]=i+1; //back to Matlab indexing
-					count=count+1;
-				}
-			}
-		}
-		else{
-			bamggeom->RequiredVertices=NULL;
-		}
-
-		//SubDomains
-		if(verbose>5) printf("      writing SubDomains\n");
-		bamggeom->NumSubDomains=NbSubDomains;
-		if (NbSubDomains){
-			bamggeom->SubDomains=(double*)xmalloc(4*NbSubDomains*sizeof(double));
-			for (i=0;i<NbSubDomains;i++){
-				bamggeom->SubDomains[4*i+0]=2;
-				bamggeom->SubDomains[4*i+1]=Number(subdomains[i].edge)+1; //back to Matlab indexing
-				bamggeom->SubDomains[4*i+2]=subdomains[i].sens;
-				bamggeom->SubDomains[4*i+3]=subdomains[i].ref;
-			}
-		}
-		else{
-			bamggeom->SubDomains=NULL;
-		}
-
-		//TangentAtEdges
-		if(verbose>5) printf("      writing TangentAtEdges\n");
-		bamggeom->NumTangentAtEdges=nbtan;
-		if (nbtan){
-			bamggeom->TangentAtEdges=(double*)xmalloc(4*nbtan*sizeof(double));
-			count=0;
-			for (i=0;i<nbe;i++){
-				if (edges[i].TgA() && edges[i][0].Corner()){
-					bamggeom->TangentAtEdges[4*i+0]=i+1; //back to Matlab indexing
-					bamggeom->TangentAtEdges[4*i+1]=1;
-					bamggeom->TangentAtEdges[4*i+2]=edges[i].tg[0].x;
-					bamggeom->TangentAtEdges[4*i+3]=edges[i].tg[0].y;
-				}
-				if (edges[i].TgB() && edges[i][1].Corner()){
-					bamggeom->TangentAtEdges[4*i+0]=i+1; //back to Matlab indexing
-					bamggeom->TangentAtEdges[4*i+1]=2;
-					bamggeom->TangentAtEdges[4*i+2]=edges[i].tg[1].x;
-					bamggeom->TangentAtEdges[4*i+3]=edges[i].tg[2].y;
-				}
-				count=count+1;
-			}
-		}
-		else{
-			bamggeom->TangentAtEdges=NULL;
-		}
-	}
-	/*}}}1*/
 	/*FUNCTION Geometry::ReadGeometry{{{1*/
 	void Geometry::ReadGeometry(BamgGeom* bamggeom,BamgOpts* bamgopts){
@@ -232,6 +76,6 @@
 		//initialize some variables
 		int Version=1,dim=2;
-		nbv=bamggeom->NumVertices;
-		nbe=bamggeom->NumEdges;
+		nbv=bamggeom->VerticesSize[0];
+		nbe=bamggeom->EdgesSize[0];
 		nbvx = nbv;
 		nbiv = nbv;
@@ -239,8 +83,8 @@
 
 		//some checks
-		if (bamggeom->NumVertices<=0 || bamggeom->Vertices==NULL){
+		if (bamggeom->Vertices==NULL){
 			throw ErrorException(__FUNCT__,exprintf("the domain provided does not contain any vertex"));
 		}
-		if (bamggeom->NumEdges<=0 || bamggeom->Edges==NULL){
+		if (bamggeom->Edges==NULL){
 			throw ErrorException(__FUNCT__,exprintf("the domain provided does not contain any edge"));
 		}
@@ -249,4 +93,5 @@
 		if (bamggeom->Vertices){
 			if(verbose>5) printf("      processing Vertices\n");
+			if (bamggeom->VerticesSize[1]!=3) throw ErrorException(__FUNCT__,exprintf("Vertices should have 3 columns"));
 			vertices = new GeometricalVertex[nbvx];
 			for (i=0;i<nbv;i++) {
@@ -288,4 +133,5 @@
 
 			if(verbose>5) printf("      processing Edges\n");
+			if (bamggeom->EdgesSize[1]!=3) throw ErrorException(__FUNCT__,exprintf("Edges should have 3 columns"));
 			edges = new GeometricalEdge[nbe];
 
@@ -339,5 +185,5 @@
 		if (bamggeom->CrackedEdges){
 			if(verbose>5) printf("      processing CrackedEdges\n");
-			for (i=0;i<bamggeom->NumCrackedEdges;i++){
+			for (i=0;i<bamggeom->CrackedEdgesSize[0];i++){
 				throw ErrorException(__FUNCT__,exprintf("Not implemented yet"));
 			}
@@ -399,8 +245,9 @@
 		if (bamggeom->TangentAtEdges){
 			if(verbose>5) printf("      processing TangentAtEdges");
+			if (bamggeom->TangentAtEdgesSize[1]!=4) throw ErrorException(__FUNCT__,exprintf("TangentAtEdges should have 4 columns"));
 			int n,i,j,k;
 			R2 tg;
 
-			n=bamggeom->NumTangentAtEdges;
+			n=bamggeom->TangentAtEdgesSize[0];
 			for (k=0;k<n;k++) {
 				i=(int)bamggeom->TangentAtEdges[k*4+0]-1; //for C indexing
@@ -421,5 +268,6 @@
 		if(bamggeom->Corners){
 			if(verbose>5) printf("      processing Corners");
-			n=bamggeom->NumCorners;
+			if (bamggeom->CornersSize[1]!=1) throw ErrorException(__FUNCT__,exprintf("Corners should have 1 column"));
+			n=bamggeom->CornersSize[0];
 			for (i=0;i<n;i++) {     
 				j=(int)bamggeom->Corners[i]-1; //for C indexing
@@ -437,5 +285,6 @@
 		if(bamggeom->RequiredVertices){
 			if(verbose>5) printf("      processing RequiredVertices\n");
-			n=bamggeom->NumRequiredVertices;
+			if (bamggeom->RequiredVerticesSize[1]!=1) throw ErrorException(__FUNCT__,exprintf("RequiredVertices should have 1 column"));
+			n=bamggeom->RequiredVerticesSize[0];
 			for (i=0;i<n;i++) {     
 				j=(int)bamggeom->RequiredVertices[i]-1; //for C indexing
@@ -452,5 +301,6 @@
 		if(bamggeom->RequiredEdges){
 			if(verbose>5) printf("      processing RequiredEdges\n");
-			n=bamggeom->NumRequiredEdges;
+			if (bamggeom->RequiredEdgesSize[1]!=1) throw ErrorException(__FUNCT__,exprintf("RequiredEdges should have 1 column"));
+			n=bamggeom->RequiredEdgesSize[0];
 			for (i=0;i<n;i++) {     
 				j=(int)bamggeom->RequiredEdges[i]-1; //for C indexing
@@ -469,5 +319,6 @@
 			long i0,i1,i2,i3;
 			if(verbose>5) printf("      processing SubDomains\n");
-			NbSubDomains=bamggeom->NumSubDomains;
+			if (bamggeom->SubDomainsSize[1]!=4) throw ErrorException(__FUNCT__,exprintf("SubDomains should have 4 columns"));
+			NbSubDomains=bamggeom->SubDomainsSize[0];
 			subdomains = new GeometricalSubDomain[NbSubDomains];
 			for (i=0;i<NbSubDomains;i++) {
@@ -485,4 +336,167 @@
 		else{
 			if(verbose>5) printf("      no SubDomains found\n");
+		}
+	}
+	/*}}}1*/
+	/*FUNCTION Geometry::WriteGeometry{{{1*/
+	void Geometry::WriteGeometry(BamgGeom* bamggeom, BamgOpts* bamgopts){
+
+		int verbose;
+		int nbreq=0;
+		int nbreqv=0;
+		int nbtan=0;
+		int nbcracked=0;
+		int i,count;
+
+		/*Get options*/
+		verbose=bamgopts->verbose;
+
+		/*Initialize output*/
+		BamgGeomInit(bamggeom);
+
+		//Vertices
+		if(verbose>5) printf("      writing Vertices\n");
+		bamggeom->VerticesSize[0]=nbv;
+		bamggeom->VerticesSize[1]=3;
+		if (nbv){
+			bamggeom->Vertices=(double*)xmalloc(3*nbv*sizeof(double));
+			for (i=0;i<nbv;i++){
+				bamggeom->Vertices[i*3+0]=vertices[i].r.x;
+				bamggeom->Vertices[i*3+1]=vertices[i].r.y;
+				bamggeom->Vertices[i*3+2]=vertices[i].ref();
+
+				//update counters
+				if (vertices[i].Required()) nbreqv++;
+			}
+		}
+		else{
+			bamggeom->Vertices=NULL;
+		}
+
+		//Edges
+		if(verbose>5) printf("      writing Edges\n");
+		bamggeom->EdgesSize[0]=nbe;
+		bamggeom->EdgesSize[1]=3;
+		if (nbe){
+			bamggeom->Edges=(double*)xmalloc(3*nbe*sizeof(double));
+			for (i=0;i<nbe;i++){
+				bamggeom->Edges[i*3+0]=Number(edges[i][0])+1; //back to Matlab indexing
+				bamggeom->Edges[i*3+1]=Number(edges[i][1])+1; //back to Matlab indexing
+				bamggeom->Edges[i*3+2]=(double)edges[i].ref;
+
+				//update counters
+				if (edges[i].Required()) nbreq++;
+				if (edges[i].Cracked()){
+					if (i<=Number(edges[i].link)) nbcracked++;
+				}
+				if (edges[i].TgA() && edges[i][0].Corner()) nbtan++;
+				if (edges[i].TgB() && edges[i][1].Corner()) nbtan++;
+			}
+		}
+		else{
+			bamggeom->Edges=NULL;
+		}
+
+		//CrackedEdges
+		if(verbose>5) printf("      writing CrackedEdges\n");
+		bamggeom->CrackedEdgesSize[0]=nbcracked;
+		bamggeom->CrackedEdgesSize[1]=2;
+		if (nbcracked){
+			bamggeom->CrackedEdges=(double*)xmalloc(2*nbcracked*sizeof(double));
+			count=0;
+			for (i=0;i<nbe;i++){
+				if (edges[i].Cracked()){
+					if (i<=Number(edges[i].link)){
+						bamggeom->CrackedEdges[count*2+0]=i+1;                     //back to Matlab indexing
+						bamggeom->CrackedEdges[count*2+1]=Number(edges[i].link)+1; //back to Matlab indexing
+						count=count+1;
+					}
+				}
+			}
+		}
+		else{
+			bamggeom->CrackedEdges=NULL;
+		}
+
+		//RequiredEdges
+		if(verbose>5) printf("      writing %i RequiredEdges\n",nbreq);
+		bamggeom->RequiredEdgesSize[0]=nbreq;
+		bamggeom->RequiredEdgesSize[1]=1;
+		if (nbreq){
+			bamggeom->RequiredEdges=(double*)xmalloc(1*nbreq*sizeof(double));
+			count=0;
+			for (i=0;i<nbe;i++){
+				if (edges[i].Required()){
+					bamggeom->RequiredEdges[count]=i+1; //back to Matlab indexing
+					count=count+1;
+				}
+			}
+		}
+		else{
+			bamggeom->RequiredEdges=NULL;
+		}
+
+		//No corners
+
+		//RequiredVertices
+		if(verbose>5) printf("      writing %i RequiredVertices\n",nbreqv);
+		bamggeom->RequiredVerticesSize[0]=nbreqv;
+		bamggeom->RequiredVerticesSize[1]=1;
+		if (nbreqv){
+			bamggeom->RequiredVertices=(double*)xmalloc(1*nbreqv*sizeof(double));
+			count=0;
+			for (i=0;i<nbv;i++){
+				if (vertices[i].Required()){
+					bamggeom->RequiredVertices[count]=i+1; //back to Matlab indexing
+					count=count+1;
+				}
+			}
+		}
+		else{
+			bamggeom->RequiredVertices=NULL;
+		}
+
+		//SubDomains
+		if(verbose>5) printf("      writing SubDomains\n");
+		bamggeom->SubDomainsSize[0]=NbSubDomains;
+		bamggeom->SubDomainsSize[1]=4;
+		if (NbSubDomains){
+			bamggeom->SubDomains=(double*)xmalloc(4*NbSubDomains*sizeof(double));
+			for (i=0;i<NbSubDomains;i++){
+				bamggeom->SubDomains[4*i+0]=2;
+				bamggeom->SubDomains[4*i+1]=Number(subdomains[i].edge)+1; //back to Matlab indexing
+				bamggeom->SubDomains[4*i+2]=subdomains[i].sens;
+				bamggeom->SubDomains[4*i+3]=subdomains[i].ref;
+			}
+		}
+		else{
+			bamggeom->SubDomains=NULL;
+		}
+
+		//TangentAtEdges
+		if(verbose>5) printf("      writing TangentAtEdges\n");
+		bamggeom->TangentAtEdgesSize[0]=nbtan;
+		bamggeom->TangentAtEdgesSize[1]=4;
+		if (nbtan){
+			bamggeom->TangentAtEdges=(double*)xmalloc(4*nbtan*sizeof(double));
+			count=0;
+			for (i=0;i<nbe;i++){
+				if (edges[i].TgA() && edges[i][0].Corner()){
+					bamggeom->TangentAtEdges[4*i+0]=i+1; //back to Matlab indexing
+					bamggeom->TangentAtEdges[4*i+1]=1;
+					bamggeom->TangentAtEdges[4*i+2]=edges[i].tg[0].x;
+					bamggeom->TangentAtEdges[4*i+3]=edges[i].tg[0].y;
+				}
+				if (edges[i].TgB() && edges[i][1].Corner()){
+					bamggeom->TangentAtEdges[4*i+0]=i+1; //back to Matlab indexing
+					bamggeom->TangentAtEdges[4*i+1]=2;
+					bamggeom->TangentAtEdges[4*i+2]=edges[i].tg[1].x;
+					bamggeom->TangentAtEdges[4*i+3]=edges[i].tg[2].y;
+				}
+				count=count+1;
+			}
+		}
+		else{
+			bamggeom->TangentAtEdges=NULL;
 		}
 	}
Index: /issm/trunk/src/c/Bamgx/objects/Triangles.cpp
===================================================================
--- /issm/trunk/src/c/Bamgx/objects/Triangles.cpp	(revision 3311)
+++ /issm/trunk/src/c/Bamgx/objects/Triangles.cpp	(revision 3312)
@@ -24,5 +24,5 @@
 
 		/*Read Geometry if provided*/
-		if(bamggeom->NumEdges>0) {
+		if(bamggeom->Edges) {
 			Gh.ReadGeometry(bamggeom,bamgopts);
 			Gh.AfterRead();
@@ -33,5 +33,5 @@
 
 		/*Build Geometry if not provided*/
-		if(bamggeom->NumEdges==0) {
+		if(bamggeom->Edges==NULL) {
 			/*Recreate geometry if needed*/
 			printf("WARNING: mesh present but no geometry found. Reconstructing...\n");
@@ -314,7 +314,7 @@
 		verbose=bamgopts->verbose;
 
-		nbv=bamgmesh->NumVertices;
+		nbv=bamgmesh->VerticesSize[0];
 		nbvx=nbv;
-		nbt=bamgmesh->NumTriangles;
+		nbt=bamgmesh->TrianglesSize[0];
 		nbiv=nbvx;
 
@@ -363,16 +363,16 @@
 			long i1,i2,i3,i4,iref;
 			triangles =new Triangle[nbt];
-			for (i=0;i<bamgmesh->NumQuadrilaterals;i++){
+			for (i=0;i<bamgmesh->QuadrilateralsSize[0];i++){
 				//divide the quad into two triangles
 				Triangle & t1 = triangles[2*i];
 				Triangle & t2 = triangles[2*i+1];
-				i1=(long)bamgmesh->Quadrilaterals[i*4+0]-1; //for C indexing
-				i2=(long)bamgmesh->Quadrilaterals[i*4+1]-1; //for C indexing
-				i3=(long)bamgmesh->Quadrilaterals[i*4+2]-1; //for C indexing
-				i4=(long)bamgmesh->Quadrilaterals[i*4+3]-1; //for C indexing
+				i1=(long)bamgmesh->Quadrilaterals[i*5+0]-1; //for C indexing
+				i2=(long)bamgmesh->Quadrilaterals[i*5+1]-1; //for C indexing
+				i3=(long)bamgmesh->Quadrilaterals[i*5+2]-1; //for C indexing
+				i4=(long)bamgmesh->Quadrilaterals[i*5+3]-1; //for C indexing
 				t1=Triangle(this,i1,i2,i3);
 				t2=Triangle(this,i3,i4,i1);
-				t1.color=1; //reference = 1 for all triangles since it has not been specified
-				t2.color=1; //reference = 1 for all triangles since it has not been specified
+				t1.color=(long)bamgmesh->Quadrilaterals[i*5+4];
+				t2.color=(long)bamgmesh->Quadrilaterals[i*5+4];
 				t1.SetHidden(OppositeEdge[1]); // two times  because the adj was not created 
 				t2.SetHidden(OppositeEdge[1]); 
@@ -386,5 +386,5 @@
 		if(bamgmesh->VerticesOnGeometricEdge){
 			if(verbose>5) printf("      processing VerticesOnGeometricEdge\n");
-			NbVerticesOnGeomEdge=bamgmesh->NumVerticesOnGeometricEdge;
+			NbVerticesOnGeomEdge=bamgmesh->VerticesOnGeometricEdgeSize[0];
 			VerticesOnGeomEdge= new  VertexOnGeom[NbVerticesOnGeomEdge] ;
 			for (i=0;i<NbVerticesOnGeomEdge;i++){
@@ -402,7 +402,7 @@
 
 		//VerticesOnGeometricVertex
-		if(bamgmesh->NumVerticesOnGeometricVertex){
+		if(bamgmesh->VerticesOnGeometricVertexSize[0]){
 			if(verbose>5) printf("      processing VerticesOnGeometricVertex\n");
-			NbVerticesOnGeomVertex=bamgmesh->NumVerticesOnGeometricVertex;
+			NbVerticesOnGeomVertex=bamgmesh->VerticesOnGeometricVertexSize[0];
 			VerticesOnGeomVertex  = new  VertexOnGeom[NbVerticesOnGeomVertex] ;
 			for (i=0;i<NbVerticesOnGeomVertex;i++){
@@ -423,5 +423,5 @@
 
 			if(verbose>5) printf("      processing Edges\n");
-			nbe=bamgmesh->NumEdges;
+			nbe=bamgmesh->EdgesSize[0];
 			edges= new Edge[nbe];
 			//initialize length of each edge (used to provided metric)
@@ -486,7 +486,6 @@
 		if(bamgmesh->CrackedEdges){
 			if(verbose>5) printf("      processing CrackedEdges\n");
-			NbCrackedEdges=bamgmesh->NumCrackedEdges;
+			NbCrackedEdges=bamgmesh->CrackedEdgesSize[0];
 			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
@@ -503,5 +502,5 @@
 			if(verbose>5) printf("      processing EdgesOnGeometricEdge\n");
 			int i1,i2,i,j;
-			i2=bamgmesh->NumEdgesOnGeometricEdge;
+			i2=bamgmesh->EdgesOnGeometricEdgeSize[0];
 			for (i1=0;i1<i2;i1++) {
 				i=(int)bamgmesh->EdgesOnGeometricEdge[i1*2+0]-1; //C indexing
@@ -535,5 +534,5 @@
 			long i3,head,sens;
 			if(verbose>5) printf("      processing SubDomains\n");
-			NbSubDomains=bamgmesh->NumSubDomains;
+			NbSubDomains=bamgmesh->SubDomainsSize[0];
 			subdomains = new SubDomain [ NbSubDomains ];
 			for (i=0;i<NbSubDomains;i++) {
@@ -569,5 +568,6 @@
 		//Vertices
 		if(verbose>5) printf("      writing Vertices\n");
-		bamgmesh->NumVertices=nbv;
+		bamgmesh->VerticesSize[0]=nbv;
+		bamgmesh->VerticesSize[1]=3;
 		if (nbv){
 			bamgmesh->Vertices=(double*)xmalloc(3*nbv*sizeof(double));
@@ -584,5 +584,6 @@
 		//Edges
 		if(verbose>5) printf("      writing Edges\n");
-		bamgmesh->NumEdges=nbe;
+		bamgmesh->EdgesSize[0]=nbe;
+		bamgmesh->EdgesSize[1]=3;
 		int NumSegments=0;
 		if (nbe){
@@ -603,5 +604,6 @@
 		//Element Connectivity
 		if(verbose>5) printf("      writing Element connectivity\n");
-		bamgmesh->NumElementConnectivity=nbt-NbOutT;
+		bamgmesh->ElementConnectivitySize[0]=nbt-NbOutT;
+		bamgmesh->ElementConnectivitySize[1]=3;
 		bamgmesh->ElementConnectivity=(double*)xmalloc(3*(nbt-NbOutT)*sizeof(double));
 		for (i=0;i<3*(nbt-NbOutT);i++) bamgmesh->ElementConnectivity[i]=NAN;
@@ -650,5 +652,6 @@
 		}
 		//Build output
-		bamgmesh->NumNodalElementConnectivity=max;
+		bamgmesh->NodalElementConnectivitySize[0]=nbv;
+		bamgmesh->NodalElementConnectivitySize[1]=max;
 		bamgmesh->NodalElementConnectivity=(double*)xmalloc(max*nbv*sizeof(double));
 		for (i=0;i<max*nbv;i++) bamgmesh->NodalElementConnectivity[i]=NAN;
@@ -665,5 +668,5 @@
 
 		//Build Unique edges
-		if(verbose>5) printf("      writing all edges\n");
+		if(verbose>5) printf("      writing element edges\n");
 		SetOfEdges4* edge4=new SetOfEdges4(nbt*3,nbv);
 		double* elemedge=new double[3*nbt];
@@ -690,11 +693,12 @@
 			}
 		}
-		bamgmesh->NumAllEdges=edge4->nb();
-		bamgmesh->AllEdges=(double*)xmalloc(4*edge4->nb()*sizeof(double));
+		bamgmesh->ElementEdgesSize[0]=edge4->nb();
+		bamgmesh->ElementEdgesSize[1]=4;
+		bamgmesh->ElementEdges=(double*)xmalloc(4*edge4->nb()*sizeof(double));
 		for (i=0;i<edge4->nb();i++){
-			bamgmesh->AllEdges[i*4+0]=edge4->i(i)+1;// back to M indexing
-			bamgmesh->AllEdges[i*4+1]=edge4->j(i)+1;// back to M indexing
-			bamgmesh->AllEdges[i*4+2]=elemedge[2*i+0]+1; // back to M indexing
-			bamgmesh->AllEdges[i*4+3]=elemedge[2*i+1]+1; // back to M indexing
+			bamgmesh->ElementEdges[i*4+0]=edge4->i(i)+1;// back to M indexing
+			bamgmesh->ElementEdges[i*4+1]=edge4->j(i)+1;// back to M indexing
+			bamgmesh->ElementEdges[i*4+2]=elemedge[2*i+0]+1; // back to M indexing
+			bamgmesh->ElementEdges[i*4+3]=elemedge[2*i+1]+1; // back to M indexing
 		}
 		//clean up
@@ -703,7 +707,7 @@
 
 		//Segments
-		bamgmesh->NumSegments=0;
 		if(verbose>5) printf("      writing Segments\n");
-		bamgmesh->NumSegments=NumSegments;
+		bamgmesh->SegmentsSize[0]=NumSegments;
+		bamgmesh->SegmentsSize[1]=4;
 		bamgmesh->Segments=(double*)xmalloc(4*NumSegments*sizeof(double));
 		num=0;
@@ -750,5 +754,6 @@
 		//CrackedEdges
 		if(verbose>5) printf("      writing CrackedEdges\n");
-		bamgmesh->NumCrackedEdges=NbCrackedEdges;
+		bamgmesh->CrackedEdgesSize[0]=NbCrackedEdges;
+		bamgmesh->CrackedEdgesSize[1]=2;
 		if (NbCrackedEdges){
 			bamgmesh->CrackedEdges=(double*)xmalloc(2*NbCrackedEdges*sizeof(double));
@@ -766,5 +771,6 @@
 		k=nbInT-NbOfQuad*2;
 		num=0;
-		bamgmesh->NumTriangles=k;
+		bamgmesh->TrianglesSize[0]=k;
+		bamgmesh->TrianglesSize[1]=4;
 		if (k){
 			bamgmesh->Triangles=(double*)xmalloc(4*k*sizeof(double));
@@ -787,5 +793,6 @@
 		//Quadrilaterals
 		if(verbose>5) printf("      writing Quadrilaterals\n");
-		bamgmesh->NumQuadrilaterals=NbOfQuad;
+		bamgmesh->QuadrilateralsSize[0]=NbOfQuad;
+		bamgmesh->QuadrilateralsSize[1]=5;
 		if (NbOfQuad){
 			bamgmesh->Quadrilaterals=(double*)xmalloc(5*NbOfQuad*sizeof(double));
@@ -810,5 +817,6 @@
 		//SubDomains
 		if(verbose>5) printf("      writing SubDomains\n");
-		bamgmesh->NumSubDomains=NbSubDomains;
+		bamgmesh->SubDomainsSize[0]=NbSubDomains;
+		bamgmesh->SubDomainsSize[1]=4;
 		if (NbSubDomains){
 			bamgmesh->SubDomains=(double*)xmalloc(4*NbSubDomains*sizeof(double));
@@ -826,5 +834,6 @@
 		//SubDomainsFromGeom
 		if(verbose>5) printf("      writing SubDomainsFromGeom\n");
-		bamgmesh->NumSubDomainsFromGeom=Gh.NbSubDomains;
+		bamgmesh->SubDomainsFromGeomSize[0]=Gh.NbSubDomains;
+		bamgmesh->SubDomainsFromGeomSize[1]=4;
 		if (Gh.NbSubDomains){
 			bamgmesh->SubDomainsFromGeom=(double*)xmalloc(4*Gh.NbSubDomains*sizeof(double));
@@ -842,5 +851,6 @@
 		//VerticesOnGeomVertex
 		if(verbose>5) printf("      writing VerticesOnGeometricVertex\n");
-		bamgmesh->NumVerticesOnGeometricVertex=NbVerticesOnGeomVertex;
+		bamgmesh->VerticesOnGeometricVertexSize[0]=NbVerticesOnGeomVertex;
+		bamgmesh->VerticesOnGeometricVertexSize[1]=2;
 		if (NbVerticesOnGeomVertex){
 			bamgmesh->VerticesOnGeometricVertex=(double*)xmalloc(2*NbVerticesOnGeomVertex*sizeof(double));
@@ -858,5 +868,6 @@
 		//VertexOnGeometricEdge
 		if(verbose>5) printf("      writing VerticesOnGeometricEdge\n");
-		bamgmesh->NumVerticesOnGeometricEdge=NbVerticesOnGeomEdge;
+		bamgmesh->VerticesOnGeometricEdgeSize[0]=NbVerticesOnGeomEdge;
+		bamgmesh->VerticesOnGeometricEdgeSize[1]=3;
 		if (NbVerticesOnGeomEdge){
 			bamgmesh->VerticesOnGeometricEdge=(double*)xmalloc(3*NbVerticesOnGeomEdge*sizeof(double));
@@ -881,5 +892,6 @@
 			if (edges[i].onGeometry) k=k+1;
 		}
-		bamgmesh->NumEdgesOnGeometricEdge=k;
+		bamgmesh->EdgesOnGeometricEdgeSize[0]=k;
+		bamgmesh->EdgesOnGeometricEdgeSize[1]=2;
 		if (k){
 			bamgmesh->EdgesOnGeometricEdge=(double*)xmalloc(2*(int)k*sizeof(double));
Index: /issm/trunk/src/c/objects/BamgGeom.cpp
===================================================================
--- /issm/trunk/src/c/objects/BamgGeom.cpp	(revision 3311)
+++ /issm/trunk/src/c/objects/BamgGeom.cpp	(revision 3312)
@@ -4,23 +4,15 @@
 void BamgGeomInit(BamgGeom* bamggeom){
 
-	bamggeom->NumVertices=0;
-	bamggeom->Vertices=NULL;
-	bamggeom->NumEdges=0;
-	bamggeom->Edges=NULL;
+	bamggeom->VerticesSize[0]=0,  bamggeom->VerticesSize[1]=0;  bamggeom->Vertices=NULL;
+	bamggeom->EdgesSize[0]=0,     bamggeom->EdgesSize[1]=0;     bamggeom->Edges=NULL;
 	bamggeom->hVertices=NULL;
 	bamggeom->MetricVertices=NULL;
 	bamggeom->h1h2VpVertices=NULL;
-	bamggeom->NumTangentAtEdges=0;
-	bamggeom->TangentAtEdges=NULL;
-	bamggeom->NumCorners=0;
-	bamggeom->Corners=NULL;
-	bamggeom->NumRequiredVertices=0;
-	bamggeom->RequiredVertices=NULL;
-	bamggeom->NumRequiredEdges=0;
-	bamggeom->RequiredEdges=NULL;
-	bamggeom->NumCrackedEdges=0;
-	bamggeom->CrackedEdges=NULL;
-	bamggeom->NumSubDomains=0;
-	bamggeom->SubDomains=NULL;
+	bamggeom->TangentAtEdgesSize[0]=0,    bamggeom->TangentAtEdgesSize[1]=0;    bamggeom->TangentAtEdges=NULL;
+	bamggeom->CornersSize[0]=0,           bamggeom->CornersSize[1]=0;           bamggeom->Corners=NULL;
+	bamggeom->RequiredVerticesSize[0]=0,  bamggeom->RequiredVerticesSize[1]=0;  bamggeom->RequiredVertices=NULL;
+	bamggeom->RequiredEdgesSize[0]=0,     bamggeom->RequiredEdgesSize[1]=0;     bamggeom->RequiredEdges=NULL;
+	bamggeom->CrackedEdgesSize[0]=0,      bamggeom->CrackedEdgesSize[1]=0;      bamggeom->CrackedEdges=NULL;
+	bamggeom->SubDomainsSize[0]=0,        bamggeom->SubDomainsSize[1]=0;        bamggeom->SubDomains=NULL;
 
 }
@@ -52,6 +44,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,3);
-	mxSetN(pfield,bamggeom->NumVertices);
+	mxSetM(pfield,bamggeom->VerticesSize[1]);
+	mxSetN(pfield,bamggeom->VerticesSize[0]);
 	mxSetPr(pfield,bamggeom->Vertices);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -59,6 +51,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,3);
-	mxSetN(pfield,bamggeom->NumEdges);
+	mxSetM(pfield,bamggeom->EdgesSize[1]);
+	mxSetN(pfield,bamggeom->EdgesSize[0]);
 	mxSetPr(pfield,bamggeom->Edges);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -66,6 +58,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,4);
-	mxSetN(pfield,bamggeom->NumTangentAtEdges);
+	mxSetM(pfield,bamggeom->TangentAtEdgesSize[1]);
+	mxSetN(pfield,bamggeom->TangentAtEdgesSize[0]);
 	mxSetPr(pfield,bamggeom->TangentAtEdges);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -73,6 +65,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,1);
-	mxSetN(pfield,bamggeom->NumRequiredVertices);
+	mxSetM(pfield,bamggeom->RequiredVerticesSize[1]);
+	mxSetN(pfield,bamggeom->RequiredVerticesSize[0]);
 	mxSetPr(pfield,bamggeom->RequiredVertices);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -80,6 +72,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,1);
-	mxSetN(pfield,bamggeom->NumRequiredEdges);
+	mxSetM(pfield,bamggeom->RequiredEdgesSize[1]);
+	mxSetN(pfield,bamggeom->RequiredEdgesSize[0]);
 	mxSetPr(pfield,bamggeom->RequiredEdges);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -87,6 +79,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,2);
-	mxSetN(pfield,bamggeom->NumCrackedEdges);
+	mxSetM(pfield,bamggeom->CrackedEdgesSize[1]);
+	mxSetN(pfield,bamggeom->CrackedEdgesSize[0]);
 	mxSetPr(pfield,bamggeom->CrackedEdges);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -94,6 +86,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,4);
-	mxSetN(pfield,bamggeom->NumSubDomains);
+	mxSetM(pfield,bamggeom->SubDomainsSize[1]);
+	mxSetN(pfield,bamggeom->SubDomainsSize[0]);
 	mxSetPr(pfield,bamggeom->SubDomains);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
Index: /issm/trunk/src/c/objects/BamgGeom.h
===================================================================
--- /issm/trunk/src/c/objects/BamgGeom.h	(revision 3311)
+++ /issm/trunk/src/c/objects/BamgGeom.h	(revision 3312)
@@ -7,8 +7,8 @@
 struct BamgGeom{
 
-	int     NumVertices;
+	int     VerticesSize[2];
 	double* Vertices;
 
-	int     NumEdges;
+	int     EdgesSize[2];
 	double* Edges;
 
@@ -17,20 +17,20 @@
 	double* h1h2VpVertices;
 
-	int     NumTangentAtEdges;
+	int     TangentAtEdgesSize[2];
 	double* TangentAtEdges;
 
-	int     NumCorners;
+	int     CornersSize[2];
 	double* Corners;
 
-	int     NumRequiredVertices;
+	int     RequiredVerticesSize[2];
 	double* RequiredVertices;
 
-	int     NumRequiredEdges;
+	int     RequiredEdgesSize[2];
 	double* RequiredEdges;
 
-	int     NumCrackedEdges;
+	int     CrackedEdgesSize[2];
 	double* CrackedEdges;
 
-	int     NumSubDomains;
+	int     SubDomainsSize[2];
 	double* SubDomains;
 };
Index: /issm/trunk/src/c/objects/BamgMesh.cpp
===================================================================
--- /issm/trunk/src/c/objects/BamgMesh.cpp	(revision 3311)
+++ /issm/trunk/src/c/objects/BamgMesh.cpp	(revision 3312)
@@ -4,36 +4,20 @@
 void BamgMeshInit(BamgMesh* bamgmesh){
 
-	bamgmesh->NumTriangles=0;
-	bamgmesh->Triangles=NULL;
-	bamgmesh->NumVertices=0;
-	bamgmesh->Vertices=NULL;
-	bamgmesh->NumEdges=0;
-	bamgmesh->Edges=NULL;
-	bamgmesh->NumAllEdges=0;
-	bamgmesh->AllEdges=NULL;
-	bamgmesh->NumSegments=0;
-	bamgmesh->Segments=NULL;
-	bamgmesh->SegmentsMarkers=NULL;
-	bamgmesh->NumCrackedEdges=0;
-	bamgmesh->CrackedEdges=NULL;
-	bamgmesh->NumQuadrilaterals=0;
-	bamgmesh->Quadrilaterals=NULL;
-	bamgmesh->NumVerticesOnGeometricVertex=0;
-	bamgmesh->VerticesOnGeometricVertex=NULL;
-	bamgmesh->NumVerticesOnGeometricEdge=0;
-	bamgmesh->VerticesOnGeometricEdge=NULL;
-	bamgmesh->NumEdgesOnGeometricEdge=0;
-	bamgmesh->EdgesOnGeometricEdge=NULL;
-	bamgmesh->NumSubDomains=0;
-	bamgmesh->SubDomains=NULL;
-	bamgmesh->NumSubDomainsFromGeom=0;
-	bamgmesh->SubDomainsFromGeom=NULL;
+	bamgmesh->TrianglesSize[0]=0,     bamgmesh->TrianglesSize[1]=0;      bamgmesh->Triangles=NULL;
+	bamgmesh->VerticesSize[0]=0,      bamgmesh->VerticesSize[1]=0;       bamgmesh->Vertices=NULL;
+	bamgmesh->EdgesSize[0]=0,         bamgmesh->EdgesSize[1]=0;          bamgmesh->Edges=NULL;
+	bamgmesh->ElementEdgesSize[0]=0,  bamgmesh->ElementEdgesSize[1]=0;   bamgmesh->ElementEdges=NULL;
+	bamgmesh->SegmentsSize[0]=0,      bamgmesh->SegmentsSize[1]=0;       bamgmesh->Segments=NULL;
+	bamgmesh->CrackedEdgesSize[0]=0,  bamgmesh->CrackedEdgesSize[1]=0;   bamgmesh->CrackedEdges=NULL;
+	bamgmesh->QuadrilateralsSize[0]=0,bamgmesh->QuadrilateralsSize[1]=0; bamgmesh->Quadrilaterals=NULL;
+	bamgmesh->VerticesOnGeometricVertexSize[0]=0, bamgmesh->VerticesOnGeometricVertexSize[1]=0;bamgmesh->VerticesOnGeometricVertex=NULL;
+	bamgmesh->VerticesOnGeometricEdgeSize[0]=0,   bamgmesh->VerticesOnGeometricEdgeSize[1]=0;  bamgmesh->VerticesOnGeometricEdge=NULL;
+	bamgmesh->EdgesOnGeometricEdgeSize[0]=0,      bamgmesh->EdgesOnGeometricEdgeSize[1]=0;     bamgmesh->EdgesOnGeometricEdge=NULL;
+	bamgmesh->SubDomainsSize[0]=0,         bamgmesh->SubDomainsSize[1]=0;          bamgmesh->SubDomains=NULL;
+	bamgmesh->SubDomainsFromGeomSize[0]=0, bamgmesh->SubDomainsFromGeomSize[1]=0;  bamgmesh->SubDomainsFromGeom=NULL;
 	bamgmesh->hVertices=NULL;
-	bamgmesh->NumElementConnectivity=0;
-	bamgmesh->ElementConnectivity=NULL;
-	bamgmesh->NumNodalConnectivity=0;
-	bamgmesh->NodalConnectivity=NULL;
-	bamgmesh->NumNodalElementConnectivity=0;
-	bamgmesh->NodalElementConnectivity=NULL;
+	bamgmesh->ElementConnectivitySize[0]=0,      bamgmesh->ElementConnectivitySize[1]=0;      bamgmesh->ElementConnectivity=NULL;
+	bamgmesh->NodalConnectivitySize[0]=0,        bamgmesh->NodalConnectivitySize[1]=0;        bamgmesh->NodalConnectivity=NULL;
+	bamgmesh->NodalElementConnectivitySize[0]=0, bamgmesh->NodalElementConnectivitySize[1]=0; bamgmesh->NodalElementConnectivity=NULL;
 
 }
@@ -54,9 +38,9 @@
 	mwSize      dimensions[2]={1,1};
 
-	fnames[0]  = "Triangles";
-	fnames[1]  = "Vertices";
-	fnames[2]  = "Edges";
-	fnames[3]  = "Segments";
-	fnames[4]  = "AllEdges";
+	fnames[0] = "Triangles";
+	fnames[1] = "Vertices";
+	fnames[2] = "Edges";
+	fnames[3] = "Segments";
+	fnames[4] = "AllEdges";
 	fnames[5] = "CrackedEdges";
 	fnames[6] = "Quadrilaterals";
@@ -72,58 +56,56 @@
 	bamgmesh_mat=mxCreateStructArray(ndim,dimensions,numfields,fnames);
 
-	mxSetField(bamgmesh_mat,0,"NumTriangles",mxCreateDoubleScalar(bamgmesh->NumTriangles)); 
-
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,4);
-	mxSetN(pfield,bamgmesh->NumTriangles);
+	mxSetM(pfield,bamgmesh->TrianglesSize[1]);
+	mxSetN(pfield,bamgmesh->TrianglesSize[0]);
 	mxSetPr(pfield,bamgmesh->Triangles);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
 	mxSetField(bamgmesh_mat,0,"Triangles",pfield2);
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,3);
-	mxSetN(pfield,bamgmesh->NumVertices);
+	mxSetM(pfield,bamgmesh->VerticesSize[1]);
+	mxSetN(pfield,bamgmesh->VerticesSize[0]);
 	mxSetPr(pfield,bamgmesh->Vertices);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
 	mxSetField(bamgmesh_mat,0,"Vertices",pfield2);
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,3);
-	mxSetN(pfield,bamgmesh->NumEdges);
+	mxSetM(pfield,bamgmesh->EdgesSize[1]);
+	mxSetN(pfield,bamgmesh->EdgesSize[0]);
 	mxSetPr(pfield,bamgmesh->Edges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
 	mxSetField(bamgmesh_mat,0,"Edges",pfield2);
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,4);
-	mxSetN(pfield,bamgmesh->NumSegments);
+	mxSetM(pfield,bamgmesh->SegmentsSize[1]);
+	mxSetN(pfield,bamgmesh->SegmentsSize[0]);
 	mxSetPr(pfield,bamgmesh->Segments);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
 	mxSetField(bamgmesh_mat,0,"Segments",pfield2);
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,4);
-	mxSetN(pfield,bamgmesh->NumAllEdges);
-	mxSetPr(pfield,bamgmesh->AllEdges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+	mxSetM(pfield,bamgmesh->ElementEdgesSize[1]);
+	mxSetN(pfield,bamgmesh->ElementEdgesSize[0]);
+	mxSetPr(pfield,bamgmesh->ElementEdges);
+	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
 	mxSetField(bamgmesh_mat,0,"AllEdges",pfield2);
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,2);
-	mxSetN(pfield,bamgmesh->NumCrackedEdges);
+	mxSetM(pfield,bamgmesh->CrackedEdgesSize[1]);
+	mxSetN(pfield,bamgmesh->CrackedEdgesSize[0]);
 	mxSetPr(pfield,bamgmesh->CrackedEdges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
 	mxSetField(bamgmesh_mat,0,"CrackedEdges",pfield2);
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,5);
-	mxSetN(pfield,bamgmesh->NumQuadrilaterals);
+	mxSetM(pfield,bamgmesh->QuadrilateralsSize[1]);
+	mxSetN(pfield,bamgmesh->QuadrilateralsSize[0]);
 	mxSetPr(pfield,bamgmesh->Quadrilaterals);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
 	mxSetField(bamgmesh_mat,0,"Quadrilaterals",pfield2);
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,2);
-	mxSetN(pfield,bamgmesh->NumVerticesOnGeometricVertex);
+	mxSetM(pfield,bamgmesh->VerticesOnGeometricVertexSize[1]);
+	mxSetN(pfield,bamgmesh->VerticesOnGeometricVertexSize[0]);
 	mxSetPr(pfield,bamgmesh->VerticesOnGeometricVertex);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -131,6 +113,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,3);
-	mxSetN(pfield,bamgmesh->NumVerticesOnGeometricEdge);
+	mxSetM(pfield,bamgmesh->VerticesOnGeometricEdgeSize[1]);
+	mxSetN(pfield,bamgmesh->VerticesOnGeometricEdgeSize[0]);
 	mxSetPr(pfield,bamgmesh->VerticesOnGeometricEdge);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -138,6 +120,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,2);
-	mxSetN(pfield,bamgmesh->NumEdgesOnGeometricEdge);
+	mxSetM(pfield,bamgmesh->EdgesOnGeometricEdgeSize[1]);
+	mxSetN(pfield,bamgmesh->EdgesOnGeometricEdgeSize[0]);
 	mxSetPr(pfield,bamgmesh->EdgesOnGeometricEdge);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -145,6 +127,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,4);
-	mxSetN(pfield,bamgmesh->NumSubDomains);
+	mxSetM(pfield,bamgmesh->SubDomainsSize[1]);
+	mxSetN(pfield,bamgmesh->SubDomainsSize[0]);
 	mxSetPr(pfield,bamgmesh->SubDomains);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -152,6 +134,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,4);
-	mxSetN(pfield,bamgmesh->NumSubDomainsFromGeom);
+	mxSetM(pfield,bamgmesh->SubDomainsFromGeomSize[1]);
+	mxSetN(pfield,bamgmesh->SubDomainsFromGeomSize[0]);
 	mxSetPr(pfield,bamgmesh->SubDomainsFromGeom);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -159,6 +141,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,3);
-	mxSetN(pfield,bamgmesh->NumElementConnectivity);
+	mxSetM(pfield,bamgmesh->ElementConnectivitySize[1]);
+	mxSetN(pfield,bamgmesh->ElementConnectivitySize[0]);
 	mxSetPr(pfield,bamgmesh->ElementConnectivity);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -166,6 +148,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,2);
-	mxSetN(pfield,bamgmesh->NumNodalConnectivity);
+	mxSetM(pfield,bamgmesh->NodalConnectivitySize[1]);
+	mxSetN(pfield,bamgmesh->NodalConnectivitySize[0]);
 	mxSetPr(pfield,bamgmesh->NodalConnectivity);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
@@ -173,6 +155,6 @@
 
 	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->NumNodalElementConnectivity);
-	mxSetN(pfield,bamgmesh->NumVertices);
+	mxSetM(pfield,bamgmesh->NodalElementConnectivitySize[1]);
+	mxSetN(pfield,bamgmesh->NodalElementConnectivitySize[0]);
 	mxSetPr(pfield,bamgmesh->NodalElementConnectivity);
 	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
Index: /issm/trunk/src/c/objects/BamgMesh.h
===================================================================
--- /issm/trunk/src/c/objects/BamgMesh.h	(revision 3311)
+++ /issm/trunk/src/c/objects/BamgMesh.h	(revision 3312)
@@ -7,50 +7,49 @@
 struct BamgMesh{
 
-	int     NumTriangles;
+	int     TrianglesSize[2];
 	double* Triangles;
 
-	int     NumVertices;
+	int     VerticesSize[2];
 	double* Vertices;
 
-	int     NumEdges;
+	int     EdgesSize[2];
 	double* Edges;
 
-	int     NumAllEdges;
-	double* AllEdges;
+	int     ElementEdgesSize[2];
+	double* ElementEdges;
 
-	int     NumSegments;
+	int     SegmentsSize[2];
 	double* Segments;
-	double* SegmentsMarkers;
 
-	int     NumCrackedEdges;
+	int     CrackedEdgesSize[2];
 	double* CrackedEdges;
 
-	int     NumQuadrilaterals;
+	int     QuadrilateralsSize[2];
 	double* Quadrilaterals;
 
-	int     NumVerticesOnGeometricVertex;
+	int     VerticesOnGeometricVertexSize[2];
 	double* VerticesOnGeometricVertex;
 
-	int     NumVerticesOnGeometricEdge;
+	int     VerticesOnGeometricEdgeSize[2];
 	double* VerticesOnGeometricEdge;
 
-	int     NumEdgesOnGeometricEdge;
+	int     EdgesOnGeometricEdgeSize[2];
 	double* EdgesOnGeometricEdge;
 
-	int     NumSubDomains;
+	int     SubDomainsSize[2];
 	double* SubDomains;
 
-	int     NumSubDomainsFromGeom;
+	int     SubDomainsFromGeomSize[2];
 	double* SubDomainsFromGeom;
 
 	double* hVertices;
 
-	int     NumElementConnectivity;
+	int     ElementConnectivitySize[2];
 	double* ElementConnectivity;
 
-	int     NumNodalConnectivity;
+	int     NodalConnectivitySize[2];
 	double* NodalConnectivity;
 
-	int     NumNodalElementConnectivity;
+	int     NodalElementConnectivitySize[2];
 	double* NodalElementConnectivity;
 };
