Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp	(revision 1104)
@@ -71,4 +71,5 @@
 	double tria_viscosity_overshoot;
 	int    tria_artdiff; 
+	bool   tria_onwater; 
 	
 	/*matice constructor input: */
@@ -231,4 +232,5 @@
 		ModelFetchData((void**)&model->q,NULL,NULL,model_handle,"q","Matrix","Mat");
 		ModelFetchData((void**)&model->elementoniceshelf,NULL,NULL,model_handle,"elementoniceshelf","Matrix","Mat");
+		ModelFetchData((void**)&model->elementonwater,NULL,NULL,model_handle,"elementonwater","Matrix","Mat");
 		ModelFetchData((void**)&model->elements_type,NULL,NULL,model_handle,"elements_type","Matrix","Mat");
 		ModelFetchData((void**)&model->B,NULL,NULL,model_handle,"B","Matrix","Mat");
@@ -288,6 +290,7 @@
 				tria_accumulation[2]=*(model->accumulation+        ((int)*(model->elements+elements_width*i+2)-1));
 
-				/*element on iceshelf?:*/
+				/*element on iceshelf, water?:*/
 				tria_shelf=(int)*(model->elementoniceshelf+i);
+				tria_onwater=(bool)*(model->elementonwater+i);
 
 				tria_meanvel=model->meanvel;
@@ -298,5 +301,5 @@
 
 				/*Create tria element using its constructor:*/
-				tria=new Tria(tria_id, tria_mid, tria_mparid, tria_g, tria_h, tria_s, tria_b, tria_k, tria_melting,tria_accumulation,tria_geothermalflux,tria_friction_type, tria_p, tria_q, tria_shelf, tria_meanvel, tria_epsvel, tria_viscosity_overshoot,tria_artdiff);
+				tria=new Tria(tria_id, tria_mid, tria_mparid, tria_g, tria_h, tria_s, tria_b, tria_k, tria_melting,tria_accumulation,tria_geothermalflux,tria_friction_type, tria_p, tria_q, tria_shelf, tria_meanvel, tria_epsvel, tria_viscosity_overshoot,tria_artdiff,tria_onwater);
 
 				/*Add tria element to elements dataset: */
@@ -349,4 +352,5 @@
 		xfree((void**)&model->q);
 		xfree((void**)&model->elementoniceshelf);
+		xfree((void**)&model->elementonwater);
 		xfree((void**)&model->B);
 		xfree((void**)&model->n);
@@ -425,5 +429,5 @@
 						penta_p,penta_q,penta_shelf,penta_onbed,penta_onsurface,penta_meanvel,penta_epsvel,
 						penta_collapse,penta_melting,penta_accumulation,penta_geothermalflux,penta_artdiff,
-						penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning); 
+						penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning,0); 
 
 				/*Add penta element to elements dataset: */
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp	(revision 1104)
@@ -73,5 +73,5 @@
 	double beam_b[2];
 	double beam_k[2];
-	int    beam_onbed;
+	bool    beam_onbed;
 					
 	/*matpar constructor input: */
@@ -291,5 +291,5 @@
 					beam_k[1]=model->drag[(int)(model->uppernodes[i]-1)];
 
-					beam_onbed=(int)model->gridonbed[i];
+					beam_onbed=(bool)model->gridonbed[i];
 
 					/*Create beam element ubeam its constructor:*/
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp	(revision 1104)
@@ -270,5 +270,5 @@
 						penta_p,penta_q,penta_shelf,penta_onbed,penta_onsurface,penta_meanvel,penta_epsvel,
 						penta_collapse,penta_melting,penta_accumulation,penta_geothermalflux,penta_artdiff,
-						penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning); 
+						penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning,0); 
 
 				/*Add penta element to elements dataset: */
Index: /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp	(revision 1104)
@@ -238,5 +238,5 @@
 				penta_p,penta_q,penta_shelf,penta_onbed,penta_onsurface,penta_meanvel,penta_epsvel,
 				penta_collapse,penta_melting,penta_accumulation,penta_geothermalflux,penta_artdiff,
-				penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning); 
+				penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning,0); 
 
 		/*Add penta element to elements dataset: */
