Index: /issm/trunk-jpl/src/m/classes/balancethickness.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.m	(revision 13020)
@@ -27,5 +27,5 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 			%Early return
-			if solution~=BalancethicknessSolutionEnum, return; end
+			if solution~=BalancethicknessSolutionEnum(), return; end
 
 			md = checkfield(md,'balancethickness.spcthickness','forcing',1);
Index: /issm/trunk-jpl/src/m/classes/balancethickness.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.py	(revision 13020)
@@ -1,11 +1,22 @@
 #module imports
 from fielddisplay import fielddisplay
+from EnumDefinitions import *
+from checkfield import *
+from WriteData import *
+
 class balancethickness(object):
+	"""
+	BALANCETHICKNESS class definition
+
+	   Usage:
+	      balancethickness=balancethickness();
+	"""
+
 	#properties
 	def __init__(self):
 		# {{{ Properties
-		self.spcthickness = float('NaN')
-		self.thickening_rate           = float('NaN')
-		self.stabilization           = 0
+		self.spcthickness      = float('NaN')
+		self.thickening_rate   = float('NaN')
+		self.stabilization     = 0
 
 		#set defaults
@@ -13,21 +24,39 @@
 
 		#}}}
-	def __repr__(obj):
+	def __repr__(self):
 		# {{{ Display
 		
 		string='   balance thickness solution parameters:' 
 		
-		string="%s\n\n%s"%(string,fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint)'))
-		string="%s\n%s"%(string,fielddisplay(obj,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt)'))
-		string="%s\n%s"%(string,fielddisplay(obj,'stabilization','0: None, 1: SU, 2: MacAyeal''s artificial diffusivity, 3:DG'))
+		string="%s\n\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint)'))
+		string="%s\n%s"%(string,fielddisplay(self,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt)'))
+		string="%s\n%s"%(string,fielddisplay(self,'stabilization',"0: None, 1: SU, 2: MacAyeal's artificial diffusivity, 3:DG"))
 		return string
 		#}}}
-	def setdefaultparameters(obj):
+	def setdefaultparameters(self):
 		# {{{setdefaultparameters
 		
 		#Type of stabilization used
-		obj.stabilization=1
+		self.stabilization=1
 
-		return obj
+		return self
 	#}}}
 
+	def checkconsistency(self,md,solution,analyses):    # {{{
+		#Early return
+		if not solution==BalancethicknessSolutionEnum():
+			return md
+
+		md = checkfield(md,'balancethickness.spcthickness','forcing',1)
+		md = checkfield(md,'balancethickness.thickening_rate','size',[md.mesh.numberofvertices],'NaN',1)
+		md = checkfield(md,'balancethickness.stabilization','size',[1],'values',[0,1,2,3])
+
+		return md
+	# }}}
+
+	def marshall(self,fid):    # {{{
+		WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+	# }}}
+
Index: /issm/trunk-jpl/src/m/classes/basalforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.m	(revision 13020)
@@ -24,11 +24,11 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 
-			if ismember(PrognosticAnalysisEnum,analyses) & ~(solution==TransientSolutionEnum & md.transient.isprognostic==0),
+			if ismember(PrognosticAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.isprognostic==0),
 				md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1);
 			end
-			if ismember(BalancethicknessAnalysisEnum,analyses),
+			if ismember(BalancethicknessAnalysisEnum(),analyses),
 				md = checkfield(md,'basalforcings.melting_rate','NaN',1,'size',[md.mesh.numberofvertices 1]);
 			end
-			if ismember(ThermalAnalysisEnum,analyses) & ~(solution==TransientSolutionEnum & md.transient.isthermal==0),
+			if ismember(ThermalAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.isthermal==0),
 				md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1);
 				md = checkfield(md,'basalforcings.geothermalflux','NaN',1,'forcing',1,'>=',0);
Index: /issm/trunk-jpl/src/m/classes/basalforcings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.py	(revision 13020)
@@ -40,11 +40,11 @@
 	def checkconsistency(self,md,solution,analyses):    # {{{
 
-		if PrognosticAnalysisEnum in analyses and not (solution==TransientSolutionEnum and not md.transient.isprognostic):
+		if PrognosticAnalysisEnum() in analyses and not (solution==TransientSolutionEnum() and not md.transient.isprognostic):
 			md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1)
 
-		if BalancethicknessAnalysisEnum in analyses:
+		if BalancethicknessAnalysisEnum() in analyses:
 			md = checkfield(md,'basalforcings.melting_rate','NaN',1,'size',[md.mesh.numberofvertices])
 
-		if ThermalAnalysisEnum in analyses and not (solution==TransientSolutionEnum and not md.transient.isthermal):
+		if ThermalAnalysisEnum() in analyses and not (solution==TransientSolutionEnum() and not md.transient.isthermal):
 			md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1)
 			md = checkfield(md,'basalforcings.geothermalflux','NaN',1,'forcing',1,'>=',0)
Index: /issm/trunk-jpl/src/m/classes/diagnostic.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/diagnostic.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/diagnostic.m	(revision 13020)
@@ -67,6 +67,6 @@
 
 			%Early return
-			if ~ismember(DiagnosticHorizAnalysisEnum,analyses), return; end
-			%if ~ismember(DiagnosticHorizAnalysisEnum,analyses) |  (solution==TransientSolutionEnum & md.transient.isdiagnostic==0), return; end
+			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses), return; end
+			%if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isdiagnostic==0), return; end
 
 			md = checkfield(md,'diagnostic.spcvx','forcing',1);
@@ -102,6 +102,6 @@
 			if any(sum(isnan(md.diagnostic.referential),2)==0),
 				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
-				if any(abs(dot(md.diagnostic.referential(pos,1:3)',md.diagnostic.referential(pos,4:6)'))>eps),
-					md = checkmessage(md,['Vectors in diagnostic.referential (colums 1 to 3 and 4 to 6) must be orthogonal']);
+				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
+					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
 				end
 			end
@@ -168,8 +168,8 @@
 			%marshall ice front
 			data=obj.icefront;
-			pos=find(data(:,end)==0); data(pos,end)=AirEnum;
-			pos=find(data(:,end)==1); data(pos,end)=WaterEnum;
-			pos=find(data(:,end)==2); data(pos,end)=IceEnum;
-			WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum,'format','DoubleMat','mattype',3);
+			pos=find(data(:,end)==0); data(pos,end)=AirEnum();
+			pos=find(data(:,end)==1); data(pos,end)=WaterEnum();
+			pos=find(data(:,end)==2); data(pos,end)=IceEnum();
+			WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/diagnostic.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/diagnostic.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/diagnostic.py	(revision 13020)
@@ -1,6 +1,18 @@
 #module imports
