Index: /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.cpp	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.cpp	(revision 12562)
@@ -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, IssmPDouble in_time){
+BoolExternalResult::BoolExternalResult(int in_id, int in_enum_type,bool in_value,int in_step, IssmDouble in_time){
 
 	id=in_id;
@@ -90,5 +90,5 @@
 	int     type;
 	int     size;
-	IssmPDouble  boolean;
+	IssmPDouble  passiveDouble;
 	extern  int my_rank;
 	char*   name = NULL;
@@ -105,16 +105,16 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(IssmPDouble),1,fid);
+	passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*Now write bool, after casting it: */
-	boolean=(IssmPDouble)this->value;
-
-	/*writing a IssmPDouble, type is 1, size is 1: */
+	/*writing a IssmDouble, 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(IssmPDouble),1,fid);
+        /*Now write bool, after casting it: */
+        passiveDouble=reCast<IssmPDouble>(this->value);
+        fwrite(&passiveDouble,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 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/BoolExternalResult.h	(revision 12562)
@@ -30,9 +30,9 @@
 		bool   value;
 		int    step;
-		IssmPDouble time;
+		IssmDouble time;
 
 		/*BoolExternalResult constructors, destructors: {{{*/
 		BoolExternalResult();
-		BoolExternalResult(int id, int enum_type,bool value,int step,IssmPDouble time);
+		BoolExternalResult(int id, int enum_type,bool value,int step,IssmDouble time);
 		~BoolExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.cpp	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.cpp	(revision 12562)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*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){
+/*FUNCTION DoubleExternalResult::DoubleExternalResult(int enum_type,IssmDouble value){{{*/
+DoubleExternalResult::DoubleExternalResult(int in_id, int in_enum_type,IssmDouble in_value,int in_step, IssmDouble in_time){
 
 	id=in_id;
@@ -92,4 +92,5 @@
 	char   *name    = NULL;
 	extern  int my_rank;
+	IssmPDouble passiveDouble;
 
 	/*return if now on cpu 0: */
@@ -104,13 +105,15 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(IssmPDouble),1,fid);
+	passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a IssmPDouble, type is 1, size is 1: */
+	/*writing a IssmDouble, 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(IssmPDouble),1,fid);
+        passiveDouble=reCast<IssmPDouble>(this->value);
+	fwrite(&passiveDouble,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 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleExternalResult.h	(revision 12562)
@@ -29,12 +29,12 @@
 		int    id;
 		int    enum_type;
-		IssmPDouble value;
+		IssmDouble value;
 		int    step;
-		IssmPDouble time;
+		IssmDouble time;
 
 
 		/*DoubleExternalResult constructors, destructors: {{{*/
 		DoubleExternalResult();
-		DoubleExternalResult(int id,int enum_type,IssmPDouble value,int step,IssmPDouble time);
+		DoubleExternalResult(int id,int enum_type,IssmDouble value,int step,IssmDouble time);
 		~DoubleExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp	(revision 12562)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*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){
+/*FUNCTION DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int enum_type,IssmDoubleMat values,int M,int N,int in_step,IssmDouble in_time){{{*/
+DoubleMatExternalResult::DoubleMatExternalResult(int in_id, int in_enum_type,IssmDouble* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){
 
 	id=in_id;
@@ -36,6 +36,6 @@
 	/*Copy result in values*/
 	if(M*N){
-		values=xNew<IssmPDouble>(M*N);
-		xMemCpy<IssmPDouble>(values,in_values,M*N);
+		values=xNew<IssmDouble>(M*N);
+		xMemCpy<IssmDouble>(values,in_values,M*N);
 	}
 	else values=NULL;
@@ -48,5 +48,5 @@
 DoubleMatExternalResult::~DoubleMatExternalResult(){
 
-	xDelete<IssmPDouble>(this->values);
+	xDelete<IssmDouble>(this->values);
 	return;
 }
@@ -119,4 +119,6 @@
 	char   *name    = NULL;
 	extern  int my_rank;
+	IssmPDouble *passiveDouble_p=NULL;
+	IssmPDouble passiveDouble;
 
 	if(io_gather){
@@ -124,4 +126,6 @@
 		if(my_rank) return;
 	}
+
+	passiveDouble_p=xNew<IssmPDouble>(M*N);
 
 	/*First write enum: */
@@ -133,8 +137,9 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(IssmPDouble),1,fid);
+	passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a IssmPDouble array, type is 3:*/
+	/*writing a IssmDouble array, type is 3:*/
 	type=3;
 	fwrite(&type,sizeof(int),1,fid);
@@ -143,5 +148,7 @@
 	cols=this->N;
 	fwrite(&cols,sizeof(int),1,fid);
-	fwrite(this->values,cols*rows*sizeof(IssmPDouble),1,fid);
+	for (int i=0; i<N*M; ++i) passiveDouble_p[i]=reCast<IssmPDouble>(values[i]);
+	fwrite(passiveDouble_p,cols*rows*sizeof(IssmPDouble),1,fid);
+	xDelete(passiveDouble_p);
 
 }
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.h	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleMatExternalResult.h	(revision 12562)
@@ -27,14 +27,14 @@
 		int id;
 		int enum_type;
-		IssmPDouble* values;
+		IssmDouble* values;
 		int M;
 		int N;
 		int step;
-		IssmPDouble time;
+		IssmDouble time;
 
 	public:
 		/*DoubleMatExternalResult constructors, destructors: {{{*/
 		DoubleMatExternalResult();
-		DoubleMatExternalResult(int id,int enum_type,IssmPDouble* values,int M,int N,int step, IssmPDouble time);
+		DoubleMatExternalResult(int id,int enum_type,IssmDouble* values,int M,int N,int step, IssmDouble time);
 		~DoubleMatExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp	(revision 12562)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*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){
+/*FUNCTION DoubleVecExternalResult::DoubleVecExternalResult(int enum_type,IssmDoubleVec values,int M,int in_step,IssmDouble in_time){{{*/
+DoubleVecExternalResult::DoubleVecExternalResult(int in_id, int in_enum_type,IssmDouble* in_values, int in_M,int in_step,IssmDouble in_time){
 
 	id=in_id;
@@ -34,6 +34,6 @@
 
 	if(M){
-		values=xNew<IssmPDouble>(M);
-		xMemCpy<IssmPDouble>(values,in_values,M);
+		values=xNew<IssmDouble>(M);
+		xMemCpy<IssmDouble>(values,in_values,M);
 	}
 	else values=NULL;
@@ -45,5 +45,5 @@
 /*FUNCTION DoubleVecExternalResult::~DoubleVecExternalResult(){{{*/
 DoubleVecExternalResult::~DoubleVecExternalResult(){
-	xDelete<IssmPDouble>(values);
+	xDelete<IssmDouble>(values);
 	return;
 }
@@ -111,8 +111,11 @@
 	char   *name    = NULL;
 	extern  int my_rank;
+	IssmPDouble *passiveDouble_p=NULL;
+	IssmPDouble passiveDouble;
 
 	/*return if now on cpu 0: */
 	if(my_rank)return;
 
+	passiveDouble_p=xNew<IssmPDouble>(M);
 	/*First write enum: */
 	EnumToStringx(&name,this->enum_type);
@@ -123,14 +126,16 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(IssmPDouble),1,fid);
+        passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a IssmPDouble, type is 1, size is 1: */
+	/*writing a IssmDouble, 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(IssmPDouble),1,fid);
-
+        for (int i=0; i<M; ++i) passiveDouble_p[i]=reCast<IssmPDouble>(values[i]);
+	fwrite(passiveDouble_p,size*sizeof(IssmPDouble),1,fid);
+        xDelete(passiveDouble_p);
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.h	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.h	(revision 12562)
@@ -27,13 +27,13 @@
 		int id;
 		int enum_type;
-		IssmPDouble* values;
+		IssmDouble* values;
 		int M;
 		int step;
-		IssmPDouble time;
+		IssmDouble time;
 
 	public:
 		/*DoubleVecExternalResult constructors, destructors: {{{*/
 		DoubleVecExternalResult();
-		DoubleVecExternalResult(int id,int enum_type,IssmPDouble* values,int M,int step, IssmPDouble time);
+		DoubleVecExternalResult(int id,int enum_type,IssmDouble* values,int M,int step, IssmDouble time);
 		~DoubleVecExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.cpp	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.cpp	(revision 12562)
@@ -26,6 +26,6 @@
 }
 /*}}}*/