Index: /issm/trunk/src/c/ModelProcessorx/Melting/CreateElementsNodesAndMaterialsMelting.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Melting/CreateElementsNodesAndMaterialsMelting.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/Melting/CreateElementsNodesAndMaterialsMelting.cpp	(revision 1104)
@@ -242,5 +242,5 @@
 				penta_p,penta_q,penta_shelf,penta_onbed,penta_onsurface,penta_meanvel,penta_epsvel,
 				penta_collapse,penta_melting,penta_accumulation,penta_geothermalflux,penta_artdiff,
-				penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning); 
+				penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning,0); 
 
 		/*Add penta element to elements dataset: */
Index: /issm/trunk/src/c/ModelProcessorx/Model.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Model.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/Model.cpp	(revision 1104)
@@ -76,4 +76,5 @@
 	model->bed=NULL;
 	model->elementoniceshelf=NULL;
+	model->elementonwater=NULL;
 	model->gridonicesheet=NULL;
 	model->gridoniceshelf=NULL;
@@ -237,4 +238,5 @@
 	xfree((void**)&model->q);
 	xfree((void**)&model->elementoniceshelf);
+	xfree((void**)&model->elementonwater);
 	xfree((void**)&model->gridonicesheet);
 	xfree((void**)&model->gridoniceshelf);
Index: /issm/trunk/src/c/ModelProcessorx/Model.h
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Model.h	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/Model.h	(revision 1104)
@@ -73,4 +73,5 @@
 	double* bed;
 	double* elementoniceshelf;
+	double* elementonwater;
 	double* gridonicesheet;
 	double* gridoniceshelf;
Index: /issm/trunk/src/c/ModelProcessorx/Prognostic/CreateElementsNodesAndMaterialsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Prognostic/CreateElementsNodesAndMaterialsPrognostic.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/Prognostic/CreateElementsNodesAndMaterialsPrognostic.cpp	(revision 1104)
@@ -71,4 +71,5 @@
 	double tria_viscosity_overshoot; 
 	int    tria_artdiff; 
+	bool   tria_onwater; 
 
 	/*matice constructor input: */
@@ -225,4 +226,5 @@
 		ModelFetchData((void**)&model->bed,NULL,NULL,model_handle,"bed","Matrix","Mat");
 		ModelFetchData((void**)&model->elementoniceshelf,NULL,NULL,model_handle,"elementoniceshelf","Matrix","Mat");
+		ModelFetchData((void**)&model->elementonwater,NULL,NULL,model_handle,"elementonwater","Matrix","Mat");
 		
 		for (i=0;i<model->numberofelements;i++){
@@ -259,8 +261,9 @@
 			/*element on iceshelf?:*/
 			tria_shelf=(int)*(model->elementoniceshelf+i);
+			tria_onwater=(bool)*(model->elementonwater+i);
 			tria_artdiff=model->artificial_diffusivity;
 
 			/*Create tria element using its constructor:*/
-			tria=new Tria(tria_id, tria_mid, tria_mparid, tria_g, tria_h, tria_s, tria_b, tria_k, tria_melting,tria_accumulation,tria_geothermalflux,tria_friction_type, tria_p, tria_q, tria_shelf, tria_meanvel, tria_epsvel, tria_viscosity_overshoot,tria_artdiff);
+			tria=new Tria(tria_id, tria_mid, tria_mparid, tria_g, tria_h, tria_s, tria_b, tria_k, tria_melting,tria_accumulation,tria_geothermalflux,tria_friction_type, tria_p, tria_q, tria_shelf, tria_meanvel, tria_epsvel, tria_viscosity_overshoot,tria_artdiff,tria_onwater);
 
 			/*Add tria element to elements dataset: */
@@ -290,4 +293,5 @@
 		xfree((void**)&model->bed);
 		xfree((void**)&model->elementoniceshelf);
+		xfree((void**)&model->elementonwater);
 
 	}
@@ -335,5 +339,5 @@
 					penta_p,penta_q,penta_shelf,penta_onbed,penta_onsurface,penta_meanvel,penta_epsvel,
 					penta_collapse,penta_melting,penta_accumulation,penta_geothermalflux,penta_artdiff,
-					penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning); 
+					penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning,0); 
 
 			/*Add penta element to elements dataset: */
