Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 24665)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 24666)
@@ -287,12 +287,19 @@
 	int frictionlaw;
 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
-	if(frictionlaw==4 || frictionlaw==6){
+	if(frictionlaw==6){
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
 	}
-	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==7){
+	if(frictionlaw==4){
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
+	}
+	if(frictionlaw==1 || frictionlaw==3 || frictionlaw==7){
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
 	}
 	if(frictionlaw==9){
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));		
 		parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
 	}
Index: /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp	(revision 24665)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp	(revision 24666)
@@ -185,20 +185,27 @@
 	int frictionlaw;
 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
-	if(frictionlaw==4 || frictionlaw==6){
+	if(frictionlaw==6){
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
 	}
-	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==7){
+	if(frictionlaw==4){
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
+	}
+	if(frictionlaw==1 || frictionlaw==3 || frictionlaw==7){
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
 	}
 	if(frictionlaw==9){
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
 		parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
 	}
 
-  /*Requested outputs*/
-  iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
-  parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
-  if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
-  iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
+	/*Requested outputs*/
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
+	parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
+	if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 24665)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 24666)
@@ -966,4 +966,5 @@
 		case 1:
 			parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
 			break;
 		case 2:
@@ -971,8 +972,10 @@
 		case 3:
 			parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));			
 			break;
 		case 4:
 			parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));			
 			break;
 		case 5:
@@ -984,4 +987,5 @@
 		case 7:
 			parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
 			break;
 		case 8:
@@ -989,4 +993,5 @@
 		case 9:
 			parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));			
 			break;
 		case 10:
@@ -998,7 +1003,9 @@
 		case 11:
 			parameters->AddObject(new IntParam(FrictionCouplingEnum,2));
+			parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));			
 			break;
 		case 12:
 			parameters->AddObject(new IntParam(FrictionCouplingEnum,2));
+			parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));			
 			break;
 		default: _error_("Friction law "<<frictionlaw<<" not implemented yet");
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 24665)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 24666)
@@ -275,12 +275,19 @@
 	int frictionlaw;
 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
-	if(frictionlaw==4 || frictionlaw==6){
+	if(frictionlaw==6){
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
 	}
-	if(frictionlaw==3 || frictionlaw==1 || frictionlaw==7){
+	if(frictionlaw==4){
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
+	}
+	if(frictionlaw==1 || frictionlaw==3 || frictionlaw==7){
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
 	}
 	if(frictionlaw==9){
 		parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.friction.effective_pressure_limit",FrictionEffectivePressureLimitEnum));
 		parameters->AddObject(new IntParam(FrictionCouplingEnum,0));
 	}
Index: /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 24665)
+++ /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 24666)
@@ -684,8 +684,9 @@
 	IssmDouble  thickness,base,sealevel;
 	IssmDouble  p_ice,p_water;
-	IssmDouble  Neff;
+	IssmDouble  Neff,Neff_limit;
 
 	/*Recover parameters: */
 	element->parameters->FindParam(&coupled_flag,FrictionCouplingEnum);
+	element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum);
 
 	/*From base and thickness, compute effective pressure when drag is viscous, or get Neff from forcing:*/
@@ -726,7 +727,9 @@
 		case 3:
 			element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum);
+			p_ice = 0.; // FIXME
 			break;
 		case 4:
 			element->GetInputValue(&Neff,gauss,EffectivePressureEnum);
+			p_ice = 0.; // FIXME
 			break;
 		default:
@@ -735,5 +738,5 @@
 
 	/*Make sure Neff is positive*/
-	if(Neff<0.) Neff=0.;
+	if(Neff<Neff_limit*p_ice) Neff=Neff_limit*p_ice;
 
 	/*Return effective pressure*/
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24665)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24666)
@@ -143,4 +143,5 @@
 	FrictionCouplingEnum,
 	FrictionDeltaEnum,
+	FrictionEffectivePressureLimitEnum,
 	FrictionFEnum,
 	FrictionGammaEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24665)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24666)
