Index: /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 22973)
+++ /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 22974)
@@ -57,8 +57,9 @@
 	/* Check if ice in element */
 	if(!element->IsIceInElement()) return NULL;
+	//if(!element->IsFloating()) return NULL;
 
 	/*Intermediaries */
 	int        domaintype,dim;
-	IssmDouble Jdet,D_scalar,dt,h;
+	IssmDouble Jdet,D_scalar;
 	IssmDouble vel,vx,vy,dvxdx,dvydy;
 	IssmDouble dvx[2],dvy[2];
@@ -81,15 +82,12 @@
 	IssmDouble*    B      = xNew<IssmDouble>(dim*numnodes);
 	IssmDouble*    Bprime = xNew<IssmDouble>(dim*numnodes);
-	IssmDouble*    D      = xNewZeroInit<IssmDouble>(dim*dim);
+	IssmDouble    D[2][2] = {0.};
 
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	element->FindParam(&dt,TimesteppingTimeStepEnum);
-	element->FindParam(&domaintype,DomainTypeEnum);
-	_error_("Change speed");
-	Input* vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);
-	Input* vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
-
-	h = element->CharacteristicLength();
+	Input* vx_input=element->GetInput(BaseSlopeXEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(BaseSlopeYEnum); _assert_(vy_input);
+
+	IssmDouble h = element->CharacteristicLength();
 
 	/* Start  looping on the number of gaussian points: */
@@ -99,53 +97,54 @@
 
 		element->JacobianDeterminant(&Jdet,xyz_list,gauss);
-		element->NodalFunctions(basis,gauss);
-
-		vxaverage_input->GetInputValue(&vx,gauss);
-		vxaverage_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
-		vyaverage_input->GetInputValue(&vy,gauss);
-		vyaverage_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
-
-		D_scalar=gauss->weight*Jdet;
-		TripleMultiply(basis,1,numnodes,1,
-					&D_scalar,1,1,0,
-					basis,1,numnodes,0,
-					&Ke->values[0],1);
-
 		GetB(B,element,dim,xyz_list,gauss);
 		GetBprime(Bprime,element,dim,xyz_list,gauss);
 
+		vx_input->GetInputValue(&vx,gauss);
+		vy_input->GetInputValue(&vy,gauss);
+		vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
+		vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
 		dvxdx=dvx[0];
 		dvydy=dvy[1];
-		D_scalar=dt*gauss->weight*Jdet;
-
-		D[0*dim+0]=D_scalar*dvxdx;
-		D[1*dim+1]=D_scalar*dvydy;
-
-		TripleMultiply(B,dim,numnodes,1,
-					D,dim,dim,0,
-					B,dim,numnodes,0,
-					&Ke->values[0],1);
-
-		D[0*dim+0]=D_scalar*vx;
-		D[1*dim+1]=D_scalar*vy;
-
-		TripleMultiply(B,dim,numnodes,1,
-					D,dim,dim,0,
-					Bprime,dim,numnodes,0,
-					&Ke->values[0],1);
-
-		/*SSA Stabilization*/
-		vxaverage_input->GetInputAverage(&vx);
-		vyaverage_input->GetInputAverage(&vy);
-		D[0*dim+0]=h/2.0*fabs(vx);
-		D[1*dim+1]=h/2.0*fabs(vy);
-		D[0*dim+0]=D_scalar*D[0*dim+0];
-		D[1*dim+0]=D_scalar*D[1*dim+0];
-		D[0*dim+1]=D_scalar*D[0*dim+1];
-		D[1*dim+1]=D_scalar*D[1*dim+1];
-
-		TripleMultiply(Bprime,dim,numnodes,1,
-					D,dim,dim,0,
-					Bprime,dim,numnodes,0,
+		D_scalar=gauss->weight*Jdet;
+
+		/*Advection*/
+		//D[0][0]=D_scalar*dvxdx;
+		//D[0][1]=0.;
+		//D[1][0]=0.;
+		//D[1][1]=D_scalar*dvydy;
+		//TripleMultiply(B,2,numnodes,1,
+		//			&D[0][0],2,2,0,
+		//			B,2,numnodes,0,
+		//			&Ke->values[0],1);
+
+		//vx = 0.;
+		//vy = -.1;
+		if(sqrt(vx*vx+vy*vy)>0.28){
+			/*Advection*/
+			D[0][0]=D_scalar*vx;
+			D[1][1]=D_scalar*vy;
+			TripleMultiply(B,2,numnodes,1,
+						&D[0][0],2,2,0,
+						Bprime,2,numnodes,0,
+						&Ke->values[0],1);
+		}
+		else{
+			/*Diffusion*/
+			D[0][0]=1e5*h/2.0;
+			D[1][1]=1e5*h/2.0;
+			TripleMultiply(Bprime,2,numnodes,1,
+						&D[0][0],2,2,0,
+						Bprime,2,numnodes,0,
+						&Ke->values[0],1);
+		}
+
+		/*Stabilization*/
+		D[0][0]=h/2.0*fabs(vx);
+		D[0][1]=0.;
+		D[1][0]=0.;
+		D[1][1]=h/2.0*fabs(vy);
+		TripleMultiply(Bprime,2,numnodes,1,
+					&D[0][0],2,2,0,
+					Bprime,2,numnodes,0,
 					&Ke->values[0],1);
 	}
@@ -153,8 +152,6 @@
 	/*Clean up and return*/
 	xDelete<IssmDouble>(xyz_list);
-	xDelete<IssmDouble>(basis);
 	xDelete<IssmDouble>(B);
 	xDelete<IssmDouble>(Bprime);
-	xDelete<IssmDouble>(D);
 	delete gauss;
 	return Ke;
@@ -186,5 +183,39 @@
 }/*}}}*/
 void           GLheightadvectionAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
