Index: /issm/trunk-jpl/src/c/objects/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/BoolInput.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/BoolInput.cpp	(revision 12426)
@@ -23,5 +23,5 @@
 }
 /*}}}*/
-/*FUNCTION BoolInput::BoolInput(double* values){{{*/
+/*FUNCTION BoolInput::BoolInput(IssmPDouble* values){{{*/
 BoolInput::BoolInput(int in_enum_type,IssmBool in_value){
 
@@ -98,5 +98,5 @@
 /*}}}*/
 /*FUNCTION BoolInput::SpawnResult{{{*/
-ElementResult* BoolInput::SpawnResult(int step, double time){
+ElementResult* BoolInput::SpawnResult(int step, IssmPDouble time){
 	
 	return new BoolElementResult(this->enum_type,this->value,step,time);
@@ -114,18 +114,18 @@
 void BoolInput::GetInputValue(int* pvalue){_error_(" not supported yet!");}
 /*}}}*/
-/*FUNCTION BoolInput::GetInputValue(double* pvalue){{{*/
-void BoolInput::GetInputValue(double* pvalue){_error_(" not supported yet!");}
-/*}}}*/
-/*FUNCTION BoolInput::GetInputValue(double* pvalue,GaussTria* gauss){{{*/
-void BoolInput::GetInputValue(double* pvalue,GaussTria* gauss){_error_(" not supported yet!");}
-/*}}}*/
-/*FUNCTION BoolInput::GetInputValue(double* pvalue,GaussPenta* gauss){{{*/
-void BoolInput::GetInputValue(double* pvalue,GaussPenta* gauss){_error_(" not supported yet!");}
-/*}}}*/
-/*FUNCTION BoolInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){{{*/
-void BoolInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){_error_(" not supported yet!");}
-/*}}}*/
-/*FUNCTION BoolInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){{{*/
-void BoolInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){_error_(" not supported yet!");}
+/*FUNCTION BoolInput::GetInputValue(IssmPDouble* pvalue){{{*/
+void BoolInput::GetInputValue(IssmPDouble* pvalue){_error_(" not supported yet!");}
+/*}}}*/
+/*FUNCTION BoolInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){{{*/
+void BoolInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){_error_(" not supported yet!");}
+/*}}}*/
+/*FUNCTION BoolInput::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){{{*/
+void BoolInput::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){_error_(" not supported yet!");}
+/*}}}*/
+/*FUNCTION BoolInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void BoolInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){_error_(" not supported yet!");}
+/*}}}*/
+/*FUNCTION BoolInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void BoolInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){_error_(" not supported yet!");}
 /*}}}*/
 /*FUNCTION BoolInput::ChangeEnum{{{*/
@@ -135,5 +135,5 @@
 /*}}}*/
 /*FUNCTION BoolInput::SquareMin{{{*/
