Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 21974)
@@ -36,7 +36,4 @@
 		int  GetResultNumberOfNodes(void){return 1;};
 		int   InstanceEnum();
-		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
 		Input* SpawnSegInput(int index1,int index2);
 		Input* SpawnTriaInput(int index1,int index2,int index3);
@@ -46,6 +43,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar);
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("Constrain not implemented for booleans");};
-		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
 		void Extrude(int start);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 21974)
@@ -147,16 +147,4 @@
 }
 /*}}}*/
-void ControlInput::Constrain(void){/*{{{*/
-
-	Input* newvalues=NULL;
-
-	newvalues=this->values->PointwiseMin(maxvalues);
-	delete values; this->values=newvalues;
-	newvalues=this->values->PointwiseMax(minvalues);
-	delete values; this->values=newvalues;
-}/*}}}*/
-void ControlInput::Constrain(IssmDouble min, IssmDouble max){/*{{{*/
-	   values->Constrain(min,max);
-}/*}}}*/
 void ControlInput::Extrude(int start){/*{{{*/
 	values->Extrude(start);
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 21974)
@@ -40,7 +40,4 @@
 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
-		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
 		int    InstanceEnum();
 		Input* SpawnSegInput(int index1,int index2);
@@ -49,7 +46,4 @@
 		/*numerics: {{{*/
 		void AXPY(Input* xinput,IssmDouble scalar);
-		void Constrain(void);
-		void Constrain(IssmDouble min,IssmDouble max);
-		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
 		void Extrude(int start);
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 21974)
@@ -39,7 +39,4 @@
 		void Configure(Parameters* parameters);
 		int    InstanceEnum();
-		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
 		Input* SpawnSegInput(int index1,int index2);
 		Input* SpawnTriaInput(int index1,int index2,int index3);
@@ -48,7 +45,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
-		void Constrain(void){_error_("not implemented yet");};
-		void Constrain(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
-		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
 		void Extrude(int start){_error_("not implemented yet");};
 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleArrayInput.h	(revision 21974)
@@ -38,7 +38,4 @@
 		int  GetResultNumberOfNodes(void){return 1;};
 		int   InstanceEnum();
-		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
 		void ResultToMatrix(IssmDouble* values,int ncols,int sid);
 		Input* SpawnSegInput(int index1,int index2){_error_("not implemented yet");};
@@ -48,6 +45,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("not implemented yet");};
-		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
 		void Extrude(int start){_error_("not supported yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 21974)
@@ -127,15 +127,4 @@
 }
 /*}}}*/
-void DoubleInput::Constrain(IssmDouble cm_min, IssmDouble cm_max){/*{{{*/
-
-	if(!xIsNan<IssmDouble>(cm_min)) if (this->value<cm_min)this->value=cm_min;
-	if(!xIsNan<IssmDouble>(cm_max)) if (this->value>cm_max)this->value=cm_max;
-
-}
-/*}}}*/
-void DoubleInput::ConstrainMin(IssmDouble minimum){/*{{{*/
-	if (value<minimum) value=minimum;
-}
-/*}}}*/
 void DoubleInput::GetInputAverage(IssmDouble* pvalue){/*{{{*/
 	*pvalue=value;
@@ -182,63 +171,4 @@
 }
 /*}}}*/
-Input* DoubleInput::PointwiseDivide(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	DoubleInput* outinput=NULL;
-
-	/*Intermediaries*/
-	IssmDouble       Bvalue;
-
-	/*Check that inputB is of the same type*/
-	inputB->GetInputAverage(&Bvalue);
-
-	/*Create new DoubleInput*/
-	outinput=new DoubleInput(this->enum_type,this->value/Bvalue);
-
-	/*Return output pointer*/
-	return outinput;
-
-}
-/*}}}*/
-Input* DoubleInput::PointwiseMax(Input* input){/*{{{*/
-
-	/*Ouput*/
-	DoubleInput* outinput=NULL;
-
-	/*Intermediaries*/
-	IssmDouble       max;
-
-	/*Check that inputB is of the same type*/
-	if (input->Max() > this->Max()) max=input->Max();
-	else max=this->Max();
-
-	/*Create new DoubleInput*/
-	outinput=new DoubleInput(this->enum_type,max);
-
-	/*Return output pointer*/
-	return outinput;
-
-}
-/*}}}*/
-Input* DoubleInput::PointwiseMin(Input* input){/*{{{*/
-
-	/*Ouput*/
-	DoubleInput* outinput=NULL;
-
-	/*Intermediaries*/
-	IssmDouble       min;
-
-	/*Check that inputB is of the same type*/
-	if (input->Min() < this->Min()) min=input->Min();
-	else min=this->Min();
-
-	/*Create new DoubleInput*/
-	outinput=new DoubleInput(this->enum_type,min);
-
-	/*Return output pointer*/
-	return outinput;
-
-}
-/*}}}*/
 void DoubleInput::Scale(IssmDouble scale_factor){/*{{{*/
 	value=value*scale_factor;
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 21974)
@@ -39,7 +39,4 @@
 		int  GetResultNumberOfNodes(void){return 1;};
 		int   InstanceEnum();
-		Input* PointwiseDivide(Input* inputB);
-		Input* PointwiseMax(Input* inputB);
-		Input* PointwiseMin(Input* inputB);
 		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		Input* SpawnSegInput(int index1,int index2);
@@ -49,6 +46,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar);
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
-		void ConstrainMin(IssmDouble minimum);
 		void Extrude(int start){_error_("not supported yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 21974)
@@ -42,6 +42,4 @@
 
 		virtual void   AXPY(Input* xinput,IssmDouble scalar)=0;
-		virtual void   Constrain(IssmDouble cm_min, IssmDouble cm_max)=0;
-		virtual void   ConstrainMin(IssmDouble minimum)=0;
 		virtual void   Extrude(int start)=0;
 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist)=0;
@@ -57,7 +55,4 @@
 		virtual int  GetResultInterpolation(void)=0;
 		virtual int  GetResultNumberOfNodes(void)=0;
-		virtual Input* PointwiseDivide(Input* inputB)=0;
-		virtual Input* PointwiseMax(Input* inputmax)=0;
-		virtual Input* PointwiseMin(Input* inputmin)=0;
 		virtual Input* SpawnSegInput(int index1,int index2)=0;
 		virtual Input* SpawnTriaInput(int index1,int index2,int index3)=0;
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 21974)
@@ -111,16 +111,4 @@
 }
 /*}}}*/
