Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 23053)
@@ -2022,143 +2022,5 @@
 /*}}}*/
 bool       Element::IsInput(int name){/*{{{*/
-	if (
-				name==ThicknessEnum ||
-				name==SurfaceEnum ||
-				name==BaseEnum ||
-				name==BedEnum ||
-				name==BalancethicknessThickeningRateEnum ||
-				name==BalancethicknessOmegaEnum ||
-				name==SigmaNNEnum ||
-				name==SurfaceSlopeXEnum ||
-				name==SurfaceSlopeYEnum ||
-				name==SmbMassBalanceEnum ||
-				name==SmbAccumulationEnum ||
-				name==SmbRunoffEnum ||
-				name==SmbMeltEnum ||
-				name==SmbRefreezeEnum ||
-				name==SmbEvaporationEnum ||
-				name==SmbCEnum ||
-				name==SmbTaEnum ||
-				name==SmbVEnum ||
-				name==SmbDswrfEnum ||
-				name==SmbDlwrfEnum ||
-				name==SmbPEnum ||
-				name==SmbEAirEnum ||
-				name==SmbPAirEnum ||
-				name==SmbVzEnum ||
-				name==SmbTzEnum ||
-				name==SmbTmeanEnum ||
-				name==SmbIsInitializedEnum ||
-				name==BasalforcingsGroundediceMeltingRateEnum ||
-				name==BasalforcingsFloatingiceMeltingRateEnum ||
-				name==BasalforcingsGeothermalfluxEnum ||
-				name==BalancethicknessSpcthicknessEnum ||
-				name==SurfaceAreaEnum||
-				name==DamageDEnum ||
-				name==DamageDbarEnum ||
-				name==PressureEnum ||
-				name==VxEnum ||
-				name==VyEnum ||
-				name==VzEnum ||
-				name==VxMeshEnum ||
-				name==VyMeshEnum ||
-				name==VzMeshEnum ||
-				name==InversionVxObsEnum ||
-				name==InversionVyObsEnum ||
-				name==InversionVzObsEnum ||
-				name==TemperatureEnum ||
-				name==TemperaturePDDEnum ||
-				name==EnthalpyEnum ||
-				name==EnthalpyPicardEnum ||
-				name==WaterfractionEnum||
-				name==WatercolumnEnum ||
-				name==FrictionCoefficientEnum ||
-				name==FrictionAsEnum ||
-				name==FrictionEffectivePressureEnum ||
-				name==MaskGroundediceLevelsetEnum ||
-				name==MaskIceLevelsetEnum ||
-				name==IceMaskNodeActivationEnum ||
-				name==LevelsetfunctionSlopeXEnum ||
-				name==LevelsetfunctionSlopeYEnum ||
-				name==LevelsetfunctionPicardEnum ||
-				name==CalvingCalvingrateEnum ||
-				name==CalvingMeltingrateEnum ||
-				name==GradientEnum ||
-				name==OldGradientEnum  ||
-				name==ConvergedEnum ||
-				name==MaterialsRheologyEEnum ||
-				name==MaterialsRheologyEbarEnum ||
-				name==MaterialsRheologyBEnum ||
-				name==MaterialsRheologyBbarEnum ||
-				name==MaterialsRheologyNEnum ||
-				name==MaterialsRheologyEcEnum ||
-				name==MaterialsRheologyEcbarEnum ||
-				name==MaterialsRheologyEsEnum ||
-				name==MaterialsRheologyEsbarEnum ||
-				name==SealevelEnum || 
-				name==SealevelUEsaEnum || 
-				name==SealevelUEsaRateEnum || 
-				name==SealevelNEsaEnum || 
-				name==SealevelNEsaRateEnum || 
-				name==SealevelUNorthEsaEnum ||
-				name==SealevelUEastEsaEnum ||
-				name==SealevelRSLEustaticEnum || 
-				name==SealevelRSLEustaticRateEnum || 
-				name==SealevelRSLEnum || 
-				name==SealevelRSLRateEnum || 
-				name==SealevelEustaticMaskEnum || 
-				name==SealevelEustaticOceanMaskEnum || 
-				name==SealevelUGiaEnum || 
-				name==SealevelUGiaRateEnum || 
-				name==SealevelNGiaEnum || 
-				name==SealevelNGiaRateEnum || 
-				name==SealevelriseDeltathicknessEnum || 
-				name==SealevelriseCumDeltathicknessEnum || 
-				name==EsaUmotionEnum || 
-				name==EsaNmotionEnum || 
-				name==EsaEmotionEnum || 
-				name==EsaXmotionEnum ||
-				name==EsaYmotionEnum ||
-				name==EsaStrainratexxEnum ||
-				name==EsaStrainratexyEnum ||
-				name==EsaStrainrateyyEnum ||
-				name==EsaRotationrateEnum ||
-				name==EsaDeltathicknessEnum ||
-				name==GiaWEnum ||
-				name==GiadWdtEnum ||
-				name==SedimentHeadHydrostepEnum ||
-				name==EplHeadHydrostepEnum ||
-				name==SedimentHeadOldEnum ||
-				name==EplHeadOldEnum ||
-				name==StressIntensityFactorEnum ||
-				name==StrainRateparallelEnum ||
-				name==StrainRateperpendicularEnum ||
-				name==HydrologydcEplThicknessOldEnum ||
-				name==HydrologydcEplInitialThicknessEnum ||
-				name==HydrologydcEplThicknessHydrostepEnum ||
-				name==HydrologydcMaskEplactiveNodeEnum ||
-				name==HydrologydcMaskThawedNodeEnum ||
-				name==HydrologyHeadEnum ||
-				name==HydrologyHeadOldEnum ||
-				name==StressbalanceConvergenceNumStepsEnum ||
-				name==MeshVertexonbaseEnum ||
-				name==FrictionPEnum ||
-				name==FrictionQEnum ||
-				name==FrictionCoefficientcoulombEnum ||
-				name==LoadingforceXEnum ||
-				name==LoadingforceYEnum ||
-				name==VelEnum ||
-				name==DeviatoricStressxxEnum ||
-				name==DeviatoricStressyyEnum ||
-				name==DeviatoricStressxyEnum ||
-				name==DeviatoricStressxzEnum ||
-				name==DeviatoricStressyzEnum ||
-				name==DeviatoricStresszzEnum ||
-				name==DeviatoricStresseffectiveEnum ||
-				name==VxAverageEnum ||
-				name==VyAverageEnum
-				) {
-					return true;
-				}
+	if (name>InputsSTARTEnum && name<InputsENDEnum) {return true;}
 	else return false;
 }
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 23052)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 23053)
@@ -208,5 +208,5 @@
 		virtual void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
 		virtual void       ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum)=0;