-	_error_("To be implemented");
+
+	/*Deal with ocean constraint*/
+	SetActiveNodesLSMx(femmodel);
+
+	/*Constrain all nodes that are grounded and unconstrain the ones that float*/
+	for(int i=0;i<femmodel->elements->Size();i++){
+		Element    *element  = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+
+		if(!element->IsIceInElement()) continue;
+		int         numnodes = element->GetNumberOfNodes();
+		IssmDouble *mask     = xNew<IssmDouble>(numnodes);
+		IssmDouble *bed      = xNew<IssmDouble>(numnodes);
+		IssmDouble *lset     = xNew<IssmDouble>(numnodes);
+
+		element->GetInputListOnNodes(&mask[0],MaskGroundediceLevelsetEnum);
+		element->GetInputListOnNodes(&bed[0],BaseEnum);
+		element->GetInputListOnNodes(&lset[0],MaskIceLevelsetEnum);
+
+		for(int in=0;in<numnodes;in++){
+			Node* node=element->GetNode(in);
+			if(mask[in]<0.){
+				node->Activate();
+			}
+			else{
+				node->Deactivate();
+				node->ApplyConstraint(0,bed[in]);
+			}
+		}
+		xDelete<IssmDouble>(mask);
+		xDelete<IssmDouble>(bed);
+		xDelete<IssmDouble>(lset);
+	}
+
+
+
 	return;
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 22973)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 22974)
@@ -284,6 +284,4 @@
 		virtual void       PicoUpdateBoxid(int* pmax_boxid_basin)=0;
 		virtual void       PicoUpdateBox(int loopboxid)=0;
-		virtual void       PicoComputeBaseSlope(void)=0;
-		virtual void       PicoComputeGroundingLineDepth(void)=0;
 		virtual void       PicoComputeBasalMelt(void)=0;
 		virtual void       PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22973)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 22974)
@@ -143,6 +143,4 @@
 		void				PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
 		void				PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
-		void				PicoComputeBaseSlope(void){_error_("not implemented yet");};
-		void				PicoComputeGroundingLineDepth(void){_error_("not implemented yet");};
 		void				PicoComputeBasalMelt(void){_error_("not implemented yet");};
 		void           PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22973)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 22974)
@@ -132,6 +132,4 @@
 		void        PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};
 		void			PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
