Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 18104)
@@ -255,15 +255,4 @@
 
 		virtual void   AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
-		virtual void   MinVel(IssmDouble* pminvel)=0;
-		virtual void   MaxVel(IssmDouble* pmaxvel)=0;
-		virtual void   MinVx(IssmDouble* pminvx)=0;
-		virtual void   MaxVx(IssmDouble* pmaxvx)=0;
-		virtual void   MaxAbsVx(IssmDouble* pmaxabsvx)=0;
-		virtual void   MinVy(IssmDouble* pminvy)=0;
-		virtual void   MaxVy(IssmDouble* pmaxvy)=0;
-		virtual void   MaxAbsVy(IssmDouble* pmaxabsvy)=0;
-		virtual void   MinVz(IssmDouble* pminvz)=0;
-		virtual void   MaxVz(IssmDouble* pmaxvz)=0;
-		virtual void   MaxAbsVz(IssmDouble* pmaxabsvz)=0;
 		virtual IssmDouble MassFlux(IssmDouble* segment)=0;
 		virtual IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 18104)
@@ -2053,7 +2053,7 @@
 
 	/*Get for Vx and Vy, the max of abs value: */
-	this->MaxAbsVx(&maxabsvx);
-	this->MaxAbsVy(&maxabsvy);
-	this->MaxAbsVz(&maxabsvz);
+	maxabsvx = this->inputs->MaxAbs(VxEnum);
+	maxabsvy = this->inputs->MaxAbs(VyEnum);
+	maxabsvz = this->inputs->MaxAbs(VzEnum);
 
 	/* Get node coordinates and dof list: */
@@ -2578,40 +2578,4 @@
 }
 /*}}}*/