-		virtual void       CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum){_error_("not implemented yet");};
+		virtual void       CreateDistanceInputFromSegmentlist(IssmDouble* distances,int distanceenum){_error_("not implemented yet");};
 		virtual void       ElementResponse(IssmDouble* presponse,int response_enum)=0;
 		virtual void       ElementSizes(IssmDouble* phx,IssmDouble* phy,IssmDouble* phz)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 23053)
@@ -823,61 +823,23 @@
 
 }/*}}}*/
-void       Tria::CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum){/*{{{*/
-
-	/*Intermediaries*/
-	IssmDouble d,xn,yn;
+void       Tria::CreateDistanceInputFromSegmentlist(IssmDouble* distances,int distanceenum){/*{{{*/
 
 	/*Get current field and vertex coordinates*/
-	IssmDouble ls[NUMVERTICES];
-	IssmDouble  xyz_list[NUMVERTICES][3];
-	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+	IssmDouble ls[NUMVERTICES],distance;
 	GetInputListOnVertices(&ls[0],distanceenum);
 
 	/*Get distance from list of segments and reset ls*/
 	for(int j=0;j<NUMVERTICES;j++){
-		IssmDouble dmin = 1.e+50;
-		for(int i=0;i<numsegments;i++){
-			IssmDouble x = xyz_list[j][0];
-			IssmDouble y = xyz_list[j][1];
-			IssmDouble l2 = (segments[4*i+2]-segments[4*i+0])*(segments[4*i+2]-segments[4*i+0]) + (segments[4*i+3]-segments[4*i+1])*(segments[4*i+3]-segments[4*i+1]);
-
-			/*Segment has a length of 0*/
-			if(l2==0.){
-				d = (x-segments[4*i+0])*(x-segments[4*i+0])+(y-segments[4*i+1])*(y-segments[4*i+1]);
-				if(d<dmin) dmin = d;
-				continue;
-			}
-
-			/*Consider the line extending the segment, parameterized as v + t (w - v).
-			 *We find projection of point p onto the line.
-			 *It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
-			IssmDouble t = ((x-segments[4*i+0])*(segments[4*i+2]-segments[4*i+0]) + (y-segments[4*i+1])*(segments[4*i+3]-segments[4*i+1]))/l2;
-			if(t < 0.0){
-				// Beyond the 'v' end of the segment
-				d = (x-segments[4*i+0])*(x-segments[4*i+0])+(y-segments[4*i+1])*(y-segments[4*i+1]);
-			}
-			else if (t > 1.0){
-				// Beyond the 'w' end of the segment
-				d = (x-segments[4*i+2])*(x-segments[4*i+2])+(y-segments[4*i+3])*(y-segments[4*i+3]);
-			}
-			else{
-				// Projection falls on the segment
-				xn = segments[4*i+0] + t * (segments[4*i+2] - segments[4*i+0]);
-				yn = segments[4*i+1] + t * (segments[4*i+3] - segments[4*i+1]);
-				d = (x-xn)*(x-xn)+(y-yn)*(y-yn);
-			}
-
-			if(d<dmin) dmin = d;
-		}
-
-		/*Update signed distance*/
-		dmin = sqrt(dmin);
+		distance=distances[this->vertices[j]->Lid()];
+		if(xIsNan<IssmDouble>(distance)) _error_("NaN found in vector");
+		if(xIsInf<IssmDouble>(distance)) _error_("Inf found in vector");
+
 		/*FIXME: do we really need this?*/
-		if(distanceenum==MaskIceLevelsetEnum) if(dmin>10000) dmin=10000;
+		if(distanceenum==MaskIceLevelsetEnum) if(distance>10000) distance=10000;
 		if(ls[j]>0){
-			ls[j] = dmin;
+			ls[j] = distance;
 		}
 		else{
-			ls[j] = - dmin;
+			ls[j] = - distance;
 		}
 	}
@@ -2234,51 +2196,66 @@
 
 	switch(type){
-	case VertexPIdEnum: 
-		values = xNew<IssmDouble>(NUMVERTICES);
-		for(int i=0;i<NUMVERTICES;i++){
-			values[i]=vector[this->vertices[i]->Pid()];
-		}
-		/*update input*/
-		this->inputs->AddInput(new TriaInput(name,values,P1Enum));
-		break;
-
-	case VertexSIdEnum: 
-		values = xNew<IssmDouble>(NUMVERTICES);
-		for(int i=0;i<NUMVERTICES;i++){
-			values[i]=vector[this->vertices[i]->Sid()];
-		}
-		/*update input*/
-		this->inputs->AddInput(new TriaInput(name,values,P1Enum));
-		break;
-
-	case NodesEnum:
-		/*Get number of nodes and dof list: */
-		numnodes = this->NumberofNodes(this->element_type);
-		values   = xNew<IssmDouble>(numnodes);
-		GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
-
-		for(int i=0;i<numnodes;i++){
-			values[i]=vector[doflist[i]];
-			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
-			if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
-		}
-		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
-		break;
-
-	case NodeSIdEnum:
-		/*Get number of nodes and dof list: */
-		numnodes = this->NumberofNodes(this->element_type);
-		values   = xNew<IssmDouble>(numnodes);
-
-		for(int i=0;i<numnodes;i++){
-			values[i]=vector[nodes[i]->Sid()];
-			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
-			if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
-		}
-		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
-		break;
-
-	default:
-		_error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+		case VertexLIdEnum: 
+			values = xNew<IssmDouble>(NUMVERTICES);
+			for(int i=0;i<NUMVERTICES;i++){
+				values[i]=vector[this->vertices[i]->Lid()];
+				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+				if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
+			}
+			/*update input*/
+			this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+			break;
+
+		case VertexPIdEnum: 
+			values = xNew<IssmDouble>(NUMVERTICES);
+			for(int i=0;i<NUMVERTICES;i++){
+				values[i]=vector[this->vertices[i]->Pid()];
+				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+				if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
+			}
+			/*update input*/
+			this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+			break;
+
+		case VertexSIdEnum: 
+			values = xNew<IssmDouble>(NUMVERTICES);
+			for(int i=0;i<NUMVERTICES;i++){
+				values[i]=vector[this->vertices[i]->Sid()];
+				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+				if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
+			}
+			/*update input*/
+			this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+			break;
+
+		case NodesEnum:
+			/*Get number of nodes and dof list: */
+			numnodes = this->NumberofNodes(this->element_type);
+			values   = xNew<IssmDouble>(numnodes);
+			GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+
+			for(int i=0;i<numnodes;i++){
+				values[i]=vector[doflist[i]];
+				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+				if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
+			}
+			this->inputs->AddInput(new TriaInput(name,values,this->element_type));
+			break;
+
+		case NodeSIdEnum:
+			/*Get number of nodes and dof list: */
+			numnodes = this->NumberofNodes(this->element_type);
+			values   = xNew<IssmDouble>(numnodes);
+
+			for(int i=0;i<numnodes;i++){
+				values[i]=vector[nodes[i]->Sid()];
+				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+				if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector");
+			}
+			this->inputs->AddInput(new TriaInput(name,values,this->element_type));
+			break;
+
+		default:
+			_error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
 	}
 
@@ -2960,6 +2937,7 @@
 	_assert_(basinid<=num_basins);
 
-   IssmDouble* boxareas = xNew<IssmDouble>(num_basins*maxbox);
+   IssmDouble* boxareas = NULL;
 	this->parameters->FindParam(&boxareas,&M,BasalforcingsPicoBoxAreaEnum);
+	_assert_(M==num_basins*maxbox);
 
 	IssmDouble area_boxi        = boxareas[basinid*maxbox+boxid];
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 23052)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 23053)
@@ -66,5 +66,5 @@
 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
-		void        CreateDistanceInputFromSegmentlist(IssmDouble* segments,int numsegments,int distanceenum);
+		void        CreateDistanceInputFromSegmentlist(IssmDouble* distances,int distanceenum);
 		int         EdgeOnBaseIndex();
 		void        EdgeOnBaseIndices(int* pindex1,int* pindex);
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23053)
@@ -1050,24 +1050,61 @@
 
 	/*3: Add distance input to all elements*/
