Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 17062)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 17063)
@@ -12,5 +12,5 @@
 
 	/*Intermediaries*/
-	int   i,j,counter,lid=0;
+	int   i,j,counter,vnodes,lid=0;
 	bool *my_edges = NULL;
 	bool *my_nodes = NULL;
@@ -195,7 +195,8 @@
 			}
 			/*P1 pressure*/
-			for(i=0;i<iomodel->numberofvertices;i++){
-				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
+			vnodes = iomodel->nodecounter+iomodel->numberofvertices;
+			for(i=0;i<iomodel->numberofvertices;i++){
+				if(iomodel->my_vertices[i]){
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -210,7 +211,8 @@
 			}
 			/*P1 pressure*/
-			for(i=0;i<iomodel->numberofvertices;i++){
-				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
+			vnodes = iomodel->nodecounter+iomodel->numberofvertices;
+			for(i=0;i<iomodel->numberofvertices;i++){
+				if(iomodel->my_vertices[i]){
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -232,7 +234,8 @@
 			}
 			/*P1 pressure*/
-			for(i=0;i<iomodel->numberofvertices;i++){
-				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
+			vnodes = iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements;
+			for(i=0;i<iomodel->numberofvertices;i++){
+				if(iomodel->my_vertices[i]){
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -252,7 +255,8 @@
 			}
 			/*P1 pressure*/
-			for(i=0;i<iomodel->numberofvertices;i++){
-				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
+			vnodes = iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements;
+			for(i=0;i<iomodel->numberofvertices;i++){
+				if(iomodel->my_vertices[i]){
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -274,7 +278,8 @@
 
 			/*P1 pressure*/
-			for(i=0;i<iomodel->numberofvertices;i++){
-				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,i,iomodel,analysis,FSpressureEnum));
+			vnodes = iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges;
+			for(i=0;i<iomodel->numberofvertices;i++){
+				if(iomodel->my_vertices[i]){
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -282,8 +287,66 @@
 		case OneLayerP4zEnum:
 			_assert_(approximation==FSApproximationEnum);
+			EdgesPartitioning(&my_edges,iomodel);
 			/*P2xP4 velocity*/
-			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,lid++,i,iomodel,analysis,approximation));
+				}
+			}
+			counter = iomodel->numberofvertices;
+			for(i=0;i<iomodel->numberofedges;i++){
+				if(iomodel->edges[i*3+2]==2){/*Vertical edges*/
+					if(my_edges[i]){
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+					}
+				}
+				else if(iomodel->edges[i*3+2]==1){/*Basal edges*/
+					if(my_edges[i]){
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+4,counter+4,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+					}
+				}
+				else if(iomodel->edges[i*3+2]==3){/*Top edges*/
+					if(my_edges[i]){
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+					}
+				}
+				else{
+					_error_("not supported");
+				}
+				counter=counter+4;
+			}
 			/*P1xP3 pressure*/
-			_error_("Not supported");
+			vnodes = iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges;
+			for(i=0;i<iomodel->numberofvertices;i++){
+				if(iomodel->my_vertices[i]){
+					nodes->AddObject(new Node(vnodes+i+1,i,lid++,i,iomodel,analysis,approximation));
+				}
+			}
+
+			counter = iomodel->numberofvertices;
+			for(i=0;i<iomodel->numberofedges;i++){
+				if(iomodel->edges[i*3+2]==2){
+					if(my_edges[i]){
+						node = new Node(vnodes+iomodel->numberofvertices+2*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(vnodes+iomodel->numberofvertices+2*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+					}
+					counter=counter+2;
+				}
+			}
 			break;
 
