Index: /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 19724)
+++ /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 19725)
@@ -4,4 +4,8 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
+
+/*Define 2 hardcoded parameters*/
+#define OMEGA 0.001    // parameter controlling transition to nonlinear resistance in basal system (dimensionless)
+#define NU    1.787e-6 //kinematic water viscosity m^2/s
 
 /*Model processing*/
@@ -64,4 +68,5 @@
 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
 	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
 	iomodel->FetchDataToInput(elements,HydrologyHeadEnum);
 	iomodel->FetchDataToInput(elements,HydrologyGapHeightEnum);
@@ -96,12 +101,6 @@
 
 	/*Intermediaries */
-	IssmDouble conductivity;
 	IssmDouble Jdet;
-	IssmDouble gap,reynolds;
 	IssmDouble* xyz_list = NULL;
-
-	/*Hard coded parameters*/
-	IssmDouble omega = 0.001;    // parameter controlling transition to nonlinear resistance in basal system (dimensionless)
-	IssmDouble nu    = 1.787e-6; // kinematic water viscosity m^2/s
 
 	/*Fetch number of nodes and dof for this finite element*/
@@ -114,7 +113,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	IssmDouble  g = element->GetMaterialParameter(ConstantsGEnum);
-	Input* reynolds_input = element->GetInput(HydrologyReynoldsEnum);  _assert_(reynolds_input);
-	Input* gap_input      = element->GetInput(HydrologyGapHeightEnum); _assert_(gap_input);
+
+	/*Get conductivity from inputs*/
+	IssmDouble conductivity = GetConductivity(element);
 
 	/* Start  looping on the number of gaussian points: */
@@ -125,9 +124,4 @@
 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
 		element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
-
-		/*Compute conductivity*/
-		reynolds_input->GetInputValue(&reynolds,gauss);
-		gap_input->GetInputValue(&gap,gauss);
-		conductivity = pow(gap,3)*g/(12.*nu*(1+omega*reynolds));
 
 		for(int i=0;i<numnodes;i++){
@@ -136,6 +130,4 @@
 			}
 		}
-
-
 	}
 
@@ -147,5 +139,4 @@
 }/*}}}*/
 ElementVector* HydrologySommersAnalysis::CreatePVector(Element* element){/*{{{*/
-	_error_("STOP");
 
 	/*Skip if water or ice shelf element*/
@@ -153,6 +144,6 @@
 
 	/*Intermediaries */
-	IssmDouble  Jdet,dt;
-	IssmDouble  mb,oldw;
+	IssmDouble  Jdet,meltrate,G,dh[2],B,A,n;
+	IssmDouble  gap,bed,thickness,head;
 	IssmDouble* xyz_list = NULL;
 
@@ -166,9 +157,19 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	element->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input* mb_input   = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);
-	Input* oldw_input = element->GetInput(WaterColumnOldEnum);                      _assert_(oldw_input);
-
-	/*Initialize mb_correction to 0, do not forget!:*/
+	IssmDouble  latentheat      = element->GetMaterialParameter(MaterialsLatentheatEnum);
+	IssmDouble  g               = element->GetMaterialParameter(ConstantsGEnum);
+	IssmDouble  rho_ice         = element->GetMaterialParameter(MaterialsRhoIceEnum);
+	IssmDouble  rho_water       = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
+	Input* geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input);
+	Input* head_input           = element->GetInput(HydrologyHeadEnum);              _assert_(head_input);
+	Input* gap_input            = element->GetInput(HydrologyGapHeightEnum);         _assert_(gap_input);
+	Input* thickness_input      = element->GetInput(ThicknessEnum);                  _assert_(thickness_input);
+	Input* base_input           = element->GetInput(BaseEnum);                       _assert_(base_input);
+	Input* B_input              = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input              = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+
+	/*Get conductivity from inputs*/
+	IssmDouble conductivity = GetConductivity(element);
+
 	/* Start  looping on the number of gaussian points: */
 	Gauss* gauss=element->NewGauss(2);
@@ -178,14 +179,29 @@
 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
 		element->NodalFunctions(basis,gauss);
-
-		mb_input->GetInputValue(&mb,gauss);
-		oldw_input->GetInputValue(&oldw,gauss);
-
-		if(dt!=0.){
-			for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(oldw+dt*mb)*basis[i];
-		}
-		else{
-			for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*mb*basis[i];
-		}
+		geothermalflux_input->GetInputValue(&G,gauss);
+		base_input->GetInputValue(&bed,gauss);
+		thickness_input->GetInputValue(&thickness,gauss);
+		gap_input->GetInputValue(&gap,gauss);
+		head_input->GetInputValue(&head,gauss);
+		head_input->GetInputDerivativeValue(&dh[0],xyz_list,gauss);
+
+		/*Get ice A parameter*/
+		B_input->GetInputValue(&B,gauss);
+		n_input->GetInputValue(&n,gauss);
+		A=pow(B,-n);
+
+		/*Get water and ice pressures*/
+		IssmDouble pressure_ice   = rho_ice*g*thickness;    _assert_(pressure_ice>0.); 
+		IssmDouble pressure_water = rho_water*g*(head-bed);
+		_assert_(pressure_water<=pressure_ice);
+
+		meltrate = 1/latentheat*(G+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1]));
+		_assert_(meltrate>0.);
+
+		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*
+		 (
+		  meltrate*(1/rho_water-1/rho_ice)
+		  +A*pow(fabs(pressure_ice-pressure_water),n-1)*(pressure_ice-pressure_water)*gap
+		  )*basis[i];
 	}
 