-	for(int i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
-		if(!element->IsOnBase()) continue;
-		element->CreateDistanceInputFromSegmentlist(allsegmentlist,numseg,distanceenum);
-	}
-
-	/*Extrude if necessary*/
-	int elementtype;
-	this->parameters->FindParam(&elementtype,MeshElementtypeEnum);
-	if(elementtype==PentaEnum){
-		InputExtrudex(this,distanceenum,-1);
-	}
-	else if(elementtype==TriaEnum){
-		/*no need to extrude*/
-	}
-	else{
-		_error_("not implemented yet");
-	}
+	IssmDouble* distances = xNew<IssmDouble>(vertices->Size());
+	IssmDouble  d,xn,yn;
+	for(int i=0;i<vertices->Size();i++){
+		Vertex* vertex=dynamic_cast<Vertex*>(this->vertices->GetObjectByOffset(i));
+		IssmDouble dmin = 1.e+50;
+
+		for(int i=0;i<numseg;i++){
+			IssmDouble x = vertex->x;
+			IssmDouble y = vertex->y;
+
+			/*Skip if tip is more than 10xdmin away*/
+			if( pow(allsegmentlist[4*i+0] - x,2) + pow(y-allsegmentlist[4*i+1],2) > pow(10*dmin,2)) continue;
+
+			IssmDouble l2 = (allsegmentlist[4*i+2]-allsegmentlist[4*i+0])*(allsegmentlist[4*i+2]-allsegmentlist[4*i+0]) + (allsegmentlist[4*i+3]-allsegmentlist[4*i+1])*(allsegmentlist[4*i+3]-allsegmentlist[4*i+1]);
+
+			/*Segment has a length of 0*/
+			if(l2==0.){
+				d = (x-allsegmentlist[4*i+0])*(x-allsegmentlist[4*i+0])+(y-allsegmentlist[4*i+1])*(y-allsegmentlist[4*i+1]);
+				if(d<dmin) dmin = d;
+				continue;
+			}
+
+			/*Consider the line extending the segment, parameterized as v + t (w - v).
+			 *We find projection of point p onto the line.
+			 *It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
+			IssmDouble t = ((x-allsegmentlist[4*i+0])*(allsegmentlist[4*i+2]-allsegmentlist[4*i+0]) + (y-allsegmentlist[4*i+1])*(allsegmentlist[4*i+3]-allsegmentlist[4*i+1]))/l2;
+			if(t < 0.0){
+				// Beyond the 'v' end of the segment
+				d = (x-allsegmentlist[4*i+0])*(x-allsegmentlist[4*i+0])+(y-allsegmentlist[4*i+1])*(y-allsegmentlist[4*i+1]);
+			}
+			else if (t > 1.0){
+				// Beyond the 'w' end of the segment
+				d = (x-allsegmentlist[4*i+2])*(x-allsegmentlist[4*i+2])+(y-allsegmentlist[4*i+3])*(y-allsegmentlist[4*i+3]);
+			}
+			else{
+				// Projection falls on the segment
+				xn = allsegmentlist[4*i+0] + t * (allsegmentlist[4*i+2] - allsegmentlist[4*i+0]);
+				yn = allsegmentlist[4*i+1] + t * (allsegmentlist[4*i+3] - allsegmentlist[4*i+1]);
+				d = (x-xn)*(x-xn)+(y-yn)*(y-yn);
+			}
+
+			if(d<dmin) dmin = d;
+		}
+
+		/*Update signed distance*/
+		_assert_(vertex->lid<vertices->Size()); 
+		distances[vertex->lid] = sqrt(dmin);
+	}
+
+	for(int i=0;i<this->elements->Size();i++){
+		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
+		element->CreateDistanceInputFromSegmentlist(distances,distanceenum);
+	}
+	//InputUpdateFromVectorx(this,distances,distanceenum,VertexLIdEnum);
 
 	/*Clean up and return*/
+	xDelete<IssmDouble>(distances);
 	xDelete<IssmDouble>(allsegmentlist);
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 23053)
@@ -20,9 +20,10 @@
 }
 /*}}}*/
