Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3555)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3556)
@@ -1073,5 +1073,5 @@
 /*}}}*/
 /*FUNCTION DataSet::FieldAverageOntoVertices{{{1*/
-void  DataSet::FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname){
+void DataSet::FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field){
 
 	vector<Object*>::iterator object;
@@ -1082,5 +1082,5 @@
 		if((*object)->Enum()==NodeEnum()){
 			node=(Node*)(*object);
-			node->FieldAverageOntoVertices(field,field_serial,fieldname);
+			node->FieldAverageOntoVertices(fieldsum,connectivity,field);
 		}
 
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3555)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3556)
@@ -88,5 +88,5 @@
 		void  CostFunction(double* pJ, void* inputs,int analysis_type,int sub_analysis_type);
 		void  SurfaceArea(double* pS, void* inputs,int analysis_type,int sub_analysis_type);
-		void  FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname);
+		void  FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field);
 		void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
 		int   DeleteObject(Object* object);
Index: /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp
===================================================================
--- /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp	(revision 3555)
+++ /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp	(revision 3556)
@@ -10,7 +10,21 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){
+void FieldAverageOntoVerticesx(Vec* pfield, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters){
 
+	extern int my_rank;
+
+	/*Intermediary*/
+	int     numberofvertices,found;
+	Vec     connectivity=NULL;
+	Vec     fieldsum=NULL;
 	double* field_serial=NULL;
+
+	/*Output*/
+	Vec field=NULL;
+
+	/*Initioalize intermediary*/
+	found=parameters->FindParam(&numberofvertices,"numberofvertices");
+	connectivity=NewVec(numberofvertices);
+	fieldsum    =NewVec(numberofvertices);
 
 	/*First, get elements and nodes configured: */
@@ -20,15 +34,29 @@
 
 	/*Serialize field: */
-	VecToMPISerial(&field_serial,field);
+	VecToMPISerial(&field_serial,*pfield);
 
-	/*Depth average field, onto base of mesh: */
-	nodes->FieldAverageOntoVertices(field,field_serial,fieldname);
+	/*Compute summ of connectivity and summ of values: */
+	nodes->FieldAverageOntoVertices(fieldsum,connectivity,field_serial);
 
-	/*Assemble vector: */
-	VecAssemblyBegin(field);
-	VecAssemblyEnd(field);
+	/*Assemble vectors: */
+	VecAssemblyBegin(connectivity);
+	VecAssemblyEnd(connectivity);
+	VecAssemblyBegin(fieldsum);
+	VecAssemblyEnd(fieldsum);
+
+	/*Initialize output*/
+	field=NewVec(numberofvertices);
+
+	/*Create Field = Fieldsum./connectivity */
+	VecPointwiseDivide(field,fieldsum,connectivity);
+
+	/*Assign output pointer*/
+	VecFree(pfield);
+	*pfield=field;
 
 	/*Free ressources:*/
 	xfree((void**)&field_serial);
+	VecFree(&connectivity);
+	VecFree(&fieldsum);
 
 }
Index: /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h
===================================================================
--- /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h	(revision 3555)
+++ /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h	(revision 3556)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);
+void FieldAverageOntoVerticesx(Vec* field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters);
 
 #endif  /* _FIELDDEPTHAVERAGEX_H */
Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 3555)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 3556)
@@ -484,7 +484,26 @@
 /*}}}*/
 /*FUNCTION Node::FieldAverageOntoVertices{{{2*/
