Index: /issm/trunk/src/c/objects/Elements/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 4921)
@@ -980,14 +980,4 @@
 }
 /*}}}*/
-/*FUNCTION Beam::GetParameterValue{{{1*/
-void Beam::GetParameterValue(double* pvalue, double* value_list,double gauss_coord){
-
-	double l1l2[2];
-	
-	GetNodalFunctions(&l1l2[0],gauss_coord);
-
-	*pvalue=l1l2[0]*value_list[0]+l1l2[1]*value_list[1];
-}
-/*}}}*/
 /*FUNCTION Beam::IsInput{{{1*/
 bool Beam::IsInput(int name){
Index: /issm/trunk/src/c/objects/Elements/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.h	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/Beam.h	(revision 4921)
@@ -115,6 +115,4 @@
 		void	  GetDofList(int* doflist,int* pnumberofdofs);
 		void	  GetDofList1(int* doflist);
-		void	  GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3);
-		void	  GetParameterValue(double* pvalue, double* value_list,double gauss_coord);
 		bool	  IsInput(int name);
 		void	  SetClone(int* minranks);
Index: /issm/trunk/src/c/objects/Elements/BeamRef.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/BeamRef.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/BeamRef.cpp	(revision 4921)
@@ -69,2 +69,15 @@
 }
 /*}}}*/
+/*FUNCTION BeamRef::GetParameterValue{{{1*/
+void BeamRef::GetParameterValue(double* pvalue, double* value_list,double gauss_coord){
+
+	/*Nodal functions*/
+	double l1l2[2];
+
+	/*Get nodal functions*/
+	GetNodalFunctions(&l1l2[0],gauss_coord);
+
+	/*Assign output pointer*/
+	*pvalue=l1l2[0]*value_list[0]+l1l2[1]*value_list[1];
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Elements/BeamRef.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/BeamRef.h	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/BeamRef.h	(revision 4921)
@@ -25,4 +25,5 @@
 		void GetJacobianDeterminant(double* Jdet, double* z_list,double gauss);
 		void GetNodalFunctions(double* l1l2, double gauss);
+		void GetParameterValue(double* pvalue, double* value_list,double gauss_coord);
 
 };
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 4921)
@@ -4083,15 +4083,4 @@
 }
 /*}}}*/
-/*FUNCTION Penta::GetParameterValue(double* pvalue, double* v_list,double* gauss_coord) {{{1*/
-void Penta::GetParameterValue(double* pvalue, double* v_list,double* gauss_coord){
-
-	const int numgrids=6;
-	double l1l6[numgrids];
-
-	GetNodalFunctionsP1(&l1l6[0], gauss_coord);
-
-	*pvalue=l1l6[0]*v_list[0]+l1l6[1]*v_list[1]+l1l6[2]*v_list[2]+l1l6[3]*v_list[3]+l1l6[4]*v_list[4]+l1l6[5]*v_list[5];
-}
-/*}}}*/
 /*FUNCTION Penta::GetParameterValue(double* pvalue,Node* node1,Node* node2,double gauss_seg,int enumtype) {{{1*/
 void Penta::GetParameterValue(double* pvalue,Node* node,int enumtype){
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 4921)
@@ -146,5 +146,4 @@
 		void	  GetNodalFunctionsDerivativesStokes(double* dh1dh7,double* xyz_list, double* gauss_coord);
 		void	  GetNodalFunctionsStokes(double* l1l7, double* gauss_coord);
-		void	  GetParameterValue(double* pvalue, double* v_list,double* gauss_coord);
 		void    GetParameterValue(double* pvalue,Node* node,int enumtype);
 		void	  GetPhi(double* phi, double*  epsilon, double viscosity);
Index: /issm/trunk/src/c/objects/Elements/PentaRef.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/PentaRef.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/PentaRef.cpp	(revision 4921)
@@ -908,2 +908,38 @@
 }
 /*}}}*/