-Vertex::Vertex(int vertex_id, int vertex_sid,int i, IoModel* iomodel){/*{{{*/
+Vertex::Vertex(int vertex_id, int vertex_sid,int vertex_lid,int i, IoModel* iomodel){/*{{{*/
 
 	this->id           = vertex_id;
 	this->sid          = vertex_sid;
 	this->pid          = UNDEF;
+	this->lid          = vertex_lid;
 
 	_assert_(iomodel->Data("md.mesh.x") && iomodel->Data("md.mesh.y") && iomodel->Data("md.mesh.z"));
@@ -60,6 +61,5 @@
 	this->connectivity = iomodel->numbernodetoelementconnectivity[i];
 
-}
-/*}}}*/
+}/*}}}*/
 Vertex::~Vertex(){/*{{{*/
 	return;
@@ -84,4 +84,5 @@
 	_printf_("   sid: " << sid << "\n");
 	_printf_("   pid: " << pid << "\n");
+	_printf_("   lid: " << lid << "\n");
 	_printf_("   x: " << x << "\n");
 	_printf_("   y: " << y << "\n");
@@ -104,4 +105,5 @@
 	MARSHALLING(sid);
 	MARSHALLING(pid);
+	MARSHALLING(lid);
 	MARSHALLING(x);
 	MARSHALLING(y);
@@ -113,9 +115,6 @@
 /*}}}*/
 int Vertex::ObjectEnum(void){/*{{{*/
-
 	return VertexEnum;
-
-}
-/*}}}*/
+}/*}}}*/
 
 /*Vertex management: */