-void  Node::FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname){
-
-	ISSMERROR("NOT SUPPORTED YET"); // we need the vertex number !
+void  Node::FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field){
+
+	/*Intermediary*/
+	int vertexdof;
+	int index;
+	double value;
+
+	/*Skip if clone*/
+	if (indexing.clone==1) return;
+
+	/*Check dofpernode*/
+	if (indexing.numberofdofs!=1) ISSMERROR("only one dof suppoerted yet");
+
+	/*Get value at node*/
+	index=indexing.doflist[0];
+	value=field[index];
+	printf("value[%i]=%g\n",id,value);
+
+	/*Add values to the two vectors*/
+	vertexdof=this->GetVertexDof();
+	VecSetValue(fieldsum,    vertexdof,value,ADD_VALUES);
+	VecSetValue(connectivity,vertexdof,1.0,  ADD_VALUES);
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Node.h
===================================================================
--- /issm/trunk/src/c/objects/Node.h	(revision 3555)
+++ /issm/trunk/src/c/objects/Node.h	(revision 3556)
@@ -83,5 +83,5 @@
 		int   IsOnSurface();
 		void  FreezeDof(int dof);
-		void  FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname);
+		void  FieldAverageOntoVertices(Vec fieldsum,Vec connectivity,double* field);
 		void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
 		int   IsOnShelf();
Index: /issm/trunk/src/c/objects/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Tria.cpp	(revision 3555)
+++ /issm/trunk/src/c/objects/Tria.cpp	(revision 3556)
@@ -1959,20 +1959,4 @@
 	MatSetValues(Kgg,numdof,doflist,numdof,doflist,(const double*)Ke_gg,ADD_VALUES);
 
-#ifdef _DEBUGELEMENTS_
-	if(my_rank==RANK && id==ELID){ 
-		printf("      Ke_gg erms:\n");
-		for( i=0; i<numdof; i++){
-			for (j=0;j<numdof;j++){
-				printf("%g ",Ke_gg[i][j]);
-			}
-			printf("\n");
-		}
-		printf("      Ke_gg row_indices:\n");
-		for( i=0; i<numdof; i++){
-			printf("%i ",doflist[i]);
-		}
-
-	}
-#endif
 
 cleanup_and_return: 
Index: /issm/trunk/src/c/parallel/ProcessResults.cpp
===================================================================
--- /issm/trunk/src/c/parallel/ProcessResults.cpp	(revision 3555)
+++ /issm/trunk/src/c/parallel/ProcessResults.cpp	(revision 3556)
@@ -106,5 +106,5 @@
 	double* v_g_serial=NULL;
 
-	int numberofnodes,numberofelements;
+	int numberofnodes,numberofvertices,numberofelements;
 
 	/*Initialize new results: */
