Index: ../trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 19060)
+++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 19061)
@@ -203,6 +203,7 @@
 		virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid)=0;
 		virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
 		virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
+		virtual IssmDouble IceMass(void)=0;
 		virtual IssmDouble IceVolume(void)=0;
 		virtual IssmDouble IceVolumeAboveFloatation(void)=0;
 		virtual void       InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 19060)
+++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 19061)
@@ -1623,6 +1623,18 @@
 	}
 }
 /*}}}*/
+IssmDouble Tria::IceMass(void){/*{{{*/
+
+	IssmDouble rho_ice; 
+	
+	if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice!
+
+	/*recover ice density: */
+	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+
+	return rho_ice*this->IceVolume();
+}
+/*}}}*/
 IssmDouble Tria::IceVolume(void){/*{{{*/
 
 	/*The volume of a truncated prism is area_base * 1/numedges sum(length of edges)*/
Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 19060)
+++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 19061)
@@ -89,6 +89,7 @@
 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
 		bool        HasEdgeOnBase();
 		bool        HasEdgeOnSurface();
+		IssmDouble  IceMass(void);
 		IssmDouble  IceVolume(void);
 		IssmDouble  IceVolumeAboveFloatation(void);
 		void        InputControlUpdate(IssmDouble scalar,bool save_parameter);
Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 19060)
+++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 19061)
@@ -1286,6 +1286,18 @@
 	*pxyz_list = xyz_list;
 
 }/*}}}*/
+IssmDouble Penta::IceMass(void){/*{{{*/
+
+	IssmDouble rho_ice; 
+	
+	if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice!
+
+	/*recover ice density: */
+	rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);
+
+	return rho_ice*this->IceVolume();
+}
+/*}}}*/
 IssmDouble Penta::IceVolume(void){/*{{{*/
 
 	/*The volume of a troncated prism is base * 1/3 sum(length of edges)*/
Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 19060)
+++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 19061)
@@ -86,6 +86,7 @@
 		void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
 		void           GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
 		void           GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
+		IssmDouble     IceMass(void);
 		IssmDouble     IceVolume(void);
 		IssmDouble     IceVolumeAboveFloatation(void);
 		void           InputControlUpdate(IssmDouble scalar,bool save_parameter);
Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 19060)
+++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 19061)
@@ -77,6 +77,7 @@
 		void        GetVerticesCoordinates(IssmDouble** pxyz_list);
 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list){_error_("not implemented yet");};
+		IssmDouble  IceMass(void){_error_("not implemented yet");};
 		IssmDouble  IceVolume(void){_error_("not implemented yet");};
 		IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
 		void        InputControlUpdate(IssmDouble scalar,bool save_parameter){_error_("not implemented yet");};
Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 19060)
+++ ../trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 19061)
@@ -83,6 +83,7 @@
 		void        GradientIndexing(int* indexing,int control_index){_error_("not implemented yet");};
 		bool        HasFaceOnBase();
 		bool        HasFaceOnSurface();
+		IssmDouble  IceMass(void){_error_("not implemented yet");};
 		IssmDouble  IceVolume(void){_error_("not implemented yet");};
 		IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
 		bool        IsFaceOnBoundary(void){_error_("not implemented yet");};