@@ -172,4 +171,6 @@
 /*}}}*/
 int        Vertex::Pid(void){ return pid; }/*{{{*/
+/*}}}*/
+int        Vertex::Lid(void){ return lid; }/*{{{*/
 /*}}}*/
 void       Vertex::SetClone(int* minranks){/*{{{*/
Index: /issm/trunk-jpl/src/c/classes/Vertex.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.h	(revision 23052)
+++ /issm/trunk-jpl/src/c/classes/Vertex.h	(revision 23053)
@@ -25,4 +25,5 @@
 		int        sid;          // "serial" id (rank of this vertex if the dataset was on 1 cpu)
 		int        pid;          // "parallel" id
+		int        lid;          // "local" id
 		IssmDouble x;
 		IssmDouble y;
@@ -36,5 +37,5 @@
 		/*Vertex constructors, destructors {{{*/
 		Vertex();
-		Vertex(int id, int sid, int i, IoModel* iomodel);
+		Vertex(int id, int sid,int lid,int i, IoModel* iomodel);
 		~Vertex();
 		/*}}}*/
@@ -59,4 +60,5 @@
 		void       OffsetPids(int pidcount);
 		int        Pid(void); 
+		int        Lid(void); 
 		void       SetClone(int* minranks);
 		void       ShowTruePids(int* borderpids);
Index: /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 23053)
@@ -39,10 +39,9 @@
 	int         numvertices,num_basins,maxbox,basinid;
 	IssmDouble  dist_max;
-	IssmDouble* dmax_basin_cpu=NULL;
 	IssmDouble* distances=NULL;
 
 	femmodel->parameters->FindParam(&num_basins,BasalforcingsPicoNumBasinsEnum);
 	femmodel->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum);