+import numpy
+import sys
 from fielddisplay import fielddisplay
+from EnumDefinitions import *
+from checkfield import *
+from WriteData import *
 
 class diagnostic(object):
+	"""
+	DIAGNOSTIC class definition
+
+	   Usage:
+	      diagnostic=diagnostic();
+	"""
+
 	#properties
 	def __init__(self):
@@ -29,71 +41,151 @@
 
 		#}}}
-	def __repr__(obj):
+	def __repr__(self):
 		# {{{ Display
-		
 		
 		string='\n   Diagnostic solution parameters:'
 		string="%s\n\n%s"%(string,'      Convergence criteria:')
 			
-		string="%s\n%s"%(string,fielddisplay(obj,'restol','mechanical equilibrium residual convergence criterion'))
-		string="%s\n%s"%(string,fielddisplay(obj,'reltol','velocity relative convergence criterion, NaN -> not applied'))
-		string="%s\n%s"%(string,fielddisplay(obj,'abstol','velocity absolute convergence criterion, NaN -> not applied'))
-		string="%s\n%s"%(string,fielddisplay(obj,'isnewton','Apply Newton''s method instead of a Picard fixed point method'))
-		string="%s\n%s"%(string,fielddisplay(obj,'maxiter','maximum number of nonlinear iterations'))
-		string="%s\n%s"%(string,fielddisplay(obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'))
+		string="%s\n%s"%(string,fielddisplay(self,'restol','mechanical equilibrium residual convergence criterion'))
+		string="%s\n%s"%(string,fielddisplay(self,'reltol','velocity relative convergence criterion, NaN -> not applied'))
+		string="%s\n%s"%(string,fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN -> not applied'))
+		string="%s\n%s"%(string,fielddisplay(self,'isnewton',"Apply Newton's method instead of a Picard fixed point method"))
+		string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of nonlinear iterations'))
+		string="%s\n%s"%(string,fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'))
 
 		string="%s\n%s"%(string,'      boundary conditions:')
 
-		string="%s\n%s"%(string,fielddisplay(obj,'spcvx','x-axis velocity constraint (NaN means no constraint)'))
-		string="%s\n%s"%(string,fielddisplay(obj,'spcvy','y-axis velocity constraint (NaN means no constraint)'))
-		string="%s\n%s"%(string,fielddisplay(obj,'spcvz','z-axis velocity constraint (NaN means no constraint)'))
-		string="%s\n%s"%(string,fielddisplay(obj,'icefront','segments on ice front list (last column 0-> Air, 1-> Water, 2->Ice'))
+		string="%s\n%s"%(string,fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint)'))
+		string="%s\n%s"%(string,fielddisplay(self,'spcvy','y-axis velocity constraint (NaN means no constraint)'))
+		string="%s\n%s"%(string,fielddisplay(self,'spcvz','z-axis velocity constraint (NaN means no constraint)'))
+		string="%s\n%s"%(string,fielddisplay(self,'icefront','segments on ice front list (last column 0-> Air, 1-> Water, 2->Ice'))
 
 		string="%s\n%s"%(string,'      Rift options:')
-		string="%s\n%s"%(string,fielddisplay(obj,'rift_penalty_threshold','threshold for instability of mechanical constraints'))
-		string="%s\n%s"%(string,fielddisplay(obj,'rift_penalty_lock','number of iterations before rift penalties are locked'))
+		string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_threshold','threshold for instability of mechanical constraints'))
+		string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_lock','number of iterations before rift penalties are locked'))
 
 		string="%s\n%s"%(string,'      Penalty options:')
-		string="%s\n%s"%(string,fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset'))
-		string="%s\n%s"%(string,fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized'))
+		string="%s\n%s"%(string,fielddisplay(self,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset'))
+		string="%s\n%s"%(string,fielddisplay(self,'vertex_pairing','pairs of vertices that are penalized'))
 
 		string="%s\n%s"%(string,'      Other:')
-		string="%s\n%s"%(string,fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for Stokes model'))
-		string="%s\n%s"%(string,fielddisplay(obj,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model'))
-		string="%s\n%s"%(string,fielddisplay(obj,'referential','local referential'))
-		string="%s\n%s"%(string,fielddisplay(obj,'requested_outputs','additional outputs requested'))
+		string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for Stokes model'))
+		string="%s\n%s"%(string,fielddisplay(self,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model'))
+		string="%s\n%s"%(string,fielddisplay(self,'referential','local referential'))
+		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
 
 		return string
 		#}}}
 		
-	def setdefaultparameters(obj):
+	def setdefaultparameters(self):
 		# {{{setdefaultparameters
 		#maximum of non-linear iterations.
-		obj.maxiter=100
+		self.maxiter=100
 
 		#Convergence criterion: absolute, relative and residual
-		obj.restol=10**-4;
-		obj.reltol=0.01
-		obj.abstol=10
+		self.restol=10**-4
+		self.reltol=0.01
+		self.abstol=10
 
-		obj.stokesreconditioning=10**13
-		obj.shelf_dampening=0
+		self.stokesreconditioning=10**13
+		self.shelf_dampening=0
 
 		#Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
-		obj.penalty_factor=3
+		self.penalty_factor=3
 
 		#coefficient to update the viscosity between each iteration of
 		#a diagnostic according to the following formula
 		#viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
-		obj.viscosity_overshoot=0
+		self.viscosity_overshoot=0
 
 		#Stop the iterations of rift if below a threshold
-		obj.rift_penalty_threshold=0
+		self.rift_penalty_threshold=0
 
 		#in some solutions, it might be needed to stop a run when only
 		#a few constraints remain unstable. For thermal computation, this
 		#parameter is often used.
-		obj.rift_penalty_lock=10
+		self.rift_penalty_lock=10
 
-		return obj
+		return self
 	#}}}
+
+	def checkconsistency(self,md,solution,analyses):    # {{{
+
+		#Early return
+		if not DiagnosticHorizAnalysisEnum() in analyses:
+			return md
+		#if (not DiagnosticHorizAnalysisEnum() in analyses) | (solution==TransientSolutionEnum() and not md.transient.isdiagnostic):
+		#	return md
+
+		md = checkfield(md,'diagnostic.spcvx','forcing',1)
+		md = checkfield(md,'diagnostic.spcvy','forcing',1)
+		if md.mesh.dimension==3:
+			md = checkfield(md,'diagnostic.spcvz','forcing',1)
+		md = checkfield(md,'diagnostic.restol','size',[1],'>',0)
+		md = checkfield(md,'diagnostic.reltol','size',[1])
+		md = checkfield(md,'diagnostic.abstol','size',[1])
+		md = checkfield(md,'diagnostic.isnewton','numel',1,'values',[0,1])
+		md = checkfield(md,'diagnostic.stokesreconditioning','size',[1,1],'NaN',1)
+		md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1,1],'NaN',1)
+		if md.mesh.dimension==2:
+			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),4],'NaN',1)
+		else:
+			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),6],'NaN',1)
+		md = checkfield(md,'diagnostic.icefront[:,-1]','values',[0,1,2])
+		md = checkfield(md,'diagnostic.maxiter','size',[1],'>=',1)
+		md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices,6])
+		if not md.diagnostic.requested_outputs:
+			md = checkfield(md,'diagnostic.requested_outputs','size',[float('NaN'),1])
+
+		#singular solution
+		#if ~any((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy))==2),
+		if not any((numpy.logical_not(numpy.isnan(md.diagnostic.spcvx))+numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)))==2):
+			md.checkmessage("model is not well posed (singular). You need at least one node with fixed velocity!")
+		#CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+		if any(not numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==0 and not numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==6):
+			md.checkmessage("Each line of diagnostic.referential should contain either only NaN values or no NaN values")
+		#CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+		if any(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==0):
+			pos=[i for i,item in enumerate(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)) if item==0]
+#			numpy.inner (and numpy.dot) calculate all the dot product permutations, resulting in a full matrix multiply
+#			if any(numpy.abs(numpy.inner(md.diagnostic.referential[pos,0:2],md.diagnostic.referential[pos,3:5]).diagonal())>sys.float_info.epsilon):
+#				md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+			for item in md.diagnostic.referential[pos,:]:
+				if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon:
+					md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+		#CHECK THAT NO rotation specified for FS Grounded ice at base
+		if md.mesh.dimension==3 and md.flowequation.isstokes:
+			pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed))
+			if any(not numpy.isnan(md.diagnostic.referential[pos,:])):
+				md.checkmessage("no referential should be specified for basal vertices of grounded ice")
+
+		return md
+	# }}}
+
+	def marshall(self,fid):    # {{{
+		WriteData(fid,'object',self,'fieldname','spcvx','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','spcvy','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','spcvz','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','restol','format','Double')
+		WriteData(fid,'object',self,'fieldname','reltol','format','Double')
+		WriteData(fid,'object',self,'fieldname','abstol','format','Double')
+		WriteData(fid,'object',self,'fieldname','isnewton','format','Boolean')
+		WriteData(fid,'object',self,'fieldname','stokesreconditioning','format','Double')
+		WriteData(fid,'object',self,'fieldname','viscosity_overshoot','format','Double')
+		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
+		WriteData(fid,'object',self,'fieldname','shelf_dampening','format','Integer')
+		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+		WriteData(fid,'object',self,'fieldname','rift_penalty_lock','format','Integer')
+		WriteData(fid,'object',self,'fieldname','rift_penalty_threshold','format','Integer')
+		WriteData(fid,'object',self,'fieldname','referential','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3)
+
+		#marshall ice front
+		data=self.icefront
+		data[[i for i,item in enumerate(data[:,-1]) if item==0],-1]=AirEnum()
+		data[[i for i,item in enumerate(data[:,-1]) if item==1],-1]=WaterEnum()
+		data[[i for i,item in enumerate(data[:,-1]) if item==2],-1]=IceEnum()
+		WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3)
+	# }}}
+
Index: /issm/trunk-jpl/src/m/classes/flaim.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/flaim.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/flaim.m	(revision 13020)
@@ -35,5 +35,5 @@
 
 			%Early return
