Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 23183)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 23184)
@@ -15,5 +15,5 @@
 	/*Intermediary*/
 	int        i,j;
-	int        count,finiteelement,pfiniteelement;
+	int        count,finiteelement,p_fe,v_fe;
 	IssmDouble g;
 	IssmDouble rho_ice;
@@ -69,14 +69,14 @@
 			/*Deduce velocity interpolation from finite element*/
 			switch(finiteelement){
-				case P1P1Enum              : finiteelement = P1Enum;       pfiniteelement = P1Enum;   break;
-				case P1P1GLSEnum           : finiteelement = P1Enum;       pfiniteelement = P1Enum;   break;
-				case MINIcondensedEnum     : finiteelement = P1bubbleEnum; pfiniteelement = P1Enum;   break;
-				case MINIEnum              : finiteelement = P1bubbleEnum; pfiniteelement = P1Enum;   break;
-				case TaylorHoodEnum        : finiteelement = P2Enum;       pfiniteelement = P1Enum;   break;
-				case XTaylorHoodEnum       : finiteelement = P2Enum;       pfiniteelement = P1Enum;   break;
-				case LATaylorHoodEnum      : finiteelement = P2Enum;       pfiniteelement = NoneEnum; break;
-				case LACrouzeixRaviartEnum : finiteelement = P2bubbleEnum; pfiniteelement = NoneEnum; break;
-				case OneLayerP4zEnum       : finiteelement = P2xP4Enum;    pfiniteelement = P1Enum;   break;
-				case CrouzeixRaviartEnum   : finiteelement = P2bubbleEnum; pfiniteelement = P1DGEnum; break;
+				case P1P1Enum              : v_fe = P1Enum;       p_fe = P1Enum;   break;
+				case P1P1GLSEnum           : v_fe = P1Enum;       p_fe = P1Enum;   break;
+				case MINIcondensedEnum     : v_fe = P1bubbleEnum; p_fe = P1Enum;   break;
+				case MINIEnum              : v_fe = P1bubbleEnum; p_fe = P1Enum;   break;
+				case TaylorHoodEnum        : v_fe = P2Enum;       p_fe = P1Enum;   break;
+				case XTaylorHoodEnum       : v_fe = P2Enum;       p_fe = P1Enum;   break;
+				case LATaylorHoodEnum      : v_fe = P2Enum;       p_fe = NoneEnum; break;
+				case LACrouzeixRaviartEnum : v_fe = P2bubbleEnum; p_fe = NoneEnum; break;
+				case OneLayerP4zEnum       : v_fe = P2xP4Enum;    p_fe = P1Enum;   break;
+				case CrouzeixRaviartEnum   : v_fe = P2bubbleEnum; p_fe = P1DGEnum; break;
 				default: _error_("finite element "<<EnumToStringx(finiteelement)<<" not supported");
 			}
@@ -103,12 +103,12 @@
 			}
 			if(iomodel->domaintype==Domain3DEnum){
-				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
-				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,1);
-				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,2);
+				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,v_fe,0);
+				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,v_fe,1);
+				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,v_fe,2);
 				iomodel->DeleteData(spcvz,"md.stressbalance.spcvz");
 			}
 			else if (iomodel->domaintype==Domain2DverticalEnum){
-				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
-				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,1);
+				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,v_fe,0);
+				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,v_fe,1);
 				iomodel->DeleteData(spcvz,"md.stressbalance.spcvy");
 			}
@@ -134,6 +134,16 @@
 			}
 			if(addpressurespc){
-				switch(pfiniteelement){
-					case P1Enum:
+				switch(finiteelement){
+					case P1P1Enum: case P1P1GLSEnum:
+						for(i=0;i<iomodel->numberofvertices;i++){
+							if(iomodel->my_vertices[i]){
+								if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
+									constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
+									count++;
+								}
+							}
+						}
+						break;
+					case MINIEnum: case MINIcondensedEnum:
 						for(i=0;i<iomodel->numberofvertices;i++){
 							if(iomodel->my_vertices[i]){
@@ -145,36 +155,13 @@
 						}
 						break;
-					case P1bubbleEnum:
+					case TaylorHoodEnum:
 						for(i=0;i<iomodel->numberofvertices;i++){
 							if(iomodel->my_vertices[i]){
 								if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
-									constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
+									constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberoffaces+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
 									count++;
 								}
 							}
 						}
-						break;
-					case P2Enum:
-						for(i=0;i<iomodel->numberofvertices;i++){
-							if(iomodel->my_vertices[i]){
-								if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
-									constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
-									count++;
-								}
-							}
-						}
-						break;
-					case P2bubbleEnum:
-						for(i=0;i<iomodel->numberofvertices;i++){
-							if(iomodel->my_vertices[i]){
-								if(IoCodeToEnumVertexEquation(reCast<int>(vertices_type[i]))==NoneApproximationEnum){
-									constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->numberofelements+iomodel->numberoffaces+i+1,0,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
-									count++;
-								}
-							}
-						}
-						break;
-					case P2xP4Enum:
-						//Nothing yet
 						break;
 					default:
Index: /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 23183)
+++ /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 23184)
@@ -459,4 +459,5 @@
 							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
 						}
+						if(iomodel->meshelementtype==PentaEnum){ _error_("need to add nodes on faces! (See Spcstatic above)");}
 
 						if(spcpresent){