@@ -151,4 +151,5 @@
 		case FrictionCouplingEnum : return "FrictionCoupling";
 		case FrictionDeltaEnum : return "FrictionDelta";
+		case FrictionEffectivePressureLimitEnum : return "FrictionEffectivePressureLimit";
 		case FrictionFEnum : return "FrictionF";
 		case FrictionGammaEnum : return "FrictionGamma";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24665)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24666)
@@ -154,4 +154,5 @@
 	      else if (strcmp(name,"FrictionCoupling")==0) return FrictionCouplingEnum;
 	      else if (strcmp(name,"FrictionDelta")==0) return FrictionDeltaEnum;
+	      else if (strcmp(name,"FrictionEffectivePressureLimit")==0) return FrictionEffectivePressureLimitEnum;
 	      else if (strcmp(name,"FrictionF")==0) return FrictionFEnum;
 	      else if (strcmp(name,"FrictionGamma")==0) return FrictionGammaEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
-	      else if (strcmp(name,"MaterialsLithosphereDensity")==0) return MaterialsLithosphereDensityEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"MaterialsLithosphereShearModulus")==0) return MaterialsLithosphereShearModulusEnum;
+	      if (strcmp(name,"MaterialsLithosphereDensity")==0) return MaterialsLithosphereDensityEnum;
+	      else if (strcmp(name,"MaterialsLithosphereShearModulus")==0) return MaterialsLithosphereShearModulusEnum;
 	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
 	      else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"SmbRlapslgm")==0) return SmbRlapslgmEnum;
 	      else if (strcmp(name,"SmbRunoffalti")==0) return SmbRunoffaltiEnum;
-	      else if (strcmp(name,"SmbRunoffgrad")==0) return SmbRunoffgradEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SmbRunoffref")==0) return SmbRunoffrefEnum;
+	      if (strcmp(name,"SmbRunoffgrad")==0) return SmbRunoffgradEnum;
+	      else if (strcmp(name,"SmbRunoffref")==0) return SmbRunoffrefEnum;
 	      else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum;
 	      else if (strcmp(name,"SmbStepsPerStep")==0) return SmbStepsPerStepEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
 	      else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum;
-	      else if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
+	      if (strcmp(name,"CalvingratexAverage")==0) return CalvingratexAverageEnum;
+	      else if (strcmp(name,"Calvingratex")==0) return CalvingratexEnum;
 	      else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum;
 	      else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum;
 	      else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
-	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+	      if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
+	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
 	      else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
 	      else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"SmbMeanLHF")==0) return SmbMeanLHFEnum;
 	      else if (strcmp(name,"SmbMeanSHF")==0) return SmbMeanSHFEnum;
-	      else if (strcmp(name,"SmbMeanULW")==0) return SmbMeanULWEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
+	      if (strcmp(name,"SmbMeanULW")==0) return SmbMeanULWEnum;
+	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
 	      else if (strcmp(name,"SmbNetLW")==0) return SmbNetLWEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum;
 	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
-	      else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
+	      if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
+	      else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
 	      else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
 	      else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
 	      else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
-	      else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
+	      if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum;
+	      else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum;
 	      else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum;
 	      else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
 	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
-	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"IntInput")==0) return IntInputEnum;
+	      if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
 	      else if (strcmp(name,"ElementInput2")==0) return ElementInput2Enum;
 	      else if (strcmp(name,"SegInput2")==0) return SegInput2Enum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"RecoveryAnalysis")==0) return RecoveryAnalysisEnum;
 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
-	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
+	      if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
 	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
 	      else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;
Index: /issm/trunk-jpl/src/m/classes/friction.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.m	(revision 24665)
+++ /issm/trunk-jpl/src/m/classes/friction.m	(revision 24666)
@@ -11,4 +11,5 @@
 		coupling    = 0;
 		effective_pressure = NaN;
+		effective_pressure_limit = 0;
 	end
 	methods
@@ -42,4 +43,5 @@
 
 			self.coupling = 0;
+			self.effective_pressure_limit = 0;
 
 		end % }}}