-void BoolInput::SquareMin(double* psquaremin, bool process_units,Parameters* parameters){
+void BoolInput::SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){
 	/*square of a bool is the bool itself: */
 	*psquaremin=value;
@@ -141,10 +141,10 @@
 /*}}}*/
 /*FUNCTION BoolInput::Scale{{{*/
-void BoolInput::Scale(double scale_factor){
+void BoolInput::Scale(IssmPDouble scale_factor){
 	/*a bool cannot be scaled: */
 }
 /*}}}*/
 /*FUNCTION BoolInput::AXPY{{{*/
-void BoolInput::AXPY(Input* xinput,double scalar){
+void BoolInput::AXPY(Input* xinput,IssmPDouble scalar){
 
 	BoolInput*  xboolinput=NULL;
@@ -167,5 +167,5 @@
 /*}}}*/
 /*FUNCTION BoolInput::Constrain{{{*/
-void BoolInput::Constrain(double cm_min, double cm_max){
+void BoolInput::Constrain(IssmPDouble cm_min, IssmPDouble cm_max){
 
 	if(!isnan(cm_min)) if (this->value<cm_min)this->value=cm_min;
@@ -189,5 +189,5 @@
 /*}}}*/
 /*FUNCTION BoolInput::GetValuesPtr{{{*/
-void BoolInput::GetValuesPtr(double** pvalues,int* pnum_values){
+void BoolInput::GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){
 
 	_error_(" not supported yet!");
Index: /issm/trunk-jpl/src/c/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/BoolInput.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/BoolInput.h	(revision 12426)
@@ -40,43 +40,43 @@
 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
-		ElementResult* SpawnResult(int step, double time);
+		ElementResult* SpawnResult(int step, IssmPDouble time);
 		void Configure(Parameters* parameters);
-		void AddTimeValues(double* values,int step,double time){_error_("not supported yet");};
+		void AddTimeValues(IssmPDouble* values,int step,IssmPDouble time){_error_("not supported yet");};
 		/*}}}*/
 		/*numerics: {{{*/
 		void GetInputValue(bool* pvalue);
 		void GetInputValue(int* pvalue);
-		void GetInputValue(double* pvalue);
-		void GetInputValue(double* pvalue,GaussTria* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss);
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss);
-		void GetInputAverage(double* pvalue){_error_("not implemented yet");};
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetInputAverage(IssmPDouble* pvalue){_error_("not implemented yet");};
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
-		void ConstrainMin(double minimum){_error_("not implemented yet");};
-		double InfinityNorm(void){_error_("InfinityNorm not implemented for booleans");};
-		double Max(void){_error_("Max not implemented for booleans");};
-		double MaxAbs(void){_error_("Max not implemented for booleans");};
-		double Min(void){_error_("Min not implemented for booleans");};
-		double MinAbs(void){_error_("Min not implemented for booleans");};
-		void Scale(double scale_factor);
-		void ArtificialNoise(double min,double max){_error_("not implemented yet");};
-		void AXPY(Input* xinput,double scalar);
-		void Constrain(double cm_min, double cm_max);
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(IssmPDouble minimum){_error_("not implemented yet");};
+		IssmPDouble InfinityNorm(void){_error_("InfinityNorm not implemented for booleans");};
+		IssmPDouble Max(void){_error_("Max not implemented for booleans");};
+		IssmPDouble MaxAbs(void){_error_("Max not implemented for booleans");};
+		IssmPDouble Min(void){_error_("Min not implemented for booleans");};
+		IssmPDouble MinAbs(void){_error_("Min not implemented for booleans");};
+		void Scale(IssmPDouble scale_factor);
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		void AXPY(Input* xinput,IssmPDouble scalar);
+		void Constrain(IssmPDouble cm_min, IssmPDouble cm_max);
 		void Extrude(void);
 		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
 		void GetVectorFromInputs(Vector* vector,int* doflist);
-		void GetValuesPtr(double** pvalues,int* pnum_values);
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/objects/Inputs/ControlInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/ControlInput.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/ControlInput.cpp	(revision 12426)
@@ -28,6 +28,6 @@
 }
 /*}}}*/
-/*FUNCTION ControlInput::ControlInput(int enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,int id){{{*/
-ControlInput::ControlInput(int in_enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,int id){
+/*FUNCTION ControlInput::ControlInput(int enum_type,int enum_input,IssmPDouble* pvalues,IssmPDouble* pmin,IssmPDouble* pmax,int id){{{*/
+ControlInput::ControlInput(int in_enum_type,int enum_input,IssmPDouble* pvalues,IssmPDouble* pmin,IssmPDouble* pmax,int id){
 
 	control_id=id;
@@ -136,6 +136,6 @@
 	delete values; this->values=newvalues;
 }/*}}}*/
-/*FUNCTION ControlInput::Constrain(double min, double max){{{*/
-void ControlInput::Constrain(double min, double max){
+/*FUNCTION ControlInput::Constrain(IssmPDouble min, IssmPDouble max){{{*/
+void ControlInput::Constrain(IssmPDouble min, IssmPDouble max){
 	   values->Constrain(min,max);
 }/*}}}*/
@@ -151,5 +151,5 @@
 }/*}}}*/
 /*FUNCTION ControlInput::ScaleGradient{{{*/
-void ControlInput::ScaleGradient(double scaling_factor){
+void ControlInput::ScaleGradient(IssmPDouble scaling_factor){
 	if(!gradient) _error_("Gradient of ControlInput %s not found",EnumToStringx(enum_type));
 	gradient->Scale(scaling_factor);
@@ -186,5 +186,5 @@
 }/*}}}*/
 /*FUNCTION ControlInput::SpawnResult{{{*/
-ElementResult* ControlInput::SpawnResult(int step, double time){
+ElementResult* ControlInput::SpawnResult(int step, IssmPDouble time){
 	return savedvalues->SpawnResult(step,time);
 }/*}}}*/
@@ -194,5 +194,5 @@
 }/*}}}*/
 /*FUNCTION ControlInput::SpawnGradient{{{*/
-ElementResult* ControlInput::SpawnGradient(int step, double time){
+ElementResult* ControlInput::SpawnGradient(int step, IssmPDouble time){
 	_assert_(gradient);
 	return gradient->SpawnResult(step,time);
@@ -224,6 +224,6 @@
 	 }
 }/*}}}*/
-/*FUNCTION ControlInput::GetInputAverage(double* pvalue){{{*/
-void ControlInput::GetInputAverage(double* pvalue){
+/*FUNCTION ControlInput::GetInputAverage(IssmPDouble* pvalue){{{*/
+void ControlInput::GetInputAverage(IssmPDouble* pvalue){
 	values->GetInputAverage(pvalue);
 }/*}}}*/
@@ -236,22 +236,22 @@
 	values->GetInputValue(pvalue);
 }/*}}}*/
-/*FUNCTION ControlInput::GetInputValue(double* pvalue){{{*/
-void ControlInput::GetInputValue(double* pvalue){
+/*FUNCTION ControlInput::GetInputValue(IssmPDouble* pvalue){{{*/
+void ControlInput::GetInputValue(IssmPDouble* pvalue){
 	values->GetInputValue(pvalue);
 }/*}}}*/
-/*FUNCTION ControlInput::GetInputValue(double* pvalue){{{*/
-void ControlInput::GetInputValue(double* pvalue,GaussTria* gauss){
+/*FUNCTION ControlInput::GetInputValue(IssmPDouble* pvalue){{{*/
+void ControlInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){
 	values->GetInputValue(pvalue,gauss);
 }/*}}}*/
-/*FUNCTION ControlInput::GetInputValue(double* pvalue){{{*/
-void ControlInput::GetInputValue(double* pvalue,GaussPenta* gauss){
+/*FUNCTION ControlInput::GetInputValue(IssmPDouble* pvalue){{{*/
+void ControlInput::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){
 	values->GetInputValue(pvalue,gauss);
 }/*}}}*/
-/*FUNCTION ControlInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){{{*/
-void ControlInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){
+/*FUNCTION ControlInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void ControlInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){
 	values->GetInputDerivativeValue(derivativevalues,xyz_list,gauss);
 }/*}}}*/
-/*FUNCTION ControlInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){{{*/
-void ControlInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){
+/*FUNCTION ControlInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void ControlInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){
 	values->GetInputDerivativeValue(derivativevalues,xyz_list,gauss);
 }/*}}}*/
@@ -264,5 +264,5 @@
 }/*}}}*/
 /*FUNCTION ControlInput::UpdateValue{{{*/
-void ControlInput::UpdateValue(double scalar){
+void ControlInput::UpdateValue(IssmPDouble scalar){
 	if(!gradient)    _error_("Gradient of %s not found",EnumToStringx(this->enum_type));
 	if(!savedvalues) _error_("Values of %s not found",EnumToStringx(this->enum_type));
Index: /issm/trunk-jpl/src/c/objects/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/ControlInput.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/ControlInput.h	(revision 12426)
@@ -27,5 +27,5 @@
 		/*ControlInput constructors, destructors: {{{*/
 		ControlInput();
-		ControlInput(int enum_type,int enum_input,double* pvalues,double* pmin,double* pmax,int id);
+		ControlInput(int enum_type,int enum_input,IssmPDouble* pvalues,IssmPDouble* pmin,IssmPDouble* pmax,int id);
 		~ControlInput();
 		/*}}}*/
@@ -44,6 +44,6 @@
 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
-		ElementResult* SpawnResult(int step, double time);
-		void AddTimeValues(double* values,int step,double time){_error_("not supported yet");};
+		ElementResult* SpawnResult(int step, IssmPDouble time);
+		void AddTimeValues(IssmPDouble* values,int step,IssmPDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
@@ -52,43 +52,43 @@
 		void GetInputValue(bool* pvalue);
 		void GetInputValue(int* pvalue);
-		void GetInputValue(double* pvalue);
-		void GetInputValue(double* pvalue,GaussTria* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss);
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss);
-		void GetInputAverage(double* pvalue);
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetInputAverage(IssmPDouble* pvalue);
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters){_error_("not implemented yet");};
-		void ConstrainMin(double minimum){_error_("not implemented yet");};
-		void Scale(double scale_factor){_error_("not implemented yet");};
-		void ArtificialNoise(double min,double max){_error_("not implemented yet");};
-		void AXPY(Input* xinput,double scalar){_error_("not implemented yet");};
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){_error_("not implemented yet");};
+		void ConstrainMin(IssmPDouble minimum){_error_("not implemented yet");};
+		void Scale(IssmPDouble scale_factor){_error_("not implemented yet");};
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		void AXPY(Input* xinput,IssmPDouble scalar){_error_("not implemented yet");};
 		void Constrain(void);
-		void Constrain(double min,double max);
-		double InfinityNorm(void){_error_("not implemented yet");};
-		double Max(void){_error_("not implemented yet");};
-		double MaxAbs(void){_error_("not implemented yet");};
-		double Min(void){_error_("not implemented yet");};
-		double MinAbs(void){_error_("not implemented yet");};
+		void Constrain(IssmPDouble min,IssmPDouble max);
+		IssmPDouble InfinityNorm(void){_error_("not implemented yet");};
+		IssmPDouble Max(void){_error_("not implemented yet");};
+		IssmPDouble MaxAbs(void){_error_("not implemented yet");};
+		IssmPDouble Min(void){_error_("not implemented yet");};
+		IssmPDouble MinAbs(void){_error_("not implemented yet");};
 		void Extrude(void);
 		void VerticallyIntegrate(Input* thickness_input);
 		void GetVectorFromInputs(Vector* vector,int* doflist,const char* data);
 		void GetVectorFromInputs(Vector* vector,int* doflist);
-		void GetValuesPtr(double** pvalues,int* pnum_values){_error_("not implemented yet");};
-		ElementResult* SpawnGradient(int step, double time);
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){_error_("not implemented yet");};
+		ElementResult* SpawnGradient(int step, IssmPDouble time);
 		void GetGradient(Vector* gradient_vec,int* doflist);
-		void ScaleGradient(double scale);
+		void ScaleGradient(IssmPDouble scale);
 		void SetGradient(Input* gradient_in);
-		void UpdateValue(double scalar);
+		void UpdateValue(IssmPDouble scalar);
 		void SaveValue(void);
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/Inputs/DatasetInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/DatasetInput.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/DatasetInput.cpp	(revision 12426)
@@ -111,6 +111,6 @@
 }
 /*}}}*/
-/*FUNCTION DatasetInput::GetInputValue(double* pvalue,GaussTria* gauss,int index){{{*/
-void DatasetInput::GetInputValue(double* pvalue,GaussTria* gauss,int index){
+/*FUNCTION DatasetInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,int index){{{*/
+void DatasetInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,int index){
 
 	/*Get requested input within dataset*/
Index: /issm/trunk-jpl/src/c/objects/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/DatasetInput.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/DatasetInput.h	(revision 12426)
@@ -40,6 +40,6 @@
 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
-		ElementResult* SpawnResult(int step, double time){_error_("not implemented yet");};
-		void AddTimeValues(double* values,int step,double time){_error_("not supported yet");};
+		ElementResult* SpawnResult(int step, IssmPDouble time){_error_("not implemented yet");};
+		void AddTimeValues(IssmPDouble* values,int step,IssmPDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
@@ -47,42 +47,42 @@
 		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index);
-		void GetInputValue(double* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputAverage(double* pvalue){_error_("not implemented yet");};
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index);
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputAverage(IssmPDouble* pvalue){_error_("not implemented yet");};
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters){_error_("not implemented yet");};
-		void ConstrainMin(double minimum){_error_("not implemented yet");};
-		void Scale(double scale_factor){_error_("not implemented yet");};
-		void ArtificialNoise(double min,double max){_error_("not implemented yet");};
-		void AXPY(Input* xinput,double scalar){_error_("not implemented yet");};
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){_error_("not implemented yet");};
+		void ConstrainMin(IssmPDouble minimum){_error_("not implemented yet");};
+		void Scale(IssmPDouble scale_factor){_error_("not implemented yet");};
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		void AXPY(Input* xinput,IssmPDouble scalar){_error_("not implemented yet");};
 		void Constrain(void){_error_("not implemented yet");};
-		void Constrain(double min,double max){_error_("not implemented yet");};
-		double InfinityNorm(void){_error_("not implemented yet");};
-		double Max(void){_error_("not implemented yet");};
-		double MaxAbs(void){_error_("not implemented yet");};
-		double Min(void){_error_("not implemented yet");};
-		double MinAbs(void){_error_("not implemented yet");};
+		void Constrain(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		IssmPDouble InfinityNorm(void){_error_("not implemented yet");};
+		IssmPDouble Max(void){_error_("not implemented yet");};
+		IssmPDouble MaxAbs(void){_error_("not implemented yet");};
+		IssmPDouble Min(void){_error_("not implemented yet");};
+		IssmPDouble MinAbs(void){_error_("not implemented yet");};
 		void Extrude(void){_error_("not implemented yet");};
 		void VerticallyIntegrate(Input* thickness_input){_error_("not implemented yet");};
 		void GetVectorFromInputs(Vector* vector,int* doflist){_error_("not implemented yet");};
-		void GetValuesPtr(double** pvalues,int* pnum_values){_error_("not implemented yet");};
-		ElementResult* SpawnGradient(int step, double time){_error_("not implemented yet");};
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){_error_("not implemented yet");};
+		ElementResult* SpawnGradient(int step, IssmPDouble time){_error_("not implemented yet");};
 		void GetGradient(Vector* gradient_vec,int* doflist){_error_("not implemented yet");};
-		void ScaleGradient(double scale){_error_("not implemented yet");};
+		void ScaleGradient(IssmPDouble scale){_error_("not implemented yet");};
 		void SetGradient(Input* gradient_in){_error_("not implemented yet");};
-		void UpdateValue(double scalar){_error_("not implemented yet");};
+		void UpdateValue(IssmPDouble scalar){_error_("not implemented yet");};
 		void SaveValue(void){_error_("not implemented yet");};
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/DoubleInput.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/DoubleInput.cpp	(revision 12426)
@@ -23,5 +23,5 @@
 }
 /*}}}*/
-/*FUNCTION DoubleInput::DoubleInput(double value){{{*/
+/*FUNCTION DoubleInput::DoubleInput(IssmPDouble value){{{*/
 DoubleInput::DoubleInput(int in_enum_type,IssmDouble in_value){
 
@@ -98,5 +98,5 @@
 /*}}}*/
 /*FUNCTION DoubleInput::SpawnResult{{{*/
-ElementResult* DoubleInput::SpawnResult(int step, double time){
+ElementResult* DoubleInput::SpawnResult(int step, IssmPDouble time){
 
 	return new DoubleElementResult(this->enum_type,this->value,step,time);
@@ -118,6 +118,6 @@
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetInputValue(double* pvalue){{{*/
-void DoubleInput::GetInputValue(double* pvalue){
+/*FUNCTION DoubleInput::GetInputValue(IssmPDouble* pvalue){{{*/
+void DoubleInput::GetInputValue(IssmPDouble* pvalue){
 
 	/*return value*/
@@ -125,54 +125,54 @@
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetInputValue(double* pvalue,GaussTria* gauss){{{*/
-void DoubleInput::GetInputValue(double* pvalue,GaussTria* gauss){*pvalue=this->value;}
-/*}}}*/
-/*FUNCTION DoubleInput::GetInputValue(double* pvalue,GaussPenta* gauss){{{*/
-void DoubleInput::GetInputValue(double* pvalue,GaussPenta* gauss){*pvalue=this->value;}
-/*}}}*/
-/*FUNCTION DoubleInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){{{*/
-void DoubleInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){_error_(" not supported yet!");}
-/*}}}*/
-/*FUNCTION DoubleInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){_error_(" not supported yet!");}
-/*}}}*/
-/*FUNCTION DoubleInput::GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){{{*/
-void DoubleInput::GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){
+/*FUNCTION DoubleInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){{{*/
+void DoubleInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){*pvalue=this->value;}
+/*}}}*/
+/*FUNCTION DoubleInput::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){{{*/
+void DoubleInput::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){*pvalue=this->value;}
+/*}}}*/
+/*FUNCTION DoubleInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void DoubleInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){_error_(" not supported yet!");}
+/*}}}*/
+/*FUNCTION DoubleInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){_error_(" not supported yet!");}
+/*}}}*/
+/*FUNCTION DoubleInput::GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void DoubleInput::GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){
 	/*Epsilon is zero as vx is constant over the element*/
 	for(int i=0;i<3;i++) epsilonvx[i]=0;
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){{{*/
-void DoubleInput::GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){
+/*FUNCTION DoubleInput::GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void DoubleInput::GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){
 	/*Epsilon is zero as vy is constant over the element*/
 	for(int i=0;i<3;i++) epsilonvy[i]=0;
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){
+/*FUNCTION DoubleInput::GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){
 	/*Epsilon is zero as vx is constant over the element*/
 	for(int i=0;i<6;i++) epsilonvx[i]=0;
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){
+/*FUNCTION DoubleInput::GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){
 	/*Epsilon is zero as vy is constant over the element*/
 	for(int i=0;i<6;i++) epsilonvy[i]=0;
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){
+/*FUNCTION DoubleInput::GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){
 	/*Epsilon is zero as vz is constant over the element*/
 	for(int i=0;i<6;i++) epsilonvz[i]=0;
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){
+/*FUNCTION DoubleInput::GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){
 	/*Epsilon is zero as vx is constant over the element*/
 	for(int i=0;i<5;i++) epsilonvx[i]=0;
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){
+/*FUNCTION DoubleInput::GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){
 	/*Epsilon is zero as vy is constant over the element*/
 	for(int i=0;i<5;i++) epsilonvy[i]=0;
@@ -185,27 +185,27 @@
 /*}}}*/
 /*FUNCTION DoubleInput::SquareMin{{{*/
-void DoubleInput::SquareMin(double* psquaremin, bool process_units,Parameters* parameters){
-
-	/*square min of a double is the square of the double itself: */
+void DoubleInput::SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){
+
+	/*square min of a IssmPDouble is the square of the IssmPDouble itself: */
 	*psquaremin=pow(value,2);
 }
 /*}}}*/
 /*FUNCTION DoubleInput::Scale{{{*/
-void DoubleInput::Scale(double scale_factor){
+void DoubleInput::Scale(IssmPDouble scale_factor){
 	value=value*scale_factor;
 }
 /*}}}*/
 /*FUNCTION DoubleInput::ConstrainMin{{{*/
-void DoubleInput::ConstrainMin(double minimum){
+void DoubleInput::ConstrainMin(IssmPDouble minimum){
 	if (value<minimum) value=minimum;
 }
 /*}}}*/
 /*FUNCTION DoubleInput::AXPY{{{*/
-void DoubleInput::AXPY(Input* xinput,double scalar){
-
-	DoubleInput*  xdoubleinput=NULL;
+void DoubleInput::AXPY(Input* xinput,IssmPDouble scalar){
+
+	DoubleInput*  xIssmPDoubleinput=NULL;
 
 	/*xinput is of the same type, so cast it: */
-	xdoubleinput=(DoubleInput*)xinput;
+	xIssmPDoubleinput=(DoubleInput*)xinput;
 
 	/*Carry out the AXPY operation depending on type:*/
@@ -213,5 +213,5 @@
 
 		case DoubleInputEnum:
-			this->value=this->value+scalar*xdoubleinput->value;
+			this->value=this->value+scalar*xIssmPDoubleinput->value;
 			return;
 
@@ -223,5 +223,5 @@
 /*}}}*/
 /*FUNCTION DoubleInput::Constrain{{{*/
-void DoubleInput::Constrain(double cm_min, double cm_max){
+void DoubleInput::Constrain(IssmPDouble cm_min, IssmPDouble cm_max){
 
 	if(!isnan(cm_min)) if (this->value<cm_min)this->value=cm_min;
@@ -231,20 +231,20 @@
 /*}}}*/
 /*FUNCTION DoubleInput::Max{{{*/
-double DoubleInput::Max(void){
+IssmPDouble DoubleInput::Max(void){
 	return this->value;
 }
 /*}}}*/
 /*FUNCTION DoubleInput::MaxAbs{{{*/
-double DoubleInput::MaxAbs(void){
+IssmPDouble DoubleInput::MaxAbs(void){
 	return fabs(this->value);
 }
 /*}}}*/
 /*FUNCTION DoubleInput::Min{{{*/
-double DoubleInput::Min(void){
+IssmPDouble DoubleInput::Min(void){
 	return this->value;
 }
 /*}}}*/
 /*FUNCTION DoubleInput::MinAbs{{{*/
-double DoubleInput::MinAbs(void){
+IssmPDouble DoubleInput::MinAbs(void){
 	return fabs(this->value);
 }
@@ -258,5 +258,5 @@
 /*}}}*/
 /*FUNCTION DoubleInput::GetValuesPtr{{{*/
-void DoubleInput::GetValuesPtr(double** pvalues,int* pnum_values){
+void DoubleInput::GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){
 
 	_error_(" not supported yet!");
@@ -265,5 +265,5 @@
 /*}}}*/
 /*FUNCTION DoubleInput::GetInputAverage{{{*/
-void DoubleInput::GetInputAverage(double* pvalue){
+void DoubleInput::GetInputAverage(IssmPDouble* pvalue){
 	*pvalue=value;
 }
@@ -273,5 +273,5 @@
 
 	/*Intermediaries*/
-	double thickness_value;
+	IssmPDouble thickness_value;
 
 	/*Check that input provided is a thickness*/
@@ -298,5 +298,5 @@
 
 	/*Intermediaries*/
-	double       Bvalue;
+	IssmPDouble       Bvalue;
 
 	/*Check that inputB is of the same type*/
@@ -318,5 +318,5 @@
 
 	/*Intermediaries*/
-	double       min;
+	IssmPDouble       min;
 
 	/*Check that inputB is of the same type*/
@@ -339,5 +339,5 @@
 
 	/*Intermediaries*/
-	double       max;
+	IssmPDouble       max;
 
 	/*Check that inputB is of the same type*/
Index: /issm/trunk-jpl/src/c/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/DoubleInput.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/DoubleInput.h	(revision 12426)
@@ -18,5 +18,5 @@
 	public:
 		int    enum_type;
-		double value;
+		IssmPDouble value;
 
 		/*DoubleInput constructors, destructors: {{{*/
@@ -39,6 +39,6 @@
 		Input* PointwiseMin(Input* inputB);
 		Input* PointwiseMax(Input* inputB);
-		ElementResult* SpawnResult(int step, double time);
-		void AddTimeValues(double* values,int step,double time){_error_("not supported yet");};
+		ElementResult* SpawnResult(int step, IssmPDouble time);
+		void AddTimeValues(IssmPDouble* values,int step,IssmPDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
@@ -46,36 +46,36 @@
 		void GetInputValue(bool* pvalue);
 		void GetInputValue(int* pvalue);
-		void GetInputValue(double* pvalue);
-		void GetInputValue(double* pvalue,GaussTria* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss);
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss);
-		void GetInputAverage(double* pvalue);
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss);
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss);
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss);
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss);
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss);
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss);
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss);
+		void GetInputValue(IssmPDouble* pvalue);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetInputAverage(IssmPDouble* pvalue);
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss);
 		void ChangeEnum(int newenumtype);
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
-		void ConstrainMin(double minimum);
-		void Scale(double scale_factor);
-		void ArtificialNoise(double min,double max){_error_("not implemented yet");};
-		void AXPY(Input* xinput,double scalar);
-		void Constrain(double cm_min, double cm_max);
-		double InfinityNorm(void){_error_("not implemented yet");};
-		double Max(void);
-		double MaxAbs(void);
-		double Min(void);
-		double MinAbs(void);
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(IssmPDouble minimum);
+		void Scale(IssmPDouble scale_factor);
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		void AXPY(Input* xinput,IssmPDouble scalar);
+		void Constrain(IssmPDouble cm_min, IssmPDouble cm_max);
+		IssmPDouble InfinityNorm(void){_error_("not implemented yet");};
+		IssmPDouble Max(void);
+		IssmPDouble MaxAbs(void);
+		IssmPDouble Min(void);
+		IssmPDouble MinAbs(void);
 		void Extrude(void){_error_("not supported yet");};
 		void VerticallyIntegrate(Input* thickness_input);
 		void GetVectorFromInputs(Vector* vector,int* doflist);
-		void GetValuesPtr(double** pvalues,int* pnum_values);
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/objects/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/Input.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/Input.h	(revision 12426)
@@ -25,38 +25,38 @@
 		virtual void GetInputValue(bool* pvalue)=0;
 		virtual void GetInputValue(int* pvalue)=0;
-		virtual void GetInputValue(double* pvalue)=0;
-		virtual void GetInputValue(double* pvalue,GaussTria* gauss)=0;
-		virtual void GetInputValue(double* pvalue,GaussTria* gauss,double time)=0;
-		virtual void GetInputValue(double* pvalue,GaussPenta* gauss)=0;
-		virtual void GetInputValue(double* pvalue,GaussTria* gauss ,int index)=0;
-		virtual void GetInputValue(double* pvalue,GaussPenta* gauss,int index)=0;
-		virtual void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss)=0;
-		virtual void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss)=0;
-		virtual void GetInputAverage(double* pvalue)=0;
-		virtual void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss)=0;
-		virtual void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss)=0;
-		virtual void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss)=0;
-		virtual void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss)=0;
-		virtual void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss)=0;
-		virtual void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss)=0;
-		virtual void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetInputValue(IssmPDouble* pvalue)=0;
+		virtual void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss)=0;
+		virtual void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time)=0;
+		virtual void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss)=0;
+		virtual void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index)=0;
+		virtual void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss,int index)=0;
+		virtual void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss)=0;
+		virtual void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetInputAverage(IssmPDouble* pvalue)=0;
+		virtual void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss)=0;
+		virtual void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss)=0;
+		virtual void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss)=0;
 		virtual void ChangeEnum(int newenumtype)=0;
 		virtual void Configure(Parameters* parameters)=0;
 
