Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/analyses/SealevelriseAnalysis.cpp	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/analyses/SealevelriseAnalysis.cpp	(revision 22114)
@@ -86,4 +86,5 @@
 	parameters->AddObject(iomodel->CopyConstantObject("md.slr.loop_increment",SealevelriseLoopIncrementEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.slr.rigid",SealevelriseRigidEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.slr.horiz",SealevelriseHorizEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.slr.elastic",SealevelriseElasticEnum));
 	parameters->AddObject(iomodel->CopyConstantObject("md.slr.run_frequency",SealevelriseRunFrequencyEnum));
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Element.h
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Element.h	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Element.h	(revision 22114)
@@ -315,5 +315,5 @@
 		virtual void          SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea)=0;
 		virtual void          SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea)=0;
-		virtual void          SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea)=0;
+		virtual void          SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz)=0;
 		#endif
 
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Penta.h	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Penta.h	(revision 22114)
@@ -198,5 +198,5 @@
 		void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
 		void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
-		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
+		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){_error_("not implemented yet!");};
 		#endif
 
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Seg.h	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Seg.h	(revision 22114)
@@ -178,5 +178,5 @@
 		void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
 		void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
-		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
+		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){_error_("not implemented yet!");};
 		IssmDouble    OceanArea(void){_error_("not implemented yet!");};
 		IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tetra.h	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tetra.h	(revision 22114)
@@ -185,5 +185,5 @@
 		void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea){_error_("not implemented yet!");};
 		void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea){_error_("not implemented yet!");};
-		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){_error_("not implemented yet!");};
+		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){_error_("not implemented yet!");};
 		IssmDouble    OceanArea(void){_error_("not implemented yet!");};
 		IssmDouble    OceanAverage(IssmDouble* Sg){_error_("not implemented yet!");};
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.cpp	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.cpp	(revision 22114)
@@ -4335,5 +4335,5 @@
 }
 /*}}}*/
-void    Tria::SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea){ /*{{{*/
+void    Tria::SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz){ /*{{{*/
 
 	/*diverse:*/
@@ -4359,4 +4359,9 @@
 	IssmDouble* N_elastic= NULL;
 	IssmDouble* E_elastic= NULL;
+	DoubleVecParam* U_parameter = NULL;
+	DoubleVecParam* H_parameter = NULL;
+	IssmDouble* U_values=NULL;
+	IssmDouble* N_values=NULL;
+	IssmDouble* E_values=NULL;
 
 	/*optimization:*/
@@ -4433,8 +4438,10 @@
 
 	/*recover elastic Green's functions for displacement:*/
-	DoubleVecParam* U_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(U_parameter);
-	DoubleVecParam* H_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(H_parameter);
+	U_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(U_parameter);
 	U_parameter->GetParameterValueByPointer(&U_elastic_precomputed,&M);
-	H_parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M);
+	if(horiz){
+		H_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(H_parameter);
+		H_parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M);
+	}
 
 	/*From Sg, recover water sea level rise:*/
@@ -4448,11 +4455,15 @@
 	/*initialize: */
 	U_elastic=xNewZeroInit<IssmDouble>(gsize);
-	N_elastic=xNewZeroInit<IssmDouble>(gsize);
-	E_elastic=xNewZeroInit<IssmDouble>(gsize);
+	if(horiz){
+		N_elastic=xNewZeroInit<IssmDouble>(gsize);
+		E_elastic=xNewZeroInit<IssmDouble>(gsize);
+	}
 
 	int* indices=xNew<int>(gsize);
-	IssmDouble* U_values=xNewZeroInit<IssmDouble>(gsize);
-	IssmDouble* N_values=xNewZeroInit<IssmDouble>(gsize);
-	IssmDouble* E_values=xNewZeroInit<IssmDouble>(gsize);
+	U_values=xNewZeroInit<IssmDouble>(gsize);
+	if(horiz){
+		N_values=xNewZeroInit<IssmDouble>(gsize); 
+		E_values=xNewZeroInit<IssmDouble>(gsize);
+	}
 	IssmDouble alpha;
 	IssmDouble delPhi,delLambda;