@@ -54,4 +56,5 @@
 			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
 			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0:4]);
+			md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);
 			switch self.coupling
 				case 0
@@ -73,4 +76,5 @@
 			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
 			fielddisplay(self,'coupling','Coupling flag 0: uniform sheet (negative pressure ok, default), 1: ice pressure only, 2: water pressure assuming uniform sheet (no negative pressure), 3: use provided effective_pressure, 4: use coupled model (not implemented yet)');
+			fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -82,4 +86,5 @@
 			WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
 			switch self.coupling
 				case 0
@@ -101,5 +106,5 @@
 			writejs1Darray(fid,[modelname '.friction.coupling'],self.coupling);
 			writejs1Darray(fid,[modelname '.friction.effective_pressure'],self.effective_pressure);
-
+			writejs1Darray(fid,[modelname '.friction.effective_pressure_limit'],self.effective_pressure_limit);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/frictioncoulomb.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictioncoulomb.m	(revision 24665)
+++ /issm/trunk-jpl/src/m/classes/frictioncoulomb.m	(revision 24666)
@@ -12,4 +12,5 @@
 		coupling	= 0;
 		effective_pressure = NaN;
+		effective_pressure_limit = 0;
 	end
 	methods
@@ -39,4 +40,6 @@
 		function self = setdefaultparameters(self) % {{{
 
+			self.effective_pressure_limit = 0;
+
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
@@ -49,4 +52,5 @@
 			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
 			md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0 1 2]);
+			md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);			
 			switch self.coupling
 				case 0
@@ -67,5 +71,6 @@
 			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
 			fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure)  and 2 for coupled(not implemented yet)');