-		virtual void   SquareMin(double* psquaremin, bool process_units,Parameters* parameters)=0;
-		virtual void   ConstrainMin(double minimum)=0;
-		virtual double InfinityNorm(void)=0;
-		virtual double MaxAbs(void)=0;
-		virtual double MinAbs(void)=0;
-		virtual double Max(void)=0;
-		virtual double Min(void)=0;
-		virtual void   Scale(double scale_factor)=0;
-		virtual void   ArtificialNoise(double min,double max)=0;
-		virtual void   AXPY(Input* xinput,double scalar)=0;
-		virtual void   Constrain(double cm_min, double cm_max)=0;
+		virtual void   SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters)=0;
+		virtual void   ConstrainMin(IssmPDouble minimum)=0;
+		virtual IssmPDouble InfinityNorm(void)=0;
+		virtual IssmPDouble MaxAbs(void)=0;
+		virtual IssmPDouble MinAbs(void)=0;
+		virtual IssmPDouble Max(void)=0;
+		virtual IssmPDouble Min(void)=0;
+		virtual void   Scale(IssmPDouble scale_factor)=0;
+		virtual void   ArtificialNoise(IssmPDouble min,IssmPDouble max)=0;
+		virtual void   AXPY(Input* xinput,IssmPDouble scalar)=0;
+		virtual void   Constrain(IssmPDouble cm_min, IssmPDouble cm_max)=0;
 		virtual void   VerticallyIntegrate(Input* thickness_input)=0;
 		virtual void   Extrude()=0;
 		virtual void   GetVectorFromInputs(Vector* vector,int* doflist)=0;
