Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 23558)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 23559)
@@ -558,10 +558,10 @@
 					approximation=IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]));
 					if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
-					nodes->AddObject(new Node(i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
+					nodes->AddObject(new Node(i+1,i,lid++,0,i,iomodel,StressbalanceAnalysisEnum,approximation));
 				}
 			}
 			for(int i=0;i<iomodel->numberofelements;i++){
 				if(iomodel->my_elements[i]){
-					node = new Node(iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
+					node = new Node(iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
 					node->Deactivate();
 					nodes->AddObject(node);
@@ -572,5 +572,5 @@
 				if(iomodel->my_vertices[i]){
 					approximation=IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]));
-					node = new Node(iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
+					node = new Node(iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,0,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
 					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
 						node->Deactivate();
@@ -583,5 +583,5 @@
 			for(int i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]))));
+					nodes->AddObject(new Node(i+1,i,lid++,0,i,iomodel,StressbalanceAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]))));
 				}
 			}
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 23558)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 23559)
@@ -99,5 +99,5 @@
 
 			/*Create new node if is in this processor's partition*/
-			node = new Node(i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i])));
+			node = new Node(i+1,i,lid++,0,i,iomodel,StressbalanceSIAAnalysisEnum,IoCodeToEnumVertexEquation(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i])));
 
 			/*Deactivate node if not SIA*/
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 23558)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 23559)
@@ -21,5 +21,5 @@
 }
 /*}}}*/
-Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int in_approximation){/*{{{*/
+Node::Node(int node_id,int node_sid,int node_lid,int node_pid,int io_index, IoModel* iomodel,int analysis_enum,int in_approximation){/*{{{*/
 
 	/*Intermediary*/
@@ -31,4 +31,5 @@
 	this->sid           = node_sid;
 	this->lid           = node_lid;
+	this->pid           = node_pid;
 	this->analysis_enum = analysis_enum;
 
@@ -137,4 +138,5 @@
 	output->sid = this->sid;
 	output->lid = this->lid;
+	output->pid = this->pid;
 	output->analysis_enum = this->analysis_enum;
 	output->approximation = this->approximation;
@@ -156,4 +158,5 @@
 	MARSHALLING(sid);
 	MARSHALLING(lid);
+	MARSHALLING(pid);
 	MARSHALLING(indexingupdate);
 	indexing.Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
@@ -182,4 +185,6 @@
 	_printf_("   id : " << id << "\n");
 	_printf_("   sid: " << sid << "\n");
+	_printf_("   lid: " << lid << "\n");
+	_printf_("   pid: " << pid << "\n");
 	_printf_("   analysis_enum: " << EnumToStringx(analysis_enum) << "\n");
 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
Index: /issm/trunk-jpl/src/c/classes/Node.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.h	(revision 23558)
+++ /issm/trunk-jpl/src/c/classes/Node.h	(revision 23559)
@@ -32,4 +32,5 @@
 		int sid;   // "serial" id (rank of this node if the dataset was serial on 1 cpu)
 		int lid;   // "local"  id (rank of this node in current partition)
+		int pid;   // parallel id (specific to this partition)
 
 		int          analysis_enum;
@@ -40,5 +41,5 @@
 		/*Node constructors, destructors*/
 		Node();
-		Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int approximation_in);
+		Node(int node_id,int node_sid,int node_lid,int node_pid,int io_index, IoModel* iomodel,int analysis_enum,int approximation_in);
 		~Node();
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 23558)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 23559)
@@ -268,5 +268,5 @@
 	for(int i=0;i<MAXCONNECTIVITY*iomodel->numberofvertices;i++) vertices_ranks[i] = -1;
 
-	/*For all vertices, cound how many cpus hold vertex i (initialize with 0)*/
+	/*For all vertices, count how many cpus hold vertex i (initialize with 0)*/
 	int* vertices_proc_count = xNewZeroInit<int>(iomodel->numberofvertices);
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 23558)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 23559)
@@ -22,5 +22,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
@@ -32,5 +32,5 @@
 				for(j=0;j<3;j++){
 					if(my_nodes[3*i+j]){ 
-						nodes->AddObject(new Node(id0+3*i+j+1,id0+3*i+j,lid++,iomodel->elements[3*i+j]-1,iomodel,analysis,approximation));
+						nodes->AddObject(new Node(id0+3*i+j+1,id0+3*i+j,lid++,0,iomodel->elements[3*i+j]-1,iomodel,analysis,approximation));
 
 					}
@@ -42,10 +42,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
-				}
-			}
-			for(i=0;i<iomodel->numberofelements;i++){
-				if(iomodel->my_elements[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
+				}
+			}
+			for(i=0;i<iomodel->numberofelements;i++){
+				if(iomodel->my_elements[i]){
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,approximation));
 				}
 			}
