Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 23842)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 23843)
@@ -2148,5 +2148,5 @@
 
 	int numvertices      = this->GetNumberOfVertices();
-	IssmDouble  deepwaterel,upperwaterel,deepwatermelt;
+	IssmDouble  deepwaterel,upperwaterel,deepwatermelt,upperwatermelt;
 	IssmDouble* base     = xNew<IssmDouble>(numvertices);
 	IssmDouble* values   = xNew<IssmDouble>(numvertices);
@@ -2155,12 +2155,20 @@
 	parameters->FindParam(&time,TimeEnum);
 	parameters->FindParam(&deepwaterel,BasalforcingsDeepwaterElevationEnum,time);
+	parameters->FindParam(&deepwatermelt,BasalforcingsDeepwaterMeltingRateEnum,time);
 	parameters->FindParam(&upperwaterel,BasalforcingsUpperwaterElevationEnum,time);
-	parameters->FindParam(&deepwatermelt,BasalforcingsDeepwaterMeltingRateEnum,time);
+	parameters->FindParam(&upperwatermelt,BasalforcingsUpperwaterMeltingRateEnum,time);
+	_assert_(upperwaterel>deepwaterel); 
 
 	this->GetInputListOnVertices(base,BaseEnum);
 	for(int i=0;i<numvertices;i++){
-		if(base[i]>upperwaterel)      values[i]=0;
-		else if (base[i]<deepwaterel) values[i]=deepwatermelt;
-		else values[i]=deepwatermelt*(base[i]-upperwaterel)/(deepwaterel-upperwaterel);
+		if(base[i]>=upperwaterel){
+			values[i]=upperwaterel;
+		}
+		else if (base[i]<deepwaterel){
+			values[i]=deepwatermelt;
+		}
+		else{
+			values[i]=deepwatermelt*(base[i]-upperwaterel)/(deepwaterel-upperwaterel);
+		}
 	}
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 23842)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 23843)
@@ -164,4 +164,14 @@
 				_assert_(N==2);
 				parameters->AddObject(new TransientParam(BasalforcingsDeepwaterMeltingRateEnum,&transparam[0],&transparam[M],interp,M));
+			}
+			xDelete<IssmDouble>(transparam);
+			iomodel->FetchData(&transparam,&N,&M,"md.basalforcings.upperwater_melting_rate"); 
+			if(N==1){
+				_assert_(M==1);
+				parameters->AddObject(new DoubleParam(BasalforcingsUpperwaterMeltingRateEnum,transparam[0]));
+			}
+			else{
+				_assert_(N==2);
+				parameters->AddObject(new TransientParam(BasalforcingsUpperwaterMeltingRateEnum,&transparam[0],&transparam[M],interp,M));
 			}
 			xDelete<IssmDouble>(transparam);
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23842)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23843)
@@ -61,4 +61,5 @@
 	BasalforcingsDeepwaterElevationEnum,
 	BasalforcingsDeepwaterMeltingRateEnum,
+	BasalforcingsUpperwaterMeltingRateEnum,
 	BasalforcingsDtbgEnum,
 	BasalforcingsEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23842)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23843)
@@ -69,4 +69,5 @@
 		case BasalforcingsDeepwaterElevationEnum : return "BasalforcingsDeepwaterElevation";
 		case BasalforcingsDeepwaterMeltingRateEnum : return "BasalforcingsDeepwaterMeltingRate";
+		case BasalforcingsUpperwaterMeltingRateEnum : return "BasalforcingsUpperwaterMeltingRate";
 		case BasalforcingsDtbgEnum : return "BasalforcingsDtbg";
 		case BasalforcingsEnum : return "Basalforcings";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23842)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23843)
@@ -69,4 +69,5 @@
 	      else if (strcmp(name,"BasalforcingsDeepwaterElevation")==0) return BasalforcingsDeepwaterElevationEnum;
 	      else if (strcmp(name,"BasalforcingsDeepwaterMeltingRate")==0) return BasalforcingsDeepwaterMeltingRateEnum;