-			if solution~=FlaimSolutionEnum, return; end
+			if solution~=FlaimSolutionEnum(), return; end
 
 			md = checkfield(md,'flaim.tracks','file',1);
Index: /issm/trunk-jpl/src/m/classes/flowequation.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 13020)
@@ -29,5 +29,5 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 
-			if ismember(DiagnosticHorizAnalysisEnum,analyses),
+			if ismember(DiagnosticHorizAnalysisEnum(),analyses),
 
 				md = checkfield(md,'flowequation.ismacayealpattyn','numel',1,'values',[0 1]);
@@ -48,5 +48,5 @@
 				end
 			end
-			if ismember(DiagnosticHutterAnalysisEnum,analyses),
+			if ismember(DiagnosticHutterAnalysisEnum(),analyses),
 				if any(md.flowequation.element_equation==1),
 					if(md.flowequation.element_equation & md.mask.elementonfloatingice),
@@ -79,23 +79,23 @@
 			%convert approximations to enums
 			data=obj.vertex_equation;
-			pos=find(data==0); data(pos,end)=NoneApproximationEnum;
-			pos=find(data==1); data(pos,end)=HutterApproximationEnum;
-			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum;
-			pos=find(data==3); data(pos,end)=PattynApproximationEnum;
-			pos=find(data==4); data(pos,end)=StokesApproximationEnum;
-			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum;
-			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum;
-			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum;
-			WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum,'format','DoubleMat','mattype',1);
+			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
+			pos=find(data==1); data(pos,end)=HutterApproximationEnum();
+			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
+			pos=find(data==3); data(pos,end)=PattynApproximationEnum();
+			pos=find(data==4); data(pos,end)=StokesApproximationEnum();
+			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum();
+			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum();
+			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum();
+			WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1);
 			data=obj.element_equation;
-			pos=find(data==0); data(pos,end)=NoneApproximationEnum;
-			pos=find(data==1); data(pos,end)=HutterApproximationEnum;
-			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum;
-			pos=find(data==3); data(pos,end)=PattynApproximationEnum;
-			pos=find(data==4); data(pos,end)=StokesApproximationEnum;
-			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum;
-			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum;
-			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum;
-			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum,'format','DoubleMat','mattype',2);
+			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
+			pos=find(data==1); data(pos,end)=HutterApproximationEnum();
+			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
+			pos=find(data==3); data(pos,end)=PattynApproximationEnum();
+			pos=find(data==4); data(pos,end)=StokesApproximationEnum();
+			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum();
+			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum();
+			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum();
+			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/flowequation.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/flowequation.py	(revision 13020)
@@ -53,5 +53,5 @@
 	def checkconsistency(self,md,solution,analyses):    # {{{
 
-		if DiagnosticHorizAnalysisEnum in analyses:
+		if DiagnosticHorizAnalysisEnum() in analyses:
 			md = checkfield(md,'flowequation.ismacayealpattyn','numel',1,'values',[0,1])
 			md = checkfield(md,'flowequation.ishutter','numel',1,'values',[0,1])
@@ -69,5 +69,5 @@
 				md.checkmessage("no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1")
 