@@ -4479,33 +4490,47 @@
 		}
 		dx = x_element-x; dy = y_element-y; dz = z_element-z; 
-		N_azim = (-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5);
-		E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5);
+		if(horiz){
+			N_azim = (-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5);
+			E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5);
+		}
 		
 		/*Elastic component  (from Eq 17 in Adhikari et al, GMD 2015): */
 		int index=reCast<int,IssmDouble>(alpha/PI*(M-1));
 		U_elastic[i] += U_elastic_precomputed[index];
-		N_elastic[i] += H_elastic_precomputed[index]*N_azim;
-		E_elastic[i] += H_elastic_precomputed[index]*E_azim;
+		if(horiz){
+			N_elastic[i] += H_elastic_precomputed[index]*N_azim;
+			E_elastic[i] += H_elastic_precomputed[index]*E_azim;
+		}
 
 		/*Add all components to the pUp solution vectors:*/
 		if(this->inputs->Max(MaskIceLevelsetEnum)<0){
 			U_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*U_elastic[i];
-			N_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*N_elastic[i];
-			E_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*E_elastic[i];
+			if(horiz){
+				N_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*N_elastic[i];
+				E_values[i]+=3*rho_ice/rho_earth*area/eartharea*I*E_elastic[i];
+			}
 		}
 		else if(IsWaterInElement()) {
 			U_values[i]+=3*rho_water/rho_earth*area/eartharea*S*U_elastic[i];
-			N_values[i]+=3*rho_water/rho_earth*area/eartharea*S*N_elastic[i];
-			E_values[i]+=3*rho_water/rho_earth*area/eartharea*S*E_elastic[i];
+			if(horiz){
+				N_values[i]+=3*rho_water/rho_earth*area/eartharea*S*N_elastic[i];
+				E_values[i]+=3*rho_water/rho_earth*area/eartharea*S*E_elastic[i];
+			}
 		}
 	}
 	pUp->SetValues(gsize,indices,U_values,ADD_VAL);
-	pNorth->SetValues(gsize,indices,N_values,ADD_VAL);
-	pEast->SetValues(gsize,indices,E_values,ADD_VAL);
+	if(horiz){
+		pNorth->SetValues(gsize,indices,N_values,ADD_VAL);
+		pEast->SetValues(gsize,indices,E_values,ADD_VAL);
+	}
 
 	/*free ressources:*/
 	xDelete<int>(indices); 
-	xDelete<IssmDouble>(U_values); xDelete<IssmDouble>(N_values); xDelete<IssmDouble>(E_values);
-	xDelete<IssmDouble>(U_elastic); xDelete<IssmDouble>(N_elastic); xDelete<IssmDouble>(E_elastic);
+	xDelete<IssmDouble>(U_values); 
+	xDelete<IssmDouble>(U_elastic); 
+	if(horiz){
+		xDelete<IssmDouble>(N_values); xDelete<IssmDouble>(E_values);
+		xDelete<IssmDouble>(N_elastic); xDelete<IssmDouble>(E_elastic);
+	}
 
 	return;
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.h	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/Elements/Tria.h	(revision 22114)
@@ -156,5 +156,5 @@
 		void    SealevelriseEustatic(Vector<IssmDouble>* pSgi,IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea,IssmDouble eartharea);
 		void    SealevelriseNonEustatic(Vector<IssmDouble>* pSgo,IssmDouble* Sg_old,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble eartharea);
-		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea);
+		void    SealevelriseGeodetic(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* Sg,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,IssmDouble eartharea,int horiz);
 		#endif
 		/*}}}*/
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.cpp
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.cpp	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.cpp	(revision 22114)
@@ -2606,5 +2606,5 @@
 }
 /*}}}*/