-void       Penta::MinVel(IssmDouble* pminvel){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvel=this->inputs->Min(VelEnum);
-
-	/*Assign output pointers:*/
-	*pminvel=minvel;
-}
-/*}}}*/
-void       Penta::MinVx(IssmDouble* pminvx){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvx=this->inputs->Min(VxEnum);
-
-	/*Assign output pointers:*/
-	*pminvx=minvx;
-}
-/*}}}*/
-void       Penta::MinVy(IssmDouble* pminvy){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvy=this->inputs->Min(VyEnum);
-
-	/*Assign output pointers:*/
-	*pminvy=minvy;
-}
-/*}}}*/
-void       Penta::MinVz(IssmDouble* pminvz){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvz=this->inputs->Min(VzEnum);
-
-	/*Assign output pointers:*/
-	*pminvz=minvz;
-}
-/*}}}*/
 IssmDouble Penta::MassFlux( IssmDouble* segment){/*{{{*/
 
@@ -2658,68 +2622,4 @@
 	/*clean up and return*/
 	return mass_flux;
-}
-/*}}}*/
-void       Penta::MaxAbsVx(IssmDouble* pmaxabsvx){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxabsvx=this->inputs->MaxAbs(VxEnum);
-
-	/*Assign output pointers:*/
-	*pmaxabsvx=maxabsvx;
-}
-/*}}}*/
-void       Penta::MaxAbsVy(IssmDouble* pmaxabsvy){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxabsvy=this->inputs->MaxAbs(VyEnum);
-
-	/*Assign output pointers:*/
-	*pmaxabsvy=maxabsvy;
-}
-/*}}}*/
-void       Penta::MaxAbsVz(IssmDouble* pmaxabsvz){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxabsvz=this->inputs->MaxAbs(VzEnum);
-
-	/*Assign output pointers:*/
-	*pmaxabsvz=maxabsvz;
-}
-/*}}}*/
-void       Penta::MaxVel(IssmDouble* pmaxvel){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvel=this->inputs->Max(VelEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvel=maxvel;
-
-}
-/*}}}*/
-void       Penta::MaxVx(IssmDouble* pmaxvx){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvx=this->inputs->Max(VxEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvx=maxvx;
-}
-/*}}}*/
-void       Penta::MaxVy(IssmDouble* pmaxvy){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvy=this->inputs->Max(VyEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvy=maxvy;
-}
-/*}}}*/
-void       Penta::MaxVz(IssmDouble* pmaxvz){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvz=this->inputs->Max(VzEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvz=maxvz;
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 18104)
@@ -112,18 +112,7 @@
 		IssmDouble IceVolumeAboveFloatation(void);
 		IssmDouble TotalSmb(void);
-		void   MinVel(IssmDouble* pminvel);
-		void   MinVx(IssmDouble* pminvx);
-		void   MinVy(IssmDouble* pminvy);
-		void   MinVz(IssmDouble* pminvz);
 		IssmDouble MassFlux(IssmDouble* segment);
 		IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id);
-		void   MaxAbsVx(IssmDouble* pmaxabsvx);
-		void   MaxAbsVy(IssmDouble* pmaxabsvy);
-		void   MaxAbsVz(IssmDouble* pmaxabsvz);
-		void   MaxVel(IssmDouble* pmaxvel);
 		void   ElementResponse(IssmDouble* presponse,int response_enum);
-		void   MaxVx(IssmDouble* pmaxvx);
-		void   MaxVy(IssmDouble* pmaxvy);
-		void   MaxVz(IssmDouble* pmaxvz);
 
 		#ifdef _HAVE_GIA_
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 18104)
@@ -146,18 +146,7 @@
 		IssmDouble IceVolumeAboveFloatation(void){_error_("not implemented yet");};
 		IssmDouble TotalSmb(void){_error_("not implemented yet");};
-		void       MinVel(IssmDouble* pminvel){_error_("not implemented yet");};
-		void       MinVx(IssmDouble* pminvx){_error_("not implemented yet");};
-		void       MinVy(IssmDouble* pminvy){_error_("not implemented yet");};
-		void       MinVz(IssmDouble* pminvz){_error_("not implemented yet");};
 		IssmDouble MassFlux(IssmDouble* segment){_error_("not implemented yet");};
 		IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id){_error_("not implemented yet");}
-		void       MaxAbsVx(IssmDouble* pmaxabsvx){_error_("not implemented yet");};
-		void       MaxAbsVy(IssmDouble* pmaxabsvy){_error_("not implemented yet");};
-		void       MaxAbsVz(IssmDouble* pmaxabsvz){_error_("not implemented yet");};
 		void       ElementResponse(IssmDouble* presponse,int response_enum){_error_("not implemented yet");};
-		void       MaxVel(IssmDouble* pmaxvel){_error_("not implemented yet");};
-		void       MaxVx(IssmDouble* pmaxvx){_error_("not implemented yet");};
-		void       MaxVy(IssmDouble* pmaxvy){_error_("not implemented yet");};
-		void       MaxVz(IssmDouble* pmaxvz){_error_("not implemented yet");};
 		IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");};
 		IssmDouble MisfitArea(int weightsenum){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 18104)
@@ -150,18 +150,7 @@
 		IssmDouble IceVolumeAboveFloatation(void){_error_("not implemented yet");};
 		IssmDouble TotalSmb(void){_error_("not implemented yet");};
-		void       MinVel(IssmDouble* pminvel){_error_("not implemented yet");};
-		void       MinVx(IssmDouble* pminvx){_error_("not implemented yet");};
-		void       MinVy(IssmDouble* pminvy){_error_("not implemented yet");};
-		void       MinVz(IssmDouble* pminvz){_error_("not implemented yet");};
 		IssmDouble MassFlux(IssmDouble* segment){_error_("not implemented yet");};
 		IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id){_error_("not implemented yet");}
-		void       MaxAbsVx(IssmDouble* pmaxabsvx){_error_("not implemented yet");};
-		void       MaxAbsVy(IssmDouble* pmaxabsvy){_error_("not implemented yet");};
-		void       MaxAbsVz(IssmDouble* pmaxabsvz){_error_("not implemented yet");};
 		void       ElementResponse(IssmDouble* presponse,int response_enum){_error_("not implemented yet");};