@@ -350,18 +350,18 @@
 		}
 		else if(strcmp(result->GetFieldName(),"h_g")==0){
-			/*easy, h_g is of size numberofnodes, on 1 dof, just repartition: */
+			/*easy, h_g is of size numberofvertices, on 1 dof, just repartition: */
 			result->GetField(&h_g);
 			VecToMPISerial(&h_g_serial,h_g);
-			fem_p->parameters->FindParam(&numberofnodes,"numberofnodes");
+			fem_p->parameters->FindParam(&numberofvertices,"numberofvertices");
 			VecToMPISerial(&partition,fem_p->partition->vector);
 
-			thickness=(double*)xmalloc(numberofnodes*sizeof(double));
-
-			for(i=0;i<numberofnodes;i++){
+			thickness=(double*)xmalloc(numberofvertices*sizeof(double));
+
+			for(i=0;i<numberofvertices;i++){
 				thickness[i]=h_g_serial[(int)partition[i]];
 			}
 			
 			/*Ok, add pressure to newresults: */
-			newresult=new Result(newresults->Size()+1,result->GetTime(),result->GetStep(),"thickness",thickness,numberofnodes);
+			newresult=new Result(newresults->Size()+1,result->GetTime(),result->GetStep(),"thickness",thickness,numberofvertices);
 			newresults->AddObject(newresult);
 
Index: /issm/trunk/src/c/parallel/prognostic2_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic2_core.cpp	(revision 3555)
+++ /issm/trunk/src/c/parallel/prognostic2_core.cpp	(revision 3556)
@@ -56,6 +56,9 @@
 	diagnostic_core_linear(&h_g,fem_p,inputs,Prognostic2AnalysisEnum(),NoneAnalysisEnum());
 
-	_printf_("extrude computed thickness on all layers:\n");
-	//FieldAverageOntoVertices(h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
+	_printf_("Averaging over vertices:\n");
+	FieldAverageOntoVerticesx(&h_g,fem_p->elements,fem_p->nodes,fem_p->vertices,fem_p->loads,fem_p->materials,fem_p->parameters);
+
+	//_printf_("extrude computed thickness on all layers:\n");
+	//FieldExtrudex(h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
 
 	/*Plug results into output dataset: */
Index: /issm/trunk/src/c/shared/Elements/elements.h
===================================================================
--- /issm/trunk/src/c/shared/Elements/elements.h	(revision 3555)
+++ /issm/trunk/src/c/shared/Elements/elements.h	(revision 3556)
@@ -18,5 +18,17 @@
 		printf("   [ ");
 		for (j=0;j<cols;j++){
-			printf(" %10g ",array[i*cols+j]);
+			printf(" %10.10g ",array[i*cols+j]);
+		}  
+		printf(" ]\n");
+	}  
+	printf("\n");
+}
+inline void printarray(int* array,int lines,int cols){
+	int i,j;
+	printf("\n");
+	for (i=0;i<lines;i++){  
+		printf("   [ ");
+		for (j=0;j<cols;j++){
+			printf(" %i",array[i*cols+j]);
 		}  
 		printf(" ]\n");
Index: /issm/trunk/src/m/solutions/jpl/prognostic2_core.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/prognostic2_core.m	(revision 3555)
+++ /issm/trunk/src/m/solutions/jpl/prognostic2_core.m	(revision 3556)
@@ -25,4 +25,7 @@
 	results.h_g=diagnostic_core_linear(m,inputs,analysis_type,sub_analysis_type);
 
+	displaystring(m.parameters.verbose,'\n%s',['averaging over vertices']);
+	results.h_g=FieldAverageOntoVertices(m.elements,m.nodes,m.vertices,m.loads,m.materials,m.parameters,results.h_g);
+
 	displaystring(m.parameters.verbose,'\n%s',['extrude computed thickness on all layers:']);
 	%results.h_g=FieldAverageOntoVertices(m.elements,m.nodes,m.loads,m.materials,m.parameters,results.h_g,'thickness');
Index: /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.cpp
===================================================================
--- /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.cpp	(revision 3555)
+++ /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.cpp	(revision 3556)
@@ -18,5 +18,4 @@
 	DataSet* parameters=NULL;
 	Vec      field=NULL;
-	char*    fieldname=NULL;
 
 	/*Boot module: */
@@ -34,8 +33,7 @@
 	FetchParams(&parameters,PARAMETERS);
 	FetchData(&field,FIELD);
-	FetchData(&fieldname,FIELDNAME);
 
 	/*!Call core code: */
-	FieldAverageOntoVerticesx(field,elements,nodes,vertices,loads,materials,parameters,fieldname);
+	FieldAverageOntoVerticesx(&field,elements,nodes,vertices,loads,materials,parameters);
 
 	/*write output : */
@@ -50,5 +48,4 @@
 	delete parameters;
 	VecFree(&field);
-	xfree((void**)&fieldname);
 	
 	/*end module: */
@@ -60,5 +57,5 @@
 {
 	_printf_("\n");
-	_printf_("   usage: [field] = %s(elements, nodes,loads, materials, parameters,field,fieldname);\n",__FUNCT__);
+	_printf_("   usage: [field] = %s(elements, nodes,loads, materials, parameters,field);\n",__FUNCT__);
 	_printf_("\n");
 }
Index: /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h
===================================================================
--- /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h	(revision 3555)
+++ /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h	(revision 3556)
@@ -24,5 +24,4 @@
 #define PARAMETERS (mxArray*)prhs[5]
 #define FIELD (mxArray*)prhs[6]
-#define FIELDNAME (mxArray*)prhs[7]
 
 /* serial output macros: */
@@ -33,5 +32,5 @@
 #define NLHS  1
 #undef NRHS
-#define NRHS  8
+#define NRHS  7
 
 