-		virtual void   GetValuesPtr(double** pvalues,int* pnum_values)=0;
+		virtual void   GetValuesPtr(IssmPDouble** pvalues,int* pnum_values)=0;
 		
 		virtual Input* SpawnTriaInput(int* indices)=0;
@@ -64,5 +64,5 @@
 		virtual Input* PointwiseMax(Input* inputmax)=0;
 		virtual Input* PointwiseMin(Input* inputmin)=0;
-		virtual ElementResult* SpawnResult(int step, double time)=0;
+		virtual ElementResult* SpawnResult(int step, IssmPDouble time)=0;
 
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/IntInput.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/IntInput.cpp	(revision 12426)
@@ -23,5 +23,5 @@
 }
 /*}}}*/
-/*FUNCTION IntInput::IntInput(double* values){{{*/
+/*FUNCTION IntInput::IntInput(IssmPDouble* values){{{*/
 IntInput::IntInput(int in_enum_type,IssmInt in_value){
 
@@ -97,5 +97,5 @@
 /*}}}*/
 /*FUNCTION IntInput::SpawnResult{{{*/
-ElementResult* IntInput::SpawnResult(int step, double time){
+ElementResult* IntInput::SpawnResult(int step, IssmPDouble time){
 	
 	_error_(" not supported yet!");
@@ -113,20 +113,20 @@
 }
 /*}}}*/
-/*FUNCTION IntInput::GetInputValue(double* pvalue){{{*/
-void IntInput::GetInputValue(double* pvalue){
-	_error_("IntInput cannot return a double in parallel");
+/*FUNCTION IntInput::GetInputValue(IssmPDouble* pvalue){{{*/
+void IntInput::GetInputValue(IssmPDouble* pvalue){
+	_error_("IntInput cannot return a IssmPDouble in parallel");
 }
 /*}}}*/
-/*FUNCTION IntInput::GetInputValue(double* pvalue,GaussTria* gauss){{{*/
-void IntInput::GetInputValue(double* pvalue,GaussTria* gauss){_error_(" not supported yet!");}
+/*FUNCTION IntInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){{{*/
+void IntInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){_error_(" not supported yet!");}
 /*}}}*/
-/*FUNCTION IntInput::GetInputValue(double* pvalue,GaussPenta* gauss){{{*/
-void IntInput::GetInputValue(double* pvalue,GaussPenta* gauss){_error_(" not supported yet!");}
+/*FUNCTION IntInput::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){{{*/
+void IntInput::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){_error_(" not supported yet!");}
 /*}}}*/
-/*FUNCTION IntInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){{{*/
-void IntInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){_error_(" not supported yet!");}
+/*FUNCTION IntInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void IntInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){_error_(" not supported yet!");}
 /*}}}*/
-/*FUNCTION IntInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){{{*/
-void IntInput::GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){_error_(" not supported yet!");}
+/*FUNCTION IntInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void IntInput::GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){_error_(" not supported yet!");}
 /*}}}*/
 /*FUNCTION IntInput::ChangeEnum{{{*/
@@ -136,20 +136,20 @@
 /*}}}*/
 /*FUNCTION IntInput::SquareMin{{{*/
-void IntInput::SquareMin(double* psquaremin, bool process_units,Parameters* parameters){
+void IntInput::SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){
 
 	/*square min of an integer is the square of the integer itself: */
-	*psquaremin=pow((double)value,2);
+	*psquaremin=pow((IssmPDouble)value,2);
 }
 /*}}}*/
 /*FUNCTION IntInput::Scale{{{*/
