Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3371)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3372)
@@ -1087,4 +1087,21 @@
 	}
 
+
+}
+/*}}}*/
+/*FUNCTION DataSet::FieldAverageOntoVertices{{{1*/
+void  DataSet::FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname){
+
+	vector<Object*>::iterator object;
+	Node* node=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		if((*object)->Enum()==NodeEnum()){
+			node=(Node*)(*object);
+			node->FieldAverageOntoVertices(field,field_serial,fieldname);
+		}
+
+	}
 
 }
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3371)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3372)
@@ -84,4 +84,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  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 3372)
+++ /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp	(revision 3372)
@@ -0,0 +1,34 @@
+/*!\file FieldAverageOntoVerticesx
+ * \brief: average field throfieldh thickness
+ */
+
+#include "./FieldAverageOntoVerticesx.h"
+
+#include "../shared/shared.h"
+#include "../include/macros.h"
+#include "../toolkits/toolkits.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
+
+void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){
+
+	double* field_serial=NULL;
+
+	/*First, get elements and nodes configured: */
+	elements->Configure(elements,loads, nodes, materials,parameters);
+	nodes->Configure(elements,loads, nodes, materials,parameters);
+	parameters->Configure(elements,loads, nodes, materials,parameters);
+
+	/*Serialize field: */
+	VecToMPISerial(&field_serial,field);
+
+	/*Depth average field, onto base of mesh: */
+	nodes->FieldAverageOntoVertices(field,field_serial,fieldname);
+
+	/*Assemble vector: */
+	VecAssemblyBegin(field);
+	VecAssemblyEnd(field);
+
+	/*Free ressources:*/
+	xfree((void**)&field_serial);
+
+}
Index: /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h
===================================================================
--- /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h	(revision 3372)
+++ /issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h	(revision 3372)
@@ -0,0 +1,13 @@
+/*!\file:  FieldAverageOntoVerticesx.h
+ * \brief header file for averaging a field throfieldh thickness
+ */ 
+
+#ifndef _FIELDAVERAGEVERTICESX_H
+#define _FIELDAVERAGEVERTICESX_H
+
+#include "../DataSet/DataSet.h"
+
+/* local prototypes: */
+void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);
+
+#endif  /* _FIELDDEPTHAVERAGEX_H */
Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 3371)
+++ /issm/trunk/src/c/Makefile.am	(revision 3372)
@@ -329,4 +329,6 @@
 					./Qmux/SpawnCore.cpp\
 					./Qmux/SpawnCoreSerial.cpp\
+					./FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp\
+					./FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h\
 					./FieldDepthAveragex/FieldDepthAveragex.cpp\
 					./FieldDepthAveragex/FieldDepthAveragex.h\
@@ -705,4 +707,6 @@
 					./Qmux/SpawnCore.cpp\
 					./Qmux/SpawnCoreParallel.cpp\
+					./FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp\
+					./FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h\
 					./FieldDepthAveragex/FieldDepthAveragex.cpp\
 					./FieldDepthAveragex/FieldDepthAveragex.h\
Index: /issm/trunk/src/c/issm.h
===================================================================
--- /issm/trunk/src/c/issm.h	(revision 3371)
+++ /issm/trunk/src/c/issm.h	(revision 3372)
@@ -56,4 +56,5 @@
 #include "./CostFunctionx/CostFunctionx.h"
 #include "./ControlConstrainx/ControlConstrainx.h"
+#include "./FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h"
 #include "./FieldDepthAveragex/FieldDepthAveragex.h"
 #include "./ComputePressurex/ComputePressurex.h"
Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 3371)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 3372)
@@ -406,4 +406,10 @@
 }
 /*}}}*/
+/*FUNCTION Node FieldAverageOntoVertices{{{1*/
+void  Node::FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname){
+
+	ISSMERROR("NOT SUPPORTED YET"); // we need the vertex number !
+}
+/*}}}*/
 /*FUNCTION Node FieldDepthAverageAtBase{{{1*/
 void  Node::FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname){
Index: /issm/trunk/src/c/objects/Node.h
===================================================================
--- /issm/trunk/src/c/objects/Node.h	(revision 3371)
+++ /issm/trunk/src/c/objects/Node.h	(revision 3372)
@@ -83,4 +83,5 @@
 		int   IsOnSurface();
 		void  FreezeDof(int dof);
+		void  FieldAverageOntoVertices(Vec field,double* field_serial,char* fieldname);
 		void  FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname);
 		int   IsOnShelf();
Index: /issm/trunk/src/m/solutions/jpl/prognostic2_core.m
===================================================================
--- /issm/trunk/src/m/solutions/jpl/prognostic2_core.m	(revision 3371)
+++ /issm/trunk/src/m/solutions/jpl/prognostic2_core.m	(revision 3372)
@@ -23,5 +23,5 @@
 
 	displaystring(m.parameters.verbose,'\n%s',['extrude computed thickness on all layers:']);
-%	results.h_g=FieldExtrude(m.elements,m.nodes,m.loads,m.materials,m.parameters,results.h_g,'thickness',0);
+	results.h_g=FieldAverageOntoVertices(m.elements,m.nodes,m.loads,m.materials,m.parameters,results.h_g,'thickness');
 
 end %end function
