Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15626)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15627)
@@ -3177,4 +3177,20 @@
 			penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
 			penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
+			break;
+		case P2xP1Enum:
+			numnodes         = 12;
+			penta_node_ids   = xNew<int>(numnodes);
+			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
+			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
+			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
+			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
+			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
+			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
+			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
+			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
+			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
+			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
+			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
+			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
 			break;
 		case P2Enum:
@@ -6975,4 +6991,5 @@
 	xDelete<IssmDouble>(Bprime);
 	xDelete<IssmDouble>(B);
+	if(id==1) Ke->Echo();
 	return Ke;
 }
Index: /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15626)
+++ /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15627)
@@ -1625,7 +1625,8 @@
 
 	switch(this->element_type){
-		case P1Enum:   return NUMNODESP1;
-		case P2Enum:   return NUMNODESP2;
-		case MINIEnum: return NUMNODESP1b;
+		case P1Enum:    return NUMNODESP1;
+		case P2Enum:    return NUMNODESP2;
+		case P2xP1Enum: return NUMNODESP2xP1;
+		case MINIEnum:  return NUMNODESP1b;
 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15626)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15627)
@@ -415,4 +415,22 @@
 			}
 			break;
+		case 12: //P2xP1 Lagrange element
+			switch(iv){
+				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
+				case 1: coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
+				case 2: coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
+				case 3: coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
+				case 4: coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
+				case 5: coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
+
+				case  6: coord1=0.; coord2=.5; coord3=.5; coord4=-1.;break;
+				case  7: coord1=.5; coord2=0.; coord3=.5; coord4=-1.;break;
+				case  8: coord1=.5; coord2=.5; coord3=0.; coord4=-1.;break;
+				case  9: coord1=0.; coord2=.5; coord3=.5; coord4=+1.;break;
+				case 10: coord1=.5; coord2=0.; coord3=.5; coord4=+1.;break;
+				case 11: coord1=.5; coord2=.5; coord3=0.; coord4=+1.;break;
+				default: _error_("node index should be in [0 5]");
+			}
+			break;
 		case 15: //P2 Lagrange element
 			switch(iv){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15626)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15627)
@@ -43,4 +43,23 @@
 			break;
 
+		case P2xP1Enum:
+			EdgesPartitioning(&my_edges,iomodel);
+			for(i=0;i<iomodel->numberofvertices;i++){
+				if(iomodel->my_vertices[i]){
+					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
+				}
+			}
+			int numberofvertices2d;
+			Node* node = NULL;
+			iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
+			/*Create all P2 nodes anyway*/
+			for(i=0;i<iomodel->numberofedges;i++){
+				if(my_edges[i]){
+					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation);
+					nodes->AddObject(node);
+				}
+			}
+			break;
+
 		case P2Enum:
 			EdgesPartitioning(&my_edges,iomodel);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15626)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15627)
@@ -85,6 +85,7 @@
 			iomodel->Constant(&temp,FlowequationFeHOEnum);
 			switch(temp){
-				case 0 : finiteelement = P1Enum; break;
-				case 1 : finiteelement = P2Enum; break;
+				case 0 : finiteelement = P1Enum;    break;
+				case 1 : finiteelement = P2Enum;    break;
+				case 2 : finiteelement = P2xP1Enum; break;
 				default: _error_("finite element "<<temp<<" not supported");
 			}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15626)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15627)
@@ -51,6 +51,7 @@
 			iomodel->Constant(&temp,FlowequationFeHOEnum);
 			switch(temp){
-				case 0 : finiteelement = P1Enum; break;
-				case 1 : finiteelement = P2Enum; break;
+				case 0 : finiteelement = P1Enum;    break;
+				case 1 : finiteelement = P2Enum;    break;
+				case 2 : finiteelement = P2xP1Enum; break;
 				default: _error_("finite element "<<temp<<" not supported");
 			}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15626)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15627)
@@ -56,6 +56,7 @@
 			iomodel->Constant(&temp,FlowequationFeHOEnum);
 			switch(temp){
-				case 0 : finiteelement = P1Enum; break;
-				case 1 : finiteelement = P2Enum; break;
+				case 0 : finiteelement = P1Enum;    break;
+				case 1 : finiteelement = P2Enum;    break;
+				case 2 : finiteelement = P2xP1Enum; break;
 				default: _error_("finite element "<<temp<<" not supported");
 			}
Index: /issm/trunk-jpl/src/m/classes/flowequation.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 15626)
+++ /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 15627)
@@ -80,5 +80,5 @@
 				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
 				md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
-				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1]);
+				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1 2]);
 				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0]);
 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