-		void       MaxVel(IssmDouble* pmaxvel){_error_("not implemented yet");};
-		void       MaxVx(IssmDouble* pmaxvx){_error_("not implemented yet");};
-		void       MaxVy(IssmDouble* pmaxvy){_error_("not implemented yet");};
-		void       MaxVz(IssmDouble* pmaxvz){_error_("not implemented yet");};
 		IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");};
 		IssmDouble MisfitArea(int weightsenum){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 18104)
@@ -1855,6 +1855,6 @@
 
 	/*Get for Vx and Vy, the max of abs value: */
-	this->MaxAbsVx(&maxabsvx);
-	this->MaxAbsVy(&maxabsvy);
+	maxabsvx = this->inputs->MaxAbs(VxEnum);
+	maxabsvy = this->inputs->MaxAbs(VyEnum);
 
 	/* Get node coordinates and dof list: */
@@ -2319,104 +2319,4 @@
 }
 /*}}}*/
-void       Tria::MaxAbsVx(IssmDouble* pmaxabsvx){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxabsvx=this->inputs->MaxAbs(VxEnum);
-
-	/*Assign output pointers:*/
-	*pmaxabsvx=maxabsvx;
-}
-/*}}}*/
-void       Tria::MaxAbsVy(IssmDouble* pmaxabsvy){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxabsvy=this->inputs->MaxAbs(VyEnum);
-
-	/*Assign output pointers:*/
-	*pmaxabsvy=maxabsvy;
-}
-/*}}}*/
-void       Tria::MaxAbsVz(IssmDouble* pmaxabsvz){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxabsvz=this->inputs->MaxAbs(VzEnum);
-
-	/*Assign output pointers:*/
-	*pmaxabsvz=maxabsvz;
-}
-/*}}}*/
-void       Tria::MaxVel(IssmDouble* pmaxvel){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvel=this->inputs->Max(VelEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvel=maxvel;
-}
-/*}}}*/
-void       Tria::MaxVx(IssmDouble* pmaxvx){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvx=this->inputs->Max(VxEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvx=maxvx;
-}
-/*}}}*/
-void       Tria::MaxVy(IssmDouble* pmaxvy){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvy=this->inputs->Max(VyEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvy=maxvy;
-
-}
-/*}}}*/
-void       Tria::MaxVz(IssmDouble* pmaxvz){/*{{{*/
-
-	/*Get maximum:*/
-	IssmDouble maxvz=this->inputs->Max(VzEnum);
-
-	/*Assign output pointers:*/
-	*pmaxvz=maxvz;
-}
-/*}}}*/
-void       Tria::MinVel(IssmDouble* pminvel){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvel=this->inputs->Min(VelEnum);
-
-	/*Assign output pointers:*/
-	*pminvel=minvel;
-}
-/*}}}*/
-void       Tria::MinVx(IssmDouble* pminvx){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvx=this->inputs->Min(VxEnum);
-
-	/*Assign output pointers:*/
-	*pminvx=minvx;
-}
-/*}}}*/
-void       Tria::MinVy(IssmDouble* pminvy){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvy=this->inputs->Min(VyEnum);
-
-	/*Assign output pointers:*/
-	*pminvy=minvy;
-}
-/*}}}*/
-void       Tria::MinVz(IssmDouble* pminvz){/*{{{*/
-
-	/*Get minimum:*/
-	IssmDouble minvz=this->inputs->Min(VzEnum);
-
-	/*Assign output pointers:*/
-	*pminvz=minvz;
-}
-/*}}}*/
 void       Tria::ElementResponse(IssmDouble* presponse,int response_enum){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 18104)
@@ -115,18 +115,7 @@
 		IssmDouble IceVolumeAboveFloatation(void);
 		IssmDouble TotalSmb(void);
-		void       MinVel(IssmDouble* pminvel);
-		void       MinVx(IssmDouble* pminvx);
-		void       MinVy(IssmDouble* pminvy);
-		void       MinVz(IssmDouble* pminvz);
 		IssmDouble MassFlux(IssmDouble* segment);
 		IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id);
-		void       MaxAbsVx(IssmDouble* pmaxabsvx);
-		void       MaxAbsVy(IssmDouble* pmaxabsvy);
-		void       MaxAbsVz(IssmDouble* pmaxabsvz);
 		void       ElementResponse(IssmDouble* presponse,int response_enum);
-		void       MaxVel(IssmDouble* pmaxvel);
-		void       MaxVx(IssmDouble* pmaxvx);
-		void       MaxVy(IssmDouble* pmaxvy);
-		void       MaxVz(IssmDouble* pmaxvz);
 		IssmDouble Misfit(int modelenum,int observationenum,int weightsenum);
 		IssmDouble MisfitArea(int weightsenum);
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 18103)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 18104)
@@ -767,6 +767,6 @@
 	maxabsvx=-INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MaxAbsVx(&element_maxabsvx);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_maxabsvx=element->inputs->MaxAbs(VxEnum);
 		if(element_maxabsvx>maxabsvx) maxabsvx=element_maxabsvx;
 	}