-/*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){
+/*FUNCTION IntExternalResult::IntExternalResult(int in_id, int in_enum_type,int in_value,int in_step, IssmDouble in_time){{{*/
+IntExternalResult::IntExternalResult(int in_id, int in_enum_type,int in_value,int in_step, IssmDouble in_time){
 
 	id=in_id;
@@ -91,5 +91,5 @@
 	int     size;
 	char   *name    = NULL;
-	IssmPDouble  integer;
+	IssmPDouble  passiveDouble;
 	extern  int my_rank;
 
@@ -105,9 +105,7 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(IssmPDouble),1,fid);
+        passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
-
-	/*cast to a IssmPDouble: */
-	integer=(IssmPDouble)this->value;
 
 	/*writing a IssmPDouble, type is 1, size is 1: */
@@ -116,5 +114,7 @@
 	fwrite(&type,sizeof(int),1,fid);
 	fwrite(&size,sizeof(int),1,fid);
-	fwrite(&integer,size*sizeof(IssmPDouble),1,fid);
+        /*cast to a IssmPDouble: */
+        passiveDouble=reCast<IssmPDouble>(value);
+	fwrite(&passiveDouble,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 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/IntExternalResult.h	(revision 12562)
@@ -28,10 +28,10 @@
 		int    value;
 		int    step;
-		IssmPDouble time;
+		IssmDouble time;
 
 
 		/*IntExternalResult constructors, destructors: {{{*/
 		IntExternalResult();
-		IntExternalResult(int id,int enum_type,int value,int step,IssmPDouble time);
+		IntExternalResult(int id,int enum_type,int value,int step,IssmDouble time);
 		~IntExternalResult();
 
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.cpp	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.cpp	(revision 12562)
@@ -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, IssmPDouble in_time){
+PetscVecExternalResult::PetscVecExternalResult(int in_id, int in_enum_type,Vector* in_value,int in_step, IssmDouble in_time){
 
 	id=in_id;
@@ -105,4 +105,5 @@
 	IssmPDouble *serialvec = NULL;
 	extern int my_rank;
+	IssmPDouble passiveDouble;
 
 	/*serialize: */
@@ -121,8 +122,9 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(IssmPDouble),1,fid);
+        passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
 	fwrite(&step,sizeof(int),1,fid);
 
-	/*writing a IssmPDouble, type is 1, size is 1: */
+	/*writing a IssmDouble, type is 1, size is 1: */
 	type=1;
 	
@@ -132,5 +134,5 @@
 
 	/*Free ressources:*/
-	xDelete<char>(serialvec);
+	xDelete<IssmPDouble>(serialvec);
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.h	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/PetscVecExternalResult.h	(revision 12562)
@@ -30,10 +30,10 @@
 		Vector* value;
 		int step;
-		IssmPDouble time;
+		IssmDouble time;
 
 	public:
 		/*PetscVecExternalResult constructors, destructors: {{{*/
 		PetscVecExternalResult();
-		PetscVecExternalResult(int id,int enum_type,Vector* value, int step, IssmPDouble time);
+		PetscVecExternalResult(int id,int enum_type,Vector* value, int step, IssmDouble time);
 		~PetscVecExternalResult();
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.cpp	(revision 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.cpp	(revision 12562)
@@ -27,5 +27,5 @@
 /*}}}*/
 /*FUNCTION StringExternalResult::StringExternalResult(int enum_type,IssmString value){{{*/
-StringExternalResult::StringExternalResult(int in_id, int in_enum_type,char* in_value,int in_step, IssmPDouble in_time){
+StringExternalResult::StringExternalResult(int in_id, int in_enum_type,char* in_value,int in_step, IssmDouble in_time){
 
 	id=in_id;
@@ -93,4 +93,5 @@
 	char   *name      = NULL;
 	extern  int my_rank;
+        IssmPDouble passiveDouble;
 
 	/*return if now on cpu 0: */
@@ -105,5 +106,6 @@
 
 	/*Now write time and step: */
-	fwrite(&time,sizeof(IssmPDouble),1,fid);
+        passiveDouble=reCast<IssmPDouble>(time);
+	fwrite(&passiveDouble,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 12561)
+++ /issm/trunk-jpl/src/c/objects/ExternalResults/StringExternalResult.h	(revision 12562)
@@ -30,10 +30,10 @@
 		char*  value;
 		int    step;
-		IssmPDouble time;
+		IssmDouble time;
 
 	public:
 		/*StringExternalResult constructors, destructors: {{{*/
 		StringExternalResult();
-		StringExternalResult(int id,int enum_type,char* value,int step, IssmPDouble time);
+		StringExternalResult(int id,int enum_type,char* value,int step, IssmDouble time);
 		~StringExternalResult();
 		/*}}}*/
