Index: /issm/trunk/src/c/io/WriteData.cpp
===================================================================
--- /issm/trunk/src/c/io/WriteData.cpp	(revision 3313)
+++ /issm/trunk/src/c/io/WriteData.cpp	(revision 3314)
@@ -19,5 +19,5 @@
 
 #include <mex.h>
-
+#include <assert.h>
 
 /*Several prototypes for WriteData, according to type: */
@@ -180,4 +180,100 @@
 }
 
+void WriteData(mxArray** pbamgmesh_mat,BamgMesh* bm){
+
+	/*Output*/
+	mxArray*    bamgmesh_mat=NULL;
+
+	/*Intermediary*/
+	int         i,j;
+	mxArray*    pfield=NULL;
+	mxArray*    pfield2=NULL;
+	int         numfields=15;
+	const char* fnames[numfields];
+	int         fsize[numfields][2];
+	double**    fpointer[numfields];
+	mwSize      ndim=2;
+	mwSize      dimensions[2]={1,1};
+
+	/*Build fnames and fsize names and sizes of each field*/
+	i=-1;
+	fnames[++i] = "Triangles";                fsize[i][0]=bm->TrianglesSize[0];                 fsize[i][1]=bm->TrianglesSize[1];                fpointer[i]=&bm->Triangles;
+	fnames[++i] = "Vertices";                 fsize[i][0]=bm->VerticesSize[0];                  fsize[i][1]=bm->VerticesSize[1];                 fpointer[i]=&bm->Vertices;
+	fnames[++i] = "Edges";                    fsize[i][0]=bm->EdgesSize[0];                     fsize[i][1]=bm->EdgesSize[1];                    fpointer[i]=&bm->Edges;
+	fnames[++i] = "Segments";                 fsize[i][0]=bm->SegmentsSize[0];                  fsize[i][1]=bm->SegmentsSize[1];                 fpointer[i]=&bm->Segments;
+	fnames[++i] = "ElementEdges";             fsize[i][0]=bm->ElementEdgesSize[0];              fsize[i][1]=bm->ElementEdgesSize[1];             fpointer[i]=&bm->ElementEdges;
+	fnames[++i] = "CrackedEdges";             fsize[i][0]=bm->CrackedEdgesSize[0];              fsize[i][1]=bm->CrackedEdgesSize[1];             fpointer[i]=&bm->CrackedEdges;
+	fnames[++i] = "Quadrilaterals";           fsize[i][0]=bm->QuadrilateralsSize[0];            fsize[i][1]=bm->QuadrilateralsSize[1];           fpointer[i]=&bm->Quadrilaterals;
+	fnames[++i] = "VerticesOnGeometricVertex";fsize[i][0]=bm->VerticesOnGeometricVertexSize[0]; fsize[i][1]=bm->VerticesOnGeometricVertexSize[1];fpointer[i]=&bm->VerticesOnGeometricVertex;
+	fnames[++i] = "VerticesOnGeometricEdge";  fsize[i][0]=bm->VerticesOnGeometricEdgeSize[0];   fsize[i][1]=bm->VerticesOnGeometricEdgeSize[1];  fpointer[i]=&bm->VerticesOnGeometricEdge;
+	fnames[++i] = "EdgesOnGeometricEdge";     fsize[i][0]=bm->EdgesOnGeometricEdgeSize[0];      fsize[i][1]=bm->EdgesOnGeometricEdgeSize[1];     fpointer[i]=&bm->EdgesOnGeometricEdge;
+	fnames[++i] = "SubDomains";               fsize[i][0]=bm->SubDomainsSize[0];                fsize[i][1]=bm->SubDomainsSize[1];               fpointer[i]=&bm->SubDomains;
+	fnames[++i] = "SubDomainsFromGeom";       fsize[i][0]=bm->SubDomainsFromGeomSize[0];        fsize[i][1]=bm->SubDomainsFromGeomSize[1];       fpointer[i]=&bm->SubDomainsFromGeom;
+	fnames[++i] = "ElementConnectivity";      fsize[i][0]=bm->ElementConnectivitySize[0];       fsize[i][1]=bm->ElementConnectivitySize[1];      fpointer[i]=&bm->ElementConnectivity;
+	fnames[++i] = "NodalConnectivity";        fsize[i][0]=bm->NodalConnectivitySize[0];         fsize[i][1]=bm->NodalConnectivitySize[1];        fpointer[i]=&bm->NodalConnectivity;
+	fnames[++i] = "NodalElementConnectivity"; fsize[i][0]=bm->NodalElementConnectivitySize[0];  fsize[i][1]=bm->NodalElementConnectivitySize[1]; fpointer[i]=&bm->NodalElementConnectivity;
+	assert(i==numfields-1);
+
+	/*Initialize Matlab structure*/
+	bamgmesh_mat=mxCreateStructArray(ndim,dimensions,numfields,fnames);
+
+	/*Add every field to structure*/
+	for(i=0;i<numfields;i++){
+		pfield=mxCreateDoubleMatrix(0,0,mxREAL);
+		mxSetM(pfield,fsize[i][1]);
+		mxSetN(pfield,fsize[i][0]);
+		mxSetPr(pfield,*(fpointer[i]));
+		mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+		mxSetField(bamgmesh_mat,0,fnames[i],pfield2);
+	}
+
+	/*Assign output pointer*/
+	*pbamgmesh_mat=bamgmesh_mat;
+}
+
+void WriteData(mxArray** pbamggeom_mat, BamgGeom* bg){
+
+	/*Output*/
+	mxArray*    bamggeom_mat=NULL;
+
+	/*Intermediary*/
+	int         i,j;
+	mxArray*    pfield=NULL;
+	mxArray*    pfield2=NULL;
+	int         numfields=7;
+	const char* fnames[numfields];
+	int         fsize[numfields][2];
+	double**    fpointer[numfields];
+	mwSize      ndim=2;
+	mwSize      dimensions[2]={1,1};
+
+	/*Build fnames and fsize names and sizes of each field*/
+	i=-1;
+	fnames[++i] = "Vertices";        fsize[i][0]=bg->VerticesSize[0];        fsize[i][1]=bg->VerticesSize[1];        fpointer[i]=&bg->Vertices;
+	fnames[++i] = "Edges";           fsize[i][0]=bg->EdgesSize[0];           fsize[i][1]=bg->EdgesSize[1];           fpointer[i]=&bg->Edges;
+	fnames[++i] = "TangentAtEdges";  fsize[i][0]=bg->TangentAtEdgesSize[0];  fsize[i][1]=bg->TangentAtEdgesSize[1];  fpointer[i]=&bg->TangentAtEdges;
+	fnames[++i] = "RequiredVertices";fsize[i][0]=bg->RequiredVerticesSize[0];fsize[i][1]=bg->RequiredVerticesSize[1];fpointer[i]=&bg->RequiredVertices;
+	fnames[++i] = "RequiredEdges";   fsize[i][0]=bg->RequiredEdgesSize[0];   fsize[i][1]=bg->RequiredEdgesSize[1];   fpointer[i]=&bg->RequiredEdges;
+	fnames[++i] = "CrackedEdges";    fsize[i][0]=bg->CrackedEdgesSize[0];    fsize[i][1]=bg->CrackedEdgesSize[1];    fpointer[i]=&bg->CrackedEdges;
+	fnames[++i] = "SubDomains";      fsize[i][0]=bg->SubDomainsSize[0];      fsize[i][1]=bg->SubDomainsSize[1];      fpointer[i]=&bg->SubDomains;
+	assert(i==numfields-1);
+
+	/*Initialize Matlab structure*/
+	bamggeom_mat=mxCreateStructArray(ndim,dimensions,numfields,fnames);
+
+	/*Add every field tu structure*/
+	for(i=0;i<numfields;i++){
+		pfield=mxCreateDoubleMatrix(0,0,mxREAL);
+		mxSetM(pfield,fsize[i][1]);
+		mxSetN(pfield,fsize[i][0]);
+		mxSetPr(pfield,*(fpointer[i]));
+		mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
+		mxSetField(bamggeom_mat,0,fnames[i],pfield2);
+	}
+
+	/*Assign output pointer*/
+	*pbamggeom_mat=bamggeom_mat;
+}
+
 #else
 void WriteData(int* pdummy,void* data,char* data_type){
Index: /issm/trunk/src/c/io/io.h
===================================================================
--- /issm/trunk/src/c/io/io.h	(revision 3313)
+++ /issm/trunk/src/c/io/io.h	(revision 3314)
@@ -8,4 +8,6 @@
 #include "../objects/NodeSets.h"
 #include "../objects/DofVec.h"
+#include "../objects/BamgMesh.h"
+#include "../objects/BamgGeom.h"
 #include "../DataSet/DataSet.h"
 #include "../include/types.h"
@@ -27,4 +29,6 @@
 void WriteData(mxArray** pdataref,char* string);
 void WriteData(mxArray** pdataref,DofVec* vector);
+void WriteData(mxArray** pdataref,BamgMesh* bm);
+void WriteData(mxArray** pdataref,BamgGeom* bg);
 
 void WriteNodeSets(DataHandle* pdataref,NodeSets* nodesets);
Index: /issm/trunk/src/c/objects/BamgGeom.cpp
===================================================================
--- /issm/trunk/src/c/objects/BamgGeom.cpp	(revision 3313)
+++ /issm/trunk/src/c/objects/BamgGeom.cpp	(revision 3314)
@@ -17,82 +17,2 @@
 
 }
