Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 11001)
@@ -47,5 +47,5 @@
 	iomodel->FetchData(4,MeshElementsEnum,MeshElementconnectivityEnum,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
 	#ifdef _HAVE_THREED_
-	if(dim==3)          iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+	if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
 	#endif
 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
@@ -76,5 +76,6 @@
 
 	/*Fetch data:*/
-	iomodel->FetchData(5,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
+	iomodel->FetchData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
+	CreateNumberNodeToElementConnectivity(iomodel);
 	
 	for (i=0;i<numberofvertices;i++){
@@ -89,5 +90,5 @@
 
 	/*Free data: */
-	iomodel->DeleteData(5,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
+	iomodel->DeleteData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 11001)
@@ -27,4 +27,7 @@
 	/*output*/
 	int* connectivity=NULL;
+
+	/*Check that this has not been done yet*/
+	if(iomodel->numbernodetoelementconnectivity) return;
 
 	/*Fetch parameters: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 11001)
@@ -45,5 +45,4 @@
 	/*First fetch data: */
 	iomodel->FetchData(7,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MeshElementsEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
-	CreateNumberNodeToElementConnectivity(iomodel);
 
 	for (i=0;i<numberofvertices;i++){
Index: /issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.cpp	(revision 11001)
@@ -185,16 +185,7 @@
 /*}}}*/
 /*FUNCTION BoolElementResult::GetVectorFromResults{{{1*/
-void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
+void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){
 
-	double *doublevalues=NULL;
-
-	/*Cast value to double vector*/
-	doublevalues=(double*)xmalloc(numdofs*sizeof(double));
-	for(int i=0;i<numdofs;i++) doublevalues[i]=double(this->value);
-
-	VecSetValues(vector,numdofs,doflist,(const double*)doublevalues,INSERT_VALUES);
-
-	/*cleanup*/
-	xfree((void**)&doublevalues);
+	_error_("cannot return vector on vertices");
 } /*}}}*/
 /*FUNCTION BoolElementResult::GetElementVectorFromResults{{{1*/
Index: /issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.h	(revision 11001)
@@ -53,5 +53,5 @@
 		/*BoolElementResult management: {{{1*/
 		int   InstanceEnum();
-		void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
+		void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs);
 		void GetElementVectorFromResults(Vec vector,int dof);
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ElementResults/DoubleElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/DoubleElementResult.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/DoubleElementResult.h	(revision 11001)
@@ -53,5 +53,5 @@
 		/*DoubleElementResult management: {{{1*/
 		int   InstanceEnum();
-		void GetVectorFromResults(Vec vector,int* doflist,int numdofs){_error_("not implemented");};
+		void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){_error_("not implemented");};
 		void GetElementVectorFromResults(Vec vector,int dof){_error_("not implemented");};
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ElementResults/ElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/ElementResult.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/ElementResult.h	(revision 11001)
@@ -25,5 +25,5 @@
 		virtual void    PatchFill(int row, Patch* patch)=0;
 		virtual int     InstanceEnum()=0;
-		virtual void    GetVectorFromResults(Vec vector,int* doflist,int numdof)=0;
+		virtual void    GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdof)=0;
 		virtual void    GetElementVectorFromResults(Vec vector,int dof)=0;
 
Index: /issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.cpp	(revision 11001)
@@ -195,8 +195,11 @@
 /*}}}*/
 /*FUNCTION PentaVertexElementResult::GetVectorFromResults{{{1*/
-void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
+void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){
+
+	double data[6];
 
 	if(numdofs!=6)_error_("Result %s is a PentaVertexElementResult and cannot write vector of %i dofs",numdofs);
-	VecSetValues(vector,numdofs,doflist,(const double*)this->values,INSERT_VALUES);
+	for(int i=0;i<6;i++) data[i]=this->values[i]/(double)connectivitylist[i];
+	VecSetValues(vector,numdofs,doflist,(const double*)&data,ADD_VALUES);
 
 } /*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.h	(revision 11001)
@@ -52,5 +52,5 @@
 		/*PentaVertexElementResult management: {{{1*/
 		int   InstanceEnum();