-		void			PicoComputeBaseSlope(void){_error_("not implemented yet");};
-		void			PicoComputeGroundingLineDepth(void){_error_("not implemented yet");};
 		void			PicoComputeBasalMelt(void){_error_("not implemented yet");};
 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22973)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 22974)
@@ -140,6 +140,4 @@
 		void			PicoUpdateBoxid(int* pmax_boxid_basin){_error_("not implemented yet");};	
 		void			PicoUpdateBox(int loopboxid){_error_("not implemented yet");};
-		void			PicoComputeBaseSlope(void){_error_("not implemented yet");};
-		void			PicoComputeGroundingLineDepth(void){_error_("not implemented yet");};
 		void			PicoComputeBasalMelt(void){_error_("not implemented yet");};
 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22973)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 22974)
@@ -2923,5 +2923,5 @@
 		}
 	}
-	if(boxid==-1){_error_("No boxid found for element " << this->Sid() << "!");}
+	if(boxid==-1) _error_("No boxid found for element " << this->Sid() << "!");
 
 	this->inputs->AddInput(new IntInput(BasalforcingsPicoBoxIdEnum, boxid));	
@@ -2997,16 +2997,14 @@
 
 			/* To avoid negatives under the square root */
-			if((0.25*pow(p_coeff,2)-q_coeff)<0){
-				q_coeff = 0.25*p_coeff*p_coeff;
-			}
+			if((0.25*pow(p_coeff,2)-q_coeff)<0) q_coeff = 0.25*p_coeff*p_coeff;
 
 			Tocs[i] = toc_farocean-(-0.5*p_coeff+sqrt(0.25*pow(p_coeff,2)-q_coeff));
 			Socs[i] = soc_farocean-(soc_farocean/(nu*lambda))*(toc_farocean-Tocs[i]);
 			potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
-			if(!isplume){basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);}
+			if(!isplume) basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
 			overturnings[i] = overturning_coeff*rho_star*(Beta*(soc_farocean-Socs[i])-alpha*(toc_farocean-Tocs[i]));
 		}
 
-		if(!isplume){this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);}
+		if(!isplume) this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
 		this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
 		this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
@@ -3041,8 +3039,8 @@
 			Socs[i]  = mean_soc-mean_soc*((mean_toc-Tocs[i])/(nu*lambda));
 			potential_pressure_melting_point[i] = a*Socs[i]+b-c*pressure;
-			if(!isplume){basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);}
-		}
-
-		if(!isplume){this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);}
+			if(!isplume) basalmeltrates_shelf[i] = (-gamma_T/(nu*lambda))*(potential_pressure_melting_point[i]-Tocs[i]);
+		}
+
+		if(!isplume) this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);
 		this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);
 		this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);
@@ -3059,48 +3057,4 @@
 }
 /*}}}*/