-void FemModel::SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop){/*{{{*/
+void FemModel::SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz){/*{{{*/
 
 	/*serialized vectors:*/
@@ -2639,10 +2639,12 @@
 			if(VerboseConvergence())if(i%100==0)_printf0_("\r" << "      convolution progress: " << (double)i/(double)ns*100 << "%  ");
 			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-			element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,eartharea);
+			element->SealevelriseGeodetic(pUp,pNorth,pEast,Sg,latitude,longitude,radius,xx,yy,zz,eartharea,horiz);
 		}
 		if(i%loop==0){
 			pUp->Assemble();
-			pNorth->Assemble();
-			pEast->Assemble();
+			if (horiz){
+				pNorth->Assemble();
+				pEast->Assemble();
+			}
 		}
 	}
@@ -2650,6 +2652,8 @@
 	/*One last time: */
 	pUp->Assemble();
-	pNorth->Assemble();
-	pEast->Assemble();
+	if(horiz){
+		pNorth->Assemble();
+		pEast->Assemble();
+	}
 
 	/*Free ressources:*/
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.h
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.h	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/classes/FemModel.h	(revision 22114)
@@ -129,5 +129,5 @@
 		void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,bool verboseconvolution,int loop);
 		void SealevelriseRotationalFeedback(Vector<IssmDouble>* pSgo_rot, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius);
-		void SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop); 
+		void SealevelriseGeodetic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz); 
 		IssmDouble SealevelriseOceanAverage(Vector<IssmDouble>* Sg);
 		#endif
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/cores/sealevelrise_core.cpp
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/cores/sealevelrise_core.cpp	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/cores/sealevelrise_core.cpp	(revision 22114)
@@ -37,4 +37,5 @@
 	int                 frequency;
 	int  loop;
+	int  horiz;
 
 	/*Recover some parameters: */
@@ -45,4 +46,5 @@
 	femmodel->parameters->FindParam(&iscoupler,TransientIscouplerEnum);
 	femmodel->parameters->FindParam(&loop,SealevelriseLoopIncrementEnum);
+	femmodel->parameters->FindParam(&horiz,SealevelriseHorizEnum);
 	
 	/*first, recover lat,long and radius vectors from vertices: */
@@ -101,10 +103,12 @@
 		/*Initialize:*/
 		U_radial = new Vector<IssmDouble>(gsize);
-		U_north = new Vector<IssmDouble>(gsize);
-		U_east = new Vector<IssmDouble>(gsize);
+		if (horiz){
+			U_north = new Vector<IssmDouble>(gsize);
+			U_east = new Vector<IssmDouble>(gsize);
+		}
 		Sg_absolute = new Vector<IssmDouble>(gsize); 
 		
 		/*call the geodetic main modlule:*/ 
-		femmodel->SealevelriseGeodetic(U_radial,U_north,U_east,Sg,latitude,longitude,radius,xx,yy,zz,loop); 
+		femmodel->SealevelriseGeodetic(U_radial,U_north,U_east,Sg,latitude,longitude,radius,xx,yy,zz,loop,horiz); 
 				
 		/*Now deal with steric ocean expansion by just shifting Sg by a spatial rate pattern : */
@@ -119,6 +123,8 @@
 		/*get results into elements:*/
 		InputUpdateFromVectorx(femmodel,U_radial,SealevelUmotionEnum,VertexSIdEnum);	// radial displacement 
-		InputUpdateFromVectorx(femmodel,U_north,SealevelNmotionEnum,VertexSIdEnum);	// north motion 
-		InputUpdateFromVectorx(femmodel,U_east,SealevelEmotionEnum,VertexSIdEnum);		// east motion 
+		if (horiz){
+			InputUpdateFromVectorx(femmodel,U_north,SealevelNmotionEnum,VertexSIdEnum);	// north motion 
+			InputUpdateFromVectorx(femmodel,U_east,SealevelEmotionEnum,VertexSIdEnum);		// east motion 
+		}
 		InputUpdateFromVectorx(femmodel,Sg_absolute,SealevelAbsoluteEnum,VertexSIdEnum); //absolute sea level
 		InputUpdateFromVectorx(femmodel,Sg,SealevelEnum,VertexSIdEnum); //relative sea level
