Index: /issm/trunk-jpl/src/m/classes/bamggeom.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/bamggeom.py	(revision 13270)
+++ /issm/trunk-jpl/src/m/classes/bamggeom.py	(revision 13270)
@@ -0,0 +1,45 @@
+class bamggeom(object):
+	"""
+	BAMGGEOM class definition
+
+	   Usage:
+	      bamggeom(varargin)
+	"""
+
+	def __init__(self,*args):    # {{{
+		self.Vertices=[]
+		self.Edges=[]
+		self.TangentAtEdges=[]
+		self.Corners=[]
+		self.RequiredVertices=[]
+		self.RequiredEdges=[]
+		self.CrackedEdges=[]
+		self.SubDomains=[]
+
+		if not len(args):
+			# if no input arguments, create a default object
+			pass
+
+		elif len(args) == 1:
+			object=args[0]
+			for field in object.iterkeys():
+				if field in vars(self):
+					setattr(self,field,object[field])
+
+		else:
+			raise TypeError("bamggeom constructor error message: unknown type of constructor call")
+	# }}}
+
+	def __repr__(self):    # {{{
+		s ="class '%s' object '%s' = \n" % (type(self),'self')
+		s+="    Vertices: %s\n" % str(self.Vertices)
+		s+="    Edges: %s\n" % str(self.Edges)
+		s+="    TangentAtEdges: %s\n" % str(self.TangentAtEdges)
+		s+="    Corners: %s\n" % str(self.Corners)
+		s+="    RequiredVertices: %s\n" % str(self.RequiredVertices)
+		s+="    RequiredEdges: %s\n" % str(self.RequiredEdges)
+		s+="    CrackedEdges: %s\n" % str(self.CrackedEdges)
+		s+="    SubDomains: %s\n" % str(self.SubDomains)
+		return s
+	# }}}
+
Index: /issm/trunk-jpl/src/m/classes/bamgmesh.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/bamgmesh.py	(revision 13270)
+++ /issm/trunk-jpl/src/m/classes/bamgmesh.py	(revision 13270)
@@ -0,0 +1,61 @@
+class bamgmesh(object):
+	"""
+	BAMGMESH class definition
+
+	   Usage:
+	      bamgmesh(varargin)
+	"""
+
+	def __init__(self,*args):    # {{{
+		self.Vertices=[]
+		self.Edges=[]
+		self.Triangles=[]
+		self.Quadrilaterals=[]
+		self.IssmEdges=[]
+		self.IssmSegments=[]
+		self.VerticesOnGeomVertex=[]
+		self.VerticesOnGeomEdge=[]
+		self.EdgesOnGeomEdge=[]
+		self.SubDomains=[]
+		self.SubDomainsFromGeom=[]
+		self.ElementConnectivity=[]
+		self.NodalConnectivity=[]
+		self.NodalElementConnectivity=[]
+		self.CrackedVertices=[]
+		self.CrackedEdges=[]
+
+		if not len(args):
+			# if no input arguments, create a default object
+			pass
+
+		elif len(args) == 1:
+			object=args[0]
+			for field in object.iterkeys():
+				if field in vars(self):
+					setattr(self,field,object[field])
+
+		else:
+			raise TypeError("bamgmesh constructor error message: unknown type of constructor call")
+	# }}}
+
+	def __repr__(self):    # {{{
+		s ="class '%s' object '%s' = \n" % (type(self),'self')
+		s+="    Vertices: %s\n" % str(self.Vertices)
+		s+="    Edges: %s\n" % str(self.Edges)
+		s+="    Triangles: %s\n" % str(self.Triangles)
+		s+="    Quadrilaterals: %s\n" % str(self.Quadrilaterals)
+		s+="    IssmEdges: %s\n" % str(self.IssmEdges)
+		s+="    IssmSegments: %s\n" % str(self.IssmSegments)
+		s+="    VerticesOnGeomVertex: %s\n" % str(self.VerticesOnGeomVertex)
+		s+="    VerticesOnGeomEdge: %s\n" % str(self.VerticesOnGeomEdge)
+		s+="    EdgesOnGeomEdge: %s\n" % str(self.EdgesOnGeomEdge)
+		s+="    SubDomains: %s\n" % str(self.SubDomains)
+		s+="    SubDomainsFromGeom: %s\n" % str(self.SubDomainsFromGeom)
+		s+="    ElementConnectivity: %s\n" % str(self.ElementConnectivity)
+		s+="    NodalConnectivity: %s\n" % str(self.NodalConnectivity)
+		s+="    NodalElementConnectivity: %s\n" % str(self.NodalElementConnectivity)
+		s+="    CrackedVertices: %s\n" % str(self.CrackedVertices)
+		s+="    CrackedEdges: %s\n" % str(self.CrackedEdges)
+		return s
+	# }}}
+
Index: /issm/trunk-jpl/src/m/mesh/meshconvert.py
===================================================================
--- /issm/trunk-jpl/src/m/mesh/meshconvert.py	(revision 13270)
+++ /issm/trunk-jpl/src/m/mesh/meshconvert.py	(revision 13270)
@@ -0,0 +1,57 @@
+import numpy
+from collections import OrderedDict
+from BamgConvertMesh import *
+from bamgmesh import *
+from bamggeom import *
+
+def meshconvert(md,*args):
+	"""
+	CONVERTMESH - convert mesh to bamg mesh
+
+	   Usage:
+	      md=meshconvert(md);
+	      md=meshconvert(md,index,x,y);
+	"""
+
+	if not len(args)==0 and not len(args)==3:
+		raise TypeError("meshconvert error message: bad usage")
+
+	if not len(args):
+		x=md.mesh.x
+		y=md.mesh.y
+		index=md.mesh.elements
+	else:
+		x=args[0]
+		y=args[1]
+		index=args[2]
+
+	#call Bamg
+	bamgmesh_out,bamggeom_out=BamgConvertMesh(index,x,y)
+
+	# plug results onto model
+	md.private.bamg=OrderedDict()
+	md.private.bamg['mesh']=bamgmesh(bamgmesh_out)
+	md.private.bamg['geometry']=bamggeom(bamggeom_out)
+	md.mesh.x=bamgmesh_out['Vertices'][:,0]
+	md.mesh.y=bamgmesh_out['Vertices'][:,1]
+	md.mesh.elements=bamgmesh_out['Triangles'][:,0:3]
+	md.mesh.edges=bamgmesh_out['IssmEdges']
+	md.mesh.segments=bamgmesh_out['IssmSegments'][:,0:3]
+	md.mesh.segmentmarkers=bamgmesh_out['IssmSegments'][:,3]
+
+	#Fill in rest of fields:
+	md.mesh.dimension=2
+	md.mesh.numberofelements=numpy.size(md.mesh.elements,axis=0)
+	md.mesh.numberofvertices=numpy.size(md.mesh.x)
+	md.mesh.numberofedges=numpy.size(md.mesh.edges,axis=0)
+	md.mesh.z=numpy.zeros(md.mesh.numberofvertices)
+	md.mesh.vertexonbed=numpy.ones(md.mesh.numberofvertices)
+	md.mask.vertexonwater=numpy.zeros(md.mesh.numberofvertices)
+	md.mesh.vertexonsurface=numpy.ones(md.mesh.numberofvertices)
+	md.mesh.elementonbed=numpy.ones(md.mesh.numberofelements)
+	md.mesh.elementonsurface=numpy.ones(md.mesh.numberofelements)
+	md.mesh.vertexonboundary=numpy.zeros(md.mesh.numberofvertices)
+	md.mesh.vertexonboundary[md.mesh.segments[:,0:1].astype(int)-1]=1
+
+	return md
+