Index: /issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 1104)
@@ -156,19 +156,23 @@
 		#endif
 
-		/*partition grids in model->qmu_npart parts: */
-
-		if(strcmp(model->meshtype,"2d")==0){
-			ModelFetchData((void**)&model->elements,NULL,NULL,model_handle,"elements","Matrix","Mat");
-			elements_width=3; //tria elements
-		}
-		else{
-			ModelFetchData((void**)&model->elements2d,NULL,NULL,model_handle,"elements2d","Matrix","Mat");
-			elements_width=6; //penta elements
-		}
-
-		MeshPartitionx(&epart, &part,model->numberofelements,model->numberofnodes,model->elements, model->numberofelements2d,model->numberofnodes2d,model->elements2d,model->numlayers,elements_width, model->meshtype,model->qmu_npart);
-
-		dpart=(double*)xmalloc(model->numberofnodes*sizeof(double));
-		for(i=0;i<model->numberofnodes;i++)dpart[i]=part[i];
+		/*partition grids in model->qmu_npart parts, unless a partition is already present: */
+		ModelFetchData((void**)&dpart,NULL,NULL,model_handle,"part","Matrix","Mat");
+
+		if(!dpart){
+
+			if(strcmp(model->meshtype,"2d")==0){
+				ModelFetchData((void**)&model->elements,NULL,NULL,model_handle,"elements","Matrix","Mat");
+				elements_width=3; //tria elements
+			}
+			else{
+				ModelFetchData((void**)&model->elements2d,NULL,NULL,model_handle,"elements2d","Matrix","Mat");
+				elements_width=6; //penta elements
+			}
+
+			MeshPartitionx(&epart, &part,model->numberofelements,model->numberofnodes,model->elements, model->numberofelements2d,model->numberofnodes2d,model->elements2d,model->numlayers,elements_width, model->meshtype,model->qmu_npart);
+
+			dpart=(double*)xmalloc(model->numberofnodes*sizeof(double));
+			for(i=0;i<model->numberofnodes;i++)dpart[i]=part[i];
+		}
 
 		count++;
Index: /issm/trunk/src/c/ModelProcessorx/SlopeCompute/CreateElementsNodesAndMaterialsSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/SlopeCompute/CreateElementsNodesAndMaterialsSlopeCompute.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/SlopeCompute/CreateElementsNodesAndMaterialsSlopeCompute.cpp	(revision 1104)
@@ -67,4 +67,5 @@
 	double tria_viscosity_overshoot; 
 	int    tria_artdiff; 
+	bool   tria_onwater; 
 
 	/*penta constructor input: */
@@ -201,4 +202,5 @@
 		ModelFetchData((void**)&model->elements,NULL,NULL,model_handle,"elements","Matrix","Mat");
 		ModelFetchData((void**)&model->surface,NULL,NULL,model_handle,"surface","Matrix","Mat");
+		ModelFetchData((void**)&model->elementonwater,NULL,NULL,model_handle,"elementonwater","Matrix","Mat");
 		ModelFetchData((void**)&model->bed,NULL,NULL,model_handle,"bed","Matrix","Mat");
 		
@@ -229,7 +231,10 @@
 			tria_b[1]=*(model->bed+        ((int)*(model->elements+elements_width*i+1)-1)); 
 			tria_b[2]=*(model->bed+        ((int)*(model->elements+elements_width*i+2)-1)); 
+			
+			/*element on water? : */
+			tria_onwater=(bool)*(model->elementonwater+i);
 
 			/*Create tria element using its constructor:*/
-			tria=new Tria(tria_id, tria_mid, tria_mparid, tria_g, tria_h, tria_s, tria_b, tria_k, tria_melting,tria_accumulation,tria_geothermalflux,tria_friction_type, tria_p, tria_q, tria_shelf, tria_meanvel, tria_epsvel, tria_viscosity_overshoot,tria_artdiff);
+			tria=new Tria(tria_id, tria_mid, tria_mparid, tria_g, tria_h, tria_s, tria_b, tria_k, tria_melting,tria_accumulation,tria_geothermalflux,tria_friction_type, tria_p, tria_q, tria_shelf, tria_meanvel, tria_epsvel, tria_viscosity_overshoot,tria_artdiff,tria_onwater);
 
 			/*Add tria element to elements dataset: */
