Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17314)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17315)
@@ -16,5 +16,11 @@
 
 	switch(approximation){
-		case SSAApproximationEnum:  numdofs =2; break;
+		case SSAApproximationEnum:
+			 switch(meshtype){
+				 case Mesh3DEnum:         numdofs=2; break;
+				 case Mesh2DverticalEnum: numdofs=1; break;
+				 default: _error_("mesh type not supported yet");
+			 }
+			 break;
 		case L1L2ApproximationEnum: numdofs =2; break;
 		case HOApproximationEnum:   
@@ -1422,5 +1428,5 @@
 
 	/*Transform coordinate system*/
-	element->TransformLoadVectorCoord(pe,XYEnum);
+	if(dim==2) element->TransformLoadVectorCoord(pe,XYEnum);
 
 	/*Clean up and return*/
@@ -1496,5 +1502,5 @@
 
 	/*Transform coordinate system*/
-	element->TransformLoadVectorCoord(pe,XYEnum);
+	if(dim==2) element->TransformLoadVectorCoord(pe,XYEnum);
 
 	/*Clean up and return*/
@@ -1696,9 +1702,9 @@
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
 	for(i=0;i<numnodes;i++){
-		vx[i]=values[i*2+0];
+		vx[i]=values[i*dim+0];
 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
 
 		if(dim==2){
-			vy[i]=values[i*2+1];
+			vy[i]=values[i*dim+1];
 			if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
 		}
@@ -1711,5 +1717,5 @@
 	}
 	else{
-		element->GetInputListOnNodes(&vy[0],VyEnum,0.);
+		basalelement->GetInputListOnNodes(&vy[0],VyEnum,0.);
 		for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i]);
 	}
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 17314)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 17315)
@@ -227,4 +227,11 @@
 }
 /*}}}*/
+/*FUNCTION Seg::JacobianDeterminantSurface{{{*/
+void Seg::JacobianDeterminantSurface(IssmDouble* pJdet,IssmDouble* xyz_list,Gauss* gauss){
+
+	*pJdet = 1.;
+
+}
+/*}}}*/
 /*FUNCTION Seg::NewGauss(){{{*/
 Gauss* Seg::NewGauss(void){
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 17314)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 17315)
@@ -96,5 +96,5 @@
 		void        JacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,Gauss* gauss);
 		void        JacobianDeterminantLine(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
-		void        JacobianDeterminantSurface(IssmDouble*  pJdet, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
+		void        JacobianDeterminantSurface(IssmDouble*  pJdet, IssmDouble* xyz_list,Gauss* gauss);
 		void        JacobianDeterminantBase(IssmDouble* pJdet,IssmDouble* xyz_list_base,Gauss* gauss){_error_("not implemented yet");};
 		void        JacobianDeterminantTop(IssmDouble* pJdet,IssmDouble* xyz_list_base,Gauss* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 17314)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 17315)
@@ -133,5 +133,18 @@
 void GaussSeg::GaussNode(int finiteelement,int iv){
 
-	_error_("not supported");
+	/*in debugging mode: check that the default constructor has been called*/
+	_assert_(numgauss==-1);
+
+	/*update static arrays*/
+	switch(finiteelement){
+		case P1Enum: case P1DGEnum:
+			switch(iv){
+				case 0: coord1=-1.; break;
+				case 1: coord1=+1.; break;
+				default: _error_("node index should be in [0 1]");
+			}
+			break;
+		default: _error_("Finite element "<<EnumToStringx(finiteelement)<<" not supported");
+	}
 
 }
