Index: /issm/trunk/src/c/objects/ParameterInputs.cpp
===================================================================
--- /issm/trunk/src/c/objects/ParameterInputs.cpp	(revision 3387)
+++ /issm/trunk/src/c/objects/ParameterInputs.cpp	(revision 3388)
@@ -385,4 +385,8 @@
 	}
 
+	ISSMERROR("create UpdateFromDakota routine, to call UpdateFromDakota in the elements, so it does not conflict
+			with UpdateFromInputs! in the elements");
+
+
 	/*Free ressources:*/
 	xfree((void**)&distributed_values);
Index: /issm/trunk/src/c/objects/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Tria.cpp	(revision 3387)
+++ /issm/trunk/src/c/objects/Tria.cpp	(revision 3388)
@@ -67,5 +67,96 @@
 /*}}}*/
 
-/*Object marshalling*/
+/*Object management: */
+/*FUNCTION Configure {{{1*/
+void  Tria::Configure(void* ploadsin,void* pnodesin,void* pmaterialsin,void* pparametersin){
+
+	int i;
+
+	DataSet* loadsin=NULL;
+	DataSet* nodesin=NULL;
+	DataSet* materialsin=NULL;
+	DataSet* parametersin=NULL;
+
+	/*Recover pointers :*/
+	loadsin=(DataSet*)ploadsin;
+	nodesin=(DataSet*)pnodesin;
+	materialsin=(DataSet*)pmaterialsin;
+	parametersin=(DataSet*)pparametersin;
+
+	/*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 
+	 * datasets, using internal ids and offsets hidden in hooks: */
+	hnodes.configure(nodesin);
+	hmatice.configure(materialsin);
+	hmatpar.configure(materialsin);
+	hnumpar.configure(parametersin);
+
+}
+/*}}}*/
+/*FUNCTION copy {{{1*/
+Object* Tria::copy() {
+
+	return new Tria(this->id,this->hnodes,this->hmatice,this->hmatpar,this->hnumpar,this->properties);
+
+}
+
+/*}}}*/
+/*FUNCTION Demarshall {{{1*/
+void  Tria::Demarshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+	int   i;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
+	 *object data (thanks to DataSet::Demarshall):*/
+
+	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
+
+	/*demarshall hooks: */
+	hnodes.Demarshall(&marshalled_dataset);
+	hmatice.Demarshall(&marshalled_dataset);
+	hmatpar.Demarshall(&marshalled_dataset);
+	hnumpar.Demarshall(&marshalled_dataset);
+
+	/*demarshall properties: */
+	properties.Demarshall(&marshalled_dataset);
+
+	/*return: */
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}*/
+/*FUNCTION DeepEcho{{{1*/
+
+void Tria::DeepEcho(void){
+
+	printf("Tria:\n");
+	printf("   id: %i\n",id);
+	hnodes.DeepEcho();
+	hmatice.DeepEcho();
+	hmatpar.DeepEcho();
+	hnumpar.DeepEcho();
+	properties.DeepEcho();
+
+	return;
+}
+/*}}}*/
+/*FUNCTION Echo{{{1*/
+
+void Tria::Echo(void){
+
+	printf("Tria:\n");
+	printf("   id: %i\n",id);
+	hnodes.Echo();
+	hmatice.Echo();
+	hmatpar.Echo();
+	hnumpar.Echo();
+	properties.Echo();
+
+	return;
+}
+/*}}}*/
 /*FUNCTION Marshall {{{1*/
 void  Tria::Marshall(char** pmarshalled_dataset){
@@ -111,86 +202,116 @@
 }
 /*}}}*/