@@ -294,5 +299,5 @@
 					penta_p,penta_q,penta_shelf,penta_onbed,penta_onsurface,penta_meanvel,penta_epsvel,
 					penta_collapse,penta_melting,penta_accumulation,penta_geothermalflux,penta_artdiff,
-					penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning); 
+					penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning,0); 
 
 			/*Add penta element to elements dataset: */
Index: /issm/trunk/src/c/ModelProcessorx/Thermal/CreateElementsNodesAndMaterialsThermal.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Thermal/CreateElementsNodesAndMaterialsThermal.cpp	(revision 1103)
+++ /issm/trunk/src/c/ModelProcessorx/Thermal/CreateElementsNodesAndMaterialsThermal.cpp	(revision 1104)
@@ -246,5 +246,5 @@
 				penta_p,penta_q,penta_shelf,penta_onbed,penta_onsurface,penta_meanvel,penta_epsvel,
 				penta_collapse,penta_melting,penta_accumulation,penta_geothermalflux,penta_artdiff,
-				penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning); 
+				penta_thermal_steadystate,penta_viscosity_overshoot,penta_stokesreconditioning,0); 
 
 		/*Add penta element to elements dataset: */
Index: /issm/trunk/src/c/objects/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Beam.cpp	(revision 1103)
+++ /issm/trunk/src/c/objects/Beam.cpp	(revision 1104)
@@ -26,5 +26,5 @@
 }
 		