-void       Tria::PicoComputeBaseSlope(void){/*{{{*/
-
-   //if(!this->IsIceInElement() || !this->IsFloating()) return;
-
-	/*Define variables and get inputs */
-	IssmDouble  slopex,slopey;
-	IssmDouble slope[NUMVERTICES];
-	Input* baseslopex_input     = this->GetInput(BaseSlopeXEnum);     _assert_(baseslopex_input);
-	Input* baseslopey_input     = this->GetInput(BaseSlopeYEnum);     _assert_(baseslopey_input);
-
-	Gauss* gauss=this->NewGauss();
-	for(int i=0;i<NUMVERTICES;i++){
-		gauss->GaussVertex(i);
-		baseslopex_input->GetInputValue(&slopex,gauss);
-		baseslopey_input->GetInputValue(&slopey,gauss);
-		slope[i] = sqrt(slopex*slopex + slopey*slopey);
-	}
-
-	this->AddInput(BasalforcingsPicoShelfSlopeEnum,slope,P1Enum);
-
-	/*Cleanup and return*/
-	delete gauss;
-}/*}}}*/
-void       Tria::PicoComputeGroundingLineDepth(void){/*{{{*/
-
-	if(!this->IsIceInElement() || !this->IsFloating()) return;
-
-	/*Define variables and get inputs */
-	IssmDouble bed;
-	IssmDouble zgl[NUMVERTICES];
-	Input* bed_input = this->GetInput(BedEnum);  _assert_(bed_input);
-
-	Gauss* gauss=this->NewGauss();
-	for(int i=0;i<NUMVERTICES;i++){
-		gauss->GaussVertex(i);
-		bed_input->GetInputValue(&bed,gauss);
-	   zgl[i] = bed -50.;
-	}
-
-	this->AddInput(BasalforcingsPicoGroundingLineDepthEnum,zgl,P1Enum);
-
-	/*Cleanup and return*/
-	delete gauss;
-}/*}}}*/
 void       Tria::PicoComputeBasalMelt(void){/*{{{*/
 
@@ -3109,5 +3063,5 @@
    IssmDouble E0, Cd, CdT, YT, lam1, lam2, lam3, M0, CdTS0, y1, y2, x0;
 	IssmDouble Tf_gl, YTS, CdTS, G1, G2, G3, g_alpha, M, l, X_hat, M_hat;
-	IssmDouble alpha, zgl, Toc, Soc, z_base, yts;
+	IssmDouble alpha, zgl, Toc, Soc, z_base, yts, slopex, slopey;
 
 	/*Get variables*/
@@ -3127,4 +3081,5 @@
 	/*Define arrays*/
 	IssmDouble basalmeltrates_shelf[NUMVERTICES];  //Basal melt-rate
+	//IssmDouble slope[NUMVERTICES];                 //Basal slope
 
 	/*Polynomial coefficients*/
@@ -3144,9 +3099,10 @@
 
 	/*Get inputs*/
-   Input* alpha_input=this->GetInput(BasalforcingsPicoShelfSlopeEnum);              _assert_(alpha_input);
-   Input* zgl_input=this->GetInput(BasalforcingsPicoGroundingLineDepthEnum);        _assert_(zgl_input);
-	Input* toc_input=this->GetInput(BasalforcingsPicoSubShelfOceanTempEnum);         _assert_(toc_input);
-	Input* soc_input=this->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum);     _assert_(soc_input);
-	Input* base_input=this->GetInput(BaseEnum);                                      _assert_(base_input);
+   Input* zgl_input            = this->GetInput(GroundinglineHeightEnum);                     _assert_(zgl_input);
+	Input* toc_input            = this->GetInput(BasalforcingsPicoSubShelfOceanTempEnum);      _assert_(toc_input);
+	Input* soc_input            = this->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum);  _assert_(soc_input);
+	Input* base_input           = this->GetInput(BaseEnum);                                    _assert_(base_input);
+	Input* baseslopex_input     = this->GetInput(BaseSlopeXEnum);                              _assert_(baseslopex_input);
+	Input* baseslopey_input     = this->GetInput(BaseSlopeYEnum);                              _assert_(baseslopey_input);
 	this->FindParam(&yts, ConstantsYtsEnum);
 
@@ -3157,16 +3113,21 @@
 
 		/*Get inputs*/
-      alpha_input->GetInputValue(&alpha,gauss);
       zgl_input->GetInputValue(&zgl,gauss); 
 		toc_input->GetInputValue(&Toc,gauss); //(K)
 		soc_input->GetInputValue(&Soc,gauss);
 		base_input->GetInputValue(&z_base,gauss);
+		baseslopex_input->GetInputValue(&slopex,gauss);
+		baseslopey_input->GetInputValue(&slopey,gauss);
+
+		/*Compute ice shelf base slope*/
+		alpha = sqrt(slopex*slopex + slopey*slopey);
 
 		/*Make necessary conversions*/
-		Toc = Toc-273.15;     // (Degrees C)
-		alpha = atan(alpha);  // (Degrees)
+		Toc = Toc-273.15;
+		alpha = atan(alpha);          
+		if(zgl>z_base) zgl=z_base-10;
 
 		/*Low bound for Toc to ensure X_hat is between 0 and 1*/
-		if(Toc<lam1*Soc+lam2) {Toc=lam1*Soc+lam2;}
+		if(Toc<lam1*Soc+lam2) Toc=lam1*Soc+lam2;
 
 		/*Compute parameters needed for melt-rate calculation*/
