Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15594)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15595)
@@ -2357,5 +2357,5 @@
 				name==FrictionCoefficientEnum ||
 				name==GLlevelsetEnum ||
-				name==IcelevelsetEnum ||
+				name==MaskIcelevelsetEnum ||
 				name==GradientEnum ||
 				name==OldGradientEnum  ||
@@ -7974,5 +7974,5 @@
 
 	/*Retrieve all inputs and parameters*/
-	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
+	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
 
 	/*If the level set is awlays <=0, there is no ice front here*/
@@ -8005,5 +8005,5 @@
 	rho_ice  =matpar->GetRhoIce();
 	gravity  =matpar->GetG();
-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
+	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
 	GetQuadNormal(&normal[0],xyz_list_front);
@@ -8179,5 +8179,5 @@
 
 	/*Retrieve all inputs and parameters*/
-	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
+	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
 
 	/*If the level set is awlays <=0, there is no ice front here*/
@@ -8209,5 +8209,5 @@
 	rho_ice  =matpar->GetRhoIce();
 	gravity  =matpar->GetG();
-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
+	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
 	GetQuadNormal(&normal[0],xyz_list_front);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15594)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15595)
@@ -1848,5 +1848,5 @@
 				name==BedEnum ||
 				name==GLlevelsetEnum ||
-				name==IcelevelsetEnum ||
+				name==MaskIcelevelsetEnum ||
 				name==SurfaceSlopeXEnum ||
 				name==SurfaceSlopeYEnum ||
@@ -3155,5 +3155,5 @@
 
 	/*Retrieve all inputs and parameters*/
-	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
+	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
 
 	/*If the level set is awlays <0, there is no ice front here*/
@@ -3187,5 +3187,5 @@
 	rho_ice  =matpar->GetRhoIce();
 	gravity  =matpar->GetG();
-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
+	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,2);
 	GetSegmentNormal(&normal[0],xyz_list_front);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15594)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15595)
@@ -82,5 +82,5 @@
 
 	/*Fetch data:*/
-	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
+	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIcelevelsetEnum);
 	CreateNumberNodeToElementConnectivity(iomodel);
 
@@ -96,5 +96,5 @@
 
 	/*Free data: */
-	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
+	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIcelevelsetEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15594)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15595)
@@ -56,5 +56,5 @@
 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
-	iomodel->FetchDataToInput(elements,IcelevelsetEnum);
+	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15594)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15595)
@@ -147,5 +147,5 @@
 	MaskVertexongroundediceEnum,
 	MaskVertexonwaterEnum,
-	IcelevelsetEnum,
+	MaskIcelevelsetEnum,
 	MaterialsBetaEnum,
 	MaterialsHeatcapacityEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15594)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15595)
@@ -155,5 +155,5 @@
 		case MaskVertexongroundediceEnum : return "MaskVertexongroundedice";
 		case MaskVertexonwaterEnum : return "MaskVertexonwater";
-		case IcelevelsetEnum : return "Icelevelset";
+		case MaskIcelevelsetEnum : return "MaskIcelevelset";
 		case MaterialsBetaEnum : return "MaterialsBeta";
 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15594)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15595)
@@ -158,5 +158,5 @@
 	      else if (strcmp(name,"MaskVertexongroundedice")==0) return MaskVertexongroundediceEnum;
 	      else if (strcmp(name,"MaskVertexonwater")==0) return MaskVertexonwaterEnum;
-	      else if (strcmp(name,"Icelevelset")==0) return IcelevelsetEnum;
+	      else if (strcmp(name,"MaskIcelevelset")==0) return MaskIcelevelsetEnum;
 	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
Index: /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
===================================================================
--- /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15594)
+++ /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15595)
@@ -64,4 +64,5 @@
 %plug onto model
 md.diagnostic.icefront=pressureload;
+md.mask.icelevelset(find(nodeonicefront))=0;
 
 %Create zeros basalforcings and surfaceforcings
Index: /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
===================================================================
--- /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15594)
+++ /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15595)
@@ -74,4 +74,6 @@
 	#plug onto model
 	md.diagnostic.icefront=pressureload
+	pos=numpy.nonzero(nodeonicefront)[0]
+	md.mask.icelevelset[pos]=0
 
 	#Create zeros basalforcings and surfaceforcings
Index: /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
===================================================================
--- /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15594)
+++ /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15595)
@@ -74,4 +74,5 @@
 %plug onto model
 md.diagnostic.icefront=pressureload;
+md.mask.icelevelset(find(vertexonicefront))=0;
 
 %Create zeros basalforcings and surfaceforcings
Index: /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
===================================================================
--- /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15594)
+++ /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15595)
@@ -80,4 +80,6 @@
 	#plug onto model
 	md.diagnostic.icefront=pressureload
+	pos=numpy.nonzero(vertexonicefront)[0]
+	md.mask.icelevelset[pos]=0
 
 	#Create zeros basalforcings and surfaceforcings
Index: /issm/trunk-jpl/src/m/classes/mask.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mask.m	(revision 15594)
+++ /issm/trunk-jpl/src/m/classes/mask.m	(revision 15595)
@@ -12,5 +12,6 @@
 		vertexongroundedice  = NaN;
 		vertexonwater        = NaN;
-		vertexonrock        = NaN;
+		vertexonrock         = NaN;
+		icelevelset          = NaN;
 	end
 	methods