-		if DiagnosticHutterAnalysisEnum in analyses:
+		if DiagnosticHutterAnalysisEnum() in analyses:
 			if any(md.flowequation.element_equation==1):
 				if any(numpy.logical_and(md.flowequation.element_equation,md.mask.elementonfloatingice)):
@@ -86,23 +86,23 @@
 		#convert approximations to enums
 		data=self.vertex_equation
-		data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum
-		data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum
-		data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum
-		data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum
-		data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum
-		data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum
-		data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum
-		data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum
-		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum,'format','DoubleMat','mattype',1)
+		data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum()
+		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
 		data=self.element_equation
-		data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum
-		data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum
-		data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum
-		data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum
-		data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum
-		data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum
-		data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum
-		data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum
-		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum,'format','DoubleMat','mattype',2)
+		data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum()
+		data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum()
+		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
 	# }}}
 
Index: /issm/trunk-jpl/src/m/classes/friction.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/friction.m	(revision 13020)
@@ -25,5 +25,5 @@
 
 			%Early return
-			if ~ismember(DiagnosticHorizAnalysisEnum,analyses) & ~ismember(ThermalAnalysisEnum,analyses), return; end
+			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) & ~ismember(ThermalAnalysisEnum(),analyses), return; end
 
 			md = checkfield(md,'friction.coefficient','NaN',1,'size',[md.mesh.numberofvertices 1]);
Index: /issm/trunk-jpl/src/m/classes/friction.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/friction.py	(revision 13020)
@@ -41,5 +41,5 @@
 
 		#Early return
-		if not DiagnosticHorizAnalysisEnum in analyses and not ThermalAnalysisEnum in analyses:
+		if not DiagnosticHorizAnalysisEnum() in analyses and not ThermalAnalysisEnum() in analyses:
 			return md
 
Index: /issm/trunk-jpl/src/m/classes/geometry.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/geometry.m	(revision 13020)
@@ -32,5 +32,5 @@
 				md = checkmessage(md,['equality thickness=surface-bed violated']);
 			end 
-			if solution==TransientSolutionEnum & md.transient.isgroundingline,
+			if solution==TransientSolutionEnum() & md.transient.isgroundingline,
 				md = checkfield(md,'geometry.bathymetry','NaN',1,'size',[md.mesh.numberofvertices 1]);
 			end
@@ -47,8 +47,8 @@
 		end % }}}
 		function marshall(obj,fid) % {{{
-			WriteData(fid,'data',obj.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum);
-			WriteData(fid,'data',obj.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum);
-			WriteData(fid,'data',obj.bed,'format','DoubleMat','mattype',1,'enum',BedEnum);
-			WriteData(fid,'data',obj.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum);
+			WriteData(fid,'data',obj.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum());
+			WriteData(fid,'data',obj.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum());
+			WriteData(fid,'data',obj.bed,'format','DoubleMat','mattype',1,'enum',BedEnum());
+			WriteData(fid,'data',obj.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum());
 			WriteData(fid,'object',obj,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/geometry.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/geometry.py	(revision 13020)
@@ -52,5 +52,5 @@
 			md.checkmessage("equality thickness=surface-bed violated")
 		end 
-		if solution==TransientSolutionEnum and md.transient.isgroundingline:
+		if solution==TransientSolutionEnum() and md.transient.isgroundingline:
 			md = checkfield(md,'geometry.bathymetry','NaN',1,'size',[md.mesh.numberofvertices])
 
@@ -59,8 +59,8 @@
 
 	def marshall(self,fid):    # {{{
-		WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum)
-		WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum)
-		WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum)
-		WriteData(fid,'data',self.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum)
+		WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum())
+		WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum())
+		WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum())
+		WriteData(fid,'data',self.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum())
 		WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/groundingline.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 13020)
@@ -36,11 +36,11 @@
 					md = checkmessage(md,['requesting grounding line migration, but bathymetry is absent!']);
 				end
-				pos=find(md.mask.vertexongroundedice); 
+				pos=find(md.mask.vertexongroundedice);
 				if any(abs(md.geometry.bed(pos)-md.geometry.bathymetry(pos))>10^-10),
-					md = checkmessage(md,['bathymetry not equal to bed on grounded ice !']);
+					md = checkmessage(md,['bathymetry not equal to bed on grounded ice!']);
 				end
-				pos=find(md.mask.vertexonfloatingice); 
+				pos=find(md.mask.vertexonfloatingice);
 				if any(md.geometry.bathymetry(pos)-md.geometry.bed(pos)>10^-9),
-					md = checkmessage(md,['bathymetry superior to bed on floating ice !']);
+					md = checkmessage(md,['bathymetry superior to bed on floating ice!']);
 				end
 			end