-Beam::Beam(int beam_id, int beam_mid, int beam_mparid, int beam_g[2], double beam_h[2], double beam_s[2],double beam_b[2],double beam_k[2],int beam_onbed){
+Beam::Beam(int beam_id, int beam_mid, int beam_mparid, int beam_g[2], double beam_h[2], double beam_s[2],double beam_b[2],double beam_k[2],bool beam_onbed){
 
 	int i;
Index: /issm/trunk/src/c/objects/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Beam.h	(revision 1103)
+++ /issm/trunk/src/c/objects/Beam.h	(revision 1104)
@@ -39,10 +39,10 @@
 		double k[2];
 
-		int onbed;
+		bool onbed;
 
 	public:
 
 		Beam();
-		Beam(int beam_id, int beam_mid, int beam_mparid, int beam_g[2], double beam_h[2], double beam_s[2],double beam_b[2],double beam_k[2],int beam_onbed);
+		Beam(int beam_id, int beam_mid, int beam_mparid, int beam_g[2], double beam_h[2], double beam_s[2],double beam_b[2],double beam_k[2],bool beam_onbed);
 		~Beam();
 
Index: /issm/trunk/src/c/objects/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Penta.cpp	(revision 1103)
+++ /issm/trunk/src/c/objects/Penta.cpp	(revision 1104)
@@ -22,5 +22,5 @@
 				double penta_p, double penta_q, int penta_shelf, int penta_onbed, int penta_onsurface, double penta_meanvel,double penta_epsvel, 
 				int penta_collapse, double penta_melting[6], double penta_accumulation[6], double penta_geothermalflux[6], 
-				int penta_artdiff, int penta_thermal_steadystate,double penta_viscosity_overshoot,double penta_stokesreconditioning){
+				int penta_artdiff, int penta_thermal_steadystate,double penta_viscosity_overshoot,double penta_stokesreconditioning,bool penta_onwater){
 	
 	int i;
@@ -52,4 +52,5 @@
 	shelf = penta_shelf; 
 	onbed = penta_onbed; 
+	onwater = penta_onwater; 
 	onsurface = penta_onsurface; 
 	meanvel = penta_meanvel;
@@ -89,4 +90,5 @@
 	printf("   shelf: %i\n",shelf);
 	printf("   onbed: %i\n",onbed);
+	printf("   onwater: %i\n",onwater);
 	printf("   onsurface: %i\n",onsurface);
 	printf("   meanvel: %g\n",meanvel);
@@ -125,4 +127,5 @@
 	printf("   shelf: %i\n",shelf);
 	printf("   onbed: %i\n",onbed);
+	printf("   onwater: %i\n",onwater);
 	printf("   onsurface: %i\n",onsurface);
 	printf("   meanvel: %g\n",meanvel);
@@ -173,4 +176,5 @@
 	memcpy(marshalled_dataset,&shelf,sizeof(shelf));marshalled_dataset+=sizeof(shelf);
 	memcpy(marshalled_dataset,&onbed,sizeof(onbed));marshalled_dataset+=sizeof(onbed);
+	memcpy(marshalled_dataset,&onwater,sizeof(onwater));marshalled_dataset+=sizeof(onwater);
 	memcpy(marshalled_dataset,&onsurface,sizeof(onsurface));marshalled_dataset+=sizeof(onsurface);
 	memcpy(marshalled_dataset,&meanvel,sizeof(meanvel));marshalled_dataset+=sizeof(meanvel);
@@ -210,4 +214,5 @@
 		sizeof(shelf)+
 		sizeof(onbed)+
+		sizeof(onwater)+
 		sizeof(onsurface)+
 		sizeof(meanvel)+
@@ -258,4 +263,5 @@
 	memcpy(&shelf,marshalled_dataset,sizeof(shelf));marshalled_dataset+=sizeof(shelf);
 	memcpy(&onbed,marshalled_dataset,sizeof(onbed));marshalled_dataset+=sizeof(onbed);
+	memcpy(&onwater,marshalled_dataset,sizeof(onwater));marshalled_dataset+=sizeof(onwater);
 	memcpy(&onsurface,marshalled_dataset,sizeof(onsurface));marshalled_dataset+=sizeof(onsurface);
 	memcpy(&meanvel,marshalled_dataset,sizeof(meanvel));marshalled_dataset+=sizeof(meanvel);
@@ -452,4 +458,8 @@
 	/*Collapsed formulation: */
 	Tria*  tria=NULL;
+
+	/*If on water, skip stiffness: */
+	if(onwater)return;
+
 
 	/*recover pointers: */
@@ -1325,5 +1335,5 @@
 	tria_node_offsets[2]=node_offsets[g2];
 
-	tria= new Tria(id,mid,mparid,tria_node_ids,tria_h,tria_s,tria_b,tria_k, tria_melting, tria_accumulation, tria_geothermalflux,friction_type,p,q,shelf,meanvel,epsvel,viscosity_overshoot,artdiff);
+	tria= new Tria(id,mid,mparid,tria_node_ids,tria_h,tria_s,tria_b,tria_k, tria_melting, tria_accumulation, tria_geothermalflux,friction_type,p,q,shelf,meanvel,epsvel,viscosity_overshoot,artdiff,onwater);
 
 	tria->NodeConfiguration(tria_node_ids,tria_nodes,tria_node_offsets);
@@ -1768,4 +1778,7 @@
 	/*Spawning: */
 	Tria* tria=NULL;
+
+	/*If on water, skip load: */
+	if(onwater)return;
 
 	/*recover pointers: */
Index: /issm/trunk/src/c/objects/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Penta.h	(revision 1103)
+++ /issm/trunk/src/c/objects/Penta.h	(revision 1104)
@@ -46,4 +46,5 @@
 		int    onbed;
 		int    onsurface;
+		bool    onwater;
 		double meanvel;/*!scaling ratio for velocities*/
 		double epsvel; /*!minimum velocity to avoid infinite velocity ratios*/
@@ -61,5 +62,5 @@
 				double p, double q, int    shelf, int    onbed, int    onsurface, double meanvel,double epsvel, 
 				int    collapse, double melting[6], double accumulation[6], double geothermalflux[6], 
-				int    artdiff, int    thermal_steadystate,double viscosity_overshoot,double stokesreconditioning);
+				int    artdiff, int    thermal_steadystate,double viscosity_overshoot,double stokesreconditioning,bool onwater);
 		~Penta();
 
