Index: /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.cpp	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.cpp	(revision 12465)
@@ -27,5 +27,5 @@
 /*}}}*/
 /*FUNCTION BoolExternalResult::BoolExternalResult(int enum_type,bool value){{{*/
-BoolExternalResult::BoolExternalResult(int in_id, int in_enum_type,bool in_value,int in_step, double in_time){
+BoolExternalResult::BoolExternalResult(int in_id, int in_enum_type,bool in_value,int in_step, IssmPDouble in_time){
 
 	id=in_id;
@@ -90,5 +90,5 @@
 	int     type;
 	int     size;
-	double  boolean;
+	IssmPDouble  boolean;
 	extern  int my_rank;
 	char*   name = NULL;
@@ -105,16 +105,16 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(double),1,fid);
+	fwrite(&time,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
 	/*Now write bool, after casting it: */
-	boolean=(double)this->value;
+	boolean=(IssmPDouble)this->value;
 
-	/*writing a double, type is 1, size is 1: */
+	/*writing a IssmPDouble, type is 1, size is 1: */
 	type=1;
 	size=1;
 	fwrite(&type,sizeof(int),1,fid);
 	fwrite(&size,sizeof(int),1,fid);
-	fwrite(&boolean,size*sizeof(double),1,fid);
+	fwrite(&boolean,size*sizeof(IssmPDouble),1,fid);
 
 }
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.h	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.h	(revision 12465)
@@ -30,9 +30,9 @@
 		bool   value;
 		int    step;
-		double time;
+		IssmPDouble time;
 
 		/*BoolExternalResult constructors, destructors: {{{*/
 		BoolExternalResult();
-		BoolExternalResult(int id, int enum_type,bool value,int step,double time);
+		BoolExternalResult(int id, int enum_type,bool value,int step,IssmPDouble time);
 		~BoolExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.cpp	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.cpp	(revision 12465)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*FUNCTION DoubleExternalResult::DoubleExternalResult(int enum_type,double value){{{*/
-DoubleExternalResult::DoubleExternalResult(int in_id, int in_enum_type,double in_value,int in_step, double in_time){
+/*FUNCTION DoubleExternalResult::DoubleExternalResult(int enum_type,IssmPDouble value){{{*/
+DoubleExternalResult::DoubleExternalResult(int in_id, int in_enum_type,IssmPDouble in_value,int in_step, IssmPDouble in_time){
 
 	id=in_id;
@@ -104,13 +104,13 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(double),1,fid);
+	fwrite(&time,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a double, type is 1, size is 1: */
+	/*writing a IssmPDouble, type is 1, size is 1: */
 	type=1;
 	size=1;
 	fwrite(&type,sizeof(int),1,fid);
 	fwrite(&size,sizeof(int),1,fid);
-	fwrite(&this->value,size*sizeof(double),1,fid);
+	fwrite(&this->value,size*sizeof(IssmPDouble),1,fid);
 
 }
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.h	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.h	(revision 12465)
@@ -29,12 +29,12 @@
 		int    id;
 		int    enum_type;
-		double value;
+		IssmPDouble value;
 		int    step;
-		double time;
+		IssmPDouble time;
 
 
 		/*DoubleExternalResult constructors, destructors: {{{*/
 		DoubleExternalResult();
-		DoubleExternalResult(int id,int enum_type,double value,int step,double time);
+		DoubleExternalResult(int id,int enum_type,IssmPDouble value,int step,IssmPDouble time);
 		~DoubleExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp	(revision 12465)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*FUNCTION DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int enum_type,IssmDoubleMat values,int M,int N,int in_step,double in_time){{{*/
-DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int in_enum_type,double* in_values, int in_M,int in_N,int in_step,double in_time){
+/*FUNCTION DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int enum_type,IssmDoubleMat values,int M,int N,int in_step,IssmPDouble in_time){{{*/
+DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int in_enum_type,IssmPDouble* in_values, int in_M,int in_N,int in_step,IssmPDouble in_time){
 
 	id=in_id;
@@ -36,6 +36,6 @@
 	/*Copy result in values*/
 	if(M*N){
-		values=xNew<double>(M*N);
-		memcpy(values,in_values,M*N*sizeof(double));
+		values=xNew<IssmPDouble>(M*N);
+		xMemCpy<IssmPDouble>(values,in_values,M*N);
 	}
 	else values=NULL;
@@ -48,5 +48,5 @@
 DoubleMatExternalResult::~DoubleMatExternalResult(){
 
-	xDelete<double>(this->values);
+	xDelete<IssmPDouble>(this->values);
 	return;
 }
@@ -134,8 +134,8 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(double),1,fid);
+	fwrite(&time,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a double array, type is 3:*/
+	/*writing a IssmPDouble array, type is 3:*/
 	type=3;
 	fwrite(&type,sizeof(int),1,fid);
@@ -144,5 +144,5 @@
 	cols=this->N;
 	fwrite(&cols,sizeof(int),1,fid);
-	fwrite(this->values,cols*rows*sizeof(double),1,fid);
+	fwrite(this->values,cols*rows*sizeof(IssmPDouble),1,fid);
 
 }
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.h	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.h	(revision 12465)
@@ -27,14 +27,14 @@
 		int id;
 		int enum_type;
-		double* values;
+		IssmPDouble* values;
 		int M;
 		int N;
 		int step;
-		double time;
+		IssmPDouble time;
 
 	public:
 		/*DoubleMatExternalResult constructors, destructors: {{{*/
 		DoubleMatExternalResult();
-		DoubleMatExternalResult(int id,int enum_type,double* values,int M,int N,int step, double time);
+		DoubleMatExternalResult(int id,int enum_type,IssmPDouble* values,int M,int N,int step, IssmPDouble time);
 		~DoubleMatExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp	(revision 12465)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*FUNCTION DoubleVecExternalResult::DoubleVecExternalResult(int enum_type,IssmDoubleVec values,int M,int in_step,double in_time){{{*/
-DoubleVecExternalResult::DoubleVecExternalResult(int in_id, int in_enum_type,double* in_values, int in_M,int in_step,double in_time){
+/*FUNCTION DoubleVecExternalResult::DoubleVecExternalResult(int enum_type,IssmDoubleVec values,int M,int in_step,IssmPDouble in_time){{{*/
+DoubleVecExternalResult::DoubleVecExternalResult(int in_id, int in_enum_type,IssmPDouble* in_values, int in_M,int in_step,IssmPDouble in_time){
 
 	id=in_id;
@@ -34,6 +34,6 @@
 
 	if(M){
-		values=xNew<double>(M);
-		memcpy(values,in_values,M*sizeof(double));
+		values=xNew<IssmPDouble>(M);
+		xMemCpy<IssmPDouble>(values,in_values,M);
 	}
 	else values=NULL;
@@ -45,5 +45,5 @@
 /*FUNCTION DoubleVecExternalResult::~DoubleVecExternalResult(){{{*/
 DoubleVecExternalResult::~DoubleVecExternalResult(){
-	xDelete<double>(values);
+	xDelete<IssmPDouble>(values);
 	return;
 }
@@ -123,13 +123,13 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(double),1,fid);
+	fwrite(&time,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a double, type is 1, size is 1: */
+	/*writing a IssmPDouble, type is 1, size is 1: */
 	type=1;
 	size=this->M;
 	fwrite(&type,sizeof(int),1,fid);
 	fwrite(&size,sizeof(int),1,fid);
-	fwrite(this->values,size*sizeof(double),1,fid);
+	fwrite(this->values,size*sizeof(IssmPDouble),1,fid);
 
 }
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.h	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.h	(revision 12465)
@@ -27,13 +27,13 @@
 		int id;
 		int enum_type;
-		double* values;
+		IssmPDouble* values;
 		int M;
 		int step;
-		double time;
+		IssmPDouble time;
 
 	public:
 		/*DoubleVecExternalResult constructors, destructors: {{{*/
 		DoubleVecExternalResult();
-		DoubleVecExternalResult(int id,int enum_type,double* values,int M,int step, double time);
+		DoubleVecExternalResult(int id,int enum_type,IssmPDouble* values,int M,int step, IssmPDouble time);
 		~DoubleVecExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.cpp	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.cpp	(revision 12465)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*FUNCTION IntExternalResult::IntExternalResult(int in_id, int in_enum_type,int in_value,int in_step, double in_time){{{*/
-IntExternalResult::IntExternalResult(int in_id, int in_enum_type,int in_value,int in_step, double in_time){
+/*FUNCTION IntExternalResult::IntExternalResult(int in_id, int in_enum_type,int in_value,int in_step, IssmPDouble in_time){{{*/
+IntExternalResult::IntExternalResult(int in_id, int in_enum_type,int in_value,int in_step, IssmPDouble in_time){
 
 	id=in_id;
@@ -91,5 +91,5 @@
 	int     size;
 	char   *name    = NULL;
-	double  integer;
+	IssmPDouble  integer;
 	extern  int my_rank;
 
@@ -105,16 +105,16 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(double),1,fid);
+	fwrite(&time,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*cast to a double: */
-	integer=(double)this->value;
+	/*cast to a IssmPDouble: */
+	integer=(IssmPDouble)this->value;
 
-	/*writing a double, type is 1, size is 1: */
+	/*writing a IssmPDouble, type is 1, size is 1: */
 	type=1;
 	size=1;
 	fwrite(&type,sizeof(int),1,fid);
 	fwrite(&size,sizeof(int),1,fid);
-	fwrite(&integer,size*sizeof(double),1,fid);
+	fwrite(&integer,size*sizeof(IssmPDouble),1,fid);
 
 }
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.h	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.h	(revision 12465)
@@ -28,10 +28,10 @@
 		int    value;
 		int    step;
-		double time;
+		IssmPDouble time;
 
 
 		/*IntExternalResult constructors, destructors: {{{*/
 		IntExternalResult();
-		IntExternalResult(int id,int enum_type,int value,int step,double time);
+		IntExternalResult(int id,int enum_type,int value,int step,IssmPDouble time);
 		~IntExternalResult();
 
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.cpp	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.cpp	(revision 12465)
@@ -27,5 +27,5 @@
 /*}}}*/
 /*FUNCTION PetscVecExternalResult::PetscVecExternalResult(int enum_type,IssmPetscVec value){{{*/
-PetscVecExternalResult::PetscVecExternalResult(int in_id, int in_enum_type,Vector* in_value,int in_step, double in_time){
+PetscVecExternalResult::PetscVecExternalResult(int in_id, int in_enum_type,Vector* in_value,int in_step, IssmPDouble in_time){
 
 	id=in_id;
@@ -103,5 +103,5 @@
 	int     size;
 	char   *name      = NULL;
-	double *serialvec = NULL;
+	IssmPDouble *serialvec = NULL;
 	extern int my_rank;
 
@@ -121,13 +121,13 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(double),1,fid);
+	fwrite(&time,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a double, type is 1, size is 1: */
+	/*writing a IssmPDouble, type is 1, size is 1: */
 	type=1;
 	
 	fwrite(&type,sizeof(int),1,fid);
 	fwrite(&size,sizeof(int),1,fid);
-	fwrite(serialvec,size*sizeof(double),1,fid);
+	fwrite(serialvec,size*sizeof(IssmPDouble),1,fid);
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.h	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.h	(revision 12465)
@@ -30,10 +30,10 @@
 		Vector* value;
 		int step;
-		double time;
+		IssmPDouble time;
 
 	public:
 		/*PetscVecExternalResult constructors, destructors: {{{*/
 		PetscVecExternalResult();
-		PetscVecExternalResult(int id,int enum_type,Vector* value, int step, double time);
+		PetscVecExternalResult(int id,int enum_type,Vector* value, int step, IssmPDouble time);
 		~PetscVecExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.cpp	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.cpp	(revision 12465)
@@ -27,11 +27,10 @@
 /*}}}*/
 /*FUNCTION StringExternalResult::StringExternalResult(int enum_type,IssmString value){{{*/
-StringExternalResult::StringExternalResult(int in_id, int in_enum_type,char* in_value,int in_step, double in_time){
+StringExternalResult::StringExternalResult(int in_id, int in_enum_type,char* in_value,int in_step, IssmPDouble in_time){
 
 	id=in_id;
 	enum_type=in_enum_type;
 	value=xNew<char>(strlen(in_value)+1);
-	memcpy(value,in_value,(strlen(in_value)+1)*sizeof(char));
-
+	xMemCpy<char>(value,in_value,(strlen(in_value)+1));
 	step=in_step;
 	time=in_time;
@@ -106,5 +105,5 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(double),1,fid);
+	fwrite(&time,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.h	(revision 12464)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.h	(revision 12465)
@@ -30,10 +30,10 @@
 		char*  value;
 		int    step;
-		double time;
+		IssmPDouble time;
 
 	public:
 		/*StringExternalResult constructors, destructors: {{{*/
 		StringExternalResult();
-		StringExternalResult(int id,int enum_type,char* value,int step, double time);
+		StringExternalResult(int id,int enum_type,char* value,int step, IssmPDouble time);
 		~StringExternalResult();
 		/*}}}*/
