Index: /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 14927)
+++ /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 14928)
@@ -90,4 +90,5 @@
 	HydrologydcEnum,
 	SedimentHeadEnum,
+	SedimentHeadResidualEnum,
 	EplHeadEnum,
 	HydrologydcSpcsedimentHeadEnum,
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14927)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14928)
@@ -2052,4 +2052,5 @@
 				name==GradientEnum ||
 				name==OldGradientEnum ||
+        name==ConvergedEnum ||
 				name==QmuVxEnum ||
 				name==QmuVyEnum ||
@@ -6201,5 +6202,5 @@
 	IssmDouble xyz_list[NUMVERTICES][3];
 	IssmDouble dt,scalar,water_head;
-	IssmDouble water_load;
+	IssmDouble residual_load;
 	IssmDouble epl_storing;
 	IssmDouble basis[numdof];
@@ -6213,5 +6214,5 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input* water_input=inputs->GetInput(BasalforcingsMeltingRateEnum);  _assert_(water_input);
+	Input* residual_input=inputs->GetInput(SedimentHeadResidualEnum);  _assert_(residual_input);
 	Input* old_wh_input=NULL; 
 
@@ -6230,6 +6231,6 @@
 
 		/*Loading term*/
-		water_input->GetInputValue(&water_load,gauss);
-		scalar = Jdet*gauss->weight*water_load;
+		residual_input->GetInputValue(&residual_load,gauss);
+		scalar = Jdet*gauss->weight*residual_load;
 		if(reCast<bool,IssmDouble>(dt)) scalar = scalar*dt;
 		for(int i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
@@ -6315,8 +6316,14 @@
 	const int   numdof         = NDOF1 *NUMVERTICES;
 	int        *doflist        = NULL;
+	bool  converged;
 	IssmDouble  values[numdof];
+	IssmDouble  residual[numdof];
+	IssmDouble  sediment_storing;
+	IssmDouble  penalty_factor;
+	IssmDouble  kmax, kappa, h_max;
 
 	/*Get dof list: */
 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+
 
 	/*Use the dof list to index into the solution vector: */
@@ -6326,6 +6333,24 @@
 	}
 
+	/*If converged keep the residual in mind*/
+	this->inputs->GetInputValue(&converged,ConvergedEnum);
+	if(converged){
+		this->parameters->FindParam(&kmax,HydrologySedimentKmaxEnum);
+		this->parameters->FindParam(&penalty_factor,HydrologydcPenaltyFactorEnum);
+		sediment_storing=matpar->GetSedimentStoring();
+		kappa=kmax*pow(10.,penalty_factor);
+		
+		for(int i=0;i<NUMVERTICES;i++){
+			this->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
+			if(values[i]>h_max)
+				residual[i]=kappa*(values[i]-h_max)*sediment_storing;
+			else
+				residual[i]=0.0;
+		}
+	}
+
 	/*Add input to the element: */
 	this->inputs->AddInput(new TriaP1Input(SedimentHeadEnum,values));
+	this->inputs->AddInput(new TriaP1Input(SedimentHeadResidualEnum,residual));
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 14927)
+++ /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 14928)
@@ -94,4 +94,5 @@
 		case HydrologydcEnum : return "Hydrologydc";
 		case SedimentHeadEnum : return "SedimentHead";
+		case SedimentHeadResidualEnum : return "SedimentHeadResidual";
 		case EplHeadEnum : return "EplHead";
 		case HydrologydcSpcsedimentHeadEnum : return "HydrologydcSpcsedimentHead";
Index: /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 14927)
+++ /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 14928)
@@ -95,4 +95,5 @@
 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
 	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
 	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
 	      else if (strcmp(name,"HydrologydcSpcsedimentHead")==0) return HydrologydcSpcsedimentHeadEnum;
@@ -136,9 +137,9 @@
 	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
 	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
-	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
          else stage=2;
    }
    if(stage==2){
-	      if (strcmp(name,"MaskElementonfloatingice")==0) return MaskElementonfloatingiceEnum;
+	      if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+	      else if (strcmp(name,"MaskElementonfloatingice")==0) return MaskElementonfloatingiceEnum;
 	      else if (strcmp(name,"MaskElementongroundedice")==0) return MaskElementongroundediceEnum;
 	      else if (strcmp(name,"MaskElementonwater")==0) return MaskElementonwaterEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"TransientIsprognostic")==0) return TransientIsprognosticEnum;
 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
-	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+	      if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
 	      else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
 	      else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
 	      else if (strcmp(name,"Air")==0) return AirEnum;
-	      else if (strcmp(name,"Ice")==0) return IceEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"Melange")==0) return MelangeEnum;
+	      if (strcmp(name,"Ice")==0) return IceEnum;
+	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
 	      else if (strcmp(name,"Water")==0) return WaterEnum;
 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
-	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+	      if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
+	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
Index: /issm/trunk-jpl/src/c/solutions/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/hydrology_core.cpp	(revision 14927)
+++ /issm/trunk-jpl/src/c/solutions/hydrology_core.cpp	(revision 14928)
@@ -84,4 +84,5 @@
 				if(VerboseSolution()) _pprintLine_("   saving results ");
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadEnum);
+				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadResidualEnum);
 
 				/*unload results*/
Index: /issm/trunk-jpl/src/c/solvers/solver_hydro_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solvers/solver_hydro_nonlinear.cpp	(revision 14927)
+++ /issm/trunk-jpl/src/c/solvers/solver_hydro_nonlinear.cpp	(revision 14928)
@@ -67,7 +67,9 @@
 
 			if(converged){
+				femmodel->parameters->SetParam(sediment_kmax,HydrologySedimentKmaxEnum);
+
 				InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,converged,ConvergedEnum);
-				InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,HydrologySedimentKmaxEnum);
 				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
+				/*InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,HydrologySedimentKmaxEnum);*/
 				break;
 			}