Index: /issm/trunk/src/c/objects/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Tria.cpp	(revision 1103)
+++ /issm/trunk/src/c/objects/Tria.cpp	(revision 1104)
@@ -34,5 +34,5 @@
 Tria::Tria(int tria_id,int tria_mid,int tria_mparid,int tria_node_ids[3],double tria_h[3],double tria_s[3],double tria_b[3],double tria_k[3],double tria_melting[3],
 				double tria_accumulation[3],double tria_geothermalflux[3],int tria_friction_type,double tria_p,double tria_q,int tria_shelf,double tria_meanvel,double tria_epsvel,
-				double tria_viscosity_overshoot,int tria_artdiff){
+				double tria_viscosity_overshoot,int tria_artdiff,bool tria_onwater){
 	
 	int i;
@@ -64,4 +64,5 @@
 	epsvel=tria_epsvel;
 	onbed=1;
+	onwater=tria_onwater;
 	viscosity_overshoot=tria_viscosity_overshoot;
 	artdiff=tria_artdiff;
@@ -97,4 +98,5 @@
 	printf("   epsvel: %g\n",epsvel);
 	printf("   onbed: %i\n",onbed);
+	printf("   onwater: %i\n",onwater);
 	printf("   viscosity_overshoot=%g\n",viscosity_overshoot);
 	printf("   artdiff=%g\n",artdiff);
@@ -135,4 +137,5 @@
 	printf("   epsvel: %g\n",epsvel);
 	printf("   onbed: %i\n",onbed);
+	printf("   onwater: %i\n",onwater);
 	printf("   viscosity_overshoot=%g\n",viscosity_overshoot);
 	printf("   artdiff=%g\n",artdiff);
@@ -180,4 +183,5 @@
 	memcpy(marshalled_dataset,&friction_type,sizeof(friction_type));marshalled_dataset+=sizeof(friction_type);
 	memcpy(marshalled_dataset,&onbed,sizeof(onbed));marshalled_dataset+=sizeof(onbed);
+	memcpy(marshalled_dataset,&onwater,sizeof(onwater));marshalled_dataset+=sizeof(onwater);
 	memcpy(marshalled_dataset,&p,sizeof(p));marshalled_dataset+=sizeof(p);
 	memcpy(marshalled_dataset,&q,sizeof(q));marshalled_dataset+=sizeof(q);
@@ -212,4 +216,5 @@
 		+sizeof(friction_type)
 		+sizeof(onbed)
+		+sizeof(onwater)
 		+sizeof(p)
 		+sizeof(q)
@@ -256,4 +261,5 @@
 	memcpy(&friction_type,marshalled_dataset,sizeof(friction_type));marshalled_dataset+=sizeof(friction_type);
 	memcpy(&onbed,marshalled_dataset,sizeof(onbed));marshalled_dataset+=sizeof(onbed);
+	memcpy(&onwater,marshalled_dataset,sizeof(onwater));marshalled_dataset+=sizeof(onwater);
 	memcpy(&p,marshalled_dataset,sizeof(p));marshalled_dataset+=sizeof(p);
 	memcpy(&q,marshalled_dataset,sizeof(q));marshalled_dataset+=sizeof(q);
@@ -399,4 +405,7 @@
 
 	ParameterInputs* inputs=NULL;
+
+	/*First, if we are on water, return empty matrix: */
+	if(onwater)return;
 
 	/*recover pointers: */
@@ -1204,4 +1213,7 @@
 	ParameterInputs* inputs=NULL;
 
+	/*First, if we are on water, return empty vector: */
+	if(onwater)return;
+
 	/*recover pointers: */
 	inputs=(ParameterInputs*)vinputs;
Index: /issm/trunk/src/c/objects/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Tria.h	(revision 1103)
+++ /issm/trunk/src/c/objects/Tria.h	(revision 1104)
@@ -48,4 +48,5 @@
 		double epsvel; /*!minimum velocity to avoid infinite velocity ratios*/
 		int    onbed;
+		bool   onwater;
 		double viscosity_overshoot;
 		int    artdiff;
@@ -55,5 +56,5 @@
 		Tria();
 		Tria(int id,int mid,int mparid,int node_ids[3],double h[3],double s[3],double b[3],double k[3],double melting[3],double accumulation[3],double geothermalflux[3],
-				int friction_type,double p,double q,int shelf,double meanvel,double epsvel,double viscosity_overshoot,int artdiff);
+				int friction_type,double p,double q,int shelf,double meanvel,double epsvel,double viscosity_overshoot,int artdiff,bool onwater);
 		~Tria();
 