@@ -3186,5 +3147,5 @@
 		for(int ii=0;ii<12;ii++) {
 		 M_hat += p[ii]*pow(X_hat,ii);                                               //Polynomial fit
-		}
+	   }
 
 		/*Compute melt-rate*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22973)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 22974)
@@ -114,6 +114,4 @@
 		void        PicoUpdateBoxid(int* pmax_boxid_basin);
 		void        PicoUpdateBox(int loopboxid);
-		void        PicoComputeBaseSlope(void);
-		void        PicoComputeGroundingLineDepth(void);
 		void        PicoComputeBasalMelt(void);
 		void        PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 22973)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 22974)
@@ -660,4 +660,5 @@
 			analyses_temp[numanalyses++]=MasstransportAnalysisEnum;
 			analyses_temp[numanalyses++]=ExtrudeFromBaseAnalysisEnum;
+
 			break;
 
@@ -753,4 +754,13 @@
 			if(ismasstransport || isgroundingline){
 				analyses_temp[numanalyses++]=MasstransportAnalysisEnum;
+				int  basalforcing_model;
+				iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
+				if(basalforcing_model==BasalforcingsPicoEnum){
+					bool isplume;
+					iomodel->FindConstant(&isplume,"md.basalforcings.isplume");
+					if(isplume){
+						analyses_temp[numanalyses++]=GLheightadvectionAnalysisEnum;
+					}
+				}
 			}
 			if(issmb) analyses_temp[numanalyses++]=SmbAnalysisEnum;
@@ -1033,4 +1043,5 @@
 		segmentlist[(numseg_offset+i)*4 + 3] = segment->y[1];
 	}
+
 	ISSM_MPI_Allreduce((void*)segmentlist,(void*)allsegmentlist,4*numseg,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
 	delete segments;
@@ -1044,5 +1055,4 @@
 		element->CreateDistanceInputFromSegmentlist(allsegmentlist,numseg,distanceenum);
 	}
-
 
 	/*Extrude if necessary*/
Index: /issm/trunk-jpl/src/c/cores/bmb_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/bmb_core.cpp	(revision 22973)
+++ /issm/trunk-jpl/src/c/cores/bmb_core.cpp	(revision 22974)
@@ -27,4 +27,6 @@
 			femmodel->parameters->SetParam(BaseSlopeYEnum,InputToL2ProjectEnum);
 			solutionsequence_linear(femmodel);
+			femmodel->SetCurrentConfiguration(GLheightadvectionAnalysisEnum);
+			solutionsequence_linear(femmodel);
 		}
 	}
Index: /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 22973)
+++ /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 22974)
@@ -21,5 +21,5 @@
 	   }
 
-	/*PICO nelt rate parameterization (Reese et al., 2018)*/
+	/*PICO melt rate parameterization (Reese et al., 2018)*/
    femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
    UpdateBoxIdsPico(femmodel);
@@ -32,9 +32,5 @@
 	/*Optional buoyant plume melt rate parameterization (Lazeroms et al., 2018) */
 	femmodel->parameters->FindParam(&isplume,BasalforcingsPicoIsplumeEnum);
-	if(isplume){
-		   ComputeSubshelfSlopePlume(femmodel);
-			ComputeGroundingLineDepthPlume(femmodel);
-         ComputeBasalMeltPlume(femmodel);
-	}
+	if(isplume) ComputeBasalMeltPlume(femmodel);
 }/*}}}*/
 
@@ -52,5 +48,5 @@
 	femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
 	femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum);
-	
+
 	femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);
 	femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum);
@@ -125,5 +121,5 @@
 	IssmDouble* sumareas =xNew<IssmDouble>(num_basins*maxbox);
 	ISSM_MPI_Allreduce(boxareas,sumareas,num_basins*maxbox,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
-	if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
+	//if(sumareas[0]==0){_error_("No elements in box 0, basal meltrates will be 0. Consider decreasing md.basalforcings.maxboxcount or refining your mesh!");}
 	
 	/*Update parameters to keep track of the new areas in future calculations*/
@@ -232,16 +228,4 @@
 	xDelete<IssmDouble>(boxareas);
 }/*}}}*/