-void IntInput::Scale(double scale_factor){
-	double dvalue=(double)value*scale_factor;
+void IntInput::Scale(IssmPDouble scale_factor){
+	IssmPDouble dvalue=(IssmPDouble)value*scale_factor;
 	value=(int)dvalue;
 }
 /*}}}*/
 /*FUNCTION IntInput::AXPY{{{*/
-void IntInput::AXPY(Input* xinput,double scalar){
+void IntInput::AXPY(Input* xinput,IssmPDouble scalar){
 
-	double dvalue;
+	IssmPDouble dvalue;
 	IntInput*  xintinput=NULL;
 
@@ -161,5 +161,5 @@
 
 		case IntInputEnum:
-			dvalue=(double)this->value+scalar*(double)xintinput->value;
+			dvalue=(IssmPDouble)this->value+scalar*(IssmPDouble)xintinput->value;
 			this->value=(int)dvalue;
 			return;
@@ -172,5 +172,5 @@
 /*}}}*/
 /*FUNCTION IntInput::Constrain{{{*/
-void IntInput::Constrain(double cm_min, double cm_max){
+void IntInput::Constrain(IssmPDouble cm_min, IssmPDouble cm_max){
 
 	if(!isnan(cm_min)) if (this->value<cm_min)this->value=(int)cm_min;
@@ -187,5 +187,5 @@
 /*}}}*/
 /*FUNCTION IntInput::GetValuesPtr{{{*/
-void IntInput::GetValuesPtr(double** pvalues,int* pnum_values){
+void IntInput::GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){
 
 	_error_(" not supported yet!");
Index: /issm/trunk-jpl/src/c/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/IntInput.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/IntInput.h	(revision 12426)
@@ -40,6 +40,6 @@
 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
-		ElementResult* SpawnResult(int step, double time);
-		void AddTimeValues(double* values,int step,double time){_error_("not supported yet");};
+		ElementResult* SpawnResult(int step, IssmPDouble time);
+		void AddTimeValues(IssmPDouble* values,int step,IssmPDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
@@ -47,36 +47,36 @@
 		void GetInputValue(bool* pvalue);
 		void GetInputValue(int* pvalue);
-		void GetInputValue(double* pvalue);
-		void GetInputValue(double* pvalue,GaussTria* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss);
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss);
-		void GetInputAverage(double* pvalue){_error_("not implemented yet");};
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetInputAverage(IssmPDouble* pvalue){_error_("not implemented yet");};
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
-		void ConstrainMin(double minimum){_error_("not implemented yet");};
-		void Scale(double scale_factor);
-		void ArtificialNoise(double min,double max){_error_("not implemented yet");};
-		void AXPY(Input* xinput,double scalar);
-		void Constrain(double cm_min, double cm_max);
-		double InfinityNorm(void){_error_("InfinityNorm not implemented for integers");};
-		double Max(void){_error_("Max not implemented for integers");};
-		double MaxAbs(void){_error_("Max not implemented for integers");};
-		double Min(void){_error_("Min not implemented for integers");};
-		double MinAbs(void){_error_("Min not implemented for integers");};
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(IssmPDouble minimum){_error_("not implemented yet");};
+		void Scale(IssmPDouble scale_factor);
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		void AXPY(Input* xinput,IssmPDouble scalar);
+		void Constrain(IssmPDouble cm_min, IssmPDouble cm_max);
+		IssmPDouble InfinityNorm(void){_error_("InfinityNorm not implemented for integers");};
+		IssmPDouble Max(void){_error_("Max not implemented for integers");};
+		IssmPDouble MaxAbs(void){_error_("Max not implemented for integers");};
+		IssmPDouble Min(void){_error_("Min not implemented for integers");};
+		IssmPDouble MinAbs(void){_error_("Min not implemented for integers");};
 		void Extrude(void){_error_("not supported yet");};
 		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
 		void GetVectorFromInputs(Vector* vector,int* doflist);
-		void GetValuesPtr(double** pvalues,int* pnum_values);
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/objects/Inputs/PentaP1Input.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/PentaP1Input.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/PentaP1Input.cpp	(revision 12426)
@@ -23,6 +23,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaP1Input::PentaP1Input(int in_enum_type,double* values){{{*/
-PentaP1Input::PentaP1Input(int in_enum_type,double* in_values)
+/*FUNCTION PentaP1Input::PentaP1Input(int in_enum_type,IssmPDouble* values){{{*/
+PentaP1Input::PentaP1Input(int in_enum_type,IssmPDouble* in_values)
 		:PentaRef(1)
 {
@@ -98,5 +98,5 @@
 	/*output*/
 	TriaP1Input* outinput=NULL;
-	double newvalues[3];
+	IssmPDouble newvalues[3];
 
 	/*Loop over the new indices*/
@@ -119,5 +119,5 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::SpawnResult{{{*/
-ElementResult* PentaP1Input::SpawnResult(int step, double time){
+ElementResult* PentaP1Input::SpawnResult(int step, IssmPDouble time){
 
 	return new PentaP1ElementResult(this->enum_type,this->values,step,time);
@@ -127,6 +127,6 @@
 
 /*Object functions*/
-/*FUNCTION PentaP1Input::GetInputValue(double* pvalue,GaussPenta* gauss){{{*/
-void PentaP1Input::GetInputValue(double* pvalue,GaussPenta* gauss){
+/*FUNCTION PentaP1Input::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){{{*/
+void PentaP1Input::GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){
 
 	/*Call PentaRef function*/
@@ -135,6 +135,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaP1Input::GetInputDerivativeValue(double* p, double* xyz_list, GaussPenta* gauss){{{*/
-void PentaP1Input::GetInputDerivativeValue(double* p, double* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaP1Input::GetInputDerivativeValue(IssmPDouble* p, IssmPDouble* xyz_list, GaussPenta* gauss){{{*/
+void PentaP1Input::GetInputDerivativeValue(IssmPDouble* p, IssmPDouble* xyz_list, GaussPenta* gauss){
 
 	/*Call PentaRef function*/
@@ -143,12 +143,12 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::GetVxStrainRate3d{{{*/
-void PentaP1Input::GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){
+void PentaP1Input::GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){
 	int i,j;
 
 	const int numnodes=6;
 	const int DOFVELOCITY=3;
-	double B[8][27];
-	double B_reduced[6][DOFVELOCITY*numnodes];
-	double velocity[numnodes][DOFVELOCITY];
+	IssmPDouble B[8][27];
+	IssmPDouble B_reduced[6][DOFVELOCITY*numnodes];
+	IssmPDouble velocity[numnodes][DOFVELOCITY];
 
 	/*Get B matrix: */
@@ -188,12 +188,12 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::GetVyStrainRate3d{{{*/
-void PentaP1Input::GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){
+void PentaP1Input::GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){
 	int i,j;
 
 	const int numnodes=6;
 	const int DOFVELOCITY=3;
-	double B[8][27];
-	double B_reduced[6][DOFVELOCITY*numnodes];
-	double velocity[numnodes][DOFVELOCITY];
+	IssmPDouble B[8][27];
+	IssmPDouble B_reduced[6][DOFVELOCITY*numnodes];
+	IssmPDouble velocity[numnodes][DOFVELOCITY];
 
 	/*Get B matrix: */
@@ -233,12 +233,12 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::GetVzStrainRate3d{{{*/
-void PentaP1Input::GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){
+void PentaP1Input::GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){
 	int i,j;
 
 	const int numnodes=6;
 	const int DOFVELOCITY=3;
-	double B[8][27];
-	double B_reduced[6][DOFVELOCITY*numnodes];
-	double velocity[numnodes][DOFVELOCITY];
+	IssmPDouble B[8][27];
+	IssmPDouble B_reduced[6][DOFVELOCITY*numnodes];
+	IssmPDouble velocity[numnodes][DOFVELOCITY];
 
 	/*Get B matrix: */
@@ -279,10 +279,10 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::GetVxStrainRate3dPattyn{{{*/
-void PentaP1Input::GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){
-
-	int i;
-	const int numnodes=6;
-	double B[5][NDOF2*numnodes];
-	double velocity[numnodes][NDOF2];
+void PentaP1Input::GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){
+
+	int i;
+	const int numnodes=6;
+	IssmPDouble B[5][NDOF2*numnodes];
+	IssmPDouble velocity[numnodes][NDOF2];
 
 	/*Get B matrix: */
@@ -303,10 +303,10 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::GetVyStrainRate3dPattyn{{{*/
-void PentaP1Input::GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){
-
-	int i;
-	const int numnodes=6;
-	double B[5][NDOF2*numnodes];
-	double velocity[numnodes][NDOF2];
+void PentaP1Input::GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){
+
+	int i;
+	const int numnodes=6;
+	IssmPDouble B[5][NDOF2*numnodes];
+	IssmPDouble velocity[numnodes][NDOF2];
 
 	/*Get B matrix: */
@@ -332,5 +332,5 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::GetInputAverage{{{*/
-void PentaP1Input::GetInputAverage(double* pvalue){
+void PentaP1Input::GetInputAverage(IssmPDouble* pvalue){
 	*pvalue=1./6.*(values[0]+values[1]+values[2]+values[3]+values[4]+values[5]);
 }
@@ -339,10 +339,10 @@
 /*Intermediary*/
 /*FUNCTION PentaP1Input::SquareMin{{{*/
-void PentaP1Input::SquareMin(double* psquaremin, bool process_units,Parameters* parameters){
-
-	int i;
-	const int numnodes=6;
-	double valuescopy[numnodes];
-	double squaremin;
+void PentaP1Input::SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){
+
+	int i;
+	const int numnodes=6;
+	IssmPDouble valuescopy[numnodes];
+	IssmPDouble squaremin;
 
 	/*First,  copy values, to process units if requested: */
@@ -362,5 +362,5 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::ConstrainMin{{{*/
-void PentaP1Input::ConstrainMin(double minimum){
+void PentaP1Input::ConstrainMin(IssmPDouble minimum){
 	
 	int i;
@@ -371,9 +371,9 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::InfinityNorm{{{*/
-double PentaP1Input::InfinityNorm(void){
+IssmPDouble PentaP1Input::InfinityNorm(void){
 
 	/*Output*/
 	const int numnodes=6;
-	double norm=0;
+	IssmPDouble norm=0;
 
 	for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
@@ -382,8 +382,8 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::Max{{{*/
-double PentaP1Input::Max(void){
-
-	const int numnodes=6;
-	double    max=values[0];
+IssmPDouble PentaP1Input::Max(void){
+
+	const int numnodes=6;
+	IssmPDouble    max=values[0];
 
 	for(int i=1;i<numnodes;i++){
@@ -394,8 +394,8 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::MaxAbs{{{*/
-double PentaP1Input::MaxAbs(void){
-
-	const int numnodes=6;
-	double    max=fabs(values[0]);
+IssmPDouble PentaP1Input::MaxAbs(void){
+
+	const int numnodes=6;
+	IssmPDouble    max=fabs(values[0]);
 
 	for(int i=1;i<numnodes;i++){
@@ -406,8 +406,8 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::Min{{{*/
-double PentaP1Input::Min(void){
-
-	const int numnodes=6;
-	double    min=values[0];
+IssmPDouble PentaP1Input::Min(void){
+
+	const int numnodes=6;
+	IssmPDouble    min=values[0];
 
 	for(int i=1;i<numnodes;i++){
@@ -418,8 +418,8 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::MinAbs{{{*/
-double PentaP1Input::MinAbs(void){
-
-	const int numnodes=6;
-	double    min=fabs(values[0]);
+IssmPDouble PentaP1Input::MinAbs(void){
+
+	const int numnodes=6;
+	IssmPDouble    min=fabs(values[0]);
 
 	for(int i=1;i<numnodes;i++){
@@ -430,5 +430,5 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::Scale{{{*/
-void PentaP1Input::Scale(double scale_factor){
+void PentaP1Input::Scale(IssmPDouble scale_factor){
 	
 	int i;
@@ -439,5 +439,5 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::AXPY{{{*/
-void PentaP1Input::AXPY(Input* xinput,double scalar){
+void PentaP1Input::AXPY(Input* xinput,IssmPDouble scalar){
 
 	int i;
@@ -466,5 +466,5 @@
 /*}}}*/
 /*FUNCTION PentaP1Input::Constrain{{{*/
-void PentaP1Input::Constrain(double cm_min, double cm_max){
+void PentaP1Input::Constrain(IssmPDouble cm_min, IssmPDouble cm_max){
 
 	int i;
@@ -492,5 +492,5 @@
 	const int  numnodes = 6;
 	int        num_thickness_values;
-	double    *thickness_values = NULL;
+	IssmPDouble    *thickness_values = NULL;
 
 	/*Check that input provided is a thickness*/
@@ -526,5 +526,5 @@
 	int               B_numvalues;
 	const int         numnodes    = 6;
-	double            AdotBvalues[numnodes];
+	IssmPDouble            AdotBvalues[numnodes];
 
 	/*Check that inputB is of the same type*/
@@ -557,5 +557,5 @@
 	int               B_numvalues;
 	const int         numnodes    = 6;
-	double            minvalues[numnodes];
+	IssmPDouble            minvalues[numnodes];
 
 	/*Check that inputB is of the same type*/
@@ -588,5 +588,5 @@
 	int               B_numvalues;
 	const int         numnodes    = 6;
-	double            maxvalues[numnodes];
+	IssmPDouble            maxvalues[numnodes];
 
 	/*Check that inputB is of the same type*/
@@ -616,5 +616,5 @@
 } /*}}}*/
 /*FUNCTION PentaP1Input::GetValuesPtr{{{*/
-void PentaP1Input::GetValuesPtr(double** pvalues,int* pnum_values){
+void PentaP1Input::GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){
 
 	*pvalues=this->values;
Index: /issm/trunk-jpl/src/c/objects/Inputs/PentaP1Input.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/PentaP1Input.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/PentaP1Input.h	(revision 12426)
@@ -19,9 +19,9 @@
 		/*just hold 6 values for 6 vertices: */
 		int    enum_type;
-		double values[6];
+		IssmPDouble values[6];
 
 		/*PentaP1Input constructors, destructors: {{{*/
 		PentaP1Input();
-		PentaP1Input(int enum_type,double* values);
+		PentaP1Input(int enum_type,IssmPDouble* values);
 		~PentaP1Input();
 		/*}}}*/
@@ -40,6 +40,6 @@
 		Input* PointwiseMin(Input* inputB);
 		Input* PointwiseMax(Input* inputB);
-		ElementResult* SpawnResult(int step, double time);
-		void AddTimeValues(double* values,int step,double time){_error_("not supported yet");};
+		ElementResult* SpawnResult(int step, IssmPDouble time);
+		void AddTimeValues(IssmPDouble* values,int step,IssmPDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
@@ -47,37 +47,37 @@
 		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss);
-		void GetInputAverage(double* pvalue);
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss);
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss);
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss);
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss);
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss);
+		void GetInputValue(IssmPDouble* pvalue){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetInputAverage(IssmPDouble* pvalue);
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss);
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss);
 		void ChangeEnum(int newenumtype);
 
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
-		void ConstrainMin(double minimum);
-		void Scale(double scale_factor);
-		void ArtificialNoise(double min,double max){_error_("not implemented yet");};
-		void AXPY(Input* xinput,double scalar);
-		void Constrain(double cm_min, double cm_max);
-		double InfinityNorm(void);
-		double Max(void);
-		double MaxAbs(void);
-		double Min(void);
-		double MinAbs(void);
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(IssmPDouble minimum);
+		void Scale(IssmPDouble scale_factor);
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		void AXPY(Input* xinput,IssmPDouble scalar);
+		void Constrain(IssmPDouble cm_min, IssmPDouble cm_max);
+		IssmPDouble InfinityNorm(void);
+		IssmPDouble Max(void);
+		IssmPDouble MaxAbs(void);
+		IssmPDouble Min(void);
+		IssmPDouble MinAbs(void);
 		void Extrude(void);
 		void VerticallyIntegrate(Input* thickness_input);
 		void GetVectorFromInputs(Vector* vector,int* doflist);
-		void GetValuesPtr(double** pvalues,int* pnum_values);
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/objects/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/TransientInput.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/TransientInput.cpp	(revision 12426)
@@ -100,6 +100,6 @@
 	output->enum_type=this->enum_type;
 	output->numtimesteps=this->numtimesteps;
-	output->timesteps=(double*)xmalloc(this->numtimesteps*sizeof(double));
-   memcpy(output->timesteps,this->timesteps,this->numtimesteps*sizeof(double));
+	output->timesteps=(IssmPDouble*)xmalloc(this->numtimesteps*sizeof(IssmPDouble));
+   memcpy(output->timesteps,this->timesteps,this->numtimesteps*sizeof(IssmPDouble));
 	output->inputs=(Inputs*)this->inputs->Copy();
 	output->parameters=this->parameters;
@@ -128,6 +128,6 @@
 	outinput->enum_type=this->enum_type;
 	outinput->numtimesteps=this->numtimesteps;
-	outinput->timesteps=(double*)xmalloc(this->numtimesteps*sizeof(double));
-	memcpy(outinput->timesteps,this->timesteps,this->numtimesteps*sizeof(double));
+	outinput->timesteps=(IssmPDouble*)xmalloc(this->numtimesteps*sizeof(IssmPDouble));
+	memcpy(outinput->timesteps,this->timesteps,this->numtimesteps*sizeof(IssmPDouble));
 	outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(indices);
 	outinput->parameters=this->parameters;
@@ -139,5 +139,5 @@
 /*}}}*/
 /*FUNCTION TransientInput::SpawnResult{{{*/
-ElementResult* TransientInput::SpawnResult(int step, double time){
+ElementResult* TransientInput::SpawnResult(int step, IssmPDouble time){
 
 	ElementResult* elementresult=NULL;
@@ -156,7 +156,7 @@
 
 /*Object functions*/
-/*FUNCTION TransientInput::GetInputValue(double* pvalue,GaussTria* gauss){{{*/
-void TransientInput::GetInputValue(double* pvalue,GaussTria* gauss){
-	double time;
+/*FUNCTION TransientInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){{{*/
+void TransientInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){
+	IssmPDouble time;
 
 	/*First, recover current time from parameters: */
@@ -172,6 +172,6 @@
 }
 /*}}}*/
-/*FUNCTION TransientInput::GetInputValue(double* pvalue,GaussTria* gauss,double time){{{*/
-void TransientInput::GetInputValue(double* pvalue,GaussTria* gauss,double time){
+/*FUNCTION TransientInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){{{*/
+void TransientInput::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){
 
 	/*Retrieve interpolated values for this time step: */
@@ -184,8 +184,8 @@
 }
 /*}}}*/
-/*FUNCTION TransientInput::GetInputDerivativeValue(double* p, double* xyz_list, GaussTria* gauss){{{*/
-void TransientInput::GetInputDerivativeValue(double* p, double* xyz_list, GaussTria* gauss){
-
-	double time;
+/*FUNCTION TransientInput::GetInputDerivativeValue(IssmPDouble* p, IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void TransientInput::GetInputDerivativeValue(IssmPDouble* p, IssmPDouble* xyz_list, GaussTria* gauss){
+
+	IssmPDouble time;
 
 	/*First, recover current time from parameters: */
@@ -208,7 +208,7 @@
 /*}}}*/
 /*FUNCTION TransientInput::GetInputAverage{{{*/
-void TransientInput::GetInputAverage(double* pvalue){
+void TransientInput::GetInputAverage(IssmPDouble* pvalue){
 	
-	double time;
+	IssmPDouble time;
 
 	/*First, recover current time from parameters: */
@@ -228,5 +228,5 @@
 /*Intermediary*/
 /*FUNCTION TransientInput::AddTimeInput{{{*/
-void TransientInput::AddTimeInput(Input* input,double time){
+void TransientInput::AddTimeInput(Input* input,IssmPDouble time){
 
 	/*insert values at time step: */
@@ -234,17 +234,17 @@
 
 	//copy timesteps, add the new time, delete previous timesteps, and add the new input: inputs->AddObject(input);
-	double* old_timesteps=NULL;
+	IssmPDouble* old_timesteps=NULL;
 
 	if (this->numtimesteps > 0){
-		old_timesteps=(double*)xmalloc(this->numtimesteps*sizeof(double));
-		memcpy(old_timesteps,this->timesteps,this->numtimesteps*sizeof(double));
+		old_timesteps=(IssmPDouble*)xmalloc(this->numtimesteps*sizeof(IssmPDouble));
+		memcpy(old_timesteps,this->timesteps,this->numtimesteps*sizeof(IssmPDouble));
 		xfree((void**)&this->timesteps); 
 	}
 
 	this->numtimesteps=this->numtimesteps+1;
-	this->timesteps=(double*)xmalloc(this->numtimesteps*sizeof(double));
+	this->timesteps=(IssmPDouble*)xmalloc(this->numtimesteps*sizeof(IssmPDouble));
 
 	if (this->numtimesteps > 1){
-		memcpy(this->timesteps,old_timesteps,(this->numtimesteps-1)*sizeof(double));
+		memcpy(this->timesteps,old_timesteps,(this->numtimesteps-1)*sizeof(IssmPDouble));
 		xfree((void**)&old_timesteps);
 	}
@@ -257,7 +257,7 @@
 /*}}}*/
 /*FUNCTION TransientInput::SquareMin{{{*/
-void TransientInput::SquareMin(double* psquaremin, bool process_units,Parameters* parameters){
-
-	double time;
+void TransientInput::SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){
+
+	IssmPDouble time;
 
 	/*First, recover current time from parameters: */
@@ -275,8 +275,8 @@
 /*}}}*/
 /*FUNCTION TransientInput::InfinityNorm{{{*/
-double TransientInput::InfinityNorm(void){
-
-	double time;
-	double infnorm;
+IssmPDouble TransientInput::InfinityNorm(void){
+
+	IssmPDouble time;
+	IssmPDouble infnorm;
 
 	/*First, recover current time from parameters: */
@@ -295,8 +295,8 @@
 /*}}}*/
 /*FUNCTION TransientInput::Max{{{*/
-double TransientInput::Max(void){
-
-	double time;
-	double max;
+IssmPDouble TransientInput::Max(void){
+
+	IssmPDouble time;
+	IssmPDouble max;
 
 	/*First, recover current time from parameters: */
@@ -315,8 +315,8 @@
 /*}}}*/
 /*FUNCTION TransientInput::MaxAbs{{{*/
-double TransientInput::MaxAbs(void){
-
-	double time;
-	double maxabs;
+IssmPDouble TransientInput::MaxAbs(void){
+
+	IssmPDouble time;
+	IssmPDouble maxabs;
 
 	/*First, recover current time from parameters: */
@@ -336,8 +336,8 @@
 /*}}}*/
 /*FUNCTION TransientInput::Min{{{*/
-double TransientInput::Min(void){
-
-	double time;
-	double min;
+IssmPDouble TransientInput::Min(void){
+
+	IssmPDouble time;
+	IssmPDouble min;
 
 	/*First, recover current time from parameters: */
@@ -357,8 +357,8 @@
 /*}}}*/
 /*FUNCTION TransientInput::MinAbs{{{*/
-double TransientInput::MinAbs(void){
-
-	double time;
-	double minabs;
+IssmPDouble TransientInput::MinAbs(void){
+
+	IssmPDouble time;
+	IssmPDouble minabs;
 
 	/*First, recover current time from parameters: */
@@ -379,5 +379,5 @@
 void TransientInput::GetVectorFromInputs(Vector* vector,int* doflist){
 
-	double time;
+	IssmPDouble time;
 
 	/*First, recover current time from parameters: */
@@ -394,9 +394,9 @@
 } /*}}}*/
 /*FUNCTION TransientInput::GetTimeInput{{{*/
-Input* TransientInput::GetTimeInput(double intime){
+Input* TransientInput::GetTimeInput(IssmPDouble intime){
 
 	int     i,j;
-	double  deltat;
-	double  alpha1,alpha2;
+	IssmPDouble  deltat;
+	IssmPDouble  alpha1,alpha2;
 	bool    found=false;
 	Input*  input=NULL;
Index: /issm/trunk-jpl/src/c/objects/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/TransientInput.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/TransientInput.h	(revision 12426)
@@ -20,5 +20,5 @@
 		int     numtimesteps;
 		Inputs* inputs;
-		double* timesteps;
+		IssmPDouble* timesteps;
 		Parameters* parameters; //to find current time.
 
@@ -27,5 +27,5 @@
 		TransientInput(int enum_type);
 		~TransientInput();
-		void AddTimeInput(Input* input,double time);
+		void AddTimeInput(Input* input,IssmPDouble time);
 		/*}}}*/
 		/*Object virtual functions definitions:{{{*/
@@ -43,5 +43,5 @@
 		Input* PointwiseMin(Input* forcingB){_error_("not implemented yet");};
 		Input* PointwiseMax(Input* forcingB){_error_("not implemented yet");};
-		ElementResult* SpawnResult(int step, double time);
+		ElementResult* SpawnResult(int step, IssmPDouble time);
 		void Configure(Parameters* parameters);
 		/*}}}*/
@@ -49,39 +49,39 @@
 		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time);
-		void GetInputValue(double* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss);
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputAverage(double* pvalue);
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time);
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputAverage(IssmPDouble* pvalue);
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
-		void ConstrainMin(double minimum){_error_("not implemented yet");};
-		void Scale(double scale_factor){_error_("not implemented yet");};
-		void ArtificialNoise(double min,double max){_error_("not implemented yet");};
-		void AXPY(Input* xforcing,double scalar){_error_("not implemented yet");};
-		void Constrain(double cm_min, double cm_max){_error_("not implemented yet");};
-		double InfinityNorm(void);
-		double Max(void);
-		double MaxAbs(void);
-		double Min(void);
-		double MinAbs(void);
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(IssmPDouble minimum){_error_("not implemented yet");};
+		void Scale(IssmPDouble scale_factor){_error_("not implemented yet");};
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max){_error_("not implemented yet");};
+		void AXPY(Input* xforcing,IssmPDouble scalar){_error_("not implemented yet");};
+		void Constrain(IssmPDouble cm_min, IssmPDouble cm_max){_error_("not implemented yet");};
+		IssmPDouble InfinityNorm(void);
+		IssmPDouble Max(void);
+		IssmPDouble MaxAbs(void);
+		IssmPDouble Min(void);
+		IssmPDouble MinAbs(void);
 		void Extrude(void){_error_("not supported yet");}
 		void VerticallyIntegrate(Input* thickness_forcing){_error_("not supported yet");};
 		void GetVectorFromInputs(Vector* vector,int* doflist);
-		void GetValuesPtr(double** pvalues,int* pnum_values){_error_("not supported yet");};
-      void GetTimeValues(double* values,double time){_error_("not implemented yet");};
-		Input* GetTimeInput(double time);
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){_error_("not supported yet");};
+      void GetTimeValues(IssmPDouble* values,IssmPDouble time){_error_("not implemented yet");};
+		Input* GetTimeInput(IssmPDouble time);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/objects/Inputs/TriaP1Input.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/TriaP1Input.cpp	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/TriaP1Input.cpp	(revision 12426)
@@ -23,6 +23,6 @@
 }
 /*}}}*/
-/*FUNCTION TriaP1Input::TriaP1Input(int in_enum_type,double* values){{{*/
-TriaP1Input::TriaP1Input(int in_enum_type,double* in_values)
+/*FUNCTION TriaP1Input::TriaP1Input(int in_enum_type,IssmPDouble* values){{{*/
+TriaP1Input::TriaP1Input(int in_enum_type,IssmPDouble* in_values)
 	:TriaRef(1)
 {
@@ -108,5 +108,5 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::SpawnResult{{{*/
-ElementResult* TriaP1Input::SpawnResult(int step, double time){
+ElementResult* TriaP1Input::SpawnResult(int step, IssmPDouble time){
 
 	return new TriaP1ElementResult(this->enum_type,this->values,step,time);
@@ -116,6 +116,6 @@
 
 /*Object functions*/
-/*FUNCTION TriaP1Input::GetInputValue(double* pvalue,GaussTria* gauss){{{*/
-void TriaP1Input::GetInputValue(double* pvalue,GaussTria* gauss){
+/*FUNCTION TriaP1Input::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){{{*/
+void TriaP1Input::GetInputValue(IssmPDouble* pvalue,GaussTria* gauss){
 
 	/*Call TriaRef function*/
@@ -124,6 +124,6 @@
 }
 /*}}}*/
-/*FUNCTION TriaP1Input::GetInputDerivativeValue(double* p, double* xyz_list, GaussTria* gauss){{{*/
-void TriaP1Input::GetInputDerivativeValue(double* p, double* xyz_list, GaussTria* gauss){
+/*FUNCTION TriaP1Input::GetInputDerivativeValue(IssmPDouble* p, IssmPDouble* xyz_list, GaussTria* gauss){{{*/
+void TriaP1Input::GetInputDerivativeValue(IssmPDouble* p, IssmPDouble* xyz_list, GaussTria* gauss){
 
 	/*Call TriaRef function*/
@@ -132,11 +132,11 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::GetVxStrainRate2d{{{*/
-void TriaP1Input::GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss){
+void TriaP1Input::GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss){
 
 	/*Intermediary*/
 	int       i;
 	const int numnodes=3;
-	double B[3][NDOF2*numnodes];
-	double velocity[3][NDOF2];
+	IssmPDouble B[3][NDOF2*numnodes];
+	IssmPDouble velocity[3][NDOF2];
 
 	/*Get B matrix: */
@@ -155,11 +155,11 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::GetVyStrainRate2d{{{*/
-void TriaP1Input::GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss){
+void TriaP1Input::GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss){
 
 	/*Intermediary*/
 	int       i;
 	const int numnodes=3;
-	double B[3][NDOF2*numnodes];
-	double velocity[3][NDOF2];
+	IssmPDouble B[3][NDOF2*numnodes];
+	IssmPDouble velocity[3][NDOF2];
 
 	/*Get B matrix: */
@@ -183,5 +183,5 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::GetInputAverage{{{*/
-void TriaP1Input::GetInputAverage(double* pvalue){
+void TriaP1Input::GetInputAverage(IssmPDouble* pvalue){
 	*pvalue=1./3.*(values[0]+values[1]+values[2]);
 }
@@ -190,10 +190,10 @@
 /*Intermediary*/
 /*FUNCTION TriaP1Input::SquareMin{{{*/
-void TriaP1Input::SquareMin(double* psquaremin, bool process_units,Parameters* parameters){
-
-	int i;
-	const int numnodes=3;
-	double valuescopy[numnodes];
-	double squaremin;
+void TriaP1Input::SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters){
+
+	int i;
+	const int numnodes=3;
+	IssmPDouble valuescopy[numnodes];
+	IssmPDouble squaremin;
 
 	/*First,  copy values, to process units if requested: */
@@ -213,5 +213,5 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::ContrainMin{{{*/
-void TriaP1Input::ConstrainMin(double minimum){
+void TriaP1Input::ConstrainMin(IssmPDouble minimum){
 	
 	int i;
@@ -222,8 +222,8 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::InfinityNorm{{{*/
-double TriaP1Input::InfinityNorm(void){
+IssmPDouble TriaP1Input::InfinityNorm(void){
 
 	/*Output*/
-	double norm=0;
+	IssmPDouble norm=0;
 	const int numnodes=3;
 
@@ -233,8 +233,8 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::Max{{{*/
-double TriaP1Input::Max(void){
-
-	const int numnodes=3;
-	double    max=values[0];
+IssmPDouble TriaP1Input::Max(void){
+
+	const int numnodes=3;
+	IssmPDouble    max=values[0];
 
 	for(int i=1;i<numnodes;i++){
@@ -245,8 +245,8 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::MaxAbs{{{*/
-double TriaP1Input::MaxAbs(void){
-
-	const int numnodes=3;
-	double    max=fabs(values[0]);
+IssmPDouble TriaP1Input::MaxAbs(void){
+
+	const int numnodes=3;
+	IssmPDouble    max=fabs(values[0]);
 
 	for(int i=1;i<numnodes;i++){
@@ -257,8 +257,8 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::Min{{{*/
-double TriaP1Input::Min(void){
-
-	const int numnodes=3;
-	double    min=values[0];
+IssmPDouble TriaP1Input::Min(void){
+
+	const int numnodes=3;
+	IssmPDouble    min=values[0];
 
 	for(int i=1;i<numnodes;i++){
@@ -269,8 +269,8 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::MinAbs{{{*/
-double TriaP1Input::MinAbs(void){
-
-	const int numnodes=3;
-	double    min=fabs(values[0]);
+IssmPDouble TriaP1Input::MinAbs(void){
+
+	const int numnodes=3;
+	IssmPDouble    min=fabs(values[0]);
 
 	for(int i=1;i<numnodes;i++){
@@ -281,5 +281,5 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::Scale{{{*/
-void TriaP1Input::Scale(double scale_factor){
+void TriaP1Input::Scale(IssmPDouble scale_factor){
 	
 	int i;
@@ -290,15 +290,15 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::ArtificialNoise{{{*/
-void TriaP1Input::ArtificialNoise(double min,double max){
-
-	int i;
-	const int numnodes=3;
-	double noise;
+void TriaP1Input::ArtificialNoise(IssmPDouble min,IssmPDouble max){
+
+	int i;
+	const int numnodes=3;
+	IssmPDouble noise;
 
 	/*Compute random number between bounds:
 	 * rand() outputs an integer in [0 RAND_MAX]
-	 * (double)rand()/RAND_MAX is in [0 1]
+	 * (IssmPDouble)rand()/RAND_MAX is in [0 1]
 	 */
-	 noise=min+(max-min)*(double)rand()/RAND_MAX;
+	 noise=min+(max-min)*(IssmPDouble)rand()/RAND_MAX;
 
 	for(i=0;i<numnodes;i++)values[i]=values[i]+noise;
@@ -306,5 +306,5 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::AXPY{{{*/
-void TriaP1Input::AXPY(Input* xinput,double scalar){
+void TriaP1Input::AXPY(Input* xinput,IssmPDouble scalar){
 
 	int i;
@@ -329,5 +329,5 @@
 /*}}}*/
 /*FUNCTION TriaP1Input::Constrain{{{*/
-void TriaP1Input::Constrain(double cm_min, double cm_max){
+void TriaP1Input::Constrain(IssmPDouble cm_min, IssmPDouble cm_max){
 
 	int i;
@@ -347,5 +347,5 @@
 } /*}}}*/
 /*FUNCTION TriaP1Input::GetValuesPtr{{{*/
-void TriaP1Input::GetValuesPtr(double** pvalues,int* pnum_values){
+void TriaP1Input::GetValuesPtr(IssmPDouble** pvalues,int* pnum_values){
 
 	*pvalues=this->values;
@@ -365,5 +365,5 @@
 	int               B_numvalues;
 	const int         numnodes    = 3;
-	double            minvalues[numnodes];
+	IssmPDouble            minvalues[numnodes];
 
 	/*Check that inputB is of the same type*/
@@ -396,5 +396,5 @@
 	int               B_numvalues;
 	const int         numnodes    = 3;
-	double            maxvalues[numnodes];
+	IssmPDouble            maxvalues[numnodes];
 
 	/*Check that inputB is of the same type*/
Index: /issm/trunk-jpl/src/c/objects/Inputs/TriaP1Input.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/Inputs/TriaP1Input.h	(revision 12425)
+++ /issm/trunk-jpl/src/c/objects/Inputs/TriaP1Input.h	(revision 12426)
@@ -19,9 +19,9 @@
 		/*just hold 3 values for 3 vertices: */
 		int    enum_type;
-		double values[3];
+		IssmPDouble values[3];
 
 		/*TriaP1Input constructors, destructors: {{{*/
 		TriaP1Input();
-		TriaP1Input(int enum_type,double* values);
+		TriaP1Input(int enum_type,IssmPDouble* values);
 		~TriaP1Input();
 		/*}}}*/
@@ -40,6 +40,6 @@
 		Input* PointwiseMin(Input* inputB);
 		Input* PointwiseMax(Input* inputB);
-		ElementResult* SpawnResult(int step, double time);
-		void AddTimeValues(double* values,int step,double time){_error_("not supported yet");};
+		ElementResult* SpawnResult(int step, IssmPDouble time);
+		void AddTimeValues(IssmPDouble* values,int step,IssmPDouble time){_error_("not supported yet");};
 		void Configure(Parameters* parameters);
 		/*}}}*/
@@ -47,37 +47,37 @@
 		void GetInputValue(bool* pvalue){_error_("not implemented yet");}
 		void GetInputValue(int* pvalue){_error_("not implemented yet");}
-		void GetInputValue(double* pvalue){_error_("not implemented yet");}
-		void GetInputValue(double* pvalue,GaussTria* gauss);
-		void GetInputValue(double* pvalue,GaussTria* gauss,double time){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
-		void GetInputValue(double* pvalue,GaussPenta* gauss,int index){_error_("not implemented yet");};
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss);
-		void GetInputDerivativeValue(double* derivativevalues, double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetInputAverage(double* pvalue);
-		void GetVxStrainRate2d(double* epsilonvx,double* xyz_list, GaussTria* gauss);
-		void GetVyStrainRate2d(double* epsilonvy,double* xyz_list, GaussTria* gauss);
-		void GetVxStrainRate3d(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3d(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVzStrainRate3d(double* epsilonvz,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(double* epsilonvx,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(double* epsilonvy,double* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue){_error_("not implemented yet");}
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss);
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss,IssmPDouble time){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+		void GetInputValue(IssmPDouble* pvalue,GaussPenta* gauss,int index){_error_("not implemented yet");};
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetInputDerivativeValue(IssmPDouble* derivativevalues, IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetInputAverage(IssmPDouble* pvalue);
+		void GetVxStrainRate2d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetVyStrainRate2d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussTria* gauss);
+		void GetVxStrainRate3d(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3d(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVzStrainRate3d(IssmPDouble* epsilonvz,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dPattyn(IssmPDouble* epsilonvx,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dPattyn(IssmPDouble* epsilonvy,IssmPDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 
-		void SquareMin(double* psquaremin, bool process_units,Parameters* parameters);
-		void ConstrainMin(double minimum);
-		void Scale(double scale_factor);
-		void ArtificialNoise(double min,double max);
-		void AXPY(Input* xinput,double scalar);
-		void Constrain(double cm_min, double cm_max);
-		double InfinityNorm(void);
-		double Max(void);
-		double MaxAbs(void);
-		double Min(void);
-		double MinAbs(void);
+		void SquareMin(IssmPDouble* psquaremin, bool process_units,Parameters* parameters);
+		void ConstrainMin(IssmPDouble minimum);
+		void Scale(IssmPDouble scale_factor);
+		void ArtificialNoise(IssmPDouble min,IssmPDouble max);
+		void AXPY(Input* xinput,IssmPDouble scalar);
+		void Constrain(IssmPDouble cm_min, IssmPDouble cm_max);
+		IssmPDouble InfinityNorm(void);
+		IssmPDouble Max(void);
+		IssmPDouble MaxAbs(void);
+		IssmPDouble Min(void);
+		IssmPDouble MinAbs(void);
 		void Extrude(void){_error_("not supported yet");};
 		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
 		void GetVectorFromInputs(Vector* vector,int* doflist);
-		void GetValuesPtr(double** pvalues,int* pnum_values);
+		void GetValuesPtr(IssmPDouble** pvalues,int* pnum_values);
 		/*}}}*/
 
