Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3829)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3830)
@@ -137,4 +137,5 @@
 		void GetParameterValue(double* pvalue,double* gauss,int enum_type);
 		void GetParameterValue(double* pvalue,double* gauss,int enum_type,double defaultvalue);
+		void GetParameterAverage(double* pvalue, int enum_type);
 		
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type);
Index: /issm/trunk/src/c/DataSet/Inputs.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3829)
+++ /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3830)
@@ -187,4 +187,28 @@
 }
 /*}}}*/
+/*FUNCTION Inputs::GetParameterAverage(double* pvalue,int enum-type){{{1*/
+void Inputs::GetParameterAverage(double* pvalue,int enum_type){
+
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+
+	/*Go through inputs and check whether any input with the same name is already in: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=(Input*)(*object); 
+		if (input->EnumType()==enum_type)break;
+	}
+
+	if (!input){
+		/*we could not find an input with the correct enum type. No defaults values were provided, 
+		 * error out: */
+		ISSMERROR("%s%i"," could not find input with enum type ",enum_type);
+	}
+
+	/*Ok, we have an input if we made it here, request the input to return the value: */
+	input->GetParameterAverage(pvalue);
+
+}
+/*}}}*/
 /*FUNCTION Inputs::GetParameterValue(bool* pvalue,int enum-type){{{1*/
 void Inputs::GetParameterValue(bool* pvalue,int enum_type){
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3829)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3830)
@@ -733,5 +733,4 @@
 	double  gauss_weight;
 	double  gauss_l1l2l3[3];
-	double  gaussgrids[numgrids][numgrids]={{1,0,0},{0,1,0},{0,0,1}};
 
 	/* matrices: */
@@ -750,6 +749,4 @@
 
 	/*input parameters for structural analysis (diagnostic): */
-	double  vx_list[numgrids];
-	double  vy_list[numgrids];
 	double  dvx[2];
 	double  dvy[2];
@@ -771,8 +768,4 @@
 	GetDofList(&doflist[0],&numberofdofspernode);
 
-	/*Recover velocity: */
-	inputs->GetParameterValues(&vx_list[0],&gaussgrids[0][0],3,VxAverageEnum);
-	inputs->GetParameterValues(&vy_list[0],&gaussgrids[0][0],3,VyAverageEnum);
-
 	/*retrieve some parameters: */
 	this->parameters->FindParam(&artdiff,ArtDiffEnum);
@@ -785,6 +778,6 @@
 
 		//Build K matrix (artificial diffusivity matrix)
-		v_gauss[0]=ONETHIRD*(vx_list[0]+vx_list[1]+vx_list[2]);
-		v_gauss[1]=ONETHIRD*(vy_list[0]+vy_list[1]+vy_list[2]);
+		inputs->GetParameterAverage(&v_gauss[0],VxAverageEnum);
+		inputs->GetParameterAverage(&v_gauss[1],VyAverageEnum);
 
 		K[0][0]=pow(Jdettria,(double).5)/2.0*fabs(v_gauss[0]);
@@ -811,9 +804,9 @@
 
 		//Get vx, vy and their derivatives at gauss point
-		this->GetParameterValue(&vx, &vx_list[0],gauss_l1l2l3);
-		this->GetParameterValue(&vy, &vy_list[0],gauss_l1l2l3);
-
-		this->GetParameterDerivativeValue(&dvx[0], &vx_list[0],&xyz_list[0][0], gauss_l1l2l3);
-		this->GetParameterDerivativeValue(&dvy[0], &vy_list[0],&xyz_list[0][0], gauss_l1l2l3);
+		inputs->GetParameterValue(&vx, &gauss_l1l2l3[0],VxAverageEnum);
+		inputs->GetParameterValue(&vy, &gauss_l1l2l3[0],VyAverageEnum);
+
+		inputs->GetParameterDerivativeValue(&dvx[0],&xyz_list[0][0],&gauss_l1l2l3[0],VxAverageEnum);
+		inputs->GetParameterDerivativeValue(&dvy[0],&xyz_list[0][0],&gauss_l1l2l3[0],VyAverageEnum);
 
 		dvxdx=dvx[0];
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3830)
@@ -164,2 +164,7 @@
 }
 /*}}}*/