@@ -205,5 +221,7 @@
 
 	/*Intermediary*/
+	IssmDouble dh[3];
 	int* doflist = NULL;
+	IssmDouble* xyz_list = NULL;
 
 	/*Fetch number of nodes for this finite element*/
@@ -214,7 +232,21 @@
 	IssmDouble* values = xNew<IssmDouble>(numnodes);
 
+	/*Get thickness and base on nodes to apply cap on water head*/
+	IssmDouble* thickness = xNew<IssmDouble>(numnodes);
+	IssmDouble* bed       = xNew<IssmDouble>(numnodes);
+	IssmDouble  rho_ice   = element->GetMaterialParameter(MaterialsRhoIceEnum);
+	IssmDouble  rho_water = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
+	element->GetInputListOnNodes(&thickness[0],ThicknessEnum);
+	element->GetInputListOnNodes(&bed[0],BaseEnum);
+
 	/*Use the dof list to index into the solution vector: */
 	for(int i=0;i<numnodes;i++){
 		values[i]=solution[doflist[i]];
+
+		/*make sure that p_water<p_ice ->  h<rho_i H/rho_w + zb*/
+		if(values[i]>rho_ice*thickness[i]/rho_water+bed[i]){
+			values[i] = rho_ice*thickness[i]/rho_water+bed[i];
+		}
+
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
 	}
@@ -223,6 +255,17 @@
 	element->AddInput(HydrologyHeadEnum,values,element->GetElementType());
 
+	/*Update reynolds number according to new solution*/
+	element->GetVerticesCoordinates(&xyz_list);
+	Input* head_input = element->GetInput(HydrologyHeadEnum);_assert_(head_input);
+	head_input->GetInputDerivativeAverageValue(&dh[0],xyz_list);
+	IssmDouble conductivity = GetConductivity(element);
+	IssmDouble reynolds = conductivity*sqrt(dh[0]*dh[0]+dh[1]*dh[1])/(2.*NU);
+	element->AddInput(HydrologyReynoldsEnum,&reynolds,P0Enum);
+
 	/*Free ressources:*/
 	xDelete<IssmDouble>(values);
+	xDelete<IssmDouble>(thickness);
+	xDelete<IssmDouble>(bed);
+	xDelete<IssmDouble>(xyz_list);
 	xDelete<int>(doflist);
 }/*}}}*/
@@ -231,2 +274,25 @@
 	return;
 }/*}}}*/
+
+/*Additional methods*/
+IssmDouble HydrologySommersAnalysis::GetConductivity(Element* element){/*{{{*/
+
+	/*Intermediaries */
+	IssmDouble gap,reynolds;
+
+	/*Get gravity from parameters*/
+	IssmDouble  g = element->GetMaterialParameter(ConstantsGEnum);
+
+	/*Get Reynolds and gap average values*/
+	Input* reynolds_input = element->GetInput(HydrologyReynoldsEnum);  _assert_(reynolds_input);
+	Input* gap_input      = element->GetInput(HydrologyGapHeightEnum); _assert_(gap_input);
+	reynolds_input->GetInputAverage(&reynolds);
+	gap_input->GetInputAverage(&gap);
+
+	/*Compute conductivity*/
+	IssmDouble conductivity = pow(gap,3)*g/(12.*NU*(1+OMEGA*reynolds));
+	_assert_(conductivity>0);
+
+	/*Clean up and return*/
+	return conductivity;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.h	(revision 19725)
@@ -30,4 +30,7 @@
 		void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
 		void           UpdateConstraints(FemModel* femmodel);
+
+		/*Intermediaries*/
+		IssmDouble GetConductivity(Element* element);
 };
 #endif
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 19725)
@@ -52,4 +52,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss){_error_("not implemented yet");};
 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 19725)
@@ -58,4 +58,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss);
 		void GetInputAverage(IssmDouble* pvalue);
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 19725)
@@ -54,4 +54,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 19725)
@@ -54,4 +54,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 19725)
@@ -55,4 +55,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
 		void GetInputAverage(IssmDouble* pvalue);
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 19725)
@@ -34,4 +34,5 @@
 		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss)=0;
 		virtual void GetInputAverage(IssmDouble* pvalue)=0;
+		virtual void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list)=0;
 		virtual void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes)=0;
 		virtual void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime)=0;
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 19725)
@@ -39,4 +39,5 @@
 		IssmDouble  MinAbs(int enumtype);
 		void        GetInputAverage(IssmDouble* pvalue, int enum_type);