-void  Inputs::ConstrainMin(int constrain_enum, IssmDouble minimum){/*{{{*/
-
-	/*Find x and y inputs: */
-	Input* constrain_input=xDynamicCast<Input*>(this->GetInput(constrain_enum));
-
-	/*some checks: */
-	if(!constrain_input) _error_("input " << EnumToStringx(constrain_enum) << " could not be found!");
-
-	/*Apply ContrainMin: */
-	constrain_input->ConstrainMin(minimum);
-}
-/*}}}*/
 int  Inputs::DeleteInput(int enum_type){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 21974)
@@ -26,5 +26,4 @@
 		void        ChangeEnum(int enumtype,int new_enumtype);
 		void        Configure(Parameters* parameters);
-		void        ConstrainMin(int constrain_enum, IssmDouble minimum);
 		int         DeleteInput(int enum_type);
 		void        DuplicateInput(int original_enum,int new_enum);
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 21974)
@@ -127,11 +127,4 @@
 }
 /*}}}*/
-void IntInput::Constrain(IssmDouble cm_min, IssmDouble cm_max){/*{{{*/
-
-	if(!xIsNan<IssmDouble>(cm_min)) if (this->value<cm_min)this->value=reCast<int>(cm_min);
-	if(!xIsNan<IssmDouble>(cm_max)) if (this->value>cm_max)this->value=reCast<int>(cm_max);
-
-}
-/*}}}*/
 void IntInput::GetInputAverage(IssmDouble* pvalue){/*{{{*/
 	*pvalue=reCast<IssmDouble>(value);
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 21974)
@@ -40,7 +40,4 @@
 		int  GetResultNumberOfNodes(void){return 1;};
 		int   InstanceEnum();
-		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
-		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
 		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		Input* SpawnSegInput(int index1,int index2);