+/*FUNCTION BeamVertexInput::GetParameterAverage(double* pvalue){{{1*/
+void BeamVertexInput::GetParameterAverage(double* pvalue){
+	*pvalue=1./2.*(values[0]+values[1]);
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3830)
@@ -58,4 +58,6 @@
 		void GetParameterValue(double* pvalue,double* gauss,double defaultvalue);
 		
+		void GetParameterAverage(double* pvalue);
+	
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss);
 	
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3830)
@@ -58,4 +58,6 @@
 		void GetParameterValue(double* pvalue,double* gauss,double defaultvalue);
 		
+		void GetParameterAverage(double* pvalue){ISSMERROR("not implemented yet");};
+		
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss);
 	
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3830)
@@ -58,4 +58,6 @@
 		void GetParameterValue(double* pvalue,double* gauss,double defaultvalue);
 		
+		void GetParameterAverage(double* pvalue){ISSMERROR("not implemented yet");};
+		
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss);
 	
Index: /issm/trunk/src/c/objects/Inputs/Input.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3830)
@@ -30,4 +30,6 @@
 		virtual void GetParameterValue(double* pvalue,double* gauss)=0;
 		virtual void GetParameterValue(double* pvalue,double* gauss,double defaultvalue)=0;
+
+		virtual void GetParameterAverage(double* pvalue)=0;
 		
 		virtual void GetParameterValues(double* values,double* gauss_pointers, int numgauss)=0;
Index: /issm/trunk/src/c/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3830)
@@ -58,4 +58,6 @@
 		void GetParameterValue(double* pvalue,double* gauss,double defaultvalue);
 		
+		void GetParameterAverage(double* pvalue){ISSMERROR("not implemented yet");};
+		
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss);
 	
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3830)
@@ -168,2 +168,7 @@
 }
 /*}}}*/
+/*FUNCTION PentaVertexInput::GetParameterAverage(double* pvalue){{{1*/
+void PentaVertexInput::GetParameterAverage(double* pvalue){
+	*pvalue=1./6.*(values[0]+values[1]+values[2]+values[3]+values[4]+values[5]);
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3830)
@@ -57,4 +57,6 @@
 		void GetParameterValue(double* pvalue,double* gauss,double defaultvalue);
 		
+		void GetParameterAverage(double* pvalue);
+		
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss);
 	
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3830)
@@ -163,2 +163,7 @@
 }
 /*}}}*/
+/*FUNCTION SingVertexInput::GetParameterAverage(double* pvalue){{{1*/
+void SingVertexInput::GetParameterAverage(double* pvalue){
+	*pvalue=value;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3830)
@@ -57,4 +57,6 @@
 		void GetParameterValue(double* pvalue,double* gauss,double defaultvalue);
 		
+		void GetParameterAverage(double* pvalue);
+		
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss);
 	
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3830)
@@ -239,4 +239,9 @@
 void TriaVertexInput::ChangeEnum(int newenumtype){
 	this->enum_type=newenumtype;
+}
+/*}}}*/
+/*FUNCTION TriaVertexInput::GetParameterAverage(double* pvalue){{{1*/
+void TriaVertexInput::GetParameterAverage(double* pvalue){
+	*pvalue=1./3.*(values[0]+values[1]+values[2]);
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3829)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3830)
@@ -59,4 +59,6 @@
 		void GetParameterValue(double* pvalue,double* gauss,double defaultvalue){ISSMERROR("not implemented yet");}
 		void GetParameterValues(double* values,double* gauss_pointers, int numgauss);
+		
+		void GetParameterAverage(double* pvalue);
 	
 		void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss);
