Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 21714)
@@ -292,4 +292,5 @@
 		virtual int        VertexConnectivity(int vertexindex)=0;
 		virtual void       VerticalSegmentIndices(int** pindices,int* pnumseg)=0;
+		virtual void       VerticalSegmentIndicesBase(int** pindices,int* pnumseg)=0;
 		virtual void       ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0;
 		virtual void       WriteLevelsetSegment(DataSet* segments){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 21714)
@@ -3370,4 +3370,11 @@
 }
 /*}}}*/
+void       Penta::VerticalSegmentIndicesBase(int** pindices,int* pnumseg){/*{{{*/
+
+	PentaRef::VerticalSegmentIndicesBase(pindices,pnumseg,this->GetElementType());
+
+	return;
+}
+/*}}}*/
 void       Penta::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 21714)
@@ -175,4 +175,5 @@
 		int            VertexConnectivity(int vertexindex);
 		void           VerticalSegmentIndices(int** pindices,int* pnumseg);
+		void           VerticalSegmentIndicesBase(int** pindices,int* pnumseg);
 		void           ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
 		void           ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
Index: /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 21714)
@@ -1030,4 +1030,88 @@
 }
 /*}}}*/
+void PentaRef::VerticalSegmentIndicesBase(int** pindices,int* pnumseg,int finiteelement){/*{{{*/
+
+	/*Output*/
+	int  numindices;
+	int* indices = NULL;
+
+	switch(finiteelement){
+		case P1Enum: case P1DGEnum:
+			numindices = 3*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0; indices[0*2 + 1] = 3;
+			indices[1*2 + 0] = 1; indices[1*2 + 1] = 4;
+			indices[2*2 + 0] = 2; indices[2*2 + 1] = 5;
+			break;
+		case P1bubbleEnum: case P1bubblecondensedEnum:
+			numindices = 3*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0; indices[0*2 + 1] = 3;
+			indices[1*2 + 0] = 1; indices[1*2 + 1] = 4;
+			indices[2*2 + 0] = 2; indices[2*2 + 1] = 5;
+			break;
+		case P2xP1Enum:
+			numindices = 6*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0; indices[0*2 + 1] = 3;
+			indices[1*2 + 0] = 1; indices[1*2 + 1] = 4;
+			indices[2*2 + 0] = 2; indices[2*2 + 1] = 5;
+			indices[3*2 + 0] = 6; indices[3*2 + 1] = 9;
+			indices[4*2 + 0] = 7; indices[4*2 + 1] = 10;
+			indices[5*2 + 0] = 8; indices[5*2 + 1] = 11;
+			break;
+		case P1xP2Enum:
+			numindices = 3*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0; indices[0*2 + 1] = 6;
+			indices[1*2 + 0] = 1; indices[1*2 + 1] = 7;
+			indices[2*2 + 0] = 2; indices[2*2 + 1] = 8;
+			break;
+		case P1xP3Enum:
+			numindices = 3*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0; indices[0*2 + 1] = 6;
+			indices[1*2 + 0] = 1; indices[1*2 + 1] = 7;
+			indices[2*2 + 0] = 2; indices[2*2 + 1] = 8;
+			break;
+		case P2Enum:
+			numindices = 6*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0;  indices[0*2 + 1] = 6;
+			indices[1*2 + 0] = 1;  indices[1*2 + 1] = 7;
+			indices[2*2 + 0] = 2;  indices[2*2 + 1] = 8;
+			indices[3*2 + 0] = 9;  indices[3*2 + 1] = 15;
+			indices[4*2 + 0] = 10; indices[4*2 + 1] = 16;
+			indices[5*2 + 0] = 11; indices[5*2 + 1] = 17;
+			break;
+		case P2bubbleEnum:
+			numindices = 6*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0;  indices[0*2 + 1] = 6;
+			indices[1*2 + 0] = 1;  indices[1*2 + 1] = 7;
+			indices[2*2 + 0] = 2;  indices[2*2 + 1] = 8;
+			indices[3*2 + 0] = 9;  indices[3*2 + 1] = 15;
+			indices[4*2 + 0] = 10; indices[4*2 + 1] = 16;
+			indices[5*2 + 0] = 11; indices[5*2 + 1] = 17;
+			break;
+		case P2xP4Enum:
+			numindices = 6*2;
+			indices    = xNew<int>(numindices);
+			indices[0*2 + 0] = 0;  indices[0*2 + 1] = 6;
+			indices[1*2 + 0] = 1;  indices[1*2 + 1] = 7;
+			indices[2*2 + 0] = 2;  indices[2*2 + 1] = 8;
+			indices[3*2 + 0] = 9;  indices[3*2 + 1] = 15;
+			indices[4*2 + 0] = 10; indices[4*2 + 1] = 16;
+			indices[5*2 + 0] = 11; indices[5*2 + 1] = 17;
+			break;
+		default:
+			_error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
+	}
+
+	/*Assign output pointer*/
+	*pnumseg   = numindices/2;
+	*pindices  = indices;
+}
+/*}}}*/
 int  PentaRef::NumberofNodes(int finiteelement){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 21714)
@@ -28,4 +28,5 @@
 		void GetSegmentJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,Gauss* gauss);
 		void GetTriaJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,Gauss* gauss);
+		void VerticalSegmentIndicesBase(int** pindices,int* pnumseg,int finiteelement);
 		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*do nothing */};
 		int  NumberofNodes(int finiteelement);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 21714)
@@ -161,4 +161,5 @@
 		int         VertexConnectivity(int vertexindex){_error_("not implemented yet");};
 		void        VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
+		void        VerticalSegmentIndicesBase(int** pindices,int* pnumseg){_error_("not implemented yet");};
 		void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};
 		void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 21714)
@@ -170,4 +170,5 @@
 		int         VertexConnectivity(int vertexindex){_error_("not implemented yet");};
 		void        VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
+		void        VerticalSegmentIndicesBase(int** pindices,int* pnumseg){_error_("not implemented yet");};
 		void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
 		void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21713)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 21714)
@@ -139,4 +139,5 @@
 		int         VertexConnectivity(int vertexindex);
 		void        VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
+		void        VerticalSegmentIndicesBase(int** pindices,int* pnumseg){_error_("not implemented yet");};
 		void			WriteLevelsetSegment(DataSet* segments);
 		void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