@@ -55,10 +55,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
-				}
-			}
-			for(i=0;i<iomodel->numberofelements;i++){
-				if(iomodel->my_elements[i]){
-					node = new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation);
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
+				}
+			}
+			for(i=0;i<iomodel->numberofelements;i++){
+				if(iomodel->my_elements[i]){
+					node = new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,approximation);
 					node->HardDeactivate();
 					nodes->AddObject(node);
@@ -71,5 +71,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
@@ -79,5 +79,5 @@
 				if(iomodel->edges[i*3+2]==2){
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						node = new Node(id0+iomodel->numberofvertices+i+1,counter+1,lid++,0,0,iomodel,analysis,approximation);
 						nodes->AddObject(node);
 					}
@@ -91,5 +91,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
@@ -99,7 +99,7 @@
 				if(iomodel->edges[i*3+2]==2){
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+2*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(id0+iomodel->numberofvertices+2*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
+						node = new Node(id0+iomodel->numberofvertices+2*i+1,counter+1,lid++,0,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(id0+iomodel->numberofvertices+2*i+2,counter+2,lid++,0,0,iomodel,analysis,approximation);
 						nodes->AddObject(node);
 					}
@@ -112,5 +112,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
@@ -119,9 +119,9 @@
 				if(iomodel->edges[i*3+2]==2){/*Vertical edges*/
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(id0+iomodel->numberofvertices+3*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(id0+iomodel->numberofvertices+3*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
+						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(id0+iomodel->numberofvertices+3*i+2,counter+2,lid++,0,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(id0+iomodel->numberofvertices+3*i+3,counter+3,lid++,0,0,iomodel,analysis,approximation);
 						nodes->AddObject(node);
 					}
@@ -135,5 +135,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
@@ -143,5 +143,5 @@
 				if(iomodel->edges[i*3+2]!=2){
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						node = new Node(id0+iomodel->numberofvertices+i+1,counter+1,lid++,0,0,iomodel,analysis,approximation);
 						nodes->AddObject(node);
 					}
@@ -155,10 +155,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
 			for(i=0;i<iomodel->numberofedges;i++){
 				if(iomodel->my_edges[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,approximation));
 				}
 			}
@@ -169,5 +169,5 @@
 					if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 						if(iomodel->my_faces[i]){
-							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,approximation);
+							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,0,iomodel,analysis,approximation);
 							nodes->AddObject(node);
 						}
@@ -186,10 +186,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
 			for(i=0;i<iomodel->numberofedges;i++){
 				if(iomodel->my_edges[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,approximation));
 				}
 			}
@@ -200,5 +200,5 @@
 					if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 						if(iomodel->my_faces[i]){
-							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,approximation);
+							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,0,iomodel,analysis,approximation);
 							nodes->AddObject(node);
 						}
@@ -215,5 +215,5 @@
 			for(i=0;i<iomodel->numberofelements;i++){
 				if(iomodel->my_elements[i]){
-					nodes->AddObject(new Node(id0+i+1,id0+i,lid++,0,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,id0+i,lid++,0,0,iomodel,analysis,approximation));
 				}
 			}
@@ -224,5 +224,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,approximation));
 				}
 			}
