Index: /issm/trunk-jpl/src/c/objects/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/IoModel.cpp	(revision 12551)
+++ /issm/trunk-jpl/src/c/objects/IoModel.cpp	(revision 12552)
@@ -50,8 +50,8 @@
 	/*Initialize and read constants:*/
 	this->constants=new Parameters();
-	this->FetchConstants(); /*this routine goes through the input file, and fetches bools, ints, IssmPDoubles and strings only, nothing memory intensive*/
+	this->FetchConstants(); /*this routine goes through the input file, and fetches bools, ints, IssmDoubles and strings only, nothing memory intensive*/
 
 	/*Initialize data: */
-	this->data=xNew<IssmPDouble*>(MaximumNumberOfEnums);
+	this->data=xNew<IssmDouble*>(MaximumNumberOfEnums);
 	for(int i=0;i<MaximumNumberOfEnums;i++) this->data[i]=NULL;
 	
@@ -84,5 +84,5 @@
 	#endif
 
-	xDelete<IssmPDouble*>(this->data);
+	xDelete<IssmDouble*>(this->data);
 	xDelete<bool>(this->my_elements);
 	xDelete<bool>(this->my_nodes);
@@ -152,6 +152,6 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::Constant(IssmPDouble* poutput,int constant_enum){{{*/
-void IoModel::Constant(IssmPDouble* poutput,int constant_enum){
+/*FUNCTION IoModel::Constant(IssmDouble* poutput,int constant_enum){{{*/
+void IoModel::Constant(IssmDouble* poutput,int constant_enum){
 
 	_assert_(constant_enum>=0);
@@ -183,5 +183,5 @@
 /*}}}*/
 /*FUNCTION IoModel::Data{{{*/
-IssmPDouble* IoModel::Data(int data_enum){
+IssmDouble* IoModel::Data(int data_enum){
 
 	_assert_(data_enum<MaximumNumberOfEnums);
@@ -205,5 +205,5 @@
 		dataenum=va_arg(ap, int);
 		_assert_(dataenum<MaximumNumberOfEnums);
-		xDelete<double>(this->data[dataenum]);
+		xDelete<IssmDouble>(this->data[dataenum]);
 	}
 	va_end(ap);
@@ -237,5 +237,5 @@
 		fseek(this->fid,0,SEEK_SET);
 
-		/*Now march through file looking for the correct data identifiers (bool,int,IssmPDouble or string): */
+		/*Now march through file looking for the correct data identifiers (bool,int,IssmDouble or string): */
 		for(;;){
 			if(fread(&record_enum,sizeof(int),1,this->fid)==0){
@@ -499,6 +499,6 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(IssmPDouble*   pscalar,int data_enum){{{*/
-void  IoModel::FetchData(IssmPDouble* pscalar,int data_enum){
+/*FUNCTION IoModel::FetchData(IssmDouble*   pscalar,int data_enum){{{*/
+void  IoModel::FetchData(IssmDouble* pscalar,int data_enum){
 
 
@@ -514,5 +514,5 @@
 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
 	
-	if(code!=3)_error2_("expecting a IssmPDouble for enum " << EnumToStringx(data_enum));
+	if(code!=3)_error2_("expecting a IssmDouble for enum " << EnumToStringx(data_enum));
 	
 	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
@@ -598,5 +598,5 @@
 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
 
-	if((code!=5) && (code!=6) && (code!=7))_error2_("expecting a IssmPDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+	if((code!=5) && (code!=6) && (code!=7))_error2_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
 	
 	/*Now fetch: */
@@ -655,6 +655,6 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(IssmPDouble**  pIssmPDoublematrix,int* pM,int* pN,int data_enum){{{*/
-void  IoModel::FetchData(IssmPDouble** pmatrix,int* pM,int* pN,int data_enum){
+/*FUNCTION IoModel::FetchData(IssmDouble**  pIssmDoublematrix,int* pM,int* pN,int data_enum){{{*/
+void  IoModel::FetchData(IssmDouble** pmatrix,int* pM,int* pN,int data_enum){
 
 	extern int my_rank;
@@ -669,5 +669,5 @@
 	/*Set file pointer to beginning of the data: */
 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
-	if((code!=5) && (code!=6) && (code!=7))_error2_("expecting a IssmPDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+	if((code!=5) && (code!=6) && (code!=7))_error2_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
 	
 	/*Now fetch: */
@@ -700,8 +700,11 @@
 		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
 		#endif
-	}
-
+	        *pmatrix=xNew<IssmDouble>(M*N);
+	        for (int i=0;i<M*N;++i) (*pmatrix)[i]=matrix[i];
+	        xDelete<IssmPDouble>(matrix);
+	}
+	else
+	  *pmatrix=NULL;
 	/*Assign output pointers: */
-	*pmatrix=matrix;
 	if (pM)*pM=M;
 	if (pN)*pN=N;
@@ -778,6 +781,6 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(IssmPDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
-void  IoModel::FetchData(IssmPDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+/*FUNCTION IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
+void  IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
 
 	int i;
@@ -787,5 +790,5 @@
 
 	/*output: */
-	IssmPDouble** matrices=NULL;
+	IssmDouble** matrices=NULL;
 	int*     mdims=NULL;
 	int*     ndims=NULL;
@@ -799,5 +802,5 @@
 	/*Set file pointer to beginning of the data: */
 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-	if(code!=8)_error2_("expecting a IssmPDouble mat array for enum " << EnumToStringx(data_enum));
+	if(code!=8)_error2_("expecting a IssmDouble mat array for enum " << EnumToStringx(data_enum));
 	
 	/*Now fetch: */
@@ -812,5 +815,5 @@
 
 		/*Allocate matrices :*/
-		matrices=xNew<IssmPDouble*>(numrecords);
+		matrices=xNew<IssmDouble*>(numrecords);
 		mdims=xNew<int>(numrecords);
 		ndims=xNew<int>(numrecords);
@@ -851,8 +854,11 @@
 				MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
 				#endif
-			}
-
+				matrices[i]=xNew<IssmDouble>(M*N);
+				for (int j=0;j<M*N;++j) {matrices[i][j]=matrix[j];}
+				xDelete<IssmPDouble>(matrix);
+			}
+			else
+			  matrices[i]=NULL;
 			/*Assign: */
-			matrices[i]=matrix;
 			mdims[i]=M;
 			ndims[i]=N;
@@ -884,7 +890,7 @@
 	fid=this->SetFilePointerToData(&code,NULL,index+1);
 	switch(code){
-		case 3: {//IssmPDouble
-			  IssmPDouble *value = NULL;
-			  value=xNew<IssmPDouble>(1);
+		case 3: {//IssmDouble
+			  IssmDouble *value = NULL;
+			  value=xNew<IssmDouble>(1);
 			  FetchData(value,index+1);
 			  option = new OptionDouble();
@@ -920,10 +926,10 @@
 	va_list ap;
 	int     dataenum;
-	IssmPDouble* matrix=NULL;
+	IssmDouble* matrix=NULL;
 	int     M,N;
 	int     i;
 
 	/*Go through the entire list of enums and fetch the corresponding data. Add it to the iomodel->data dataset. Everything
-	 *we fetch is a IssmPDouble* : */
+	 *we fetch is a IssmDouble* : */
 	
 	va_start(ap,num);
@@ -951,5 +957,5 @@
 /*}}}*/
 /*FUNCTION IoModel::FetchDataToInput{{{*/
-void IoModel::FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum,IssmPDouble default_value){
+void IoModel::FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum,IssmDouble default_value){
 
 	/*intermediary: */
@@ -970,7 +976,7 @@
 	bool    boolean;
 	int     integer;
-	IssmPDouble  scalar;
+	IssmDouble  scalar;
 	char   *string        = NULL;
-	IssmPDouble *IssmPDoublevector  = NULL;
+	IssmDouble *IssmDoublevector  = NULL;
 	int     M,N;
 
@@ -990,5 +996,5 @@
 				if(this->my_elements[i]){
 					Element* element=(Element*)elements->GetObjectByOffset(counter);
-					element->InputCreate((IssmPDouble)boolean,vector_enum,code); 
+					element->InputCreate((IssmDouble)boolean,vector_enum,code);
 					counter++;
 				}
@@ -1003,13 +1009,13 @@
 				if(this->my_elements[i]){
 					Element* element=(Element*)elements->GetObjectByOffset(counter);
-					element->InputCreate((IssmPDouble)integer,vector_enum,code); 
+					element->InputCreate((IssmDouble)integer,vector_enum,code);
 					counter++;
 				}
 			}
 			break; /*}}}*/
-		case 3: //IssmPDouble constant.  {{{
+		case 3: //IssmDouble constant.  {{{
 			this->FetchData(&scalar,vector_enum);
 
-			/*Add IssmPDouble constant input to all elements: */
+			/*Add IssmDouble constant input to all elements: */
 			counter=0;
 			for (i=0;i<numberofelements;i++){
@@ -1024,7 +1030,7 @@
 
 			/*Fetch vector:*/
-			this->FetchData(&IssmPDoublevector,&M,&N,vector_enum); //we still have a IssmPDoublevector, because it might include times in transient mode
+			this->FetchData(&IssmDoublevector,&M,&N,vector_enum); //we still have a IssmDoublevector, because it might include times in transient mode
 			/*Check we got something, otherwise fetch default: */
-			if(IssmPDoublevector){ 
+			if(IssmDoublevector){
 				defaulting=false;  //we are not defaulting, because  we do have a vector
 			}
@@ -1033,6 +1039,6 @@
 				if(default_vector_enum!=NoneEnum){
 					/*yes. fetch it: */
-					this->FetchData(&IssmPDoublevector,&M,&N,default_vector_enum);
-					if(IssmPDoublevector){
+					this->FetchData(&IssmDoublevector,&M,&N,default_vector_enum);
+					if(IssmDoublevector){
 						defaulting=false;  //we are not defaulting, because  we do have a vector
 					}
@@ -1054,5 +1060,5 @@
 					Element* element=(Element*)elements->GetObjectByOffset(counter);
 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
-					else           element->InputCreate(IssmPDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
 					counter++;
 				}
@@ -1062,7 +1068,7 @@
 
 			/*Fetch vector:*/
-			this->FetchData(&IssmPDoublevector,&M,&N,vector_enum); //we still have a IssmPDoublevector, because it might include times in transient mode
+			this->FetchData(&IssmDoublevector,&M,&N,vector_enum); //we still have a IssmDoublevector, because it might include times in transient mode
 			/*Check we got something, otherwise fetch default: */
-			if(IssmPDoublevector){ 
+			if(IssmDoublevector){
 				defaulting=false;  //we are not defaulting, because  we do have a vector
 			}
@@ -1071,6 +1077,6 @@
 				if(default_vector_enum!=NoneEnum){
 					/*yes. fetch it: */
-					this->FetchData(&IssmPDoublevector,&M,&N,default_vector_enum);
-					if(IssmPDoublevector){
+					this->FetchData(&IssmDoublevector,&M,&N,default_vector_enum);
+					if(IssmDoublevector){
 						defaulting=false;  //we are not defaulting, because  we do have a vector
 					}
@@ -1092,15 +1098,15 @@
 					Element* element=(Element*)elements->GetObjectByOffset(counter);
 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
-					else           element->InputCreate(IssmPDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
 					counter++;
 				}
 			}
 			break; /*}}}*/
-		case 7: //IssmPDouble vector{{{
+		case 7: //IssmDouble vector{{{
 
 			/*Fetch vector:*/
-			this->FetchData(&IssmPDoublevector,&M,&N,vector_enum);
+			this->FetchData(&IssmDoublevector,&M,&N,vector_enum);
 			/*Check we got something, otherwise fetch default: */
-			if(IssmPDoublevector){ 
+			if(IssmDoublevector){
 				defaulting=false;  //we are not defaulting, because  we do have a vector
 			}
@@ -1109,6 +1115,6 @@
 				if(default_vector_enum!=NoneEnum){
 					/*yes. fetch it: */
-					this->FetchData(&IssmPDoublevector,&M,&N,default_vector_enum);
-					if(IssmPDoublevector){
+					this->FetchData(&IssmDoublevector,&M,&N,default_vector_enum);
+					if(IssmDoublevector){
 						defaulting=false;  //we are not defaulting, because  we do have a vector
 					}
@@ -1130,5 +1136,5 @@
 					Element* element=(Element*)elements->GetObjectByOffset(counter);
 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
-					else           element->InputCreate(IssmPDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
 					counter++;
 				}
@@ -1142,5 +1148,5 @@
 	}
 	/*Free ressources:*/
-	xDelete<IssmPDouble>(IssmPDoublevector);
+	xDelete<IssmDouble>(IssmDoublevector);
 	xDelete<char>(string);
 }
Index: /issm/trunk-jpl/src/c/objects/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/IoModel.h	(revision 12551)
+++ /issm/trunk-jpl/src/c/objects/IoModel.h	(revision 12552)
@@ -18,6 +18,6 @@
 
 	private: 
-		IssmPDouble **data;        //this dataset holds temporary data, memory intensive.
-		Parameters  *constants;   //this dataset holds all IssmPDouble, int, bool and char *parameters read in from the input file.*
+		IssmDouble **data;        //this dataset holds temporary data, memory intensive.
+		Parameters  *constants;   //this dataset holds all IssmDouble, int, bool and char *parameters read in from the input file.*
 
 	public:
@@ -44,21 +44,21 @@
 		void        Constant(bool *poutput,int constant_enum);
 		void        Constant(int *poutput,int constant_enum);
-		void        Constant(IssmPDouble *poutput,int constant_enum);
+		void        Constant(IssmDouble *poutput,int constant_enum);
 		void        Constant(char **poutput,int constant_enum);
 		Param      *CopyConstantObject(int constant_enum);
-		IssmPDouble *Data(int dataenum);
+		IssmDouble *Data(int dataenum);
 		void        DeleteData(int num,...);
 		void        FetchConstants(void);
 		void        FetchData(bool* pboolean,int data_enum);
 		void        FetchData(int* pinteger,int data_enum);
-		void        FetchData(IssmPDouble* pscalar,int data_enum);
+		void        FetchData(IssmDouble* pscalar,int data_enum);
 		void        FetchData(char** pstring,int data_enum);
 		void        FetchData(int** pmatrix,int* pM,int* pN,int data_enum);
-		void        FetchData(IssmPDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
+		void        FetchData(IssmDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
 		void        FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
-		void        FetchData(IssmPDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
 		void        FetchData(Option **poption,int data_enum);
 		void        FetchData(int num,...);
-		void        FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,IssmPDouble default_value=0);
+		void        FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,IssmDouble default_value=0);
 		void        LastIndex(int *pindex);
 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