-	dmax_basin_cpu=xNew<IssmDouble>(num_basins);
+	IssmDouble* dmax_basin_cpu=xNew<IssmDouble>(num_basins);
 
 	femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);
@@ -98,4 +97,5 @@
 	xDelete<int>(nd);
 	xDelete<IssmDouble>(dmax_basin);
+	xDelete<IssmDouble>(dmax_basin_cpu);
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 23053)
@@ -238,6 +238,7 @@
 	CreateNumberNodeToElementConnectivity(iomodel,solution_type);
 
+	int lid = 0;
 	for(i=0;i<iomodel->numberofvertices;i++){
-		if(iomodel->my_vertices[i]) vertices->AddObject(new Vertex(i+1,i,i,iomodel));
+		if(iomodel->my_vertices[i]) vertices->AddObject(new Vertex(i+1,i,lid++,i,iomodel));
 	}
 
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23052)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23053)
@@ -258,5 +258,4 @@
 	SealevelriseAbstolEnum,
 	SealevelriseAngularVelocityEnum,
-	SealevelriseCumDeltathicknessEnum,
 	SealevelriseElasticEnum,
 	SealevelriseEquatorialMoiEnum,
@@ -530,4 +529,5 @@
 	RheologyBbarAbsGradientEnum,
 	SealevelEnum,
+	SealevelriseCumDeltathicknessEnum,
 	SealevelriseDeltathicknessEnum,
 	SedimentHeadHydrostepEnum,
@@ -1148,4 +1148,5 @@
 	VertexPIdEnum,
 	VertexSIdEnum,
+	VertexLIdEnum,
 	VerticesEnum,
 	ViscousHeatingEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23053)
@@ -266,5 +266,4 @@
 		case SealevelriseAbstolEnum : return "SealevelriseAbstol";
 		case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity";
-		case SealevelriseCumDeltathicknessEnum : return "SealevelriseCumDeltathickness";
 		case SealevelriseElasticEnum : return "SealevelriseElastic";
 		case SealevelriseEquatorialMoiEnum : return "SealevelriseEquatorialMoi";
@@ -536,4 +535,5 @@
 		case RheologyBbarAbsGradientEnum : return "RheologyBbarAbsGradient";
 		case SealevelEnum : return "Sealevel";
+		case SealevelriseCumDeltathicknessEnum : return "SealevelriseCumDeltathickness";
 		case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness";
 		case SedimentHeadHydrostepEnum : return "SedimentHeadHydrostep";
@@ -1152,4 +1152,5 @@
 		case VertexPIdEnum : return "VertexPId";
 		case VertexSIdEnum : return "VertexSId";
+		case VertexLIdEnum : return "VertexLId";
 		case VerticesEnum : return "Vertices";
 		case ViscousHeatingEnum : return "ViscousHeating";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23052)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23053)
@@ -272,5 +272,4 @@
 	      else if (strcmp(name,"SealevelriseAbstol")==0) return SealevelriseAbstolEnum;
 	      else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum;
-	      else if (strcmp(name,"SealevelriseCumDeltathickness")==0) return SealevelriseCumDeltathicknessEnum;
 	      else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum;
 	      else if (strcmp(name,"SealevelriseEquatorialMoi")==0) return SealevelriseEquatorialMoiEnum;
@@ -383,9 +382,9 @@
 	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
 	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
+	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
-	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+	      if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
 	      else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;
@@ -506,9 +505,9 @@
 	      else if (strcmp(name,"HydrologyDrainageRate")==0) return HydrologyDrainageRateEnum;
 	      else if (strcmp(name,"Ice")==0) return IceEnum;
+	      else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
-	      else if (strcmp(name,"Input")==0) return InputEnum;
+	      if (strcmp(name,"Input")==0) return InputEnum;
 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
 	      else if (strcmp(name,"InversionSurfaceObs")==0) return InversionSurfaceObsEnum;
@@ -548,4 +547,5 @@
 	      else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum;
 	      else if (strcmp(name,"Sealevel")==0) return SealevelEnum;
+	      else if (strcmp(name,"SealevelriseCumDeltathickness")==0) return SealevelriseCumDeltathicknessEnum;
 	      else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum;
 	      else if (strcmp(name,"SedimentHeadHydrostep")==0) return SedimentHeadHydrostepEnum;
@@ -1179,4 +1179,5 @@
 	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
+	      else if (strcmp(name,"VertexLId")==0) return VertexLIdEnum;
 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
