Index: /issm/trunk-jpl/src/c/classes/AmrBamg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21811)
+++ /issm/trunk-jpl/src/c/classes/AmrBamg.cpp	(revision 21812)
@@ -17,6 +17,7 @@
 
 /*Constructor, copy, clean up and destructor*/
-AmrBamg::AmrBamg(IssmDouble hmin, IssmDouble hmax){/*{{{*/
+AmrBamg::AmrBamg(IssmDouble hmin, IssmDouble hmax,int fieldenum_in,IssmDouble err){/*{{{*/
 
+	this->fieldenum    = fieldenum_in;
 	this->geometry     = NULL;
 	this->fathermesh   = NULL;
@@ -47,4 +48,9 @@
 	this->options->hmin              = hmin;
 	this->options->hmax              = hmax;
+
+	this->options->err=xNew<IssmDouble>(1);
+	this->options->errSize[0]=1;
+	this->options->errSize[1]=1;
+	this->options->err[0] = err;
 }
 /*}}}*/
@@ -80,5 +86,5 @@
 	delete Th;
 }/*}}}*/
-void AmrBamg::ExecuteRefinementBamg(int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
+void AmrBamg::ExecuteRefinementBamg(IssmDouble* field,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist){/*{{{*/
 
 	/*Intermediaries*/
@@ -90,12 +96,25 @@
 	_assert_(this->options);
 	_assert_(this->fathermesh);
+	_assert_(field);
+
+	/*Prepare field for metric*/
+	this->options->field = field;
 
 	/*remesh*/
 	if(this->previousmesh){
+		this->options->fieldSize[0] = this->previousmesh->VerticesSize[0];
+		this->options->fieldSize[1] = 1;
 		Bamgx(meshout,geomout,this->previousmesh,this->geometry,this->options);
 	}
 	else{
+		this->options->fieldSize[0] = this->fathermesh->VerticesSize[0];
+		this->options->fieldSize[1] = 1;
 		Bamgx(meshout,geomout,this->fathermesh,this->geometry,this->options);
 	}
+
+	/*remove field for memory management (FemModel is taking care of deleting it)*/
+	this->options->field = NULL;
+	this->options->fieldSize[0] = 0;
+	this->options->fieldSize[1] = 0;
 
 	/*Change previous mesh*/
Index: /issm/trunk-jpl/src/c/classes/AmrBamg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/AmrBamg.h	(revision 21811)
+++ /issm/trunk-jpl/src/c/classes/AmrBamg.h	(revision 21812)
@@ -13,11 +13,13 @@
 
 	public:
+		int fieldenum;
+
 		/* Constructor, destructor etc*/
-		AmrBamg(IssmDouble hmin, IssmDouble hmax);
+		AmrBamg(IssmDouble hmin, IssmDouble hmax,int fieldenum_in,IssmDouble err_in);
 		~AmrBamg();
 
 		/*General methods*/
 		void Initialize(int* elements,IssmDouble* x,IssmDouble* y,int numberofvertices,int numberofelements);
-		void ExecuteRefinementBamg(int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
+		void ExecuteRefinementBamg(IssmDouble* field,int* pnewnumberofvertices,int *pnewnumberofelements,IssmDouble** px,IssmDouble** py,IssmDouble** pz,int** pelementslist);
 
 	private:
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 21811)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 21812)
@@ -4301,6 +4301,14 @@
 	int my_rank	= IssmComm::GetRank();
 
+	/*Get vector to create metric*/
+	int numberofvertices = this->vertices->NumberOfVertices();
+	Vector<IssmDouble> *vector = new Vector<IssmDouble>(numberofvertices);
+	GetVectorFromInputsx(&vector,this,this->amrbamg->fieldenum,VertexSIdEnum);
+	vector->Assemble();
+	IssmDouble* vector_serial = vector->ToMPISerial();
+	delete vector;
+
 	if(my_rank==0){
-		this->amrbamg->ExecuteRefinementBamg(&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
+		this->amrbamg->ExecuteRefinementBamg(vector_serial,&newnumberofvertices,&newnumberofelements,&newx,&newy,&newz,&newelementslist);
 		if(newnumberofvertices<=0 || newnumberofelements<=0) _error_("Error in the refinement process.");
 	}
@@ -4311,4 +4319,5 @@
 		newelementslist=xNew<int>(newnumberofelements*this->GetElementsWidth());
 	}
+	xDelete<IssmDouble>(vector_serial);
 
 	/*Send new mesh to others CPU*/
@@ -4358,8 +4367,9 @@
 	this->parameters->FindParam(&err,AmrErrEnum);
 
-	/*Create bamg data structures for bamg (only cpu 0)*/
+	/*Create bamg data structures for bamg*/
+	this->amrbamg = new AmrBamg(hmin,hmax,fieldenum,err);
+
+	/*Re-create original mesh and put it in bamg structure (only cpu 0)*/
 	if(my_rank==0){ 
-		/*Re-create original mesh and put it in bamg structure*/
-		this->amrbamg = new AmrBamg(hmin,hmax);
 		this->amrbamg->Initialize(elements,x,y,numberofvertices,numberofelements);
 	}