-		void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
+		void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs);
 		void GetElementVectorFromResults(Vec vector,int dof);
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.cpp	(revision 11001)
@@ -184,8 +184,11 @@
 /*}}}*/
 /*FUNCTION TriaVertexElementResult::GetVectorFromResults{{{1*/
-void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
+void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs){
+
+	double data[3];
 
 	if(numdofs!=3)_error_("Result %s is a TriaVertexElementResult and cannot write vector of %i dofs",numdofs);
-	VecSetValues(vector,numdofs,doflist,(const double*)this->values,INSERT_VALUES);
+	for(int i=0;i<3;i++) data[i]=this->values[i]/(double)connectivitylist[i];
+	VecSetValues(vector,numdofs,doflist,(const double*)&data,ADD_VALUES);
 
 } /*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.h	(revision 11001)
@@ -51,5 +51,5 @@
 		/*TriaVertexElementResult management: {{{1*/
 		int   InstanceEnum();
-		void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
+		void GetVectorFromResults(Vec vector,int* doflist,int* connectivitylist,int numdofs);
 		void GetElementVectorFromResults(Vec vector,int dof);
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Penta.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/Elements/Penta.cpp	(revision 11001)
@@ -817,4 +817,9 @@
 }
 /*}}}*/
+/*FUNCTION Penta::GetConnectivityList {{{1*/
+void  Penta::GetConnectivityList(int* connectivity){
+	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
+}
+/*}}}*/
 /*FUNCTION Penta::GetElementType {{{1*/
 int Penta::GetElementType(){
@@ -1141,12 +1146,12 @@
 void  Penta::GetVectorFromResults(Vec vector,int offset,int interp){
 
-	/*Prepare index list*/
-	int doflist1[NUMVERTICES];
-	this->GetSidList(&doflist1[0]);
-
 	/*Get result*/
 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
 	if(interp==P1Enum){
-		elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
+		int doflist1[NUMVERTICES];
+		int connectivity[NUMVERTICES];
+		this->GetSidList(&doflist1[0]);
+		this->GetConnectivityList(&connectivity[0]);
+		elementresult->GetVectorFromResults(vector,&doflist1[0],&connectivity[0],NUMVERTICES);
 	}
 	else if(interp==P0Enum){
Index: /issm/trunk-jpl/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Penta.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/Elements/Penta.h	(revision 11001)
@@ -169,4 +169,5 @@
 		void	  GetDofList1(int* doflist);
 		void    GetSidList(int* sidlist);
+		void    GetConnectivityList(int* connectivity);
 		int     GetElementType(void);
 		void    GetElementSizes(double* hx,double* hy,double* hz);
Index: /issm/trunk-jpl/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Tria.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/Elements/Tria.cpp	(revision 11001)
@@ -1178,8 +1178,10 @@
 /*FUNCTION Tria::GetSidList {{{1*/
 void  Tria::GetSidList(int* sidlist){
-
-	int i;
-	for(i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetSidList();
-
+	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetSidList();
+}
+/*}}}*/
+/*FUNCTION Tria::GetConnectivityList {{{1*/
+void  Tria::GetConnectivityList(int* connectivity){
+	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
 }
 /*}}}*/
@@ -1256,12 +1258,12 @@
 void  Tria::GetVectorFromResults(Vec vector,int offset,int interp){
 
-	/*Prepare index list*/
-	int doflist1[NUMVERTICES];
-	this->GetSidList(&doflist1[0]);
-
 	/*Get result*/
 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
 	if(interp==P1Enum){
-		elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
+		int doflist1[NUMVERTICES];
+		int connectivity[NUMVERTICES];
+		this->GetSidList(&doflist1[0]);
+		this->GetConnectivityList(&connectivity[0]);
+		elementresult->GetVectorFromResults(vector,&doflist1[0],&connectivity[0],NUMVERTICES);
 	}
 	else if(interp==P0Enum){
Index: /issm/trunk-jpl/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Elements/Tria.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/Elements/Tria.h	(revision 11001)
@@ -183,4 +183,5 @@
 		void	         GetDofList1(int* doflist);
 		void           GetSidList(int* sidlist);
+		void           GetConnectivityList(int* connectivity);
 		void           GetInputListOnVertices(double* pvalue,int enumtype);
 		void           GetInputListOnVertices(double* pvalue,int enumtype,double defaultvalue);
Index: /issm/trunk-jpl/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Node.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/Node.cpp	(revision 11001)
@@ -65,6 +65,4 @@
 	if (iomodel->Data(MaskVertexongroundediceEnum))
 	 this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,(IssmBool)iomodel->Data(MaskVertexongroundediceEnum)[io_index]));
-	if (iomodel->numbernodetoelementconnectivity)
-	 this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,(IssmInt)iomodel->numbernodetoelementconnectivity[io_index]));
 	if (analysis_type==DiagnosticHorizAnalysisEnum)
 	 this->inputs->AddInput(new IntInput(ApproximationEnum,(IssmInt)iomodel->Data(FlowequationVertexEquationEnum)[io_index]));
@@ -664,10 +662,8 @@
 /*FUNCTION Node::GetConnectivity {{{1*/
 int Node::GetConnectivity(){
-	int connectivity;
-
-	/*recover parameters: */
-	inputs->GetInputValue(&connectivity,NumberNodeToElementConnectivityEnum);
-
-	return connectivity;
+
+	Vertex*  vertex=NULL;
+	vertex=(Vertex*)hvertex->delivers();
+	return vertex->connectivity;
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/objects/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Vertex.cpp	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/Vertex.cpp	(revision 11001)
@@ -24,6 +24,6 @@
 /*}}}*/
 /*FUNCTION Vertex::Vertex(int vertex_id, double vertex_x, double vertex_y, double vertex_z, double vertex_sigma){{{1*/
-Vertex::Vertex(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma){
-	this->Init(vertex_id, vertex_sid,vertex_x, vertex_y, vertex_z, vertex_sigma);
+Vertex::Vertex(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma,int vertex_connectivity){
+	this->Init(vertex_id, vertex_sid,vertex_x, vertex_y, vertex_z, vertex_sigma,vertex_connectivity);
 }
 /*}}}*/
@@ -31,5 +31,8 @@
 Vertex::Vertex(int vertex_id, int vertex_sid,int i, IoModel* iomodel){
 
-	this->Init(vertex_id, vertex_sid, iomodel->Data(MeshXEnum)[i],iomodel->Data(MeshYEnum)[i],iomodel->Data(MeshZEnum)[i],(iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]));
+	_assert_(iomodel->Data(MeshXEnum) && iomodel->Data(MeshYEnum) && iomodel->Data(MeshZEnum));
+	_assert_(iomodel->Data(BedEnum) && iomodel->Data(ThicknessEnum) && iomodel->numbernodetoelementconnectivity);
+
+	this->Init(vertex_id, vertex_sid, iomodel->Data(MeshXEnum)[i],iomodel->Data(MeshYEnum)[i],iomodel->Data(MeshZEnum)[i],(iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]),iomodel->numbernodetoelementconnectivity[i]);
 
 }
@@ -41,5 +44,5 @@
 /*}}}*/
 /*FUNCTION Vertex::Init{{{1*/
-void Vertex::Init(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma){
+void Vertex::Init(int vertex_id, int vertex_sid,double vertex_x, double vertex_y, double vertex_z, double vertex_sigma,int vertex_connectivity){
 
 	/*all the initialization has been done by the initializer, just fill in the id: */
@@ -50,4 +53,5 @@
 	this->z=vertex_z;
 	this->sigma=vertex_sigma;
+	this->connectivity=vertex_connectivity;
 	this->dof=UNDEF;
 
@@ -67,4 +71,5 @@
 	printf("   z: %g\n",z);
 	printf("   sigma: %g\n",sigma);
+	printf("   connectivity: %g\n",connectivity);
 	printf("   dof: %i\n",dof);
 	printf("   clone: %i\n",clone);
@@ -74,5 +79,4 @@
 /*}}}*/
 /*FUNCTION Vertex::DeepEcho{{{1*/
-
 void Vertex::DeepEcho(void){
 	this->Echo();
@@ -111,4 +115,5 @@
 	memcpy(marshalled_dataset,&z,sizeof(z));marshalled_dataset+=sizeof(z);
 	memcpy(marshalled_dataset,&sigma,sizeof(sigma));marshalled_dataset+=sizeof(sigma);
+	memcpy(marshalled_dataset,&connectivity,sizeof(connectivity));marshalled_dataset+=sizeof(connectivity);
 	memcpy(marshalled_dataset,&dof,sizeof(dof));marshalled_dataset+=sizeof(dof);
 	memcpy(marshalled_dataset,&clone,sizeof(clone));marshalled_dataset+=sizeof(clone);
@@ -127,4 +132,5 @@
 		sizeof(z)+
 		sizeof(sigma)+
+		sizeof(connectivity)+
 		sizeof(dof)+
 		sizeof(clone)+
@@ -150,4 +156,5 @@
 	memcpy(&z,marshalled_dataset,sizeof(z));marshalled_dataset+=sizeof(z);
 	memcpy(&sigma,marshalled_dataset,sizeof(sigma));marshalled_dataset+=sizeof(sigma);
+	memcpy(&connectivity,marshalled_dataset,sizeof(connectivity));marshalled_dataset+=sizeof(connectivity);
 	memcpy(&dof,marshalled_dataset,sizeof(dof));marshalled_dataset+=sizeof(dof);
 	memcpy(&clone,marshalled_dataset,sizeof(clone));marshalled_dataset+=sizeof(clone);
@@ -259,4 +266,7 @@
 
 /*Vertex management: */
+/*FUNCTION Vertex::Connectivity{{{1*/
+int    Vertex::Connectivity(void){return connectivity;}
+/*}}}*/
 /*FUNCTION Vertex::Sid{{{1*/
 int    Vertex::Sid(void){ return sid; }
Index: /issm/trunk-jpl/src/c/objects/Vertex.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Vertex.h	(revision 11000)
+++ /issm/trunk-jpl/src/c/objects/Vertex.h	(revision 11001)
@@ -21,10 +21,11 @@
 	public: 
 
-		int  id;
-		int  sid; //sid for "serial" id, ie the rank of this vertex in the vertices dataset, if the dataset was serial on 1 cpu.
+		int    id;
+		int    sid;            //sid for "serial" id, ie the rank of this vertex in the vertices dataset, if the dataset was serial on 1 cpu.
 		double x;
 		double y;
 		double z;
-		double sigma; //sigma coordinate: (z-bed)/thickness
+		double sigma;          //sigma coordinate: (z-bed)/thickness
+		int    connectivity;   //number of vertices connected to this vertex
 
 		/*dof management: */
@@ -34,6 +35,6 @@
 		/*Vertex constructors, destructors {{{1*/
 		Vertex();
-		Vertex(int id, int sid,double x, double y, double z, double sigma); 
-		void Init(int id, int sid, double x, double y, double z, double sigma);
+		Vertex(int id, int sid,double x, double y, double z, double sigma, int connectivity); 
+		void Init(int id, int sid, double x, double y, double z, double sigma,int connectivity);
 		Vertex(int id, int sid, int i, IoModel* iomodel);
 		~Vertex();
@@ -61,4 +62,5 @@
 		/*Vertex management: {{{1*/
 		int   Sid(void); 
+		int   Connectivity(void); 
 		void  UpdatePosition(double* thickness,double* bed);
 		/*}}}*/