@@ -791,6 +791,6 @@
 	maxabsvy=-INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MaxAbsVy(&element_maxabsvy);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_maxabsvy=element->inputs->MaxAbs(VyEnum);
 		if(element_maxabsvy>maxabsvy) maxabsvy=element_maxabsvy;
 	}
@@ -815,6 +815,6 @@
 	maxabsvz=-INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MaxAbsVz(&element_maxabsvz);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_maxabsvz=element->inputs->MaxAbs(VzEnum);
 		if(element_maxabsvz>maxabsvz) maxabsvz=element_maxabsvz;
 	}
@@ -839,6 +839,6 @@
 	maxvel=-INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MaxVel(&element_maxvel);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_maxvel = element->inputs->Max(VelEnum);
 		if(element_maxvel>maxvel) maxvel=element_maxvel;
 	}
@@ -863,6 +863,6 @@
 	maxvx=-INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MaxVx(&element_maxvx);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_maxvx = element->inputs->Max(VxEnum);
 		if(element_maxvx>maxvx) maxvx=element_maxvx;
 	}
@@ -887,6 +887,6 @@
 	maxvy=-INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MaxVy(&element_maxvy);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_maxvy = element->inputs->Max(VyEnum);
 		if(element_maxvy>maxvy) maxvy=element_maxvy;
 	}
@@ -911,6 +911,6 @@
 	maxvz=-INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MaxVz(&element_maxvz);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_maxvz = element->inputs->Max(VzEnum);
 		if(element_maxvz>maxvz) maxvz=element_maxvz;
 	}
@@ -935,6 +935,6 @@
 	minvel=INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MinVel(&element_minvel);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_minvel = element->inputs->Min(VelEnum);
 		if(element_minvel<minvel) minvel=element_minvel;
 	}
@@ -959,6 +959,6 @@
 	minvx=INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MinVx(&element_minvx);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_minvx = element->inputs->Min(VxEnum);
 		if(element_minvx<minvx) minvx=element_minvx;
 	}
@@ -983,6 +983,6 @@
 	minvy=INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MinVy(&element_minvy);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_minvy = element->inputs->Min(VyEnum);
 		if(element_minvy<minvy) minvy=element_minvy;
 	}
@@ -1007,6 +1007,6 @@
 	minvz=INFINITY;
 	for(i=0;i<this->elements->Size();i++){
-		Element* element=(Element*)this->elements->GetObjectByOffset(i);
-		element->MinVz(&element_minvz);
+		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+		element_minvz = element->inputs->Min(VzEnum);
 		if(element_minvz<minvz) minvz=element_minvz;
 	}