+	      else if (strcmp(name,"BasalforcingsUpperwaterMeltingRate")==0) return BasalforcingsUpperwaterMeltingRateEnum;
 	      else if (strcmp(name,"BasalforcingsDtbg")==0) return BasalforcingsDtbgEnum;
 	      else if (strcmp(name,"Basalforcings")==0) return BasalforcingsEnum;
@@ -136,9 +137,9 @@
 	      else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
 	      else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
-	      else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
          else stage=2;
    }
    if(stage==2){
-	      if (strcmp(name,"FlowequationIsL1L2")==0) return FlowequationIsL1L2Enum;
+	      if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
+	      else if (strcmp(name,"FlowequationIsL1L2")==0) return FlowequationIsL1L2Enum;
 	      else if (strcmp(name,"FlowequationIsSIA")==0) return FlowequationIsSIAEnum;
 	      else if (strcmp(name,"FlowequationIsSSA")==0) return FlowequationIsSSAEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"MaterialsEffectiveconductivityAveraging")==0) return MaterialsEffectiveconductivityAveragingEnum;
 	      else if (strcmp(name,"MaterialsThermalconductivity")==0) return MaterialsThermalconductivityEnum;
-	      else if (strcmp(name,"MaterialsThermalExchangeVelocity")==0) return MaterialsThermalExchangeVelocityEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+	      if (strcmp(name,"MaterialsThermalExchangeVelocity")==0) return MaterialsThermalExchangeVelocityEnum;
+	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
 	      else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
 	      else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum;
-	      else if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum;
+	      if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum;
+	      else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum;
 	      else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum;
 	      else if (strcmp(name,"Step")==0) return StepEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
 	      else if (strcmp(name,"EplHeadHydrostep")==0) return EplHeadHydrostepEnum;
-	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
+	      if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
+	      else if (strcmp(name,"EplHeadSlopeX")==0) return EplHeadSlopeXEnum;
 	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
 	      else if (strcmp(name,"EsaDeltathickness")==0) return EsaDeltathicknessEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
 	      else if (strcmp(name,"SmbBNeg")==0) return SmbBNegEnum;
-	      else if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"SmbC")==0) return SmbCEnum;
+	      if (strcmp(name,"SmbBPos")==0) return SmbBPosEnum;
+	      else if (strcmp(name,"SmbC")==0) return SmbCEnum;
 	      else if (strcmp(name,"SmbDailysnowfall")==0) return SmbDailysnowfallEnum;
 	      else if (strcmp(name,"SmbDailyrainfall")==0) return SmbDailyrainfallEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
 	      else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;
-	      else if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+	      if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
+	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
 	      else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
 	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
-	      else if (strcmp(name,"FullMeltOnPartiallyFloating")==0) return FullMeltOnPartiallyFloatingEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
+	      if (strcmp(name,"FullMeltOnPartiallyFloating")==0) return FullMeltOnPartiallyFloatingEnum;
+	      else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
 	      else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
 	      else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
 	      else if (strcmp(name,"NoFrictionOnPartiallyFloating")==0) return NoFrictionOnPartiallyFloatingEnum;
-	      else if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+	      if (strcmp(name,"NoMeltOnPartiallyFloating")==0) return NoMeltOnPartiallyFloatingEnum;
+	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
 	      else if (strcmp(name,"None")==0) return NoneEnum;
 	      else if (strcmp(name,"Numberedcostfunction")==0) return NumberedcostfunctionEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
 	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
-	      else if (strcmp(name,"P2")==0) return P2Enum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+	      if (strcmp(name,"P2")==0) return P2Enum;
+	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
 	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
 	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
-	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+	      if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
Index: /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 23842)
+++ /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 23843)
@@ -13,5 +13,5 @@
 
 #Deal with Analyses
-if true ; then
+if false ; then
 #Build EnumToAnalysis.cpp {{{
 #Header