+		void        GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
 		void        GetInputValue(bool* pvalue,int enum_type);
 		void        GetInputValue(int* pvalue,int enum_type);
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 19725)
@@ -56,4 +56,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 19725)
@@ -56,4 +56,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss);
 		void GetInputAverage(IssmDouble* pvalue);
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 19725)
@@ -57,4 +57,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss);
 		void GetInputAverage(IssmDouble* pvalue);
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 19725)
@@ -57,4 +57,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss);
 		void GetInputAverage(IssmDouble* pvalue);
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 19725)
@@ -61,4 +61,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss);
 		void GetInputAverage(IssmDouble* pvalue);
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){_error_("not implemented yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 19725)
@@ -192,4 +192,24 @@
 }
 /*}}}*/
+void TriaInput::GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list){/*{{{*/
+
+	int        numnodes  = this->NumberofNodes(this->interpolation_type);
+	IssmDouble numnodesd = reCast<int,IssmDouble>(numnodes);
+	IssmDouble dvalue[3];
+
+	derivativevalues[0] = 0.;
+	derivativevalues[1] = 0.;
+
+	GaussTria* gauss=new GaussTria();
+	for(int iv=0;iv<numnodes;iv++){
+		gauss->GaussNode(this->interpolation_type,iv);
+		this->GetInputDerivativeValue(&dvalue[0],xyz_list,gauss);
+
+		derivativevalues[0] += dvalue[0]/numnodesd;
+		derivativevalues[1] += dvalue[1]/numnodesd;
+	}
+	delete gauss;
+}
+/*}}}*/
 void TriaInput::GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 19725)
@@ -57,4 +57,5 @@
 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list,Gauss* gauss);
 		void GetInputAverage(IssmDouble* pvalue);
+		void GetInputDerivativeAverageValue(IssmDouble* derivativevalues, IssmDouble* xyz_list);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 19724)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 19725)
@@ -164,4 +164,5 @@
 	HydrologyReynoldsEnum,
 	HydrologySpcheadEnum,
+	HydrologyConductivityEnum,
 	IndependentObjectEnum,
 	InversionControlParametersEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 19724)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 19725)
@@ -170,4 +170,5 @@
 		case HydrologyReynoldsEnum : return "HydrologyReynolds";
 		case HydrologySpcheadEnum : return "HydrologySpchead";
+		case HydrologyConductivityEnum : return "HydrologyConductivity";
 		case IndependentObjectEnum : return "IndependentObject";
 		case InversionControlParametersEnum : return "InversionControlParameters";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 19724)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 19725)
@@ -173,4 +173,5 @@
 	      else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
 	      else if (strcmp(name,"HydrologySpchead")==0) return HydrologySpcheadEnum;
+	      else if (strcmp(name,"HydrologyConductivity")==0) return HydrologyConductivityEnum;
 	      else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum;
 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum;
 	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
-	      else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"MaterialsThermalExchangeVelocity")==0) return MaterialsThermalExchangeVelocityEnum;
+	      if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
+	      else if (strcmp(name,"MaterialsThermalExchangeVelocity")==0) return MaterialsThermalExchangeVelocityEnum;
 	      else if (strcmp(name,"MaterialsThermalconductivity")==0) return MaterialsThermalconductivityEnum;
 	      else if (strcmp(name,"MaterialsTemperateiceconductivity")==0) return MaterialsTemperateiceconductivityEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
 	      else if (strcmp(name,"SmbP")==0) return SmbPEnum;
-	      else if (strcmp(name,"SmbSwf")==0) return SmbSwfEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
+	      if (strcmp(name,"SmbSwf")==0) return SmbSwfEnum;
+	      else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
 	      else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum;
 	      else if (strcmp(name,"SmbTmean")==0) return SmbTmeanEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"SurfaceNormalVelocity")==0) return SurfaceNormalVelocityEnum;
 	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
-	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
+	      if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+	      else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
 	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
-	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+	      if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
+	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
 	      else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
-	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
 	      else if (strcmp(name,"J")==0) return JEnum;
 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"MisfitLocal")==0) return MisfitLocalEnum;
 	      else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;
-	      else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum;
+	      if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
+	      else if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum;
 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 19724)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 19725)
@@ -162,4 +162,5 @@
 def HydrologyReynoldsEnum(): return StringToEnum("HydrologyReynolds")[0]
 def HydrologySpcheadEnum(): return StringToEnum("HydrologySpchead")[0]
+def HydrologyConductivityEnum(): return StringToEnum("HydrologyConductivity")[0]
 def IndependentObjectEnum(): return StringToEnum("IndependentObject")[0]
 def InversionControlParametersEnum(): return StringToEnum("InversionControlParameters")[0]
Index: /issm/trunk-jpl/src/m/enum/HydrologyConductivityEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/HydrologyConductivityEnum.m	(revision 19725)
+++ /issm/trunk-jpl/src/m/enum/HydrologyConductivityEnum.m	(revision 19725)
@@ -0,0 +1,11 @@
+function macro=HydrologyConductivityEnum()
+%HYDROLOGYCONDUCTIVITYENUM - Enum of HydrologyConductivity
+%
+%   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=HydrologyConductivityEnum()
+
+macro=StringToEnum('HydrologyConductivity');
