Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3876)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3877)
@@ -459,4 +459,43 @@
 
 	return tria;
+}
+/*}}}*/
+/*FUNCTION Penta::GaussFromNode {{{1*/
+double* Penta::GaussFromNode(Node* node){
+
+	/*variable declaration*/
+	int i,pos;
+	double*  gauss=NULL;
+
+	/*Allocate gauss*/
+	gauss=(double*)xmalloc(4*sizeof(double));
+
+	for(i=0;i<6;i++){
+		if (node==nodes[i]){
+			switch(i){
+				case 0:
+					gauss[0]=1.0; gauss[1]=0.0; gauss[2]=0.0; gauss[3]= -1.0;
+					return gauss;
+				case 1:
+					gauss[0]=0.0; gauss[1]=1.0; gauss[2]=0.0; gauss[3]= -1.0;
+					return gauss;
+				case 2:
+					gauss[0]=0.0; gauss[1]=0.0; gauss[2]=1.0; gauss[3]= -1.0;
+					return gauss;
+				case 3:
+					gauss[0]=1.0; gauss[1]=0.0; gauss[2]=0.0; gauss[3]=1.0;
+					return gauss;
+				case 4:
+					gauss[0]=0.0; gauss[1]=1.0; gauss[2]=0.0; gauss[3]=1.0;
+					return gauss;
+				case 5:
+					gauss[0]=0.0; gauss[1]=0.0; gauss[2]=1.0; gauss[3]=1.0;
+					return gauss;
+			}
+		}
+	}
+
+	/*output error if not found*/
+	ISSMERROR("Node not found in Penta");
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3876)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3877)
@@ -58,4 +58,5 @@
 		void*  SpawnTria(int g0, int g1, int g2);
 		void  SetClone(int* minranks);
+		double* GaussFromNode(Node* node);
 
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3876)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3877)
@@ -3027,6 +3027,6 @@
 	
 		friction->GetAlpha2(&alpha2,&gauss_coord[0],VxEnum,VyEnum,VzEnum);
-		inputs->GetParameterValue(&vx, &gauss_coord[0],VxAverageEnum);
-		inputs->GetParameterValue(&vy, &gauss_coord[0],VyAverageEnum);
+		inputs->GetParameterValue(&vx, &gauss_coord[0],VxEnum);
+		inputs->GetParameterValue(&vy, &gauss_coord[0],VyEnum);
 		basalfriction= alpha2*(pow(vx,(double)2.0)+pow(vy,(double)2.0));
 		
Index: /issm/trunk/src/c/objects/Loads/Pengrid.cpp
===================================================================
--- /issm/trunk/src/c/objects/Loads/Pengrid.cpp	(revision 3876)
+++ /issm/trunk/src/c/objects/Loads/Pengrid.cpp	(revision 3877)
@@ -341,4 +341,5 @@
 	int    reset_penalties=0;
 	int    stabilize_constraints;
+	double* gauss=NULL;
 
 	/*pointers: */
@@ -346,4 +347,9 @@
 	Penta* penta=NULL;
 	Matpar*  matpar=NULL;
+
+	/*recover pointers: */
+	node=(Node*)hnode.delivers();
+	penta=(Penta*)helement.delivers();
+	matpar=(Matpar*)hmatpar.delivers();
 	
 	/*check that pengrid is not a clone (penalty to be added only once)*/
@@ -354,21 +360,14 @@
 	}
 
-	/*recover pointers: */
-	node=(Node*)hnode.delivers();
-	penta=(Penta*)helement.delivers();
-	matpar=(Matpar*)hmatpar.delivers();
-
 	//First recover pressure and temperature values, using the element: */
-	penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
-	penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum);
+	gauss=penta->GaussFromNode(node);
+	penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
+	penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum);
 
 	//Recover our data:
-	inputs->GetParameterValue(&reset_penalties,ResetPenaltiesEnum);
 	meltingpoint=matpar->GetMeltingPoint();
 	beta=matpar->GetBeta();
 	parameters->FindParam(&stabilize_constraints,StabilizeConstraintsEnum);
 	
-	if(reset_penalties)zigzag_counter=0;
-
 	//Compute pressure melting point
 	t_pmp=meltingpoint-beta*pressure;
@@ -406,4 +405,7 @@
 	//*Assign output pointers:*/
 	*punstable=unstable;
+
+	/*Clean up*/
+	xfree((void**)&gauss);
 }
 /*}}}1*/
@@ -476,5 +478,4 @@
 /*FUNCTION Pengrid::PenaltyCreateKMatrixMelting {{{1*/
 void  Pengrid::PenaltyCreateKMatrixMelting(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){
-
 
 	int found=0;
@@ -487,4 +488,5 @@
 	int      numberofdofspernode;
 	double  meltingpoint;
+	double* gauss=NULL;
 
 	double pressure;
@@ -507,6 +509,7 @@
 
 	//First recover pressure and temperature values, using the element: */
-	penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
-	penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum);
+	gauss=penta->GaussFromNode(node);
+	penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
+	penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum);
 
 	/*recover parameters: */
@@ -527,4 +530,7 @@
 	
 	MatSetValues(Kgg,numdof,doflist,numdof,doflist,(const double*)Ke,ADD_VALUES);
+
+	/*Clean up*/
+	xfree((void**)&gauss);
 }
 /*}}}1*/
@@ -600,4 +606,5 @@
 	double t_pmp;
 	double dt,penalty_offset;
+	double* gauss=NULL;
 
 	/*pointers: */
@@ -618,6 +625,7 @@
 
 	//First recover pressure and temperature values, using the element: */
-	penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
-	penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum);
+	gauss=penta->GaussFromNode(node);
+	penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
+	penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum);
 	inputs->GetParameterValue(&melting_offset,MeltingOffsetEnum);
 	parameters->FindParam(&dt,DtEnum);
@@ -650,4 +658,7 @@
 	/*Add P_terms to global vector pg: */
 	VecSetValues(pg,numdof,doflist,(const double*)P_terms,ADD_VALUES);
+
+	/*Clean up*/
+	xfree((void**)&gauss);
 }
 /*}}}1*/
@@ -668,4 +679,5 @@
 	double t_pmp;
 	double penalty_offset;
+	double* gauss=NULL;
 
 	/*pointers: */
@@ -685,5 +697,6 @@
 
 	//First recover pressure  and penalty_offset
-	penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
+	gauss=penta->GaussFromNode(node);
+	penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
 	parameters->FindParam(&penalty_offset,PenaltyOffsetEnum);
 
@@ -698,4 +711,7 @@
 	/*Add P_terms to global vector pg: */
 	VecSetValues(pg,numdof,doflist,(const double*)P_terms,ADD_VALUES);
+
+	/*Clean up*/
+	xfree((void**)&gauss);
 }
 /*}}}1*/
@@ -729,5 +745,11 @@
 /*FUNCTION Pengrid::UpdateInputsFromConstant(double constant, int name) {{{1*/
 void  Pengrid::UpdateInputsFromConstant(double constant, int name){
-	/*Nothing updated yet*/
+	switch(name){
+
+		case MeltingOffsetEnum:
+			inputs->AddInput(new DoubleInput(name,constant));
+			return;
+
+	}
 }
 /*}}}*/