@@ -55,5 +55,5 @@
 		end % }}}
 		function marshall(obj,fid) % {{{
-			WriteData(fid,'data',StringToEnum(obj.migration),'enum',GroundinglineMigrationEnum,'format','Integer');
+			WriteData(fid,'data',StringToEnum(obj.migration),'enum',GroundinglineMigrationEnum(),'format','Integer');
 			WriteData(fid,'object',obj,'fieldname','melting_rate','format','Double');
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/groundingline.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/groundingline.py	(revision 13020)
@@ -1,6 +1,18 @@
 #module imports
+import numpy
 from fielddisplay import fielddisplay
+from EnumDefinitions import *
+from checkfield import *
+from WriteData import *
+from MatlabFuncs import *
 
 class groundingline(object):
+	"""
+	CONSTANTS class definition
+
+	   Usage:
+	      groundingline=groundingline();
+	"""
+
 	#properties
 	def __init__(self):
@@ -13,22 +25,44 @@
 
 		#}}}
-	def __repr__(obj):
+	def __repr__(self):
 		# {{{ Display
 		string='   grounding line solution parameters:'
 
-		string="%s\n\n%s"%(string,fielddisplay(obj,'migration','type of grounding line migration: ''SoftMigration'',''AgressiveMigration'' or ''None'''))
-		string="%s\n%s"%(string,fielddisplay(obj,'melting_rate','melting rate applied when previously grounded parts start floating'))
+		string="%s\n\n%s"%(string,fielddisplay(self,'migration','type of grounding line migration: ''SoftMigration'',''AgressiveMigration'' or ''None'''))
+		string="%s\n%s"%(string,fielddisplay(self,'melting_rate','melting rate applied when previously grounded parts start floating'))
 		return string
 		#}}}	
-	def setdefaultparameters(obj):
+	def setdefaultparameters(self):
 		# {{{setdefaultparameters
 
 		#Type of migration
-		obj.migration='None'
+		self.migration='None'
 
 		#basal melting rate correction: 
-		obj.melting_rate=0;
+		self.melting_rate=0;
 
-		return obj
+		return self
 	#}}}
 
+	def checkconsistency(self,md,solution,analyses):    # {{{
+
+		md = checkfield(md,'groundingline.migration','values',['None','AgressiveMigration','SoftMigration'])
+
+		if not strcmp(self.migration,'None'):
+			if any(numpy.isnan(md.geometry.bathymetry)):
+				md.checkmessage("requesting grounding line migration, but bathymetry is absent!")
+			pos=numpy.nonzero(md.mask.vertexongroundedice)
+			if any(numpy.abs(md.geometry.bed[pos]-md.geometry.bathymetry[pos])>10**-10):
+				md.checkmessage("bathymetry not equal to bed on grounded ice!")
+			pos=numpy.nonzero(md.mask.vertexonfloatingice)
+			if any(md.geometry.bathymetry[pos]-md.geometry.bed[pos]>10**-9):
+				md.checkmessage("bathymetry superior to bed on floating ice!")
+
+		return md
+	# }}}
+
+	def marshall(self,fid):    # {{{
+		WriteData(fid,'data',StringToEnum(self.migration),'enum',GroundinglineMigrationEnum(),'format','Integer')
+		WriteData(fid,'object',self,'fieldname','melting_rate','format','Double')
+	# }}}
+
Index: /issm/trunk-jpl/src/m/classes/hydrology.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrology.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/hydrology.m	(revision 13020)
@@ -38,5 +38,5 @@
 
 			%Early return
-			if ~ismember(HydrologyAnalysisEnum,analyses), return; end
+			if ~ismember(HydrologyAnalysisEnum(),analyses), return; end
 
 			md = checkfield(md,'hydrology.spcwatercolumn','forcing',1);
@@ -57,5 +57,5 @@
 		function marshall(obj,fid) % {{{
 			WriteData(fid,'object',obj,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',obj,'fieldname','n','format','Double'); 
+			WriteData(fid,'object',obj,'fieldname','n','format','Double');
 			WriteData(fid,'object',obj,'fieldname','CR','format','Double');
 			WriteData(fid,'object',obj,'fieldname','p','format','Double');
Index: /issm/trunk-jpl/src/m/classes/hydrology.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrology.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/hydrology.py	(revision 13020)
@@ -1,6 +1,16 @@
 #module imports
 from fielddisplay import fielddisplay
+from EnumDefinitions import *
+from checkfield import *
+from WriteData import *
 
 class hydrology(object):
+	"""
+	HYDROLOGY class definition
+
+	   Usage:
+	      hydrology=hydrology();
+	"""
+
 	#properties
 	def __init__(self):
@@ -17,34 +27,55 @@
 		self.setdefaultparameters()
 
-	
 		#}}}
-	def __repr__(obj):
+	def __repr__(self):
 		# {{{ Display
 		
 		string='   hydrology solution parameters:'
-		string="%s\n\n%s"%(string,fielddisplay(obj,'spcwatercolumn','water thickness constraints (NaN means no constraint)'))
-		string="%s\n%s"%(string,fielddisplay(obj,'n','Manning roughness coefficient'))
-		string="%s\n%s"%(string,fielddisplay(obj,'CR','tortuosity parameter'))
-		string="%s\n%s"%(string,fielddisplay(obj,'p','dimensionless exponent in Manning velocity formula'))
-		string="%s\n%s"%(string,fielddisplay(obj,'q','dimensionless exponent in Manning velocity formula'))
-		string="%s\n%s"%(string,fielddisplay(obj,'kn','parameter in effective pressure formula'))
-		string="%s\n%s"%(string,fielddisplay(obj,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.'))
+		string="%s\n\n%s"%(string,fielddisplay(self,'spcwatercolumn','water thickness constraints (NaN means no constraint)'))
+		string="%s\n%s"%(string,fielddisplay(self,'n','Manning roughness coefficient'))
+		string="%s\n%s"%(string,fielddisplay(self,'CR','tortuosity parameter'))
+		string="%s\n%s"%(string,fielddisplay(self,'p','dimensionless exponent in Manning velocity formula'))
+		string="%s\n%s"%(string,fielddisplay(self,'q','dimensionless exponent in Manning velocity formula'))
+		string="%s\n%s"%(string,fielddisplay(self,'kn','parameter in effective pressure formula'))
+		string="%s\n%s"%(string,fielddisplay(self,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.'))
 		return string
 		#}}}
 		
-	def setdefaultparameters(obj):
+	def setdefaultparameters(self):
 		# {{{setdefaultparameters
 		
 		#Parameters from Johnson's 2002 thesis, section 3.5.4			 
-		obj.n=.02			
-		obj.CR=.01
-		obj.p=2
-		obj.q=1
-		obj.kn=0
+		self.n=.02			
+		self.CR=.01
+		self.p=2
+		self.q=1
+		self.kn=0
 
 		#Type of stabilization to use 0:nothing 1:artificial_diffusivity
-		obj.stabilization=1
+		self.stabilization=1
 
-		return obj
+		return self
 	#}}}
 
+	def checkconsistency(self,md,solution,analyses):    # {{{
+
+		#Early return
+		if not HydrologyAnalysisEnum() in analyses:
+			return md
+
+		md = checkfield(md,'hydrology.spcwatercolumn','forcing',1)
+		md = checkfield(md,'hydrology.stabilization','>=',0)
+
+		return md
+	# }}}
+
+	def marshall(self,fid):    # {{{
+		WriteData(fid,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','n','format','Double')
+		WriteData(fid,'object',self,'fieldname','CR','format','Double')
+		WriteData(fid,'object',self,'fieldname','p','format','Double')
+		WriteData(fid,'object',self,'fieldname','q','format','Double')
+		WriteData(fid,'object',self,'fieldname','kn','format','Double')
+		WriteData(fid,'object',self,'fieldname','stabilization','format','Double')
+	# }}}
+
Index: /issm/trunk-jpl/src/m/classes/initialization.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/initialization.m	(revision 13020)
@@ -28,5 +28,5 @@
 		end % }}}
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
-			if ismember(DiagnosticHorizAnalysisEnum,analyses)
+			if ismember(DiagnosticHorizAnalysisEnum(),analyses)
 				if ~(isnan(md.initialization.vx) | isnan(md.initialization.vy)),
 					md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
@@ -34,12 +34,12 @@
 				end
 			end
-			if ismember(PrognosticAnalysisEnum,analyses),
+			if ismember(PrognosticAnalysisEnum(),analyses),
 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
 			end
-			if ismember(HydrologyAnalysisEnum,analyses),
+			if ismember(HydrologyAnalysisEnum(),analyses),
 				md = checkfield(md,'initialization.watercolumn','NaN',1,'size',[md.mesh.numberofvertices 1]);
 			end
-			if ismember(BalancethicknessAnalysisEnum,analyses),
+			if ismember(BalancethicknessAnalysisEnum(),analyses),
 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
@@ -49,5 +49,5 @@
 				end
 			end
-			if ismember(ThermalAnalysisEnum,analyses),
+			if ismember(ThermalAnalysisEnum(),analyses),
 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
@@ -55,5 +55,5 @@
 				md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices 1]);
 			end
-			if (ismember(EnthalpyAnalysisEnum,analyses) & md.thermal.isenthalpy) | solution==EnthalpySolutionEnum,
+			if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy) | solution==EnthalpySolutionEnum(),
 				md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices 1]);
 			end
@@ -73,11 +73,11 @@
 		end % }}}
 		function marshall(obj,fid) % {{{
-			WriteData(fid,'data',obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum);
-			WriteData(fid,'data',obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum);
-			WriteData(fid,'data',obj.vz,'format','DoubleMat','mattype',1,'enum',VzEnum);
-			WriteData(fid,'data',obj.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum);
-			WriteData(fid,'data',obj.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum);
-			WriteData(fid,'data',obj.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum);
-			WriteData(fid,'data',obj.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum);
+			WriteData(fid,'data',obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum());
+			WriteData(fid,'data',obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum());
+			WriteData(fid,'data',obj.vz,'format','DoubleMat','mattype',1,'enum',VzEnum());
+			WriteData(fid,'data',obj.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum());
+			WriteData(fid,'data',obj.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum());
+			WriteData(fid,'data',obj.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum());
+			WriteData(fid,'data',obj.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum());
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/initialization.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/initialization.py	(revision 13020)
@@ -53,14 +53,14 @@
 
 	def checkconsistency(self,md,solution,analyses):    # {{{
-		if DiagnosticHorizAnalysisEnum in analyses:
+		if DiagnosticHorizAnalysisEnum() in analyses:
 			if not any(numpy.isnan(md.initialization.vx) or numpy.isnan(md.initialization.vy)):
 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
-		if PrognosticAnalysisEnum in analyses:
+		if PrognosticAnalysisEnum() in analyses:
 			md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
 			md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
-		if HydrologyAnalysisEnum in analyses:
+		if HydrologyAnalysisEnum() in analyses:
 			md = checkfield(md,'initialization.watercolumn','NaN',1,'size',[md.mesh.numberofvertices])
-		if BalancethicknessAnalysisEnum in analyses:
+		if BalancethicknessAnalysisEnum() in analyses:
 			md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
 			md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
@@ -69,10 +69,10 @@
 			                         numpy.sum(numpy.abs(md.initialization.vy[md.mesh.elements.astype(int)-1]),axis=1)==0)):
 				md.checkmessage("at least one triangle has all its vertices with a zero velocity")
-		if ThermalAnalysisEnum in analyses:
+		if ThermalAnalysisEnum() in analyses:
 			md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
 			md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
 			md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices])
 			md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices])