@@ -50,6 +47,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar);
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
-		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
 		void Extrude(int start){_error_("not supported yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 21974)
@@ -217,20 +217,4 @@
 void PentaInput::Configure(Parameters* parameters){/*{{{*/
 	/*do nothing: */
-}
-/*}}}*/
-void PentaInput::Constrain(IssmDouble cm_min, IssmDouble cm_max){/*{{{*/
-
-	int i;
-	const int numnodes=this->NumberofNodes(this->interpolation_type);
-
-	if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
-	if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
-
-}
-/*}}}*/
-void PentaInput::ConstrainMin(IssmDouble minimum){/*{{{*/
-
-	int numnodes = this->NumberofNodes(this->interpolation_type);
-	for(int i=0;i<numnodes;i++) if (values[i]<minimum) values[i]=minimum;
 }
 /*}}}*/
@@ -321,96 +305,4 @@
 }
 /*}}}*/
-Input* PentaInput::PointwiseDivide(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	PentaInput* outinput=NULL;
-
-	/*Intermediaries*/
-	PentaInput *xinputB  = NULL;
-	const int   numnodes = this->NumberofNodes(this->interpolation_type);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=PentaInputEnum)     _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(PentaInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Allocate intermediary*/
-	IssmDouble* AdotBvalues=xNew<IssmDouble>(numnodes);
-
-	/*Create point wise sum*/
-	for(int i=0;i<numnodes;i++){
-		_assert_(xinputB->values[i]!=0);
-		AdotBvalues[i]=this->values[i]/xinputB->values[i];
-	}
-
-	/*Create new Penta vertex input (copy of current input)*/
-	outinput=new PentaInput(this->enum_type,AdotBvalues,this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(AdotBvalues);
-	return outinput;
-
-}
-/*}}}*/
-Input* PentaInput::PointwiseMax(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	PentaInput* outinput=NULL;
-
-	/*Intermediaries*/
-	int         i;
-	PentaInput  *xinputB   = NULL;
-	const int   numnodes  = this->NumberofNodes(this->interpolation_type);
-	IssmDouble *maxvalues = xNew<IssmDouble>(numnodes);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=PentaInputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(PentaInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Create point wise max*/
-	for(i=0;i<numnodes;i++){
-		if(this->values[i] < xinputB->values[i]) maxvalues[i]=xinputB->values[i];
-		else maxvalues[i]=this->values[i];
-	}
-
-	/*Create new Penta vertex input (copy of current input)*/
-	outinput=new PentaInput(this->enum_type,&maxvalues[0],this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(maxvalues);
-	return outinput;
-}
-/*}}}*/
-Input* PentaInput::PointwiseMin(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	PentaInput* outinput=NULL;
-
-	/*Intermediaries*/
-	int         i;
-	PentaInput  *xinputB   = NULL;
-	const int   numnodes  = this->NumberofNodes(this->interpolation_type);
-	IssmDouble *minvalues = xNew<IssmDouble>(numnodes);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=PentaInputEnum)       _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(PentaInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Create point wise min*/
-	for(i=0;i<numnodes;i++){
-		if(this->values[i] > xinputB->values[i]) minvalues[i]=xinputB->values[i];
-		else minvalues[i]=this->values[i];
-	}
-
-	/*Create new Penta vertex input (copy of current input)*/
-	outinput=new PentaInput(this->enum_type,&minvalues[0],this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(minvalues);
-	return outinput;
-}
-/*}}}*/
 void PentaInput::Scale(IssmDouble scale_factor){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 21974)
@@ -36,7 +36,4 @@
 		/*PentaInput management*/
 		int   InstanceEnum();
-		Input* PointwiseDivide(Input* inputB);
-		Input* PointwiseMin(Input* inputB);
-		Input* PointwiseMax(Input* inputB);
 		int  GetResultInterpolation(void);
 		int  GetResultNumberOfNodes(void);
@@ -48,6 +45,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar);
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
-		void ConstrainMin(IssmDouble minimum);
 		void Extrude(int start);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 21974)
@@ -41,7 +41,4 @@
 		int  GetResultNumberOfNodes(void){_error_("not implemented");};
 		int    InstanceEnum();
-		Input* PointwiseDivide(Input* inputB){_error_("not supported yet");};
-		Input* PointwiseMax(Input* inputB){_error_("not supported yet");};
-		Input* PointwiseMin(Input* inputB){_error_("not supported yet");};
 		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		Input* SpawnSegInput(int index1,int index2){_error_("not implemented yet");};
@@ -51,6 +48,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("not implemented yet");};
-		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
 		void Extrude(int start){_error_("not supported yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.cpp	(revision 21974)
@@ -238,20 +238,4 @@
 }
 /*}}}*/
-void TetraInput::Constrain(IssmDouble cm_min, IssmDouble cm_max){/*{{{*/
-
-	int i;
-	const int numnodes=this->NumberofNodes(this->interpolation_type);
-
-	if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
-	if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
-
-}
-/*}}}*/
-void TetraInput::ConstrainMin(IssmDouble minimum){/*{{{*/
-
-	int numnodes = this->NumberofNodes(this->interpolation_type);
-	for(int i=0;i<numnodes;i++) if (values[i]<minimum) values[i]=minimum;
-}
-/*}}}*/
 void TetraInput::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){/*{{{*/
 	const int numvertices=4;
@@ -312,98 +296,4 @@
 }
 /*}}}*/
-Input* TetraInput::PointwiseDivide(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	TetraInput* outinput=NULL;
-
-	/*Intermediaries*/
-	TetraInput *xinputB  = NULL;
-	const int   numnodes = this->NumberofNodes(this->interpolation_type);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=TetraInputEnum)     _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(TetraInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Allocate intermediary*/
-	IssmDouble* AdotBvalues=xNew<IssmDouble>(numnodes);
-
-	/*Create point wise division*/
-	for(int i=0;i<numnodes;i++){
-		_assert_(xinputB->values[i]!=0);
-		AdotBvalues[i]=this->values[i]/xinputB->values[i];
-	}
-
-	/*Create new Tetra vertex input (copy of current input)*/
-	outinput=new TetraInput(this->enum_type,AdotBvalues,this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(AdotBvalues);
-	return outinput;
-
-}
-/*}}}*/
-Input* TetraInput::PointwiseMax(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	TetraInput* outinput=NULL;
-
-	/*Intermediaries*/
-	int         i;
-	TetraInput  *xinputB   = NULL;
-	const int   numnodes  = this->NumberofNodes(this->interpolation_type);
-	IssmDouble *maxvalues = xNew<IssmDouble>(numnodes);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=TetraInputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(TetraInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Create point wise max*/
-	for(i=0;i<numnodes;i++){
-		if(this->values[i] < xinputB->values[i]) maxvalues[i]=xinputB->values[i];
-		else maxvalues[i]=this->values[i];
-	}
-
-	/*Create new Tetra vertex input (copy of current input)*/
-	outinput=new TetraInput(this->enum_type,&maxvalues[0],this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(maxvalues);
-	return outinput;
-
-}
-/*}}}*/
-Input* TetraInput::PointwiseMin(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	TetraInput* outinput=NULL;
-
-	/*Intermediaries*/
-	int         i;
-	TetraInput  *xinputB   = NULL;
-	const int   numnodes  = this->NumberofNodes(this->interpolation_type);
-	IssmDouble *minvalues = xNew<IssmDouble>(numnodes);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=TetraInputEnum)       _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(TetraInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Create point wise min*/
-	for(i=0;i<numnodes;i++){
-		if(this->values[i] > xinputB->values[i]) minvalues[i]=xinputB->values[i];
-		else minvalues[i]=this->values[i];
-	}
-
-	/*Create new Tetra vertex input (copy of current input)*/
-	outinput=new TetraInput(this->enum_type,&minvalues[0],this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(minvalues);
-	return outinput;
-
-}
-/*}}}*/
 void TetraInput::Scale(IssmDouble scale_factor){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h	(revision 21974)
@@ -41,7 +41,4 @@
 		int    GetResultNumberOfNodes(void);
 		int    InstanceEnum();
-		Input* PointwiseDivide(Input* inputB);
-		Input* PointwiseMax(Input* inputB);
-		Input* PointwiseMin(Input* inputB);
 		void   ResultToPatch(IssmDouble* values,int nodesperelement,int sid);
 		Input* SpawnSegInput(int index1,int index2){_error_("not supported yet");};
@@ -51,6 +48,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar);
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
-		void ConstrainMin(IssmDouble minimum);
 		void Extrude(int start){_error_("not supported yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 21974)
@@ -45,7 +45,4 @@
 		int  GetResultNumberOfNodes(void);
 		int    InstanceEnum();
-		Input* PointwiseDivide(Input* input_in){_error_("not implemented yet");};
-		Input* PointwiseMax(Input* input_in){_error_("not implemented yet");};
-		Input* PointwiseMin(Input* input_in){_error_("not implemented yet");};
 		void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
 		Input* SpawnSegInput(int index1,int index2);
@@ -55,6 +52,4 @@
 		void AXPY(Input* xforcing,IssmDouble scalar){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("not implemented yet");};
-		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
 		void Extrude(int start);
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 21974)
@@ -271,20 +271,4 @@
 }
 /*}}}*/
-void TriaInput::Constrain(IssmDouble cm_min, IssmDouble cm_max){/*{{{*/
-
-	int i;
-	const int numnodes=this->NumberofNodes(this->interpolation_type);
-
-	if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
-	if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
-
-}
-/*}}}*/
-void TriaInput::ConstrainMin(IssmDouble minimum){/*{{{*/
-
-	int numnodes = this->NumberofNodes(this->interpolation_type);
-	for(int i=0;i<numnodes;i++) if (values[i]<minimum) values[i]=minimum;
-}
-/*}}}*/
 void TriaInput::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){/*{{{*/
 	const int numvertices=3;
@@ -345,98 +329,4 @@
 }
 /*}}}*/
-Input* TriaInput::PointwiseMax(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	TriaInput* outinput=NULL;
-
-	/*Intermediaries*/
-	int         i;
-	TriaInput  *xinputB   = NULL;
-	const int   numnodes  = this->NumberofNodes(this->interpolation_type);
-	IssmDouble *maxvalues = xNew<IssmDouble>(numnodes);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=TriaInputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(TriaInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Create point wise max*/
-	for(i=0;i<numnodes;i++){
-		if(this->values[i] < xinputB->values[i]) maxvalues[i]=xinputB->values[i];
-		else maxvalues[i]=this->values[i];
-	}
-
-	/*Create new Tria vertex input (copy of current input)*/
-	outinput=new TriaInput(this->enum_type,&maxvalues[0],this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(maxvalues);
-	return outinput;
-
-}
-/*}}}*/
-Input* TriaInput::PointwiseMin(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	TriaInput* outinput=NULL;
-
-	/*Intermediaries*/
-	int         i;
-	TriaInput  *xinputB   = NULL;
-	const int   numnodes  = this->NumberofNodes(this->interpolation_type);
-	IssmDouble *minvalues = xNew<IssmDouble>(numnodes);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=TriaInputEnum)       _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(TriaInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Create point wise min*/
-	for(i=0;i<numnodes;i++){
-		if(this->values[i] > xinputB->values[i]) minvalues[i]=xinputB->values[i];
-		else minvalues[i]=this->values[i];
-	}
-
-	/*Create new Tria vertex input (copy of current input)*/
-	outinput=new TriaInput(this->enum_type,&minvalues[0],this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(minvalues);
-	return outinput;
-
-}
-/*}}}*/
-Input* TriaInput::PointwiseDivide(Input* inputB){/*{{{*/
-
-	/*Ouput*/
-	TriaInput* outinput=NULL;
-
-	/*Intermediaries*/
-	TriaInput *xinputB  = NULL;
-	const int   numnodes = this->NumberofNodes(this->interpolation_type);
-
-	/*Check that inputB is of the same type*/
-	if(inputB->ObjectEnum()!=TriaInputEnum)     _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
-	xinputB=(TriaInput*)inputB;
-	if(xinputB->interpolation_type!=this->interpolation_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->interpolation_type));
-
-	/*Allocate intermediary*/
-	IssmDouble* AdotBvalues=xNew<IssmDouble>(numnodes);
-
-	/*Create point wise division*/
-	for(int i=0;i<numnodes;i++){
-		_assert_(xinputB->values[i]!=0);
-		AdotBvalues[i]=this->values[i]/xinputB->values[i];
-	}
-
-	/*Create new Tria vertex input (copy of current input)*/
-	outinput=new TriaInput(this->enum_type,AdotBvalues,this->interpolation_type);
-
-	/*Return output pointer*/
-	xDelete<IssmDouble>(AdotBvalues);
-	return outinput;
-
-}
-/*}}}*/
 void TriaInput::Scale(IssmDouble scale_factor){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 21973)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 21974)
@@ -41,7 +41,4 @@
 		int    GetResultNumberOfNodes(void);
 		int    InstanceEnum();
-		Input* PointwiseDivide(Input* inputB);
-		Input* PointwiseMax(Input* inputB);
-		Input* PointwiseMin(Input* inputB);
 		void   ResultToPatch(IssmDouble* values,int nodesperelement,int sid);
 		Input* SpawnSegInput(int index1,int index2);
@@ -51,6 +48,4 @@
 		void AXPY(Input* xinput,IssmDouble scalar);
 		void ChangeEnum(int newenumtype);
-		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
-		void ConstrainMin(IssmDouble minimum);
 		void Extrude(int start){_error_("not supported yet");};
 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes);