@@ -231,9 +231,9 @@
 				if(iomodel->edges[i*3+2]==2){/*Vertical edges*/
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(id0+iomodel->numberofvertices+3*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(id0+iomodel->numberofvertices+3*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
+						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(id0+iomodel->numberofvertices+3*i+2,counter+2,lid++,0,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(id0+iomodel->numberofvertices+3*i+3,counter+3,lid++,0,0,iomodel,analysis,approximation);
 						nodes->AddObject(node);
 					}
@@ -242,5 +242,5 @@
 				else if(iomodel->edges[i*3+2]==1){/*Horizontal edges*/
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,0,iomodel,analysis,approximation);
 						nodes->AddObject(node);
 					}
@@ -255,9 +255,9 @@
 				if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 					if(iomodel->my_faces[i]){
-						node = new Node(id0+3*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(id0+3*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(id0+3*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
+						node = new Node(id0+3*i+1,counter+1,lid++,0,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(id0+3*i+2,counter+2,lid++,0,0,iomodel,analysis,approximation);
+						nodes->AddObject(node);
+						node = new Node(id0+3*i+3,counter+3,lid++,0,0,iomodel,analysis,approximation);
 						nodes->AddObject(node);
 					}
@@ -279,5 +279,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -286,5 +286,5 @@
 			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));
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+i,lid++,0,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -295,5 +295,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -302,5 +302,5 @@
 			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));
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+i,lid++,0,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -311,10 +311,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
-				}
-			}
-			for(i=0;i<iomodel->numberofelements;i++){
-				if(iomodel->my_elements[i]){
-					node = new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum);
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
+				}
+			}
+			for(i=0;i<iomodel->numberofelements;i++){
+				if(iomodel->my_elements[i]){
+					node = new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 					node->HardDeactivate();
 					nodes->AddObject(node);
@@ -325,5 +325,5 @@
 			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));
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,0,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -334,10 +334,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
-				}
-			}
-			for(i=0;i<iomodel->numberofelements;i++){
-				if(iomodel->my_elements[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
+				}
+			}
+			for(i=0;i<iomodel->numberofelements;i++){
+				if(iomodel->my_elements[i]){
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -346,5 +346,5 @@
 			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));
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,0,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -357,10 +357,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
 			for(i=0;i<iomodel->numberofedges;i++){
 				if(iomodel->my_edges[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -371,5 +371,5 @@
 					if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 						if(iomodel->my_faces[i]){
-							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum);
+							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 							nodes->AddObject(node);
 						}
@@ -394,5 +394,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+iomodel->numberofedges+numberoffaces+i,lid++,i,iomodel,analysis,FSpressureEnum));
+					nodes->AddObject(new Node(vnodes+i+1,iomodel->numberofvertices+iomodel->numberofedges+numberoffaces+i,lid++,0,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -404,10 +404,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
 			for(i=0;i<iomodel->numberofedges;i++){
 				if(iomodel->my_edges[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -418,5 +418,5 @@
 					if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 						if(iomodel->my_faces[i]){
-							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum);
+							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 							nodes->AddObject(node);
 						}
@@ -440,5 +440,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -447,9 +447,9 @@
 				if(iomodel->edges[i*3+2]==2){/*Vertical edges*/
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum);
-						nodes->AddObject(node);
-						node = new Node(id0+iomodel->numberofvertices+3*i+2,counter+2,lid++,0,iomodel,analysis,FSvelocityEnum);
-						nodes->AddObject(node);
-						node = new Node(id0+iomodel->numberofvertices+3*i+3,counter+3,lid++,0,iomodel,analysis,FSvelocityEnum);
+						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(id0+iomodel->numberofvertices+3*i+2,counter+2,lid++,0,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(id0+iomodel->numberofvertices+3*i+3,counter+3,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 						nodes->AddObject(node);
 					}
@@ -458,5 +458,5 @@
 				else if(iomodel->edges[i*3+2]==1){/*Horizontal edges*/
 					if(iomodel->my_edges[i]){
-						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum);
+						node = new Node(id0+iomodel->numberofvertices+3*i+1,counter+1,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 						nodes->AddObject(node);
 					}
@@ -471,9 +471,9 @@
 				if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 					if(iomodel->my_faces[i]){
-						node = new Node(id0+3*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum);
-						nodes->AddObject(node);
-						node = new Node(id0+3*i+2,counter+2,lid++,0,iomodel,analysis,FSvelocityEnum);
-						nodes->AddObject(node);
-						node = new Node(id0+3*i+3,counter+3,lid++,0,iomodel,analysis,FSvelocityEnum);
+						node = new Node(id0+3*i+1,counter+1,lid++,0,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(id0+3*i+2,counter+2,lid++,0,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(id0+3*i+3,counter+3,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 						nodes->AddObject(node);
 					}
@@ -492,5 +492,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(vnodes+i+1,counter+1,lid++,i,iomodel,analysis,FSpressureEnum));
+					nodes->AddObject(new Node(vnodes+i+1,counter+1,lid++,0,i,iomodel,analysis,FSpressureEnum));
 				}
 				counter++;
@@ -503,10 +503,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
 			for(i=0;i<iomodel->numberofedges;i++){
 				if(iomodel->my_edges[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -517,5 +517,5 @@
 					if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 						if(iomodel->my_faces[i]){
-							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum);
+							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 							nodes->AddObject(node);
 						}
@@ -532,5 +532,5 @@
 			for(i=0;i<iomodel->numberofelements;i++){
 				if(iomodel->my_elements[i]){
-					nodes->AddObject(new Node(id0+i+1,id0+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,id0+i,lid++,0,0,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -547,5 +547,5 @@
 				if(iomodel->my_elements[i]){
 					for(j=0;j<elementnbv;j++){
-						nodes->AddObject(new Node(vnodes+elementnbv*i+j+1,vnodes+elementnbv*i+j,lid++,iomodel->elements[+elementnbv*i+j]-1,iomodel,analysis,FSpressureEnum));
+						nodes->AddObject(new Node(vnodes+elementnbv*i+j+1,vnodes+elementnbv*i+j,lid++,0,iomodel->elements[+elementnbv*i+j]-1,iomodel,analysis,FSpressureEnum));
 
 					}
@@ -559,10 +559,10 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,i,lid++,0,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
 			for(i=0;i<iomodel->numberofedges;i++){
 				if(iomodel->my_edges[i]){
-					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,0,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -573,5 +573,5 @@
 					if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/
 						if(iomodel->my_faces[i]){
-							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum);
+							node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,0,iomodel,analysis,FSvelocityEnum);
 							nodes->AddObject(node);
 						}
@@ -588,5 +588,5 @@
 			for(i=0;i<iomodel->numberofelements;i++){
 				if(iomodel->my_elements[i]){
-					nodes->AddObject(new Node(id0+i+1,id0+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+					nodes->AddObject(new Node(id0+i+1,id0+i,lid++,0,0,iomodel,analysis,FSvelocityEnum));
 				}
 			}