-		if (EnthalpyAnalysisEnum in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum:
+		if (EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum():
 			md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices])
 
@@ -81,11 +81,11 @@
 
 	def marshall(self,fid):    # {{{
-		WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum)
-		WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum)
-		WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum)
-		WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum)
-		WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum)
-		WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum)
-		WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum)
+		WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum())
+		WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum())
+		WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum())
+		WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum())
+		WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum())
+		WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum())
+		WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum())
 	# }}}
 
Index: /issm/trunk-jpl/src/m/classes/inversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/inversion.m	(revision 13020)
@@ -97,5 +97,5 @@
 			md = checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]);
 
-			if solution==BalancethicknessSolutionEnum
+			if solution==BalancethicknessSolutionEnum()
 				md = checkfield(md,'inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1);
 			else
@@ -159,21 +159,21 @@
 				data(i)=StringToEnum(obj.control_parameters{i});
 			end
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum,'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum,'format','Integer');
+			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
+			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
 
 			%process cost functions
 			num_cost_functions=size(obj.cost_functions,2);
 			data=obj.cost_functions;
-			pos=find(data==101); data(pos)=SurfaceAbsVelMisfitEnum;
-			pos=find(data==102); data(pos)=SurfaceRelVelMisfitEnum;
-			pos=find(data==103); data(pos)=SurfaceLogVelMisfitEnum;
-			pos=find(data==104); data(pos)=SurfaceLogVxVyMisfitEnum;
-			pos=find(data==105); data(pos)=SurfaceAverageVelMisfitEnum;
-			pos=find(data==201); data(pos)=ThicknessAbsMisfitEnum;
-			pos=find(data==501); data(pos)=DragCoefficientAbsGradientEnum;
-			pos=find(data==502); data(pos)=RheologyBbarAbsGradientEnum;
-			pos=find(data==503); data(pos)=ThicknessAbsGradientEnum;
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum,'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum,'format','Integer');
+			pos=find(data==101); data(pos)=SurfaceAbsVelMisfitEnum();
+			pos=find(data==102); data(pos)=SurfaceRelVelMisfitEnum();
+			pos=find(data==103); data(pos)=SurfaceLogVelMisfitEnum();
+			pos=find(data==104); data(pos)=SurfaceLogVxVyMisfitEnum();
+			pos=find(data==105); data(pos)=SurfaceAverageVelMisfitEnum();
+			pos=find(data==201); data(pos)=ThicknessAbsMisfitEnum();
+			pos=find(data==501); data(pos)=DragCoefficientAbsGradientEnum();
+			pos=find(data==502); data(pos)=RheologyBbarAbsGradientEnum();
+			pos=find(data==503); data(pos)=ThicknessAbsGradientEnum();
+			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
+			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/materials.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/materials.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/materials.m	(revision 13020)
@@ -110,5 +110,5 @@
 			WriteData(fid,'object',obj,'fieldname','rheology_B','format','DoubleMat','mattype',1);
 			WriteData(fid,'object',obj,'fieldname','rheology_n','format','DoubleMat','mattype',2);
-			WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum,'format','Integer');
+			WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/materials.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/materials.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/materials.py	(revision 13020)
@@ -28,5 +28,5 @@
 		self.rheology_B   = float('NaN')
 		self.rheology_n   = float('NaN')
-		self.rheology_law = ""
+		self.rheology_law = ''
 
 		self.setdefaultparameters()
@@ -47,6 +47,6 @@
 		string="%s\n%s"%(string,fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]"))
 		string="%s\n%s"%(string,fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]"))