-		end % }}}
+			fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');	
+			end % }}}
 		function marshall(self,prefix,md,fid) % {{{
 
@@ -76,4 +81,5 @@
 			WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
 			switch self.coupling
 				case 0
Index: /issm/trunk-jpl/src/m/classes/frictionhydro.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionhydro.m	(revision 24665)
+++ /issm/trunk-jpl/src/m/classes/frictionhydro.m	(revision 24666)
@@ -10,5 +10,6 @@
 		C                  = NaN;
 		As                 = NaN;
-		effective_pressure = NaN; 
+		effective_pressure = NaN;
+		effective_pressure_limit = 0;
 	end
 	methods
@@ -23,4 +24,6 @@
 		function self = setdefaultparameters(self) % {{{
 
+			self.effective_pressure_limit = 0;
+
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
@@ -32,4 +35,5 @@
 			md = checkfield(md,'fieldname','friction.C','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
 			md = checkfield(md,'fieldname','friction.As','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
+			md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);
 			switch self.coupling
 				case 0
@@ -64,4 +68,5 @@
 			fielddisplay(self,'As','Sliding Parameter without cavitation [m Pa^-n s^-1]');
 			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
+			fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -70,5 +75,6 @@
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',2);
-			WriteData(fid,prefix,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
 			switch self.coupling
 				case 0
Index: /issm/trunk-jpl/src/m/classes/frictionjosh.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionjosh.m	(revision 24665)
+++ /issm/trunk-jpl/src/m/classes/frictionjosh.m	(revision 24666)
@@ -9,4 +9,5 @@
 		pressure_adjusted_temperature = NaN;
 		gamma      = 0.;
+		effective_pressure_limit = 0;
 	end
 	methods
@@ -30,4 +31,7 @@
 			self.gamma = 1.;
 
+			%Default 0
+			self.effective_pressure_limit = 0;
+
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
@@ -39,4 +43,5 @@
 			md = checkfield(md,'fieldname','friction.pressure_adjusted_temperature','NaN',1,'Inf',1);
 			md = checkfield(md,'fieldname','friction.gamma','numel',1,'NaN',1,'Inf',1,'>',0.);
+			md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);
 
 			%Check that temperature is provided
@@ -48,4 +53,5 @@
 			fielddisplay(self,'pressure_adjusted_temperature','friction pressure_adjusted_temperature (T - Tpmp) [K]');
 			fielddisplay(self,'gamma','(T - Tpmp)/gamma [K]');
+			fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -55,4 +61,5 @@
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','pressure_adjusted_temperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','gamma','format','Double');
+			WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/frictionschoof.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionschoof.m	(revision 24665)
+++ /issm/trunk-jpl/src/m/classes/frictionschoof.m	(revision 24666)
@@ -9,4 +9,5 @@
 		Cmax = NaN;
 		m    = NaN;
+		effective_pressure_limit = 0;
 	end
 	methods
@@ -28,4 +29,6 @@
 		function self = setdefaultparameters(self) % {{{
 
+			self.effective_pressure_limit = 0;
+
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
@@ -36,4 +39,5 @@
 			md = checkfield(md,'fieldname','friction.Cmax','timeseries',1,'NaN',1,'Inf',1,'>',0.);
 			md = checkfield(md,'fieldname','friction.m','NaN',1,'Inf',1,'>',0.,'size',[md.mesh.numberofelements,1]);
+			md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);
 		end % }}}
 		function disp(self) % {{{
@@ -48,4 +52,5 @@
 			fielddisplay(self,'Cmax','Iken''s bound (typically between 0.17 and 0.84) [SI]');
 			fielddisplay(self,'m','m exponent (generally taken as m = 1/n = 1/3)');
+			fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -56,4 +61,5 @@
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','Cmax','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/frictiontemp.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictiontemp.m	(revision 24665)
+++ /issm/trunk-jpl/src/m/classes/frictiontemp.m	(revision 24666)
@@ -11,5 +11,6 @@
 		q           = NaN;
 		coupling    = 0;
-      effective_pressure = NaN;
+		effective_pressure = NaN;
+		effective_pressure_limit = 0;
 	end
 	methods
@@ -45,4 +46,5 @@
 			self.gamma = 1;
 			self.coupling = 0;
+			self.effective_pressure_limit = 0;
 
 		end % }}}
@@ -55,5 +57,6 @@
 			md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
 			md = checkfield(md,'fieldname','friction.p','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
-			md = checkfield(md,'fieldname','friction.gamma','NaN',1,'Inf',1,'numel',1,'>',0.);
+			md = checkfield(md,'fieldname','friction.gamma','NaN',2,'Inf',1,'numel',1,'>',0.);
+			md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);
 
 			%Check that temperature is provided
@@ -68,4 +71,5 @@
 			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
 			fielddisplay(self,'coupling','Coupling flag 0: uniform sheet (negative pressure ok, default), 1: ice pressure only, 2: water pressure assuming uniform sheet (no negative pressure), 3: use provided effective_pressure, 4: used coupled model (not implemented yet)');
+			fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -77,4 +81,5 @@
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
 			switch self.coupling
 				case 0
Index: /issm/trunk-jpl/src/m/classes/frictiontsai.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictiontsai.m	(revision 24665)
+++ /issm/trunk-jpl/src/m/classes/frictiontsai.m	(revision 24666)
@@ -9,4 +9,5 @@
 		f = NaN;
 		m = NaN;
+		effective_pressure_limit = 0;
 	end
 	methods
@@ -27,4 +28,6 @@
 		function self = setdefaultparameters(self) % {{{
 
+			self.effective_pressure_limit = 0;
+
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
@@ -35,4 +38,5 @@
 			md = checkfield(md,'fieldname','friction.f','timeseries',1,'NaN',1,'Inf',1,'>',0.);
 			md = checkfield(md,'fieldname','friction.m','NaN',1,'Inf',1,'>',0.,'size',[md.mesh.numberofelements,1]);
+			md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);
 		end % }}}
 		function disp(self) % {{{
@@ -47,4 +51,5 @@
 			fielddisplay(self,'f','Iken''s bound (typically between 0.17 and 0.84) [SI]');
 			fielddisplay(self,'m','m exponent (generally taken as m = 1/n = 1/3)');
+			fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -55,4 +60,5 @@
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','f','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
 			WriteData(fid,prefix,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
 		end % }}}
 	end