-
-#ifdef _SERIAL_
-void BamgGeomWrite(mxArray** pbamggeom_mat, BamgGeom* bamggeom){
-
-	/*Output*/
-	mxArray*    bamggeom_mat=NULL;
-
-	/*Intermediary*/
-	int         i,j;
-	mxArray*    pfield=NULL;
-	mxArray*    pfield2=NULL;
-	int         numfields=7;
-	const char* fnames[numfields];
-	mwSize      ndim=2;
-	mwSize      dimensions[2]={1,1};
-
-	fnames[0] = "Vertices";
-	fnames[1] = "Edges";
-	fnames[2] = "TangentAtEdges";
-	fnames[3] = "RequiredVertices";
-	fnames[4] = "RequiredEdges";
-	fnames[5] = "CrackedEdges";
-	fnames[6] = "SubDomains";
-
-	bamggeom_mat=mxCreateStructArray(ndim,dimensions,numfields,fnames);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamggeom->VerticesSize[1]);
-	mxSetN(pfield,bamggeom->VerticesSize[0]);
-	mxSetPr(pfield,bamggeom->Vertices);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamggeom_mat,0,"Vertices",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamggeom->EdgesSize[1]);
-	mxSetN(pfield,bamggeom->EdgesSize[0]);
-	mxSetPr(pfield,bamggeom->Edges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamggeom_mat,0,"Edges",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamggeom->TangentAtEdgesSize[1]);
-	mxSetN(pfield,bamggeom->TangentAtEdgesSize[0]);
-	mxSetPr(pfield,bamggeom->TangentAtEdges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamggeom_mat,0,"TangentAtEdges",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamggeom->RequiredVerticesSize[1]);
-	mxSetN(pfield,bamggeom->RequiredVerticesSize[0]);
-	mxSetPr(pfield,bamggeom->RequiredVertices);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamggeom_mat,0,"RequiredVertices",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamggeom->RequiredEdgesSize[1]);
-	mxSetN(pfield,bamggeom->RequiredEdgesSize[0]);
-	mxSetPr(pfield,bamggeom->RequiredEdges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamggeom_mat,0,"RequiredEdges",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamggeom->CrackedEdgesSize[1]);
-	mxSetN(pfield,bamggeom->CrackedEdgesSize[0]);
-	mxSetPr(pfield,bamggeom->CrackedEdges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamggeom_mat,0,"CrackedEdges",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamggeom->SubDomainsSize[1]);
-	mxSetN(pfield,bamggeom->SubDomainsSize[0]);
-	mxSetPr(pfield,bamggeom->SubDomains);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamggeom_mat,0,"SubDomains",pfield2);
-
-	/*Assign output pointer*/
-	*pbamggeom_mat=bamggeom_mat;
-
-}
-#endif
Index: /issm/trunk/src/c/objects/BamgGeom.h
===================================================================
--- /issm/trunk/src/c/objects/BamgGeom.h	(revision 3313)
+++ /issm/trunk/src/c/objects/BamgGeom.h	(revision 3314)
@@ -38,8 +38,3 @@
 void BamgGeomInit(BamgGeom* bamggeom);
 
