Index: /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22184)
+++ /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 22185)
@@ -313,5 +313,6 @@
 		PMPheat=-CT*CW*conductivity*(dh[0]*dpressure_water[0]+dh[1]*dpressure_water[1]);
 
-		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
+		meltrate = 1/latentheat*(rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat); //Taking out geothermal and frictional heat for SHMIP
+   //	meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
 		_assert_(meltrate>0.);
 	
@@ -380,7 +381,7 @@
 
 		/*Make sure that negative pressure is not allowed*/
-      if(values[i]<bed[i]){
-			values[i] = bed[i];
-		}
+  //    if(values[i]<bed[i]){
+	//		values[i] = bed[i];
+	//	}
 
 		/*Under-relaxation*/
@@ -466,4 +467,5 @@
    IssmDouble  dpressure_water[2],dbed[2],PMPheat;
 	IssmDouble q = 0.;
+   IssmDouble channelization = 0.;
 
 	/*Retrieve all inputs and parameters*/
@@ -542,6 +544,7 @@
 		dpressure_water[1] = rho_water*g*(dh[1] - dbed[1]);
 		PMPheat=-CT*CW*conductivity*(dh[0]*dpressure_water[0]+dh[1]*dpressure_water[1]);
-	
-		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
+
+		meltrate = 1/latentheat*(rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat); // Taking out geothermal and frictional heat for SHMIP
+//		meltrate = 1/latentheat*(G+frictionheat+rho_water*g*conductivity*(dh[0]*dh[0]+dh[1]*dh[1])-PMPheat);
 		_assert_(meltrate>0.);
 
@@ -555,4 +558,7 @@
 		/* Compute basal water flux */
       q += gauss->weight*Jdet*(conductivity*sqrt(dh[0]*dh[0]+dh[1]*dh[1]));
+
+		/* Compute "degree of channelization" (ratio of melt opening to opening by sliding) */
+		channelization += gauss->weight*Jdet*(meltrate/rho_ice/(beta*sqrt(vx*vx+vy*vy)));
 	}
 
@@ -565,5 +571,5 @@
 	if(newgap>thickness)
 	 newgap = thickness;
-	 
+
 	/*Add new gap as an input*/
 	element->AddInput(HydrologyGapHeightEnum,&newgap,P0Enum);
@@ -573,4 +579,8 @@
 	element->AddInput(HydrologyBasalFluxEnum,&q,P0Enum);
 
+	/* Divide by connectivity, add degree of channelization as an input */
+	channelization = channelization/totalweights;
+	element->AddInput(DegreeOfChannelizationEnum,&channelization,P0Enum);
+
 	/*Clean up and return*/
 	xDelete<IssmDouble>(xyz_list);
Index: /issm/trunk-jpl/src/c/cores/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22184)
+++ /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22185)
@@ -89,6 +89,6 @@
 		if(save_results){
 			if(VerboseSolution()) _printf0_("   saving results \n");
-			int outputs[4] = {HydrologyHeadEnum,HydrologyGapHeightEnum,EffectivePressureEnum,HydrologyBasalFluxEnum};
-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
+			int outputs[5] = {HydrologyHeadEnum,HydrologyGapHeightEnum,EffectivePressureEnum,HydrologyBasalFluxEnum,DegreeOfChannelizationEnum};
+			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],5);
 			
 			/*unload results*/
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22184)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22185)
@@ -185,4 +185,5 @@
 	HydrologyBasalFluxEnum,
 	HydrologyStorageEnum,
+	DegreeOfChannelizationEnum,
 	InversionControlParametersEnum,
 	InversionControlScalingFactorsEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22184)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22185)
@@ -191,4 +191,5 @@
 		case HydrologyBasalFluxEnum : return "HydrologyBasalFlux";
 		case HydrologyStorageEnum : return "HydrologyStorage";
+		case DegreeOfChannelizationEnum : return "DegreeOfChannelization";
 		case InversionControlParametersEnum : return "InversionControlParameters";
 		case InversionControlScalingFactorsEnum : return "InversionControlScalingFactors";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22184)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22185)
@@ -194,4 +194,5 @@
 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
 	      else if (strcmp(name,"HydrologyStorage")==0) return HydrologyStorageEnum;
+	      else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum;
 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
 	      else if (strcmp(name,"InversionControlScalingFactors")==0) return InversionControlScalingFactorsEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
 	      else if (strcmp(name,"Damage")==0) return DamageEnum;
-	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+	      if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
+	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
 	      else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
 	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
@@ -270,8 +271,5 @@
 	      else if (strcmp(name,"CalvingDev")==0) return CalvingDevEnum;
 	      else if (strcmp(name,"CalvingMinthickness")==0) return CalvingMinthicknessEnum;
-         else stage=3;
-   }
-   if(stage==3){
-	      if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
+	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
 	      else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum;
 	      else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
@@ -385,5 +383,8 @@
 	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
 	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
-	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
+         else stage=4;
+   }
+   if(stage==4){
+	      if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
 	      else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum;
 	      else if (strcmp(name,"TransientIsslr")==0) return TransientIsslrEnum;
@@ -393,8 +394,5 @@
 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
 	      else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
-         else stage=4;
-   }
-   if(stage==4){
-	      if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
+	      else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
 	      else if (strcmp(name,"Smb")==0) return SmbEnum;
 	      else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
@@ -508,5 +506,8 @@
 	      else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
 	      else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
-	      else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+         else stage=5;
+   }
+   if(stage==5){
+	      if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
 	      else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
@@ -516,8 +517,5 @@
 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
-         else stage=5;
-   }
-   if(stage==5){
-	      if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
 	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
 	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
@@ -631,5 +629,8 @@
 	      else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;
 	      else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;
-	      else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
+         else stage=6;
+   }
+   if(stage==6){
+	      if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum;
 	      else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum;
 	      else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum;
@@ -639,8 +640,5 @@
 	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
 	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
-         else stage=6;
-   }
-   if(stage==6){
-	      if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
+	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
 	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
 	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
@@ -754,5 +752,8 @@
 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
 	      else if (strcmp(name,"Index")==0) return IndexEnum;
-	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
+         else stage=7;
+   }
+   if(stage==7){
+	      if (strcmp(name,"Indexed")==0) return IndexedEnum;
 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
@@ -762,13 +763,7 @@
 	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
 	      else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"RootPath")==0) return RootPathEnum;
+	      else if (strcmp(name,"RootPath")==0) return RootPathEnum;
 	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
+	      else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
 	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
 	      else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum;
@@ -880,5 +875,8 @@
 	      else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;
 	      else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;
-	      else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum;
 	      else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum;
 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
@@ -888,8 +886,5 @@
 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
 	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
+	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
@@ -932,8 +927,5 @@
 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
@@ -1006,5 +998,8 @@
 	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
 	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
-	      else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
 	      else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
@@ -1014,8 +1009,5 @@
 	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
 	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
+	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
@@ -1057,8 +1049,5 @@
 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
 	      else if (strcmp(name,"P2")==0) return P2Enum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
 	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