-void ComputeSubshelfSlopePlume(FemModel* femmodel){/*{{{*/
-	for(int i=0;i<femmodel->elements->Size();i++){
-		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
-		element->PicoComputeBaseSlope();
-	}
-}/*}}}*/
-void ComputeGroundingLineDepthPlume(FemModel* femmodel){/*{{{*/
-	for(int i=0;i<femmodel->elements->Size();i++){
-		Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
-		element->PicoComputeGroundingLineDepth();
-	}
-}/*}}}*/
 void ComputeBasalMeltPlume(FemModel* femmodel){/*{{{*/
 	for(int i=0;i<femmodel->elements->Size();i++){
Index: /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h	(revision 22973)
+++ /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.h	(revision 22974)
@@ -15,6 +15,4 @@
 void UpdateBoxPico(FemModel* femmodel, int loopboxid);
 void ComputeAverageOceanvarsPico(FemModel* femmodel, int boxid);
-void ComputeSubshelfSlopePlume(FemModel* femmodel);
-void ComputeGroundingLineDepthPlume(FemModel* femmodel);
 void ComputeBasalMeltPlume(FemModel* femmodel);
 
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22973)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22974)
@@ -397,6 +397,4 @@
 	BasalforcingsPicoBasinIdEnum,
 	BasalforcingsPicoBoxIdEnum,
-	BasalforcingsPicoGroundingLineDepthEnum,
-	BasalforcingsPicoShelfSlopeEnum,
 	BasalforcingsPicoSubShelfOceanOverturningEnum,
 	BasalforcingsPicoSubShelfOceanSalinityEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22973)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22974)
@@ -403,6 +403,4 @@
 		case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
 		case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
-		case BasalforcingsPicoGroundingLineDepthEnum : return "BasalforcingsPicoGroundingLineDepth";
-		case BasalforcingsPicoShelfSlopeEnum : return "BasalforcingsPicoShelfSlope";
 		case BasalforcingsPicoSubShelfOceanOverturningEnum : return "BasalforcingsPicoSubShelfOceanOverturning";
 		case BasalforcingsPicoSubShelfOceanSalinityEnum : return "BasalforcingsPicoSubShelfOceanSalinity";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22973)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22974)
@@ -412,6 +412,4 @@
 	      else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
 	      else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
-	      else if (strcmp(name,"BasalforcingsPicoGroundingLineDepth")==0) return BasalforcingsPicoGroundingLineDepthEnum;
-	      else if (strcmp(name,"BasalforcingsPicoShelfSlope")==0) return BasalforcingsPicoShelfSlopeEnum;
 	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanOverturning")==0) return BasalforcingsPicoSubShelfOceanOverturningEnum;
 	      else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum;
@@ -506,10 +504,10 @@
 	      else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
 	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
+	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+	      else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
-	      else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum;
-	      else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
+	      if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum;
 	      else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum;
 	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
@@ -629,10 +627,10 @@
 	      else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
 	      else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
+	      else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
+	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
-	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
-	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
+	      if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
@@ -752,10 +750,10 @@
 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
 	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+	      else if (strcmp(name,"EplHeadStacked")==0) return EplHeadStackedEnum;
+	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"EplHeadStacked")==0) return EplHeadStackedEnum;
-	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
-	      else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
+	      if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;
 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
@@ -875,10 +873,10 @@
 	      else if (strcmp(name,"Masscon")==0) return MassconEnum;
 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
+	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
+	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
-	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
-	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+	      if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
 	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
 	      else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
@@ -998,10 +996,10 @@
 	      else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
 	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
+	      else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
+	      else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
-	      else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
-	      else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
+	      if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
 	      else if (strcmp(name,"Outputdefinition63")==0) return Outputdefinition63Enum;
 	      else if (strcmp(name,"Outputdefinition64")==0) return Outputdefinition64Enum;
@@ -1121,10 +1119,10 @@
 	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
 	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
+	      else if (strcmp(name,"Sset")==0) return SsetEnum;
+	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"Sset")==0) return SsetEnum;
-	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
-	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+	      if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
 	      else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
 	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