+/*FUNCTION PentaRef::GetParameterValue{{{1*/
+void PentaRef::GetParameterValue(double* pvalue,double* plist,double* gauss){
+	/*P1 interpolation on Gauss point*/
+
+	/*intermediary*/
+	double l1l6[6];
+
+	/*nodal functions: */
+	GetNodalFunctionsP1(&l1l6[0],gauss);
+
+	/*Assign output pointers:*/
+	*pvalue=l1l6[0]*plist[0]+l1l6[1]*plist[1]+l1l6[2]*plist[2]+l1l6[3]*plist[3]+l1l6[4]*plist[4]+l1l6[5]*plist[5];
+
+}
+/*}}}*/
+/*FUNCTION PentaRef::GetParameterDerivativeValue{{{1*/
+void PentaRef::GetParameterDerivativeValue(double* p, double* plist,double* xyz_list, double* gauss){
+	/*From grid values of parameter p (p_list[0], p_list[1], p_list[2], p_list[3], p_list[4] and p_list[4]), return parameter derivative value at gaussian point specified by gauss_coord:
+	 *   dp/dx=p_list[0]*dh1/dx+p_list[1]*dh2/dx+p_list[2]*dh3/dx+p_list[3]*dh4/dx+p_list[4]*dh5/dx+p_list[5]*dh6/dx;
+	 *   dp/dy=p_list[0]*dh1/dy+p_list[1]*dh2/dy+p_list[2]*dh3/dy+p_list[3]*dh4/dy+p_list[4]*dh5/dy+p_list[5]*dh6/dy;
+	 *   dp/dz=p_list[0]*dh1/dz+p_list[1]*dh2/dz+p_list[2]*dh3/dz+p_list[3]*dh4/dz+p_list[4]*dh5/dz+p_list[5]*dh6/dz;
+	 *
+	 *   p is a vector of size 3x1 already allocated.
+	 */
+	double dh1dh6[3][6];
+
+	/*Get nodal funnctions derivatives in actual coordinate system: */
+	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
+
+	/*Assign output*/
+	p[0]=plist[0]*dh1dh6[0][0]+plist[1]*dh1dh6[0][1]+plist[2]*dh1dh6[0][2]+plist[3]*dh1dh6[0][3]+plist[4]*dh1dh6[0][4]+plist[5]*dh1dh6[0][5];
+	p[1]=plist[0]*dh1dh6[1][0]+plist[1]*dh1dh6[1][1]+plist[2]*dh1dh6[1][2]+plist[3]*dh1dh6[1][3]+plist[4]*dh1dh6[1][4]+plist[5]*dh1dh6[1][5];
+	p[2]=plist[0]*dh1dh6[2][0]+plist[1]*dh1dh6[2][1]+plist[2]*dh1dh6[2][2]+plist[3]*dh1dh6[2][3]+plist[4]*dh1dh6[2][4]+plist[5]*dh1dh6[2][5];
+
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Elements/PentaRef.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/PentaRef.h	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/PentaRef.h	(revision 4921)
@@ -44,4 +44,6 @@
 		void GetLStokes(double* LStokes, double* gauss_tria);
 		void GetLprimeStokes(double* LprimeStokes, double* xyz_list, double* gauss_tria, double* gauss);
+		void GetParameterValue(double* pvalue,double* plist,double* gauss);
+		void GetParameterDerivativeValue(double* pvalues, double* plist,double* xyz_list, double* gauss);
 
 };
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4921)
@@ -1152,5 +1152,5 @@
 		//if (drag_type==2) friction->GetAlphaComplement(&alpha_complement, gauss_l1l2l3,VxEnum,VyEnum); // TO BE UNCOMMENTED
 		//else alpha_complement=0;
-		GetParameterValue(&alpha_complement,&alpha2complement_list[0],gauss_l1l2l3); // TO BE DELETED
+		TriaRef::GetParameterValue(&alpha_complement,&alpha2complement_list[0],gauss_l1l2l3); // TO BE DELETED
 	
 		/*Recover alpha_complement and k: */
@@ -1923,5 +1923,5 @@
 
 		/*Compute misfit at gaussian point: */
-		GetParameterValue(&misfit, &misfit_list[0],gauss_l1l2l3);
+		TriaRef::GetParameterValue(&misfit, &misfit_list[0],gauss_l1l2l3);
 
 		/*compute Misfit*/
@@ -2973,5 +2973,5 @@
 		/*Friction: */
 		// friction->GetAlpha2(&alpha2, gauss_l1l2l3,VxEnum,VyEnum,VzEnum); // TO UNCOMMENT