-		string="%s\n%s"%(string,fielddisplay(self,"rheology_n","Glen""s flow law exponent"))
-		string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: ""None"", ""Paterson"" or ""Arrhenius"""))
+		string="%s\n%s"%(string,fielddisplay(self,"rheology_n","Glen's flow law exponent"))
+		string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson' or 'Arrhenius'"))
 
 		return string
@@ -115,5 +115,5 @@
 		WriteData(fid,'object',self,'fieldname','rheology_B','format','DoubleMat','mattype',1)
 		WriteData(fid,'object',self,'fieldname','rheology_n','format','DoubleMat','mattype',2)
-		WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum,'format','Integer')
+		WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer')
 	# }}}
 
Index: /issm/trunk-jpl/src/m/classes/mesh.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/mesh.m	(revision 13020)
@@ -100,5 +100,5 @@
 			%Solution specific checks
 			switch(solution),
-				case PrognosticSolutionEnum,
+				case PrognosticSolutionEnum(),
 					if md.prognostic.stabilization==3,
 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
@@ -106,5 +106,5 @@
 						md = checkfield(md,'mesh.edges(:,1:3)','>',0);
 					end
-				case BalancethicknessSolutionEnum,
+				case BalancethicknessSolutionEnum(),
 					if md.balancethickness.stabilization==3,
 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
@@ -112,5 +112,5 @@
 						md = checkfield(md,'mesh.edges(:,1:3)','>',0);
 					end
-				case TransientSolutionEnum,
+				case TransientSolutionEnum(),
 					if md.transient.isprognostic & md.prognostic.stabilization==3,
 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
@@ -118,5 +118,5 @@
 						md = checkfield(md,'mesh.edges(:,1:3)','>',0);
 					end
-				case ThermalSolutionEnum,
+				case ThermalSolutionEnum(),
 					md = checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes');
 			end
Index: /issm/trunk-jpl/src/m/classes/mesh.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/mesh.py	(revision 13020)
@@ -110,5 +110,5 @@
 		string="%s\n%s"%(string,fielddisplay(self,"lat","vertices latitude"))
 		string="%s\n%s"%(string,fielddisplay(self,"long","vertices longitude"))
-		string="%s\n%s"%(string,fielddisplay(self,"hemisphere","Indicate hemisphere ""n"" or ""s"" "))
+		string="%s\n%s"%(string,fielddisplay(self,"hemisphere","Indicate hemisphere 'n' or 's'"))
 		return string
 		#}}}
@@ -155,20 +155,20 @@
 
 		#Solution specific checks
-		if   solution==PrognosticSolutionEnum:
+		if   solution==PrognosticSolutionEnum():
 			if md.prognostic.stabilization==3:
 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
 				md = checkfield(md,'mesh.edges','size',[float('NaN'),4])
 				md = checkfield(md,'mesh.edges[:,1:3]','>',0)
-		elif solution==BalancethicknessSolutionEnum:
+		elif solution==BalancethicknessSolutionEnum():
 			if md.balancethickness.stabilization==3:
 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
 				md = checkfield(md,'mesh.edges','size',[float('NaN'),4])
 				md = checkfield(md,'mesh.edges[:,1:3]','>',0)
-		elif solution==TransientSolutionEnum:
+		elif solution==TransientSolutionEnum():
 			if md.transient.isprognostic and md.prognostic.stabilization==3:
 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
 				md = checkfield(md,'mesh.edges','size',[float('NaN'),4])
 				md = checkfield(md,'mesh.edges[:,1:3]','>',0)
-		elif solution==ThermalSolutionEnum:
+		elif solution==ThermalSolutionEnum():
 			md = checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes')
 
Index: /issm/trunk-jpl/src/m/classes/model/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model/model.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/model/model.m	(revision 13020)
@@ -1047,7 +1047,7 @@
 			 md.solver           = solver();
 			 if ismumps,
-				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum,mumpsoptions);
+				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),mumpsoptions);
 			 else
-				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum,iluasmoptions);
+				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),iluasmoptions);
 			 end
 			 md.cluster          = generic();
Index: /issm/trunk-jpl/src/m/classes/prognostic.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/prognostic.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/prognostic.m	(revision 13020)
@@ -38,6 +38,6 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 
-			%Early return,
-			if ~ismember(PrognosticAnalysisEnum,analyses) |  (solution==TransientSolutionEnum & md.transient.isprognostic==0), return; end
+			%Early return
+			if ~ismember(PrognosticAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isprognostic==0), return; end
 
 			md = checkfield(md,'prognostic.spcthickness','forcing',1);
@@ -62,5 +62,5 @@
 			WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1);
 			WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double');
-			WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum);
+			WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum());
 			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
 			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
Index: /issm/trunk-jpl/src/m/classes/prognostic.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/prognostic.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/prognostic.py	(revision 13020)
@@ -1,6 +1,16 @@
 #module imports
 from fielddisplay import fielddisplay
+from EnumDefinitions import *
+from checkfield import *
+from WriteData import *
 
 class prognostic(object):
+	"""
+	PROGNOSTIC class definition
+
+	   Usage:
+	      prognostic=prognostic();
+	"""
+
 	#properties
 	def __init__(self):
@@ -17,31 +27,54 @@
 
 		#}}}
-	def __repr__(obj):
+	def __repr__(self):
 		# {{{ Display
 		string='   Prognostic solution parameters:'
-		string="%s\n\n%s"%(string,fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint)'))
-		string="%s\n%s"%(string,fielddisplay(obj,'min_thickness','minimum ice thickness allowed'))
-		string="%s\n%s"%(string,fielddisplay(obj,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '))
-		string="%s\n%s"%(string,fielddisplay(obj,'stabilization','0->no, 1->artificial_diffusivity, 2->streamline upwinding, 3->discontinuous Galerkin'))
+		string="%s\n\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint)'))
+		string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum ice thickness allowed'))
+		string="%s\n%s"%(string,fielddisplay(self,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '))
+		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0->no, 1->artificial_diffusivity, 2->streamline upwinding, 3->discontinuous Galerkin'))
 
 		return string
 		#}}}
 		
-	def setdefaultparameters(obj):
+	def setdefaultparameters(self):
 		# {{{setdefaultparameters
 		
 		#Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
-		obj.stabilization=1
+		self.stabilization=1
 
 		#Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor
-		obj.penalty_factor=3
+		self.penalty_factor=3
 
 		#Minimum ice thickness that can be used
-		obj.min_thickness=1
+		self.min_thickness=1
 
 		#Hydrostatic adjustment
-		obj.hydrostatic_adjustment='Absolute'
+		self.hydrostatic_adjustment='Absolute'
 
-		return obj
+		return self
 	#}}}
 
+	def checkconsistency(self,md,solution,analyses):    # {{{
+
+		#Early return
+		if (not PrognosticAnalysisEnum() in analyses) or (solution==TransientSolutionEnum() and not md.transient.isprognostic):
+			return md
+
+		md = checkfield(md,'prognostic.spcthickness','forcing',1)
+		md = checkfield(md,'prognostic.hydrostatic_adjustment','values',['Absolute','Incremental'])
+		md = checkfield(md,'prognostic.stabilization','values',[0,1,2,3])
+		md = checkfield(md,'prognostic.min_thickness','>',0)
+
+		return md
+	# }}}
+
+	def marshall(self,fid):    # {{{
+		WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','min_thickness','format','Double')
+		WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum())
+		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+	# }}}
+
Index: /issm/trunk-jpl/src/m/classes/rifts.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/rifts.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/rifts.m	(revision 13020)
@@ -79,6 +79,6 @@
 			end
 
-			WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum,'format','Integer');
-			WriteData(fid,'data',data,'enum',RiftsRiftstructEnum,'format','DoubleMat','mattype',3);
+			WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer');
+			WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/rifts.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/rifts.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/rifts.py	(revision 13020)
@@ -86,6 +86,6 @@
 			count+=numpairsforthisrift
 
-		WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum,'format','Integer')
-		WriteData(fid,'data',data,'enum',RiftsRiftstructEnum,'format','DoubleMat','mattype',3)
+		WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer')
+		WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3)
 	# }}}
 
Index: /issm/trunk-jpl/src/m/classes/solver.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/solver.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/solver.m	(revision 13020)
@@ -20,6 +20,6 @@
 		 function obj = addoptions(obj,analysis,varargin) % {{{
 		 % Usage example:
-		 %    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum,stokesoptions());
-		 %    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum);
+		 %    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum(),stokesoptions());
+		 %    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum());
 
 			 %Convert analysis from enum to string
Index: /issm/trunk-jpl/src/m/classes/solver.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/solver.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/solver.py	(revision 13020)
@@ -26,6 +26,6 @@
 	def addoptions(self,analysis,*args):    # {{{
 		# Usage example:
-		#    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum,stokesoptions());
-		#    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum);
+		#    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum(),stokesoptions());
+		#    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum());
 
 		#Convert analysis from enum to string
Index: /issm/trunk-jpl/src/m/classes/steadystate.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/steadystate.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/steadystate.m	(revision 13020)
@@ -29,5 +29,5 @@
 
 			%Early return
-			if solution~=SteadystateSolutionEnum, return; end;
+			if solution~=SteadystateSolutionEnum(), return; end;
 
 			if md.timestepping.time_step~=0,
Index: /issm/trunk-jpl/src/m/classes/surfaceforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/surfaceforcings.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/surfaceforcings.m	(revision 13020)
@@ -44,5 +44,5 @@
 		function md = checkconsistency(obj,md,solution,analyses) % {{{
 
-			if ismember(PrognosticAnalysisEnum,analyses),
+			if ismember(PrognosticAnalysisEnum(),analyses),
 				md = checkfield(md,'surfaceforcings.ispdd','numel',1,'values',[0 1]);
 				md = checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0 1]);
@@ -70,5 +70,5 @@
 				end
 			end
-			if ismember(BalancethicknessAnalysisEnum,analyses),
+			if ismember(BalancethicknessAnalysisEnum(),analyses),
 				md = checkfield(md,'surfaceforcings.mass_balance','size',[md.mesh.numberofvertices 1],'NaN',1);
 			end
Index: /issm/trunk-jpl/src/m/classes/surfaceforcings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/surfaceforcings.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/surfaceforcings.py	(revision 13020)
@@ -79,5 +79,5 @@
 	def checkconsistency(self,md,solution,analyses):    # {{{
 
-		if PrognosticAnalysisEnum in analyses:
+		if PrognosticAnalysisEnum() in analyses:
 			md = checkfield(md,'surfaceforcings.ispdd','numel',1,'values',[0,1])
 			md = checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0,1])
@@ -103,5 +103,5 @@
 				md = checkfield(md,'surfaceforcings.mass_balance','forcing',1,'NaN',1)
 
-		if BalancethicknessAnalysisEnum in analyses:
+		if BalancethicknessAnalysisEnum() in analyses:
 			md = checkfield(md,'surfaceforcings.mass_balance','size',[md.mesh.numberofvertices],'NaN',1)
 
Index: /issm/trunk-jpl/src/m/classes/thermal.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/thermal.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/thermal.m	(revision 13020)
@@ -43,9 +43,9 @@
 
 			%Early return
-			if (~ismember(ThermalAnalysisEnum,analyses) & ~ismember(EnthalpyAnalysisEnum,analyses)) | (solution==TransientSolutionEnum & md.transient.isthermal==0), return; end
+			if (~ismember(ThermalAnalysisEnum(),analyses) & ~ismember(EnthalpyAnalysisEnum(),analyses)) | (solution==TransientSolutionEnum() & md.transient.isthermal==0), return; end
 
 			md = checkfield(md,'thermal.stabilization','numel',1,'values',[0 1 2]);
 			md = checkfield(md,'thermal.spctemperature','forcing',1);
-			if (ismember(EnthalpyAnalysisEnum,analyses) & md.thermal.isenthalpy & md.mesh.dimension==3),
+			if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy & md.mesh.dimension==3),
 			md = checkfield(md,'thermal.spctemperature','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*(md.geometry.surface-md.mesh.z),'message','spctemperature should be below the adjusted melting point');
 			md = checkfield(md,'thermal.isenthalpy','numel',1,'values',[0 1]);
Index: /issm/trunk-jpl/src/m/classes/transient.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/transient.m	(revision 13020)
@@ -33,5 +33,5 @@
 
 			%Early return
-			if solution~=TransientSolutionEnum, return; end
+			if solution~=TransientSolutionEnum(), return; end
 
 			md = checkfield(md,'transient.isprognostic','numel',1,'values',[0 1]);
Index: /issm/trunk-jpl/src/m/classes/verbose.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.m	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/verbose.m	(revision 13020)
@@ -120,5 +120,5 @@
 		%}}}
 		function marshall(obj,fid) % {{{
-			WriteData(fid,'data',VerboseToBinary(obj),'enum',VerboseEnum,'format','Integer');
+			WriteData(fid,'data',VerboseToBinary(obj),'enum',VerboseEnum(),'format','Integer');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/verbose.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.py	(revision 13019)
+++ /issm/trunk-jpl/src/m/classes/verbose.py	(revision 13020)
@@ -125,5 +125,5 @@
 
 	def marshall(self,fid):    # {{{
-			WriteData(fid,'data',VerboseToBinary(self),'enum',VerboseEnum,'format','Integer')
+			WriteData(fid,'data',VerboseToBinary(self),'enum',VerboseEnum(),'format','Integer')
 	# }}}
 