@@ -137,6 +143,8 @@
 		/*Free ressources:*/	
 		delete U_radial;
-		delete U_north;
-		delete U_east;
+		if(horiz){
+			delete U_north;
+			delete U_east;
+		}
 		delete Sg_absolute;
 		delete Sg_eustatic;
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumDefinitions.h	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumDefinitions.h	(revision 22114)
@@ -794,4 +794,5 @@
 	SealevelriseMaxiterEnum,
 	SealevelriseLoopIncrementEnum,
+	SealevelriseHorizEnum,
 	SealevelriseReltolEnum,
 	SealevelriseAbstolEnum,
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumToStringx.cpp	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/EnumToStringx.cpp	(revision 22114)
@@ -774,4 +774,5 @@
 		case SealevelriseMaxiterEnum : return "SealevelriseMaxiter";
 		case SealevelriseLoopIncrementEnum : return "SealevelriseLoopIncrement";
+		case SealevelriseHorizEnum : return "SealevelriseHoriz";
 		case SealevelriseReltolEnum : return "SealevelriseReltol";
 		case SealevelriseAbstolEnum : return "SealevelriseAbstol";
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/StringToEnumx.cpp	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/c/shared/Enum/StringToEnumx.cpp	(revision 22114)
@@ -792,4 +792,5 @@
 	      else if (strcmp(name,"SealevelriseMaxiter")==0) return SealevelriseMaxiterEnum;
 	      else if (strcmp(name,"SealevelriseLoopIncrement")==0) return SealevelriseLoopIncrementEnum;
+	      else if (strcmp(name,"SealevelriseHoriz")==0) return SealevelriseHorizEnum;
 	      else if (strcmp(name,"SealevelriseReltol")==0) return SealevelriseReltolEnum;
 	      else if (strcmp(name,"SealevelriseAbstol")==0) return SealevelriseAbstolEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
 	      else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
-	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+	      if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
 	      else if (strcmp(name,"P2")==0) return P2Enum;
-	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
+	      if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
+	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
Index: /issm/branches/trunk-larour-NatGeoScience2016/src/m/classes/slr.m
===================================================================
--- /issm/branches/trunk-larour-NatGeoScience2016/src/m/classes/slr.m	(revision 22113)
+++ /issm/branches/trunk-larour-NatGeoScience2016/src/m/classes/slr.m	(revision 22114)
@@ -28,4 +28,6 @@
 		run_frequency  = 1; %how many time steps we skip before we run SLR solver during transient
 		degacc         = 0;
+		loop_increment = 0;
+		horiz = 0;
 		requested_outputs      = {};
 		transitions    = {};
@@ -48,4 +50,5 @@
 		%maximum of non-linear iterations.
 		self.maxiter=10;
+		self.loop_increment=200;
 
 		%computational flags: 
@@ -84,4 +87,7 @@
 		%transitions should be a cell array of vectors: 
 		self.transitions={};
+
+		%horizontal displacement?  (not by default)
+		self.horiz=0;
 		
 		end % }}}
@@ -108,4 +114,6 @@
 			md = checkfield(md,'fieldname','slr.degacc','size',[1 1],'>=',1e-10);
 			md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1);
+			md = checkfield(md,'fieldname','slr.loop_increment','NaN',1,'Inf',1,'>=',1);
+			md = checkfield(md,'fieldname','slr.horiz','NaN',1,'Inf',1,'values',[0 1]);
 
 			%check that love numbers are provided at the same level of accuracy: 
@@ -182,4 +190,6 @@
 			WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
 			WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
+			WriteData(fid,prefix,'object',self,'fieldname','loop_increment','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','horiz','format','Integer');
 			
 			%process requested outputs