-		GetParameterValue(&alpha2,&alpha2_list[0],gauss_l1l2l3); // TO BE DELETED
+		TriaRef::GetParameterValue(&alpha2,&alpha2_list[0],gauss_l1l2l3); // TO BE DELETED
 
 		// If we have a slope > 6% for this element,  it means  we are on a mountain. In this particular case, 
@@ -4427,6 +4427,6 @@
 
 		/*Compute absolute(x/y) at gaussian point: */
-		GetParameterValue(&dux, &dux_list[0],gauss_l1l2l3);
-		GetParameterValue(&duy, &duy_list[0],gauss_l1l2l3);
+		TriaRef::GetParameterValue(&dux, &dux_list[0],gauss_l1l2l3);
+		TriaRef::GetParameterValue(&duy, &duy_list[0],gauss_l1l2l3);
 
 		/*compute Du*/
@@ -4667,6 +4667,6 @@
 
 		/*Compute absolute(x/y) at gaussian point: */
-		GetParameterValue(&dux, &dux_list[0],gauss_l1l2l3);
-		GetParameterValue(&duy, &duy_list[0],gauss_l1l2l3);
+		TriaRef::GetParameterValue(&dux, &dux_list[0],gauss_l1l2l3);
+		TriaRef::GetParameterValue(&duy, &duy_list[0],gauss_l1l2l3);
 
 		/*compute Du*/
@@ -5242,5 +5242,5 @@
 		/*Friction: */
 		//friction->GetAlpha2(&alpha2,&gauss_coord[0],VxEnum,VyEnum,VzEnum);
-		GetParameterValue(&basalfriction,&basalfriction_list[0],gauss_coord); // TO BE DELETED
+		TriaRef::GetParameterValue(&basalfriction,&basalfriction_list[0],gauss_coord); // TO BE DELETED
 		
 		/*Calculate scalar parameter*/
@@ -5359,47 +5359,4 @@
 	}
 
-}
-/*}}}*/
-/*FUNCTION Tria::GetParameterDerivativeValue {{{1*/
-void Tria::GetParameterDerivativeValue(double* p, double* plist,double* xyz_list, double* gauss_l1l2l3){
-	 
-	const int NDOF2=2;
-	const int numgrids=3;
-	/*From node values of parameter p (plist[0],plist[1],plist[2]), return parameter derivative value at gaussian 
-	 * point specified by gauss_l1l2l3:
-	 *   dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx
-	 *   dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx
-	 *
-	 * p is a vector of size 2x1 already allocated.
-	 */
-	
-	double dh1dh3[NDOF2][numgrids]; //nodal derivative functions in actual coordinate system.
-
-	/*Get dh1dh2dh3 in actual coordinate system: */
-	GetNodalFunctionsDerivatives(&dh1dh3[0][0],xyz_list, gauss_l1l2l3);
-
-	*(p+0)=plist[0]*dh1dh3[0][0]+plist[1]*dh1dh3[0][1]+plist[2]*dh1dh3[0][2];
-	*(p+1)=plist[0]*dh1dh3[1][0]+plist[1]*dh1dh3[1][1]+plist[2]*dh1dh3[1][2];
-
-}
-/*}}}*/
-/*FUNCTION Tria::GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3) {{{1*/
-void Tria::GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3){
-	
-	/*From node values of parameter p (plist[0],plist[1],plist[2]), return parameter value at gaussian 
-	 * point specifie by gauss_l1l2l3: */
-	
-	/*nodal functions: */
-	double l1l2l3[3];
-
-	/*output: */
-	double p;
-
-	GetNodalFunctions(l1l2l3, gauss_l1l2l3);
-
-	p=l1l2l3[0]*plist[0]+l1l2l3[1]*plist[1]+l1l2l3[2]*plist[2];
-
-	/*Assign output pointers:*/
-	*pp=p;
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 4921)
@@ -141,5 +141,4 @@
 		void	  GetDofList(int* doflist,int* pnumberofdofs);
 		void	  GetDofList1(int* doflist);
-		void	  GetParameterDerivativeValue(double* p, double* plist,double* xyz_list, double* gauss_l1l2l3);
 		void	  GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3);
 		void    GetParameterValue(double* pvalue,Node* node,int enumtype);
