Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27438)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27439)
@@ -4711,4 +4711,19 @@
 }
 /*}}}*/
+void       Element::SubglacialWaterPressure(int output_enum){/*{{{*/
+
+	int numvertices = this->GetNumberOfVertices();
+	IssmDouble p_water[numvertices];
+	Gauss* gauss=this->NewGauss();
+   Friction* friction = new Friction(this);
+   for(int i=0;i<numvertices;i++){
+         gauss->GaussVertex(i);
+         p_water[i] = friction->SubglacialWaterPressure(gauss);
+	}
+	this->AddInput(output_enum,p_water,P1DGEnum);
+	delete gauss;
+   delete friction;
+
+}/*}}}*/
 void       Element::StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 27438)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 27439)
@@ -196,4 +196,5 @@
 		void               StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input);
 		void               StressMaxPrincipalCreateInput(void);
+		void               SubglacialWaterPressure(int output_enum);
 		IssmDouble         TotalFloatingBmb(IssmDouble* mask, bool scaled);
 		IssmDouble         TotalGroundedBmb(IssmDouble* mask, bool scaled);
Index: /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 27438)
+++ /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 27439)
@@ -207,14 +207,8 @@
                   IssmDouble p_water[numvertices];
 						element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
-						Gauss* gauss=element->NewGauss();
-						Friction* friction = new Friction(element);
-						for(int i=0;i<numvertices;i++){
-							gauss->GaussVertex(i);
-							p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss);
-							p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid]; 
-						}
-						element->AddInput(FrictionWaterPressureEnum,p_water,P1DGEnum);
-						delete gauss;
-						delete friction;
+						element->SubglacialWaterPressure(FrictionWaterPressureEnum);
+                  element->GetInputListOnVertices(&p_water_deterministic[0],FrictionWaterPressureEnum);
+                  for(int i=0;i<numvertices;i++) p_water[i] = p_water_deterministic[i] + noisefield[dimensionid];
+                  element->AddInput(FrictionWaterPressureEnum,p_water,P1DGEnum);
 					}
 					break;
@@ -228,14 +222,8 @@
                   IssmDouble p_water[numvertices];
 						element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
-						Gauss* gauss=element->NewGauss();
-						Friction* friction = new Friction(element);
-						for(int i=0;i<numvertices;i++){
-							gauss->GaussVertex(i);
-							p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss);
-							p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid]; 
-						}
-						element->AddInput(FrictionSchoofWaterPressureEnum,p_water,P1DGEnum);
-						delete gauss;
-						delete friction;
+						element->SubglacialWaterPressure(FrictionSchoofWaterPressureEnum);
+                  element->GetInputListOnVertices(&p_water_deterministic[0],FrictionSchoofWaterPressureEnum);
+                  for(int i=0;i<numvertices;i++) p_water[i] = p_water_deterministic[i] + noisefield[dimensionid];
+                  element->AddInput(FrictionSchoofWaterPressureEnum,p_water,P1DGEnum);
 					}
 					break;
@@ -249,14 +237,8 @@
                   IssmDouble p_water[numvertices];
 						element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);
-						Gauss* gauss=element->NewGauss();
-						Friction* friction = new Friction(element);
-						for(int i=0;i<numvertices;i++){
-							gauss->GaussVertex(i);
-							p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss);
-							p_water[i]               = p_water_deterministic[i] + noisefield[dimensionid]; 
-						}
+						element->SubglacialWaterPressure(FrictionCoulombWaterPressureEnum);
+						element->GetInputListOnVertices(&p_water_deterministic[0],FrictionCoulombWaterPressureEnum);
+						for(int i=0;i<numvertices;i++) p_water[i] = p_water_deterministic[i] + noisefield[dimensionid];
 						element->AddInput(FrictionCoulombWaterPressureEnum,p_water,P1DGEnum);
-						delete gauss;
-						delete friction;
 					}
 					break;