Index: /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.cpp
===================================================================
--- /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.cpp	(revision 3372)
+++ /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.cpp	(revision 3372)
@@ -0,0 +1,61 @@
+/*\file FieldAverageOntoVertices.c
+ *\brief: average field throfieldh thickness
+ */
+
+#include "./FieldAverageOntoVertices.h"
+
+void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
+
+	/*diverse: */
+	int   noerr=1;
+
+	/*input datasets: */
+	DataSet* elements=NULL;
+	DataSet* nodes=NULL;
+	DataSet* loads=NULL;
+	DataSet* materials=NULL;
+	DataSet* parameters=NULL;
+	Vec      field=NULL;
+	char*    fieldname=NULL;
+
+	/*Boot module: */
+	MODULEBOOT();
+
+	/*checks on arguments on the matlab side: */
+	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&FieldAverageOntoVerticesUsage);
+
+	/*Input datasets: */
+	FetchData(&elements,ELEMENTS);
+	FetchData(&nodes,NODES);
+	FetchData(&loads,LOADS);
+	FetchData(&materials,MATERIALS);
+	FetchParams(&parameters,PARAMETERS);
+	FetchData(&field,FIELD);
+	FetchData(&fieldname,FIELDNAME);
+
+	/*!Call core code: */
+	FieldAverageOntoVerticesx(field,elements,nodes,loads,materials,parameters,fieldname);
+
+	/*write output : */
+	WriteData(FIELDOUT,field);
+
+	/*Free ressources: */
+	delete elements;
+	delete nodes;
+	delete loads;
+	delete materials;
+	delete parameters;
+	VecFree(&field);
+	xfree((void**)&fieldname);
+	
+	/*end module: */
+	MODULEEND();
+
+}
+
+void FieldAverageOntoVerticesUsage(void)
+{
+	_printf_("\n");
+	_printf_("   usage: [field] = %s(elements, nodes,loads, materials, parameters,field,fieldname);\n",__FUNCT__);
+	_printf_("\n");
+}
Index: /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h
===================================================================
--- /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h	(revision 3372)
+++ /issm/trunk/src/mex/FieldAverageOntoVertices/FieldAverageOntoVertices.h	(revision 3372)
@@ -0,0 +1,37 @@
+
+/*
+	FieldAverageOntoVertices.h
+*/
+
+
+#ifndef _FIELDAVERAGEONTOVERTICES_H
+#define _FIELDAVERAGEONTOVERTICES_H
+
+/* local prototypes: */
+void FieldAverageOntoVerticesUsage(void);
+
+#include "../../c/issm.h"
+
+#undef __FUNCT__ 
+#define __FUNCT__  "FieldAverageOntoVertices"
+
+/* serial input macros: */
+#define ELEMENTS (mxArray*)prhs[0]
+#define NODES (mxArray*)prhs[1]
+#define LOADS (mxArray*)prhs[2]
+#define MATERIALS (mxArray*)prhs[3]
+#define PARAMETERS (mxArray*)prhs[4]
+#define FIELD (mxArray*)prhs[5]
+#define FIELDNAME (mxArray*)prhs[6]
+
+/* serial output macros: */
+#define FIELDOUT (mxArray**)&plhs[0]
+
+/* serial arg counts: */
+#undef NLHS
+#define NLHS  1
+#undef NRHS
+#define NRHS  7
+
+
+#endif  /* _FIELDDEPTHAVERAGE_H */
Index: /issm/trunk/src/mex/Makefile.am
===================================================================
--- /issm/trunk/src/mex/Makefile.am	(revision 3371)
+++ /issm/trunk/src/mex/Makefile.am	(revision 3372)
@@ -5,7 +5,8 @@
 bin_PROGRAMS = 
 else
-bin_PROGRAMS =  BuildNodeSets\
+bin_PROGRAMS = AverageFilter\
 				Bamg\
 				BamgConvertMesh\
+				BuildNodeSets\
 				ComputePressure\
 				ConfigureObjects \
@@ -19,4 +20,7 @@
 				Echo\
 				ElementConnectivity\
+				FieldAverageOntoVertices\
+				FieldDepthAverage\
+				FieldExtrude\
 				Gradj\
 				HoleFiller \
@@ -25,5 +29,4 @@
 				InterpFromMeshToMesh3d \
 				InterpFromMeshToGrid \
-				AverageFilter\
 				MassFlux\
 				Mergesolutionfromftog\
@@ -50,5 +53,4 @@
 				SystemMatrices\
 				Test\
-				FieldExtrude\
 				TriMesh\
 				TriMeshNoDensity\
@@ -57,6 +59,5 @@
 				UpdateFromInputs\
 				UpdateNodePositions\
-				UpdateGeometry\
-				FieldDepthAverage
+				UpdateGeometry
 
 endif
@@ -125,4 +126,10 @@
 			  ElementConnectivity/ElementConnectivity.h
 
+FieldAverageOntoVertices_SOURCES = FieldAverageOntoVertices/FieldAverageOntoVertices.cpp\
+									 FieldAverageOntoVertices/FieldAverageOntoVertices.h
+
+FieldDepthAverage_SOURCES = FieldDepthAverage/FieldDepthAverage.cpp\
+			  FieldDepthAverage/FieldDepthAverage.h
+
 Gradj_SOURCES = Gradj/Gradj.cpp\
 			  Gradj/Gradj.h
@@ -242,4 +249,2 @@
 			  UpdateNodePositions/UpdateNodePositions.h
 
-FieldDepthAverage_SOURCES = FieldDepthAverage/FieldDepthAverage.cpp\
-			  FieldDepthAverage/FieldDepthAverage.h