@@ -34,4 +35,9 @@
 			md = checkfield(md,'mask.vertexongroundedice','size',[md.mesh.numberofvertices 1],'values',[0 1]);
 			md = checkfield(md,'mask.vertexonwater'      ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
+			md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices 1]);
+			isice=(md.mask.icelevelset>0);
+			if any(sum(isice(md.mesh.elements),2)==0),
+				error('elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0');
+			end
 			%md = checkfield(md,'mask.vertexonrock'      ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
 		end % }}}
@@ -46,4 +52,5 @@
 			fielddisplay(obj,'vertexonwater','vertex on water flags list');
 			fielddisplay(obj,'vertexonrock','vertex on rock flags list');
+			fielddisplay(obj,'icelevelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
 		end % }}}
 		function marshall(obj,md,fid) % {{{
@@ -57,5 +64,5 @@
 			pos=md.diagnostic.icefront(:,1:end-2);
 			icelevelset(pos(:))=0;
-			WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum());
+			WriteData(fid,'object',obj,'fieldname','icelevelset','format','DoubleMat','mattype',1);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/mask.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/mask.py	(revision 15594)
+++ /issm/trunk-jpl/src/m/classes/mask.py	(revision 15595)
@@ -19,4 +19,5 @@
 		self.vertexongroundedice  = float('NaN')
 		self.vertexonwater        = float('NaN')
+		self.icelevelset          = float('NaN')
 
 		#set defaults
@@ -33,4 +34,5 @@
 		string="%s\n%s"%(string,fielddisplay(self,"elementonwater","element on water flags list"))
 		string="%s\n%s"%(string,fielddisplay(self,"vertexonwater","vertex on water flags list"))
+		string="%s\n%s"%(string,fielddisplay(self,"icelevelset","presence of ice if > 0, icefront position if = 0, no ice if < 0"))
 		return string
 		#}}}
@@ -46,4 +48,5 @@
 		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
 		md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
+		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
 
 		return md
@@ -60,4 +63,4 @@
 			pos=md.diagnostic.icefront[:,:-2]
 			icelevelset[pos[:].astype(int)-1]=0;
-		WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum())
+		WriteData(fid,'object',self,'fieldname','icelevelset','format','DoubleMat','mattype',1)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/model/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model/model.m	(revision 15594)
+++ /issm/trunk-jpl/src/m/classes/model/model.m	(revision 15595)
@@ -225,4 +225,5 @@
 				md.mask.vertexonrock=project2d(md,md.mask.vertexonrock,1);
 			end
+			md.mask.icelevelset=project2d(md,md.mask.icelevelset,1);
 
 			%lat long
@@ -772,4 +773,5 @@
 			md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node');
 			md.mask.vertexonrock=project3d(md,'vector',md.mask.vertexonrock,'type','node');
+			md.mask.icelevelset=project3d(md,'vector',md.mask.icelevelset,'type','node');
 			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
 			if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
Index: /issm/trunk-jpl/src/m/classes/model/model.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/model/model.py	(revision 15594)
+++ /issm/trunk-jpl/src/m/classes/model/model.py	(revision 15595)
@@ -661,4 +661,5 @@
 		md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element')
 		md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node')
+		md.mask.iceleveset=project3d(md,'vector',md.mask.icelevelset,'type','node')
 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15594)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15595)
@@ -1941,17 +1941,17 @@
 	return StringToEnum('MaskVertexonwater')[0]
 
-def IcelevelsetEnum():
-	"""
-	ICELEVELSETENUM - Enum of Icelevelset
-
-	WARNING: DO NOT MODIFY THIS FILE
-				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
-				Please read src/c/shared/Enum/README for more information
-
-	   Usage:
-	      macro=IcelevelsetEnum()
-	"""
-
-	return StringToEnum('Icelevelset')[0]
+def MaskIcelevelsetEnum():
+	"""
+	MASKICELEVELSETENUM - Enum of MaskIcelevelset
+
+	WARNING: DO NOT MODIFY THIS FILE
+				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+				Please read src/c/shared/Enum/README for more information
+
+	   Usage:
+	      macro=MaskIcelevelsetEnum()
+	"""
+
+	return StringToEnum('MaskIcelevelset')[0]
 
 def MaterialsBetaEnum():
Index: /issm/trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m	(revision 15595)
+++ /issm/trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m	(revision 15595)
@@ -0,0 +1,11 @@
+function macro=MaskIcelevelsetEnum()
+%MASKICELEVELSETENUM - Enum of MaskIcelevelset
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=MaskIcelevelsetEnum()
+
+macro=StringToEnum('MaskIcelevelset');
Index: /issm/trunk-jpl/src/m/parameterization/setmask.m
===================================================================
--- /issm/trunk-jpl/src/m/parameterization/setmask.m	(revision 15594)
+++ /issm/trunk-jpl/src/m/parameterization/setmask.m	(revision 15595)
@@ -48,2 +48,3 @@
 md.mask.vertexonwater=zeros(md.mesh.numberofvertices,1);
 md.mask.elementonwater=zeros(md.mesh.numberofelements,1);
+md.mask.icelevelset=ones(md.mesh.numberofvertices,1);
Index: /issm/trunk-jpl/src/m/parameterization/setmask.py
===================================================================
--- /issm/trunk-jpl/src/m/parameterization/setmask.py	(revision 15594)
+++ /issm/trunk-jpl/src/m/parameterization/setmask.py	(revision 15595)
@@ -48,4 +48,5 @@
 	md.mask.vertexonwater = numpy.zeros(md.mesh.numberofvertices,bool)
 	md.mask.elementonwater = numpy.zeros(md.mesh.numberofelements,bool)
+	md.mask.iceleveset = numpy.ones(md.mesh.numberofvertices,bool)
 
 	return md