-#ifdef _SERIAL_
-#include "mex.h"
-void BamgGeomWrite(mxArray** bamggeom_mat,BamgGeom* bamggeom);
 #endif
-
-#endif
Index: /issm/trunk/src/c/objects/BamgMesh.cpp
===================================================================
--- /issm/trunk/src/c/objects/BamgMesh.cpp	(revision 3313)
+++ /issm/trunk/src/c/objects/BamgMesh.cpp	(revision 3314)
@@ -22,145 +22,2 @@
 
 }
-
-#ifdef _SERIAL_
-void BamgMeshWrite(mxArray** pbamgmesh_mat, BamgMesh* bamgmesh){
-
-	/*Output*/
-	mxArray*    bamgmesh_mat=NULL;
-
-	/*Intermediary*/
-	int         i,j;
-	mxArray*    pfield=NULL;
-	mxArray*    pfield2=NULL;
-	int         numfields=15;
-	const char* fnames[numfields];
-	mwSize      ndim=2;
-	mwSize      dimensions[2]={1,1};
-
-	fnames[0] = "Triangles";
-	fnames[1] = "Vertices";
-	fnames[2] = "Edges";
-	fnames[3] = "Segments";
-	fnames[4] = "AllEdges";
-	fnames[5] = "CrackedEdges";
-	fnames[6] = "Quadrilaterals";
-	fnames[7] = "VerticesOnGeometricVertex";
-	fnames[8] = "VerticesOnGeometricEdge";
-	fnames[9] = "EdgesOnGeometricEdge";
-	fnames[10]= "SubDomains";
-	fnames[11]= "SubDomainsFromGeom";
-	fnames[12]= "ElementConnectivity";
-	fnames[13]= "NodalConnectivity";
-	fnames[14]= "NodalElementConnectivity";
-
-	bamgmesh_mat=mxCreateStructArray(ndim,dimensions,numfields,fnames);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->TrianglesSize[1]);
-	mxSetN(pfield,bamgmesh->TrianglesSize[0]);
-	mxSetPr(pfield,bamgmesh->Triangles);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
-	mxSetField(bamgmesh_mat,0,"Triangles",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->VerticesSize[1]);
-	mxSetN(pfield,bamgmesh->VerticesSize[0]);
-	mxSetPr(pfield,bamgmesh->Vertices);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
-	mxSetField(bamgmesh_mat,0,"Vertices",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->EdgesSize[1]);
-	mxSetN(pfield,bamgmesh->EdgesSize[0]);
-	mxSetPr(pfield,bamgmesh->Edges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
-	mxSetField(bamgmesh_mat,0,"Edges",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->SegmentsSize[1]);
-	mxSetN(pfield,bamgmesh->SegmentsSize[0]);
-	mxSetPr(pfield,bamgmesh->Segments);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
-	mxSetField(bamgmesh_mat,0,"Segments",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	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,bamgmesh->CrackedEdgesSize[1]);
-	mxSetN(pfield,bamgmesh->CrackedEdgesSize[0]);
-	mxSetPr(pfield,bamgmesh->CrackedEdges);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
-	mxSetField(bamgmesh_mat,0,"CrackedEdges",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->QuadrilateralsSize[1]);
-	mxSetN(pfield,bamgmesh->QuadrilateralsSize[0]);
-	mxSetPr(pfield,bamgmesh->Quadrilaterals);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");
-	mxSetField(bamgmesh_mat,0,"Quadrilaterals",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->VerticesOnGeometricVertexSize[1]);
-	mxSetN(pfield,bamgmesh->VerticesOnGeometricVertexSize[0]);
-	mxSetPr(pfield,bamgmesh->VerticesOnGeometricVertex);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"VerticesOnGeometricVertex",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->VerticesOnGeometricEdgeSize[1]);
-	mxSetN(pfield,bamgmesh->VerticesOnGeometricEdgeSize[0]);
-	mxSetPr(pfield,bamgmesh->VerticesOnGeometricEdge);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"VerticesOnGeometricEdge",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->EdgesOnGeometricEdgeSize[1]);
-	mxSetN(pfield,bamgmesh->EdgesOnGeometricEdgeSize[0]);
-	mxSetPr(pfield,bamgmesh->EdgesOnGeometricEdge);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"EdgesOnGeometricEdge",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->SubDomainsSize[1]);
-	mxSetN(pfield,bamgmesh->SubDomainsSize[0]);
-	mxSetPr(pfield,bamgmesh->SubDomains);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"SubDomains",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->SubDomainsFromGeomSize[1]);
-	mxSetN(pfield,bamgmesh->SubDomainsFromGeomSize[0]);
-	mxSetPr(pfield,bamgmesh->SubDomainsFromGeom);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"SubDomainsFromGeom",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->ElementConnectivitySize[1]);
-	mxSetN(pfield,bamgmesh->ElementConnectivitySize[0]);
-	mxSetPr(pfield,bamgmesh->ElementConnectivity);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"ElementConnectivity",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->NodalConnectivitySize[1]);
-	mxSetN(pfield,bamgmesh->NodalConnectivitySize[0]);
-	mxSetPr(pfield,bamgmesh->NodalConnectivity);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"NodalConnectivity",pfield2);
-
-	pfield=mxCreateDoubleMatrix(0,0,mxREAL);
-	mxSetM(pfield,bamgmesh->NodalElementConnectivitySize[1]);
-	mxSetN(pfield,bamgmesh->NodalElementConnectivitySize[0]);
-	mxSetPr(pfield,bamgmesh->NodalElementConnectivity);
-	mexCallMATLAB(1,&pfield2,1,&pfield,"transpose");//transpose
-	mxSetField(bamgmesh_mat,0,"NodalElementConnectivity",pfield2);
-
-	/*Assign output pointer*/
-	*pbamgmesh_mat=bamgmesh_mat;
-}
-#endif
Index: /issm/trunk/src/c/objects/BamgMesh.h
===================================================================
--- /issm/trunk/src/c/objects/BamgMesh.h	(revision 3313)
+++ /issm/trunk/src/c/objects/BamgMesh.h	(revision 3314)
@@ -57,8 +57,3 @@
 void BamgMeshInit(BamgMesh* bamgmesh);
 
-#ifdef _SERIAL_
-#include "mex.h"
-void BamgMeshWrite(mxArray** bamgmesh_mat,BamgMesh* bamgmesh);
 #endif
-
-#endif
Index: /issm/trunk/src/mex/Bamg/Bamg.cpp
===================================================================
--- /issm/trunk/src/mex/Bamg/Bamg.cpp	(revision 3313)
+++ /issm/trunk/src/mex/Bamg/Bamg.cpp	(revision 3314)
@@ -87,6 +87,6 @@
 
 	/*Generate output Matlab Structures*/
-	BamgMeshWrite(&bamgmesh_mat,&bamgmesh_out);
-	BamgGeomWrite(&bamggeom_mat,&bamggeom_out);
+	WriteData(&bamgmesh_mat,&bamgmesh_out);
+	WriteData(&bamggeom_mat,&bamggeom_out);
 
 	/*assign output datasets: */