-/*FUNCTION Demarshall {{{1*/
-void  Tria::Demarshall(char** pmarshalled_dataset){
-
-	char* marshalled_dataset=NULL;
-	int   i;
-
-	/*recover marshalled_dataset: */
-	marshalled_dataset=*pmarshalled_dataset;
-
-	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
-	 *object data (thanks to DataSet::Demarshall):*/
-
-	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
-
-	/*demarshall hooks: */
-	hnodes.Demarshall(&marshalled_dataset);
-	hmatice.Demarshall(&marshalled_dataset);
-	hmatpar.Demarshall(&marshalled_dataset);
-	hnumpar.Demarshall(&marshalled_dataset);
-
-	/*demarshall properties: */
-	properties.Demarshall(&marshalled_dataset);
-
-	/*return: */
-	*pmarshalled_dataset=marshalled_dataset;
-	return;
-}
-/*}}}*/
-
-/*Object processing: */
-/*FUNCTION Echo{{{1*/
-
-void Tria::Echo(void){
-
-	printf("Tria:\n");
-	printf("   id: %i\n",id);
-	hnodes.Echo();
-	hmatice.Echo();
-	hmatpar.Echo();
-	hnumpar.Echo();
-	properties.Echo();
-
-	return;
-}
-/*}}}*/
-/*FUNCTION DeepEcho{{{1*/
-
-void Tria::DeepEcho(void){
-
-	printf("Tria:\n");
-	printf("   id: %i\n",id);
-	hnodes.DeepEcho();
-	hmatice.DeepEcho();
-	hmatpar.DeepEcho();
-	hnumpar.DeepEcho();
-	properties.DeepEcho();
-
-	return;
-}
-/*}}}*/
-/*FUNCTION Configure {{{1*/
-void  Tria::Configure(void* ploadsin,void* pnodesin,void* pmaterialsin,void* pparametersin){
-
-	int i;
-
-	DataSet* loadsin=NULL;
-	DataSet* nodesin=NULL;
-	DataSet* materialsin=NULL;
-	DataSet* parametersin=NULL;
-
-	/*Recover pointers :*/
-	loadsin=(DataSet*)ploadsin;
-	nodesin=(DataSet*)pnodesin;
-	materialsin=(DataSet*)pmaterialsin;
-	parametersin=(DataSet*)pparametersin;
-
-	/*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 
-	 * datasets, using internal ids and offsets hidden in hooks: */
-	hnodes.configure(nodesin);
-	hmatice.configure(materialsin);
-	hmatpar.configure(materialsin);
-	hnumpar.configure(parametersin);
+/*FUNCTION UpdateFromInputs {{{1*/
+void  Tria::UpdateFromInputs(void* vinputs){
+
+	int     i;
+	int     dofs[1]={0};
+	double  temperature_list[3];
+	double  temperature_average;
+	double  B_list[3];
+	double  B_average;
+	double  new_h[3];
+
+	/*dynamic objects pointed to by hooks: */
+	Node**  nodes=NULL;
+	Matpar* matpar=NULL;
+	Matice* matice=NULL;
+	Numpar* numpar=NULL;
+
+	ParameterInputs* inputs=NULL;
+
+	/*recover pointers: */
+	inputs=(ParameterInputs*)vinputs;
+
+	/*recover objects from hooks: */
+	nodes=(Node**)hnodes.deliverp();
+	matpar=(Matpar*)hmatpar.delivers();
+	matice=(Matice*)hmatice.delivers();
+	numpar=(Numpar*)hnumpar.delivers();
+
+	/*Update internal data if inputs holds new values: */
+	//if (id==1) printf("WARNING if QMU: no hydrostatic equilibrium is applied here (conflict with prognostic, which does not have matpar)\n");
+	//For now
+	inputs->Recover("thickness",&this->properties.h[0],1,dofs,3,(void**)nodes);
+	//Later
+	/*
+		if(inputs->Recover("thickness",&new_h[0],1,dofs,3,(void**)nodes)){
+	//density, needed later:
+	double di=(this->matpar->GetRhoIce()/this->matpar->GetRhoWater());
+	//Go through grids:
+	for (i=0;i<3;i++){
+	if(nodes[i]->IsOnShelf()){
+	this->b[i]=this->b[i]-di*(new_h[i]-h[i]); //hydrostatic equilibrium;
+	}
+	this->s[i]=this->b[i]+new_h[i];
+	this->h[i]=new_h[i];
+	}
+	}
+	*/
+	inputs->Recover("surface",&this->properties.s[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("bed",&this->properties.b[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("drag",&this->properties.k[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("melting",&this->properties.melting[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("accumulation",&this->properties.accumulation[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("geothermalflux",&this->properties.geothermalflux[0],1,dofs,3,(void**)nodes);
+	
+	//Update material if necessary
+	if(inputs->Recover("temperature_average",&temperature_list[0],1,dofs,3,(void**)nodes)){
+		temperature_average=(temperature_list[0]+temperature_list[1]+temperature_list[2])/3.0;
+		B_average=Paterson(temperature_average);
+		matice->SetB(B_average);
+	}
+	
+	if(inputs->Recover("B",&B_list[0],1,dofs,3,(void**)nodes)){
+		B_average=(B_list[0]+B_list[1]+B_list[2])/3.0;
+		matice->SetB(B_average);
+	}
+
+}
+/*}}}*/
+/*FUNCTION UpdateFromDakota {{{1*/
+void  Tria::UpdateFromDakota(void* vinputs){
+
+	int     i;
+	int     dofs[1]={0};
+	double  temperature_list[3];
+	double  temperature_average;
+	double  B_list[3];
+	double  B_average;
+	double  new_h[3];
+
+	/*dynamic objects pointed to by hooks: */
+	Node**  nodes=NULL;
+	Matpar* matpar=NULL;
+	Matice* matice=NULL;
+	Numpar* numpar=NULL;
+
+	ParameterInputs* inputs=NULL;
+
+	/*recover pointers: */
+	inputs=(ParameterInputs*)vinputs;
+
+	/*recover objects from hooks: */
+	nodes=(Node**)hnodes.deliverp();
+	matpar=(Matpar*)hmatpar.delivers();
+	matice=(Matice*)hmatice.delivers();
+	numpar=(Numpar*)hnumpar.delivers();
+
+	/*Update internal data if inputs holds new values: */
+	inputs->Recover("thickness",&this->properties.h[0],1,dofs,3,(void**)nodes);
+	if(inputs->Recover("thickness",&new_h[0],1,dofs,3,(void**)nodes)){
+	//density, needed later:
+	double di=(this->matpar->GetRhoIce()/this->matpar->GetRhoWater());
+	//Go through grids:
+	for (i=0;i<3;i++){
+	if(nodes[i]->IsOnShelf()){
+	this->b[i]=this->b[i]-di*(new_h[i]-h[i]); //hydrostatic equilibrium;
+	}
+	this->s[i]=this->b[i]+new_h[i];
+	this->h[i]=new_h[i];
+	}
+	}
+
+	ISSMERROR("not supported yet!");
 
 }
@@ -232,11 +353,4 @@
 	/*plug local pressure values into global pressure vector: */
 	VecSetValues(pg,numgrids,doflist,(const double*)pressure,INSERT_VALUES);
-
-}
-/*}}}*/
-/*FUNCTION copy {{{1*/
-Object* Tria::copy() {
-
-	return new Tria(*this); 
 
 }
@@ -5206,70 +5320,2 @@
 }
 /*}}}*/
-/*FUNCTION UpdateFromInputs {{{1*/
-void  Tria::UpdateFromInputs(void* vinputs){
-
-	int     i;
-	int     dofs[1]={0};
-	double  temperature_list[3];
-	double  temperature_average;
-	double  B_list[3];
-	double  B_average;
-	double  new_h[3];
-
-	/*dynamic objects pointed to by hooks: */
-	Node**  nodes=NULL;
-	Matpar* matpar=NULL;
-	Matice* matice=NULL;
-	Numpar* numpar=NULL;
-
-	ParameterInputs* inputs=NULL;
-
-	/*recover pointers: */
-	inputs=(ParameterInputs*)vinputs;
-
-	/*recover objects from hooks: */
-	nodes=(Node**)hnodes.deliverp();
-	matpar=(Matpar*)hmatpar.delivers();
-	matice=(Matice*)hmatice.delivers();
-	numpar=(Numpar*)hnumpar.delivers();
-
-	/*Update internal data if inputs holds new values: */
-	//if (id==1) printf("WARNING if QMU: no hydrostatic equilibrium is applied here (conflict with prognostic, which does not have matpar)\n");
-	//For now
-	inputs->Recover("thickness",&this->properties.h[0],1,dofs,3,(void**)nodes);
-	//Later
-	/*
-		if(inputs->Recover("thickness",&new_h[0],1,dofs,3,(void**)nodes)){
-	//density, needed later:
-	double di=(this->matpar->GetRhoIce()/this->matpar->GetRhoWater());
-	//Go through grids:
-	for (i=0;i<3;i++){
-	if(nodes[i]->IsOnShelf()){
-	this->b[i]=this->b[i]-di*(new_h[i]-h[i]); //hydrostatic equilibrium;
-	}
-	this->s[i]=this->b[i]+new_h[i];
-	this->h[i]=new_h[i];
-	}
-	}
-	*/
-	inputs->Recover("surface",&this->properties.s[0],1,dofs,3,(void**)nodes);
-	inputs->Recover("bed",&this->properties.b[0],1,dofs,3,(void**)nodes);
-	inputs->Recover("drag",&this->properties.k[0],1,dofs,3,(void**)nodes);
-	inputs->Recover("melting",&this->properties.melting[0],1,dofs,3,(void**)nodes);
-	inputs->Recover("accumulation",&this->properties.accumulation[0],1,dofs,3,(void**)nodes);
-	inputs->Recover("geothermalflux",&this->properties.geothermalflux[0],1,dofs,3,(void**)nodes);
-	
-	//Update material if necessary
-	if(inputs->Recover("temperature_average",&temperature_list[0],1,dofs,3,(void**)nodes)){
-		temperature_average=(temperature_list[0]+temperature_list[1]+temperature_list[2])/3.0;
-		B_average=Paterson(temperature_average);
-		matice->SetB(B_average);
-	}
-	
-	if(inputs->Recover("B",&B_list[0],1,dofs,3,(void**)nodes)){
-		B_average=(B_list[0]+B_list[1]+B_list[2])/3.0;
-		matice->SetB(B_average);
-	}
-
-}
-/*}}}*/
Index: /issm/trunk/src/c/objects/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Tria.h	(revision 3387)
+++ /issm/trunk/src/c/objects/Tria.h	(revision 3388)
@@ -45,20 +45,22 @@
 		/*}}}*/
 		/*FUNCTION object management {{{1*/
+		void  Configure(void* loads,void* nodes,void* materials,void* parameters);
+		Object* copy();
+		void  DeepEcho();
+		void  Demarshall(char** pmarshalled_dataset);
 		void  Echo();
-		void  DeepEcho();
+		int   Enum();
+		int   GetId(); 
+		char* GetName();
 		void  Marshall(char** pmarshalled_dataset);
 		int   MarshallSize();
-		char* GetName();
-		void  Demarshall(char** pmarshalled_dataset);
-		int   Enum();
-		int   GetId(); 
 		int   MyRank();
-		/*}}}*/
+		void  UpdateFromDakota(void* inputs);
+		void  UpdateFromInputs(void* inputs);
+	/*}}}*/
 		/*FUNCTION element numerical routines {{{1*/
-		void  Configure(void* loads,void* nodes,void* materials,void* parameters);
 		void  CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type);
-		void  UpdateFromInputs(void* inputs);
-		void  GetDofList(int* doflist,int* pnumberofdofs);
+				void  GetDofList(int* doflist,int* pnumberofdofs);
 		void  GetDofList1(int* doflist);
 		void  CreateKMatrixDiagnosticHoriz(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type);
@@ -101,5 +103,4 @@
 		void  GetThicknessList(double* thickness_list);
 		void  GetBedList(double* bed_list);
-		Object* copy();
 		void  NodeConfiguration(int* tria_node_ids,Node* tria_nodes[3],int* tria_node_offsets);
 		void  MaticeConfiguration(Matice* matice,int matice_offset);
Index: /issm/trunk/src/c/objects/Vertex.cpp
===================================================================
--- /issm/trunk/src/c/objects/Vertex.cpp	(revision 3388)
+++ /issm/trunk/src/c/objects/Vertex.cpp	(revision 3388)
@@ -0,0 +1,274 @@
+/*!\file Vertex.c
+ * \brief: implementation of the Vertex object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Vertex.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
+#include "../include/macros.h"
+
+/*Object constructors and destructor*/
+/*FUNCTION Vertex default constructor {{{1*/
+Vertex::Vertex(){
+	return;
+}
+/*}}}*/
+/*FUNCTION Vertex constructor {{{1*/
+Vertex::Vertex(int tria_id, double tria_x, double tria_y, double tria_z){
+
+	/*all the initialization has been done by the initializer, just fill in the id: */
+	this->id=tria_id;
+	this->x=tria_x;
+	this->y=tria_y;
+	this->z=tria_z;
+
+	return;
+}
+/*}}}*/
+/*FUNCTION Vertex destructor {{{1*/
+Vertex::~Vertex(){
+	return;
+}
+/*}}}*/
+
+/*Object management*/
+/*FUNCTION copy {{{1*/
+Object* Vertex::copy() {
+
+	return new Vertex(*this); 
+
+}
+/*}}}*/
+/*FUNCTION DeepEcho{{{1*/
+
+void Vertex::DeepEcho(void){
+
+	printf("Vertex:\n");
+	printf("   id: %i\n",id);
+	hnodes.DeepEcho();
+	hmatice.DeepEcho();
+	hmatpar.DeepEcho();
+	hnumpar.DeepEcho();
+	properties.DeepEcho();
+
+	return;
+}
+/*}}}*/
+/*FUNCTION Demarshall {{{1*/
+void  Vertex::Demarshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+	int   i;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*this time, no need to get enum type, the pointer directly points to the beginning of the 
+	 *object data (thanks to DataSet::Demarshall):*/
+
+	memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
+
+	/*demarshall hooks: */
+	hnodes.Demarshall(&marshalled_dataset);
+	hmatice.Demarshall(&marshalled_dataset);
+	hmatpar.Demarshall(&marshalled_dataset);
+	hnumpar.Demarshall(&marshalled_dataset);
+
+	/*demarshall properties: */
+	properties.Demarshall(&marshalled_dataset);
+
+	/*return: */
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}*/
+/*FUNCTION Echo{{{1*/
+
+void Vertex::Echo(void){
+
+	printf("Vertex:\n");
+	printf("   id: %i\n",id);
+	hnodes.Echo();
+	hmatice.Echo();
+	hmatpar.Echo();
+	hnumpar.Echo();
+	properties.Echo();
+
+	return;
+}
+/*}}}*/
+/*FUNCTION Enum {{{1*/
+int Vertex::Enum(void){
+
+	return VertexEnum();
+
+}
+/*}}}*/
+/*FUNCTION Marshall {{{1*/
+void  Vertex::Marshall(char** pmarshalled_dataset){
+
+	char* marshalled_dataset=NULL;
+	int   enum_type=0;
+
+	/*recover marshalled_dataset: */
+	marshalled_dataset=*pmarshalled_dataset;
+
+	/*get enum type of Vertex: */
+	enum_type=VertexEnum();
+
+	/*marshall enum: */
+	memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
+
+	/*marshall Vertex data: */
+	memcpy(marshalled_dataset,&id,sizeof(id));marshalled_dataset+=sizeof(id);
+
+	/*Marshall hooks: */
+	hnodes.Marshall(&marshalled_dataset);
+	hmatice.Marshall(&marshalled_dataset);
+	hmatpar.Marshall(&marshalled_dataset);
+	hnumpar.Marshall(&marshalled_dataset);
+
+	/*Marshall properties: */
+	properties.Marshall(&marshalled_dataset);
+
+	*pmarshalled_dataset=marshalled_dataset;
+	return;
+}
+/*}}}*/
+/*FUNCTION MarshallSize {{{1*/
+int   Vertex::MarshallSize(){
+	
+	return sizeof(id)
+		+hnodes.MarshallSize()
+		+hmatice.MarshallSize()
+		+hmatpar.MarshallSize()
+		+hnumpar.MarshallSize()
+		+properties.MarshallSize()
+		+sizeof(int); //sizeof(int) for enum type
+}
+/*}}}*/
+/*FUNCTION MyRank {{{1*/
+int    Vertex::MyRank(void){ 
+	extern int my_rank;
+	return my_rank; 
+}
+/*}}}*/
+/*FUNCTION UpdateFromDakota {{{1*/
+void  Vertex::UpdateFromDakota(void* vinputs){
+
+	int     i;
+	int     dofs[1]={0};
+	double  temperature_list[3];
+	double  temperature_average;
+	double  B_list[3];
+	double  B_average;
+	double  new_h[3];
+
+	/*dynamic objects pointed to by hooks: */
+	Node**  nodes=NULL;
+	Matpar* matpar=NULL;
+	Matice* matice=NULL;
+	Numpar* numpar=NULL;
+
+	ParameterInputs* inputs=NULL;
+
+	/*recover pointers: */
+	inputs=(ParameterInputs*)vinputs;
+
+	/*recover objects from hooks: */
+	nodes=(Node**)hnodes.deliverp();
+	matpar=(Matpar*)hmatpar.delivers();
+	matice=(Matice*)hmatice.delivers();
+	numpar=(Numpar*)hnumpar.delivers();
+
+	/*Update internal data if inputs holds new values: */
+	inputs->Recover("thickness",&this->properties.h[0],1,dofs,3,(void**)nodes);
+		
+	if(inputs->Recover("thickness",&new_h[0],1,dofs,3,(void**)nodes)){
+	//density, needed later:
+	double di=(this->matpar->GetRhoIce()/this->matpar->GetRhoWater());
+	//Go through grids:
+	for (i=0;i<3;i++){
+	if(nodes[i]->IsOnShelf()){
+	this->b[i]=this->b[i]-di*(new_h[i]-h[i]); //hydrostatic equilibrium;
+	}
+	this->s[i]=this->b[i]+new_h[i];
+	this->h[i]=new_h[i];
+	}
+	}
+	
+}
+/*}}}*/
+/*FUNCTION UpdateFromInputs {{{1*/
+void  Vertex::UpdateFromInputs(void* vinputs){
+
+	int     i;
+	int     dofs[1]={0};
+	double  temperature_list[3];
+	double  temperature_average;
+	double  B_list[3];
+	double  B_average;
+	double  new_h[3];
+
+	/*dynamic objects pointed to by hooks: */
+	Node**  nodes=NULL;
+	Matpar* matpar=NULL;
+	Matice* matice=NULL;
+	Numpar* numpar=NULL;
+
+	ParameterInputs* inputs=NULL;
+
+	/*recover pointers: */
+	inputs=(ParameterInputs*)vinputs;
+
+	/*recover objects from hooks: */
+	nodes=(Node**)hnodes.deliverp();
+	matpar=(Matpar*)hmatpar.delivers();
+	matice=(Matice*)hmatice.delivers();
+	numpar=(Numpar*)hnumpar.delivers();
+
+	/*Update internal data if inputs holds new values: */
+	//if (id==1) printf("WARNING if QMU: no hydrostatic equilibrium is applied here (conflict with prognostic, which does not have matpar)\n");
+	//For now
+	inputs->Recover("thickness",&this->properties.h[0],1,dofs,3,(void**)nodes);
+	//Later
+	/*
+		if(inputs->Recover("thickness",&new_h[0],1,dofs,3,(void**)nodes)){
+	//density, needed later:
+	double di=(this->matpar->GetRhoIce()/this->matpar->GetRhoWater());
+	//Go through grids:
+	for (i=0;i<3;i++){
+	if(nodes[i]->IsOnShelf()){
+	this->b[i]=this->b[i]-di*(new_h[i]-h[i]); //hydrostatic equilibrium;
+	}
+	this->s[i]=this->b[i]+new_h[i];
+	this->h[i]=new_h[i];
+	}
+	}
+	*/
+	inputs->Recover("surface",&this->properties.s[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("bed",&this->properties.b[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("drag",&this->properties.k[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("melting",&this->properties.melting[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("accumulation",&this->properties.accumulation[0],1,dofs,3,(void**)nodes);
+	inputs->Recover("geothermalflux",&this->properties.geothermalflux[0],1,dofs,3,(void**)nodes);
+	
+	//Update material if necessary
+	if(inputs->Recover("temperature_average",&temperature_list[0],1,dofs,3,(void**)nodes)){
+		temperature_average=(temperature_list[0]+temperature_list[1]+temperature_list[2])/3.0;
+		B_average=Paterson(temperature_average);
+		matice->SetB(B_average);
+	}
+	
+	if(inputs->Recover("B",&B_list[0],1,dofs,3,(void**)nodes)){
+		B_average=(B_list[0]+B_list[1]+B_list[2])/3.0;
+		matice->SetB(B_average);
+	}
+
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Vertex.h
===================================================================
--- /issm/trunk/src/c/objects/Vertex.h	(revision 3388)
+++ /issm/trunk/src/c/objects/Vertex.h	(revision 3388)
@@ -0,0 +1,40 @@
+/*! \file Vertex.h 
+ *  \brief: header file for vertex object
+ */
+
+#ifndef _VERTEX_H_
+#define _VERTEX_H_
+
+
+class Vertex{
+
+	private: 
+
+		int  id;
+		double x;
+		double y;
+		double z;
+
+	public:
+
+		/*FUNCTION constructors, destructors {{{1*/
+		Vertex();
+		Vertex(int id, double x, double y, double z);
+		~Vertex();
+		/*}}}*/
+		/*FUNCTION object management {{{1*/
+		Object* copy();
+		void  DeepEcho();
+		void  Demarshall(char** pmarshalled_dataset);
+		void  Echo();
+		int   Enum();
+		int   Id(); 
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		int   MyRank();
+		void  UpdateFromDakota(void* vinputs);
+		void  UpdateFromInputs(void* vinputs);
+		/*}}}*/
+
+};
+#endif  /* _VERTEX_H */