Index: /issm/trunk/src/c/objects/Elements/TriaRef.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/TriaRef.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/TriaRef.cpp	(revision 4921)
@@ -358,2 +358,41 @@
 }
 /*}}}*/
+/*FUNCTION TriaRef::GetParameterDerivativeValue {{{1*/
+void TriaRef::GetParameterDerivativeValue(double* p, double* plist,double* xyz_list, double* gauss){
+
+	/*From node values of parameter p (plist[0],plist[1],plist[2]), return parameter derivative value at gaussian 
+	 * point specified by gauss_l1l2l3:
+	 *   dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx
+	 *   dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx
+	 *
+	 * p is a vector of size 2x1 already allocated.
+	 */
+
+	/*Nodal Derivatives*/
+	double dh1dh3[2][3]; //nodal derivative functions in actual coordinate system.
+
+	/*Get dh1dh2dh3 in actual coordinate system: */
+	GetNodalFunctionsDerivatives(&dh1dh3[0][0],xyz_list, gauss);
+
+	/*Assign values*/
+	*(p+0)=plist[0]*dh1dh3[0][0]+plist[1]*dh1dh3[0][1]+plist[2]*dh1dh3[0][2];
+	*(p+1)=plist[0]*dh1dh3[1][0]+plist[1]*dh1dh3[1][1]+plist[2]*dh1dh3[1][2];
+
+}
+/*}}}*/
+/*FUNCTION TriaRef::GetParameterValue{{{1*/
+void TriaRef::GetParameterValue(double* p, double* plist, double* gauss){
+
+	/*From node values of parameter p (plist[0],plist[1],plist[2]), return parameter value at gaussian 
+	 * point specifie by gauss: */
+
+	/*nodal functions annd output: */
+	double l1l2l3[3];
+
+	/*Get nodal functions*/
+	GetNodalFunctions(l1l2l3, gauss);
+
+	/*Get parameter*/
+	*p=l1l2l3[0]*plist[0]+l1l2l3[1]*plist[1]+l1l2l3[2]*plist[2];
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Elements/TriaRef.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/TriaRef.h	(revision 4920)
+++ /issm/trunk/src/c/objects/Elements/TriaRef.h	(revision 4921)
@@ -35,4 +35,6 @@
 		void GetNodalFunctionsDerivatives(double* l1l2l3,double* xyz_list, double* gauss);
 		void GetNodalFunctionsDerivativesReference(double* dl1dl3,double* gauss);
+		void GetParameterValue(double* pp, double* plist, double* gauss);
+		void GetParameterDerivativeValue(double* pp, double* plist,double* xyz_list, double* gauss);
 
 };
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 4921)
@@ -212,14 +212,7 @@
 /*FUNCTION PentaVertexInput::GetParameterValue(double* pvalue,double* gauss){{{1*/
 void PentaVertexInput::GetParameterValue(double* pvalue,double* gauss){
-	/*P1 interpolation on Gauss point*/
-
-	/*intermediary*/
-	double l1l6[6];
-
-	/*nodal functions: */
-	GetNodalFunctionsP1(&l1l6[0],gauss);
-
-	/*Assign output pointers:*/
-	*pvalue=l1l6[0]*values[0]+l1l6[1]*values[1]+l1l6[2]*values[2]+l1l6[3]*values[3]+l1l6[4]*values[4]+l1l6[5]*values[5];
+
+	/*Call PentaRef function*/
+	PentaRef::GetParameterValue(pvalue,&values[0],gauss);
 
 }
