Index: /issm/trunk/src/c/Container/Inputs.cpp
===================================================================
--- /issm/trunk/src/c/Container/Inputs.cpp	(revision 5748)
+++ /issm/trunk/src/c/Container/Inputs.cpp	(revision 5749)
@@ -43,60 +43,4 @@
 
 /*Object management*/
-/*FUNCTION Inputs::GetParameterValue(double* pvalue,GaussTria* gauss,int enum_type){{{1*/
-void Inputs::GetParameterValue(double* pvalue,GaussTria* gauss, int enum_type){
-
-	vector<Object*>::iterator object;
-	Input* input=NULL;
-	bool   found=false;
-
-	/*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){
-			found=true;
-			break;
-		}
-	}
-
-	if (!found){
-		/*we could not find an input with the correct enum type. No defaults values were provided, 
-		 * error out: */
-		ISSMERROR("could not find input with enum type %i (%s)",enum_type,EnumToString(enum_type));
-	}
-
-	/*Ok, we have an input if we made it here, request the input to return the values: */
-	input->GetParameterValue(pvalue,gauss);
-
-}
-/*}}}*/
-/*FUNCTION Inputs::GetParameterValue(double* pvalue,GaussTria* gauss,int enum_type){{{1*/
-void Inputs::GetParameterValue(double* pvalue,GaussPenta* gauss, int enum_type){
-
-	vector<Object*>::iterator object;
-	Input* input=NULL;
-	bool   found=false;
-
-	/*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){
-			found=true;
-			break;
-		}
-	}
-
-	if (!found){
-		/*we could not find an input with the correct enum type. No defaults values were provided, 
-		 * error out: */
-		ISSMERROR("could not find input with enum type %i (%s)",enum_type,EnumToString(enum_type));
-	}
-
-	/*Ok, we have an input if we made it here, request the input to return the values: */
-	input->GetParameterValue(pvalue,gauss);
-
-}
-/*}}}*/
 /*FUNCTION Inputs::GetParameterValue(bool* pvalue,int enum-type){{{1*/
 void Inputs::GetParameterValue(bool* pvalue,int enum_type){
Index: /issm/trunk/src/c/Container/Inputs.h
===================================================================
--- /issm/trunk/src/c/Container/Inputs.h	(revision 5748)
+++ /issm/trunk/src/c/Container/Inputs.h	(revision 5749)
@@ -48,6 +48,4 @@
 		void GetParameterValue(int* pvalue,int enum_type);
 		void GetParameterValue(double* pvalue,int enum_type);
-		void GetParameterValue(double* pvalue,GaussTria* gauss,int enum_type);
-		void GetParameterValue(double* pvalue,GaussPenta* gauss,int enum_type);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5748)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 5749)
@@ -877,7 +877,6 @@
 int Penta::GetNodeIndex(Node* node){
 
-	int i;
-
-	for(i=0;i<NUMVERTICES;i++){
+	ISSMASSERT(nodes);
+	for(int i=0;i<NUMVERTICES;i++){
 		if(node==nodes[i])
 		 return i;
@@ -3927,10 +3926,12 @@
 void Penta::GetParameterValue(double* pvalue,Node* node,int enumtype){
 
+	Input* input=inputs->GetInput(enumtype);
+	if(!input) ISSMERROR("No input of type %s found in tria",EnumToString(enumtype));
+
 	GaussPenta* gauss=new GaussPenta();
-
-	ISSMASSERT(nodes);
 	gauss->GaussVertex(this->GetNodeIndex(node));
 
-	inputs->GetParameterValue(pvalue,gauss,enumtype);
+	input->GetParameterValue(pvalue,gauss);
+	delete gauss;
 }
 /*}}}*/
@@ -3989,4 +3990,6 @@
 	/*Get approximation enum and dof list: */
 	inputs->GetParameterValue(&approximation,ApproximationEnum);
+	Input* vx_input=inputs->GetInput(VxEnum); ISSMASSERT(vx_input);
+	Input* vy_input=inputs->GetInput(VyEnum); ISSMASSERT(vy_input);
 
 	/*If the element is a coupling, do nothing: every grid is also on an other elements 
@@ -4006,6 +4009,6 @@
 		/*Recover vx and vy*/
 		gauss->GaussVertex(i);
-		inputs->GetParameterValue(&vx,gauss,VxEnum);
-		inputs->GetParameterValue(&vy,gauss,VyEnum);
+		vx_input->GetParameterValue(&vx,gauss);
+		vy_input->GetParameterValue(&vy,gauss);
 		values[i*numdofpervertex+0]=vx;
 		values[i*numdofpervertex+1]=vy;
@@ -4035,4 +4038,6 @@
 	/*Get dof list: */
 	GetDofList(&doflist);
+	Input* vx_input=inputs->GetInput(VxEnum); ISSMASSERT(vx_input);
+	Input* vy_input=inputs->GetInput(VyEnum); ISSMASSERT(vy_input);
 
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
@@ -4043,6 +4048,6 @@
 		/*Recover vx and vy*/
 		gauss->GaussVertex(i);
-		inputs->GetParameterValue(&vx,gauss,VxEnum);
-		inputs->GetParameterValue(&vy,gauss,VyEnum);
+		vx_input->GetParameterValue(&vx,gauss);
+		vy_input->GetParameterValue(&vy,gauss);
 		values[i*numdofpervertex+0]=vx;
 		values[i*numdofpervertex+1]=vy;
@@ -4071,4 +4076,5 @@
 	/*Get dof list: */
 	GetDofList(&doflist);
+	Input* vz_input=inputs->GetInput(VzEnum); ISSMASSERT(vz_input);
 
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
@@ -4079,5 +4085,5 @@
 		/*Recover vz */
 		gauss->GaussVertex(i);
-		inputs->GetParameterValue(&vz,gauss,VxEnum);
+		vz_input->GetParameterValue(&vz,gauss);
 		values[i]=vz;
 	}
@@ -4106,4 +4112,8 @@
 	/*Get dof list: */
 	GetDofList(&doflist);
+	Input* vx_input=inputs->GetInput(VxEnum); ISSMASSERT(vx_input);
+	Input* vy_input=inputs->GetInput(VyEnum); ISSMASSERT(vy_input);
+	Input* vz_input=inputs->GetInput(VzEnum); ISSMASSERT(vz_input);
+	Input* p_input =inputs->GetInput(VxEnum); ISSMASSERT(p_input);
 
 	/*Recondition pressure: */
@@ -4114,11 +4124,9 @@
 	gauss=new GaussPenta();
 	for(i=0;i<NUMVERTICES;i++){
-
-		/*Recover vx and vy*/
 		gauss->GaussVertex(i);
-		inputs->GetParameterValue(&vx,gauss,VxEnum);
-		inputs->GetParameterValue(&vy,gauss,VyEnum);
-		inputs->GetParameterValue(&vz,gauss,VzEnum);
-		inputs->GetParameterValue(&p ,gauss,PressureEnum);
+		vx_input->GetParameterValue(&vx,gauss);
+		vy_input->GetParameterValue(&vy,gauss);
+		vz_input->GetParameterValue(&vz,gauss);
+		p_input ->GetParameterValue(&p ,gauss);
 		values[i*numdofpervertex+0]=vx;
 		values[i*numdofpervertex+1]=vy;
@@ -4145,9 +4153,10 @@
 	int*         doflist=NULL;
 	double       values[numdof];
-	double       vz;
+	double       temp;
 
 
 	/*Get dof list: */
 	GetDofList(&doflist);
+	Input* t_input=inputs->GetInput(TemperatureEnum); ISSMASSERT(t_input);
 
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
@@ -4158,6 +4167,6 @@
 		/*Recover vz */
 		gauss->GaussVertex(i);
-		inputs->GetParameterValue(&vz,gauss,TemperatureEnum);
-		values[i]=vz;
+		t_input->GetParameterValue(&temp,gauss);
+		values[i]=temp;
 	}
 
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 5748)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 5749)
@@ -804,7 +804,6 @@
 int Tria::GetNodeIndex(Node* node){
 
-	int i;
-
-	for(i=0;i<NUMVERTICES;i++){
+	ISSMASSERT(nodes);
+	for(int i=0;i<NUMVERTICES;i++){
 		if(node==nodes[i])
 		 return i;
@@ -1337,10 +1336,15 @@
 
 	/*get thickness and velocity at two segment extremities: */
-	inputs->GetParameterValue(&h1, gauss_1,ThicknessEnum);
-	inputs->GetParameterValue(&h2, gauss_2,ThicknessEnum);
-	inputs->GetParameterValue(&vx1,gauss_1,VxEnum);
-	inputs->GetParameterValue(&vx2,gauss_2,VxEnum);
-	inputs->GetParameterValue(&vy1,gauss_1,VyEnum);
-	inputs->GetParameterValue(&vy2,gauss_2,VyEnum);
+	Input* thickness_input=inputs->GetInput(ThicknessEnum); ISSMASSERT(thickness_input);
+	thickness_input->GetParameterValue(&h1, gauss_1);
+	thickness_input->GetParameterValue(&h2, gauss_2);
+
+	Input* vx_input=inputs->GetInput(VxEnum); ISSMASSERT(vx_input);
+	vx_input->GetParameterValue(&vx1,gauss_1);
+	vx_input->GetParameterValue(&vx2,gauss_2);
+
+	Input* vy_input=inputs->GetInput(VyEnum); ISSMASSERT(vy_input);
+	vy_input->GetParameterValue(&vy1,gauss_1);
+	vy_input->GetParameterValue(&vy2,gauss_2);
 
 	mass_flux= rho_ice*length*(  
@@ -5323,10 +5327,12 @@
 void Tria::GetParameterValue(double* pvalue,Node* node,int enumtype){
 
+	Input* input=inputs->GetInput(enumtype);
+	if(!input) ISSMERROR("No input of type %s found in tria",EnumToString(enumtype));
+
 	GaussTria* gauss=new GaussTria();
-
-	ISSMASSERT(nodes);
 	gauss->GaussVertex(this->GetNodeIndex(node));
 
-	inputs->GetParameterValue(pvalue,gauss,enumtype);
+	input->GetParameterValue(pvalue,gauss);
+	delete gauss;
 }
 /*}}}*/
@@ -5481,5 +5487,11 @@
 	/*retrieve inputs :*/
 	inputs->GetParameterValue(&drag_type,DragTypeEnum);
-	Input* drag_input=inputs->GetInput(DragCoefficientEnum); ISSMASSERT(drag_input);
+	Input* drag_input    =inputs->GetInput(DragCoefficientEnum); ISSMASSERT(drag_input);
+	Input* vx_input      =inputs->GetInput(VxEnum);              ISSMASSERT(vx_input);
+	Input* vy_input      =inputs->GetInput(VyEnum);              ISSMASSERT(vy_input);
+	Input* vz_input      =inputs->GetInput(VzEnum);              ISSMASSERT(vz_input);
+	Input* adjointx_input=inputs->GetInput(AdjointxEnum);        ISSMASSERT(adjointx_input);
+	Input* adjointy_input=inputs->GetInput(AdjointyEnum);        ISSMASSERT(adjointy_input);
+	Input* adjointz_input=inputs->GetInput(AdjointzEnum);        ISSMASSERT(adjointz_input);
 
 	/*retrieve some parameters: */
@@ -5506,15 +5518,15 @@
 		if (drag_type==2) friction->GetAlphaComplement(&alpha_complement, gauss,VxEnum,VyEnum);
 		else alpha_complement=0;
-		inputs->GetParameterValue(&drag,gauss,DragCoefficientEnum);
+		drag_input->GetParameterValue(&drag,gauss);
 
 		/*recover lambda mu and xi: */
-		inputs->GetParameterValue(&lambda,gauss,AdjointxEnum);
-		inputs->GetParameterValue(&mu, gauss,AdjointyEnum);
-		inputs->GetParameterValue(&xi, gauss,AdjointzEnum);
+		adjointx_input->GetParameterValue(&lambda,gauss);
+		adjointy_input->GetParameterValue(&mu    ,gauss);
+		adjointz_input->GetParameterValue(&xi    ,gauss);
 
 		/*recover vx vy and vz: */
-		inputs->GetParameterValue(&vx, gauss,VxEnum);
-		inputs->GetParameterValue(&vy, gauss,VyEnum);
-		inputs->GetParameterValue(&vz, gauss,VzEnum);
+		vx_input->GetParameterValue(&vx, gauss);
+		vy_input->GetParameterValue(&vy, gauss);
+		vz_input->GetParameterValue(&vz, gauss);
 
 		/*Get normal vector to the bed */
Index: /issm/trunk/src/c/objects/Loads/Friction.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Friction.cpp	(revision 5748)
+++ /issm/trunk/src/c/objects/Loads/Friction.cpp	(revision 5749)
@@ -75,7 +75,7 @@
 	inputs->GetParameterValue(&drag_p,DragPEnum);
 	inputs->GetParameterValue(&drag_q,DragQEnum);
-	inputs->GetParameterValue(&thickness, gauss,ThicknessEnum);
-	inputs->GetParameterValue(&bed, gauss,BedEnum);
-	inputs->GetParameterValue(&drag_coefficient, gauss,DragCoefficientEnum);
+	this->GetParameterValue(&thickness, gauss,ThicknessEnum);
+	this->GetParameterValue(&bed, gauss,BedEnum);
+	this->GetParameterValue(&drag_coefficient, gauss,DragCoefficientEnum);
 
 	/*Get material parameters: */
@@ -98,12 +98,12 @@
 
 	if(strcmp(element_type,"2d")==0){
-		inputs->GetParameterValue(&vx, gauss,vxenum);
-		inputs->GetParameterValue(&vy, gauss,vyenum);
+		this->GetParameterValue(&vx, gauss,vxenum);
+		this->GetParameterValue(&vy, gauss,vyenum);
 		vmag=sqrt(pow(vx,2)+pow(vy,2));
 	}
 	else if (strcmp(element_type,"3d")==0){
-		inputs->GetParameterValue(&vx, gauss,vxenum);
-		inputs->GetParameterValue(&vy, gauss,vyenum);
-		inputs->GetParameterValue(&vz, gauss,vzenum);
+		this->GetParameterValue(&vx, gauss,vxenum);
+		this->GetParameterValue(&vy, gauss,vyenum);
+		this->GetParameterValue(&vz, gauss,vzenum);
 		vmag=sqrt(pow(vx,2)+pow(vy,2)+pow(vz,2));
 	}
@@ -136,7 +136,7 @@
 	inputs->GetParameterValue(&drag_p,DragPEnum);
 	inputs->GetParameterValue(&drag_q,DragQEnum);
-	inputs->GetParameterValue(&thickness, gauss,ThicknessEnum);
-	inputs->GetParameterValue(&bed, gauss,BedEnum);
-	inputs->GetParameterValue(&drag_coefficient, gauss,DragCoefficientEnum);
+	this->GetParameterValue(&thickness, gauss,ThicknessEnum);
+	this->GetParameterValue(&bed, gauss,BedEnum);
+	this->GetParameterValue(&drag_coefficient, gauss,DragCoefficientEnum);
 
 	/*Get material parameters: */
@@ -159,12 +159,12 @@
 
 	if(strcmp(element_type,"2d")==0){
-		inputs->GetParameterValue(&vx, gauss,vxenum);
-		inputs->GetParameterValue(&vy, gauss,vyenum);
+		this->GetParameterValue(&vx, gauss,vxenum);
+		this->GetParameterValue(&vy, gauss,vyenum);
 		vmag=sqrt(pow(vx,2)+pow(vy,2));
 	}
 	else if (strcmp(element_type,"3d")==0){
-		inputs->GetParameterValue(&vx, gauss,vxenum);
-		inputs->GetParameterValue(&vy, gauss,vyenum);
-		inputs->GetParameterValue(&vz, gauss,vzenum);
+		this->GetParameterValue(&vx, gauss,vxenum);
+		this->GetParameterValue(&vy, gauss,vyenum);
+		this->GetParameterValue(&vz, gauss,vzenum);
 		vmag=sqrt(pow(vx,2)+pow(vy,2)+pow(vz,2));
 	}
@@ -200,7 +200,7 @@
 	inputs->GetParameterValue(&drag_p,DragPEnum);
 	inputs->GetParameterValue(&drag_q,DragQEnum);
-	inputs->GetParameterValue(&thickness, gauss,ThicknessEnum);
-	inputs->GetParameterValue(&bed, gauss,BedEnum);
-	inputs->GetParameterValue(&drag_coefficient, gauss,DragCoefficientEnum);
+	this->GetParameterValue(&thickness, gauss,ThicknessEnum);
+	this->GetParameterValue(&bed, gauss,BedEnum);
+	this->GetParameterValue(&drag_coefficient, gauss,DragCoefficientEnum);
 
 	/*Get material parameters: */
@@ -224,6 +224,6 @@
 
 	//We need the velocity magnitude to evaluate the basal stress:
-	inputs->GetParameterValue(&vx, gauss,vxenum);
-	inputs->GetParameterValue(&vy, gauss,vyenum);
+	this->GetParameterValue(&vx, gauss,vxenum);
+	this->GetParameterValue(&vy, gauss,vyenum);
 	vmag=sqrt(pow(vx,2)+pow(vy,2));
 
@@ -235,2 +235,20 @@
 }
 /*}}}*/
+/*FUNCTION Friction::GetParameterValue{{{1*/
+void Friction::GetParameterValue(double* pvalue,GaussTria* gauss,int enum_type){
+
+	Input* input=inputs->GetInput(enum_type);
+	if(!input) ISSMERROR("input %s not found",EnumToString(enum_type));
+	input->GetParameterValue(pvalue,gauss);
+
+}
+/*}}}*/
+/*FUNCTION Friction::GetParameterValue{{{1*/
+void Friction::GetParameterValue(double* pvalue,GaussPenta* gauss,int enum_type){
+
+	Input* input=inputs->GetInput(enum_type);
+	if(!input) ISSMERROR("input %s not found",EnumToString(enum_type));
+	input->GetParameterValue(pvalue,gauss);
+
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Loads/Friction.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Friction.h	(revision 5748)
+++ /issm/trunk/src/c/objects/Loads/Friction.h	(revision 5749)
@@ -30,4 +30,6 @@
 		void  GetAlpha2(double* palpha2, GaussPenta* gauss,int vxenum,int vyenum,int vzenum);
 		void  GetAlphaComplement(double* alpha_complement, GaussTria* gauss,int vxenum,int vyenum);
+		void  GetParameterValue(double* pvalue,GaussTria* gauss,int enum_type);
+		void  GetParameterValue(double* pvalue,GaussPenta* gauss,int enum_type);
 
 };