@@ -247,23 +240,7 @@
 /*FUNCTION PentaVertexInput::GetParameterDerivativeValue{{{1*/
 void PentaVertexInput::GetParameterDerivativeValue(double* p, double* xyz_list, double* gauss){
-	/*From grid values of parameter p (p_list[0], p_list[1], p_list[2], p_list[3], p_list[4] and p_list[4]), return parameter derivative value at gaussian point specified by gauss_coord:
-	 *   dp/dx=p_list[0]*dh1/dx+p_list[1]*dh2/dx+p_list[2]*dh3/dx+p_list[3]*dh4/dx+p_list[4]*dh5/dx+p_list[5]*dh6/dx;
-	 *   dp/dy=p_list[0]*dh1/dy+p_list[1]*dh2/dy+p_list[2]*dh3/dy+p_list[3]*dh4/dy+p_list[4]*dh5/dy+p_list[5]*dh6/dy;
-	 *   dp/dz=p_list[0]*dh1/dz+p_list[1]*dh2/dz+p_list[2]*dh3/dz+p_list[3]*dh4/dz+p_list[4]*dh5/dz+p_list[5]*dh6/dz;
-	 *
-	 *   p is a vector of size 3x1 already allocated.
-	 */
-
-	const int NDOF3=3;
-	const int numgrids=6;
-	double dh1dh6[NDOF3][numgrids];
-
-	/*Get nodal funnctions derivatives in actual coordinate system: */
-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
-
-	p[0]=this->values[0]*dh1dh6[0][0]+this->values[1]*dh1dh6[0][1]+this->values[2]*dh1dh6[0][2]+this->values[3]*dh1dh6[0][3]+this->values[4]*dh1dh6[0][4]+this->values[5]*dh1dh6[0][5];
-	p[1]=this->values[0]*dh1dh6[1][0]+this->values[1]*dh1dh6[1][1]+this->values[2]*dh1dh6[1][2]+this->values[3]*dh1dh6[1][3]+this->values[4]*dh1dh6[1][4]+this->values[5]*dh1dh6[1][5];
-	p[2]=this->values[0]*dh1dh6[2][0]+this->values[1]*dh1dh6[2][1]+this->values[2]*dh1dh6[2][2]+this->values[3]*dh1dh6[2][3]+this->values[4]*dh1dh6[2][4]+this->values[5]*dh1dh6[2][5];
-
+
+	/*Call PentaRef function*/
+	PentaRef::GetParameterDerivativeValue(p,&values[0],xyz_list,gauss);
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 4920)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 4921)
@@ -142,5 +142,5 @@
 }
 /*}}}*/
-/*FUNCTION BeamVertexInput::SpawnBeamInput{{{1*/
+/*FUNCTION TriaVertexInput::SpawnBeamInput{{{1*/
 Input* TriaVertexInput::SpawnBeamInput(int* indices){
 
@@ -192,14 +192,7 @@
 /*FUNCTION TriaVertexInput::GetParameterValue{{{1*/
 void TriaVertexInput::GetParameterValue(double* pvalue,double* gauss){
-	/*P1 interpolation on Gauss point*/
-
-	/*intermediary*/
-	double l1l2l3[3];
-
-	/*nodal functions: */
-	GetNodalFunctions(l1l2l3,gauss);
-
-	/*Assign output pointers:*/
-	*pvalue=l1l2l3[0]*values[0]+l1l2l3[1]*values[1]+l1l2l3[2]*values[2];
+
+	/*Call TriaRef function*/
+	TriaRef::GetParameterValue(pvalue,&values[0],gauss);
 
 }
@@ -225,22 +218,7 @@
 /*FUNCTION TriaVertexInput::GetParameterDerivativeValue{{{1*/
 void TriaVertexInput::GetParameterDerivativeValue(double* p, double* xyz_list, double* gauss){
-	/*From node values of parameter p (plist[0],plist[1],plist[2]), return parameter derivative value at gaussian 
-	 * point specified by gauss_l1l2l3:
-	 *   dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx
-	 *   dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx+plist[2]*dh3/dx
-	 *
-	 * p is a vector of size 2x1 already allocated.
-	 */
-
-	const int NDOF2=2;
-	const int numgrids=3;
-	double dh1dh3[NDOF2][numgrids]; //nodal derivative functions in actual coordinate system.
-
-	/*Get nodal funnctions derivatives in actual coordinate system: */
-	GetNodalFunctionsDerivatives(&dh1dh3[0][0],xyz_list,gauss);
-
-	p[0]=this->values[0]*dh1dh3[0][0]+this->values[1]*dh1dh3[0][1]+this->values[2]*dh1dh3[0][2];
-	p[1]=this->values[0]*dh1dh3[1][0]+this->values[1]*dh1dh3[1][1]+this->values[2]*dh1dh3[1][2];
-
+
+	/*Call TriaRef function*/
+	TriaRef::GetParameterDerivativeValue(p,&values[0],xyz_list,gauss);
 }
 /*}}}*/
