Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 9339)
+++ /issm/trunk/src/c/Makefile.am	(revision 9340)
@@ -409,5 +409,4 @@
 					./io/io.h\
 					./io/Disk/diskio.h\
-					./io/Disk/IoModelFetchData.cpp\
 					./io/Disk/pfopen.cpp\
 					./io/Disk/pfclose.cpp\
@@ -1101,5 +1100,4 @@
 					./io/io.h\
 					./io/Disk/diskio.h\
-					./io/Disk/IoModelFetchData.cpp\
 					./io/Disk/pfopen.cpp\
 					./io/Disk/pfclose.cpp\
Index: sm/trunk/src/c/io/Disk/IoModelFetchData.cpp
===================================================================
--- /issm/trunk/src/c/io/Disk/IoModelFetchData.cpp	(revision 9339)
+++ 	(revision )
@@ -1,410 +1,0 @@
-/*! \file IoModelFetchData.c
- *  \brief: wrapper to the I/O routines, for special processing of the IoModel structure.
- */
-
-#ifdef HAVE_CONFIG_H
-	#include <config.h>
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-#include "../../shared/shared.h"
-#include "../../include/include.h"
-#include "./diskio.h"
-
-/*FUNCTION IoModelFetchData(bool*     pbool,FILE* model_handle,int data_enum){{{1*/
-void  IoModelFetchData(bool* pboolean,FILE* model_handle,int data_enum){
-
-	extern int my_rank;
-	extern int num_procs;
-	FILE* fid=NULL;
-
-	/*output: */
-	bool  boolean;
-	int   code;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(&code,NULL,model_handle,data_enum);
-	
-	if(code!=1)_error_("%s%s","IoModelFetchData expecting a boolean for enum ",EnumToStringx(data_enum));
-	
-	/*We have to read a boolean from disk. */
-	if(my_rank==0){  
-		if(fread(&boolean,sizeof(bool),1,fid)!=1) _error_(" could not read boolean ");
-	}
-
-	MPI_Bcast(&boolean,1,MPI_BYTE,0,MPI_COMM_WORLD); 
-
-	/*Assign output pointers: */
-	*pboolean=boolean;
-
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(int*      pinteger,FILE* model_handle,int data_enum){{{1*/
-void  IoModelFetchData(int* pinteger,FILE* model_handle,int data_enum){
-
-	extern int my_rank;
-	extern int num_procs;
-	FILE* fid=NULL;
-
-	/*output: */
-	int   integer;
-	int   code;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(&code,NULL,model_handle,data_enum);
-	
-	if(code!=2)_error_("%s%s","IoModelFetchData expecting an integer for enum ",EnumToStringx(data_enum));
-	
-	/*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
-	if(my_rank==0){  
-		if(fread(&integer,sizeof(int),1,fid)!=1) _error_(" could not read integer ");
-	}
-
-	MPI_Bcast(&integer,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-	/*Assign output pointers: */
-	*pinteger=integer;
-
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(double*   pscalar,FILE* model_handle,int data_enum){{{1*/
-void  IoModelFetchData(double* pscalar,FILE* model_handle,int data_enum){
-
-
-	extern int my_rank;
-	extern int num_procs;
-	FILE* fid=NULL;
-
-	/*output: */
-	double   scalar;
-	int      code;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(&code,NULL,model_handle,data_enum);
-	
-	if(code!=3)_error_("%s%s","IoModelFetchData expecting a double for enum ",EnumToStringx(data_enum));
-	
-	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
-	if(my_rank==0){
-		if(fread(&scalar,sizeof(double),1,fid)!=1)_error_(" could not read scalar ");
-	}
-	MPI_Bcast(&scalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
-
-	/*Assign output pointers: */
-	*pscalar=scalar;
-		 
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(char**    pstring,FILE* model_handle,int data_enum){{{1*/
-void  IoModelFetchData(char** pstring,FILE* model_handle,int data_enum){
-
-	extern int my_rank;
-	extern int num_procs;
-	FILE* fid=NULL;
-
-	/*output: */
-	char* string=NULL;
-	int   string_size;
-	int code=0;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(&code,NULL,model_handle,data_enum);
-	
-	if(code!=4)_error_("%s%s","IoModelFetchData expecting a string for enum ",EnumToStringx(data_enum));
-	
-	/*Now fetch: */
-	
-	/*We have to read a string from disk. First read the dimensions of the string, then the string: */
-	if(my_rank==0){  
-		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_(" could not read length of string ");
-	}
-
-	MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-	/*Now allocate string: */
-	if(string_size){
-		string=(char*)xmalloc((string_size+1)*sizeof(char));
-		string[string_size]='\0';
-
-		/*Read string on node 0, then broadcast: */
-		if(my_rank==0){  
-			if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_("  could not read string ");
-		}
-		MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
-	}
-	else{
-		string=(char*)xmalloc(sizeof(char));
-		string[0]='\0';
-	}
-
-
-	/*Assign output pointers: */
-	*pstring=string;
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(double**  pdoublematrix,int* pM,int* pN,FILE* model_handle,int data_enum){{{1*/
-void  IoModelFetchData(double** pmatrix,int* pM,int* pN,FILE* model_handle,int data_enum){
-
-	extern int my_rank;
-	extern int num_procs;
-
-	/*output: */
-	int M,N;
-	double* matrix=NULL;
-	int code=0;
-	int vector_type=0;
-	
-	FILE* fid=NULL;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(&code,&vector_type,model_handle,data_enum);
-
-	if((code!=5) && (code!=6) && (code!=7))_error_("%s%s","IoModelFetchData expecting a double, integer or boolean matrix for enum ",EnumToStringx(data_enum));
-	
-	/*Now fetch: */
-
-	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
-	/*numberofelements: */
-	if(my_rank==0){  
-		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
-	}
-
-	MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-	if(my_rank==0){  
-		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
-	}
-	MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-	/*Now allocate matrix: */
-	if(M*N){
-		matrix=(double*)xmalloc(M*N*sizeof(double));
-
-		/*Read matrix on node 0, then broadcast: */
-		if(my_rank==0){  
-			if(fread(matrix,M*N*sizeof(double),1,fid)!=1) _error_("could not read matrix ");
-		}
-		
-		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
-	}
-
-	/*Assign output pointers: */
-	*pmatrix=matrix;
-	if (pM)*pM=M;
-	if (pN)*pN=N;
-
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(char***   pstrings,int* pnumstrings,FILE* model_handle,int data_enum){{{1*/
-void  IoModelFetchData(char*** pstrings,int* pnumstrings,FILE* model_handle,int data_enum){
-
-	extern int my_rank;
-	extern int num_procs;
-	FILE* fid=NULL;
-	int i;
-
-	/*output: */
-	int   numstrings=0;
-	char** strings=NULL;
-	
-	/*intermediary: */
-	char* string=NULL;
-	int   string_size;
-	int   code;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(&code,NULL,model_handle,data_enum);
-	
-	if(code!=9)_error_("%s%s","IoModelFetchData expecting a string array for enum ",EnumToStringx(data_enum));
-	
-	/*We have to read a bunch of strings from disk. First read the number of strings, and allocate: */
-	if(my_rank==0){  
-		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_(" could not read length of string array");
-	}
-	MPI_Bcast(&numstrings,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-	/*Now allocate string array: */
-	if(numstrings){
-		strings=(char**)xmalloc(numstrings*sizeof(char*));
-		for(i=0;i<numstrings;i++)strings[i]=NULL;
-
-		/*Go through strings, and read: */
-		for(i=0;i<numstrings;i++){
-			
-			if(my_rank==0){  
-				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_(" could not read length of string ");
-			}
-			MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
-			if(string_size){
-				string=(char*)xmalloc((string_size+1)*sizeof(char));
-				string[string_size]='\0';
-
-				/*Read string on node 0, then broadcast: */
-				if(my_rank==0){  
-					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_("  could not read string ");
-				}
-				MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
-			}
-			else{
-				string=(char*)xmalloc(sizeof(char));
-				string[0]='\0';
-			}
-
-			strings[i]=string;
-		}
-	}
-
-	/*Assign output pointers: */
-	*pstrings=strings;
-	*pnumstrings=numstrings;
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(double*** pmatrices,int** pmdims,int** pndims, int* pM,FILE* model_handle,int data_enum){{{1*/
-void  IoModelFetchData(double*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,FILE* model_handle,int data_enum){
-
-	int i;
-
-	extern int my_rank;
-	extern int num_procs;
-
-	/*output: */
-	double** matrices=NULL;
-	int*     mdims=NULL;
-	int*     ndims=NULL;
-	int      numrecords=0;
-
-	/*intermediary: */
-	int M,N;
-	double* matrix=NULL;
-	
-	FILE* fid=NULL;
-	int   code;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(&code,NULL,model_handle,data_enum);
-	
-	if(code!=8)_error_("%s%s","IoModelFetchData expecting a double mat  array for enum ",EnumToStringx(data_enum));
-	
-	/*Now fetch: */
-	if(my_rank==0){  
-		if(fread(&numrecords,sizeof(int),1,fid)!=1) _error_("could not read number of records in matrix array ");
-	}
-	MPI_Bcast(&numrecords,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-	if(numrecords){
-
-		/*Allocate matrices :*/
-		matrices=(double**)xmalloc(numrecords*sizeof(double*));
-		mdims=(int*)xmalloc(numrecords*sizeof(int));
-		ndims=(int*)xmalloc(numrecords*sizeof(int));
-
-		for(i=0;i<numrecords;i++){
-			matrices[i]=NULL;
-			mdims[i]=0;
-			ndims[i]=0;
-		}
-
-		/*Loop through records and fetch matrix: */
-		for(i=0;i<numrecords;i++){
-
-			if(my_rank==0){  
-				if(fread(&M,sizeof(int),1,fid)!=1) _error_("%s%i%s","could not read number of rows in ",i,"th matrix of matrix array");
-			}
-			MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-			if(my_rank==0){  
-				if(fread(&N,sizeof(int),1,fid)!=1) _error_("%s%i%s","could not read number of columns in ",i,"th matrix of matrix array");
-			}
-			MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-			/*Now allocate matrix: */
-			if(M*N){
-				matrix=(double*)xmalloc(M*N*sizeof(double));
-
-				/*Read matrix on node 0, then broadcast: */
-				if(my_rank==0){  
-					if(fread(matrix,M*N*sizeof(double),1,fid)!=1) _error_("could not read matrix ");
-				}
-
-				MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
-			}
-
-			/*Assign: */
-			matrices[i]=matrix;
-			mdims[i]=M;
-			ndims[i]=N;
-		}
-	}
-
-	/*Assign output pointers: */
-	*pmatrices=matrices;
-	*pmdims=mdims;
-	*pndims=ndims;
-	*pnumrecords=numrecords;
-}
-/*}}}*/
-
-/*FUNCTION SetFilePointerToData(int* pcode,int* pvector_type, FILE* model_handle,int data_enum){{{1*/
-FILE* SetFilePointerToData(int* pcode,int* pvector_type, FILE* model_handle,int data_enum){
-
-	extern int my_rank;
-	extern int num_procs;
-	
-	FILE* fid=NULL;
-	int found=0;
-	int record_enum;
-	int record_length;
-	int record_code; //1 to 7 number
-	int vector_type; //nodal or elementary
- 
-	/*Go find in the binary file, the position of the data we want to fetch: */
-	if(my_rank==0){
-	
-		/*First set FILE* position to the beginning of the file: */
-		fid=(FILE*)model_handle;
-		fseek(fid,0,SEEK_SET);
-
-		/*Now march through file looking for the correct data identifier: */
-		for(;;){
-			/*Read enum for this size of first string name: */
-			if(fread(&record_enum,sizeof(int),1,fid)==0){
-				/*Ok, we have reached the end of the file. break: */
-				found=0;
-				break;
-			}
-			
-			/*Is this the record sought for? : */
-			if (data_enum==record_enum){
-				/*Ok, we have found the correct string. Pass the record length, and read data type code: */
-				fseek(fid,sizeof(int),SEEK_CUR);
-				fread(&record_code,sizeof(int),1,fid);
-
-				/*if record_code points to a vector, get its type (nodal or elementary): */
-				if(5<=record_code && record_code<=7)fread(&vector_type,sizeof(int),1,fid);
-				found=1;
-				break;
-			}
-			else{
-				/*This is not the correct string, read the record length, and use it to skip this record: */
-				fread(&record_length,sizeof(int),1,fid);
-				/*skip: */
-				fseek(fid,record_length,SEEK_CUR);
-			}
-		}
-	}
-	MPI_Bcast(&found,1,MPI_INT,0,MPI_COMM_WORLD); 
-	if(!found)_error_("%s %s ","could not find data with name",EnumToStringx(data_enum));
-
-	/*Broadcast code and vector type: */
-	MPI_Bcast(&record_code,1,MPI_INT,0,MPI_COMM_WORLD); 
-	MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
-	if(record_code==5) MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
-
-	/*Assign output pointers:*/
-	*pcode=record_code;
-	if(pvector_type)*pvector_type=vector_type;
-
-	return fid;
-}
-/*}}}*/
Index: /issm/trunk/src/c/io/Disk/diskio.h
===================================================================
--- /issm/trunk/src/c/io/Disk/diskio.h	(revision 9339)
+++ /issm/trunk/src/c/io/Disk/diskio.h	(revision 9340)
@@ -16,13 +16,3 @@
 void  pfclose(FILE* fid,char* filename);
 
-void  IoModelFetchData(bool*     pboolean,FILE* model_handle,int data_enum);
-void  IoModelFetchData(int*      pinteger,FILE* model_handle,int data_enum);
-void  IoModelFetchData(double*   pscalar,FILE* model_handle,int data_enum);
-void  IoModelFetchData(char**    pstring,FILE* model_handle,int data_enum);
-void  IoModelFetchData(double**  pscalarmatrix,int* pM,int* pN,FILE* model_handle,int data_enum);
-void  IoModelFetchData(char***   pstringarray,int* pnumstrings,FILE* model_handle,int data_enum);
-void  IoModelFetchData(double*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,FILE* model_handle,int data_enum);
-
-FILE* SetFilePointerToData(int* pcode,int* pvector_type, FILE* model_handle,int data_enum);
-
 #endif	/* _IO_H_ */
Index: /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 9340)
@@ -10,5 +10,5 @@
 #include "../../EnumDefinitions/EnumDefinitions.h"
 
-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,FILE* iomodel_handle,int vector_enum,int analysis_type){
+void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type){
 	
 
@@ -33,5 +33,5 @@
 
 	/*First of, find the record for the enum, and get code  of data type: */
-	fid=SetFilePointerToData(&code, &vector_layout,iomodel_handle,vector_enum);
+	fid=iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
 
 	if(code!=7)_error_("%s%s"," expecting a double vector for constraints with enum ",EnumToStringx(vector_enum));
@@ -39,5 +39,5 @@
 
 	/*Fetch vector:*/
-	IoModelFetchData(&doublevector,&M,&N,iomodel_handle,vector_enum);
+	iomodel->FetchData(&doublevector,&M,&N,vector_enum);
 
 	/*Transient or static?:*/
Index: /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h
===================================================================
--- /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 9339)
+++ /issm/trunk/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 9340)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,FILE* iomodel_handle,int vector_enum,int analysis_type);
+void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type);
 
 #endif  /* _IOMODELTOELEMENTINPUTX_H */
Index: /issm/trunk/src/c/modules/IoModelToInputsx/IoModelToInputsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/IoModelToInputsx/IoModelToInputsx.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/IoModelToInputsx/IoModelToInputsx.cpp	(revision 9340)
@@ -10,5 +10,5 @@
 #include "../../EnumDefinitions/EnumDefinitions.h"
 
-void IoModelToInputsx(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int vector_enum,int default_vector_enum,double default_value){
+void IoModelToInputsx(Elements* elements,IoModel* iomodel,int vector_enum,int default_vector_enum,double default_value){
 	
 
@@ -35,9 +35,9 @@
 
 	/*First of, find the record for the enum, and get code  of data type: */
-	fid=SetFilePointerToData(&code, &vector_layout,iomodel_handle,vector_enum);
+	fid=iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
 
 	switch(code){
 		case 1: //boolean constant.  {{{1
-			IoModelFetchData(&boolean,iomodel_handle,vector_enum);
+			iomodel->FetchData(&boolean,vector_enum);
 
 			/*Add boolean constant input to all elements: */
@@ -52,5 +52,5 @@
 			break; /*}}}*/
 		case 2: //integer constant.  {{{1
-			IoModelFetchData(&integer,iomodel_handle,vector_enum);
+			iomodel->FetchData(&integer,vector_enum);
 
 			/*Add integer constant input to all elements: */
@@ -65,5 +65,5 @@
 			break; /*}}}*/
 		case 3: //double constant.  {{{1
-			IoModelFetchData(&scalar,iomodel_handle,vector_enum);
+			iomodel->FetchData(&scalar,vector_enum);
 
 			/*Add double constant input to all elements: */
@@ -80,5 +80,5 @@
 
 			/*Fetch vector:*/
-			IoModelFetchData(&doublevector,&M,&N,iomodel_handle,vector_enum); //we still have a doublevector, because it might include times in transient mode
+			iomodel->FetchData(&doublevector,&M,&N,vector_enum); //we still have a doublevector, because it might include times in transient mode
 			/*Check we got something, otherwise fetch default: */
 			if(doublevector){ 
@@ -89,5 +89,5 @@
 				if(default_vector_enum!=NoneEnum){
 					/*yes. fetch it: */
-					IoModelFetchData(&doublevector,&M,&N,iomodel_handle,default_vector_enum);
+					iomodel->FetchData(&doublevector,&M,&N,default_vector_enum);
 					if(doublevector){
 						defaulting=false;  //we are not defaulting, because  we do have a vector
@@ -118,5 +118,5 @@
 
 			/*Fetch vector:*/
-			IoModelFetchData(&doublevector,&M,&N,iomodel_handle,vector_enum); //we still have a doublevector, because it might include times in transient mode
+			iomodel->FetchData(&doublevector,&M,&N,vector_enum); //we still have a doublevector, because it might include times in transient mode
 			/*Check we got something, otherwise fetch default: */
 			if(doublevector){ 
@@ -127,5 +127,5 @@
 				if(default_vector_enum!=NoneEnum){
 					/*yes. fetch it: */
-					IoModelFetchData(&doublevector,&M,&N,iomodel_handle,default_vector_enum);
+					iomodel->FetchData(&doublevector,&M,&N,default_vector_enum);
 					if(doublevector){
 						defaulting=false;  //we are not defaulting, because  we do have a vector
@@ -156,5 +156,5 @@
 
 			/*Fetch vector:*/
-			IoModelFetchData(&doublevector,&M,&N,iomodel_handle,vector_enum);
+			iomodel->FetchData(&doublevector,&M,&N,vector_enum);
 			/*Check we got something, otherwise fetch default: */
 			if(doublevector){ 
@@ -165,5 +165,5 @@
 				if(default_vector_enum!=NoneEnum){
 					/*yes. fetch it: */
-					IoModelFetchData(&doublevector,&M,&N,iomodel_handle,default_vector_enum);
+					iomodel->FetchData(&doublevector,&M,&N,default_vector_enum);
 					if(doublevector){
 						defaulting=false;  //we are not defaulting, because  we do have a vector
Index: /issm/trunk/src/c/modules/IoModelToInputsx/IoModelToInputsx.h
===================================================================
--- /issm/trunk/src/c/modules/IoModelToInputsx/IoModelToInputsx.h	(revision 9339)
+++ /issm/trunk/src/c/modules/IoModelToInputsx/IoModelToInputsx.h	(revision 9340)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void IoModelToInputsx(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int vector_enum,int default_vector_enum=NoneEnum,double default_value=0);
+void IoModelToInputsx(Elements* elements,IoModel* iomodel,int vector_enum,int default_vector_enum=NoneEnum,double default_value=0);
 
 #endif  /* _IOMODELTOELEMENTINPUTX_H */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 9340)
@@ -8,5 +8,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Output*/
@@ -21,5 +21,5 @@
 	/*Do not add constraints in DG*/
 	if(!iomodel->prognostic_DG){
-		IoModelToConstraintsx(constraints,iomodel,iomodel_handle,SpcthicknessEnum,BalancethicknessAnalysisEnum);
+		IoModelToConstraintsx(constraints,iomodel,SpcthicknessEnum,BalancethicknessAnalysisEnum);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -30,7 +30,7 @@
 
 		/*Get edges and elements*/
-		IoModelFetchData(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel_handle,EdgesEnum);
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,ThicknessEnum);
+		iomodel->FetchData(&iomodel->edges,&iomodel->numberofedges,NULL,EdgesEnum);
+		iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+		iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
 
 		/*First load data:*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesBalancethickness(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesBalancethickness(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -33,5 +33,5 @@
 	/*Continuous Galerkin partition of nodes: */
 	if(iomodel->prognostic_DG) continuous_galerkin=false;
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*Check in 3d*/
@@ -39,11 +39,11 @@
 
 	/*First fetch data: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	if(continuous_galerkin){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9340)
@@ -14,8 +14,8 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -29,20 +29,20 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BasalMeltingRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAccumulationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAblationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceMassBalanceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DhdtEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,VxEnum);
+	IoModelToInputsx(elements,iomodel,VyEnum);
+	IoModelToInputsx(elements,iomodel,BasalMeltingRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAccumulationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAblationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceMassBalanceEnum);
+	IoModelToInputsx(elements,iomodel,DhdtEnum);
 
 	if (iomodel->dim==3){
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
 	}
 	/*Free data: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsBedSlope(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsBedSlope(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Output*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,13 +29,13 @@
 	
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 	
 	/*First fetch data: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 9340)
@@ -14,8 +14,8 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsBedSlope(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsBedSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -29,11 +29,11 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
 
 	if (iomodel->dim==3){
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
 	}
 	
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9340)
@@ -12,5 +12,5 @@
 #include "../ModelProcessorx.h"
 
-void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,int solution_type,int analysis_type){
+void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
 	
 	int i;
@@ -28,5 +28,5 @@
 
 		/*What control type?*/
-		IoModelFetchData(&iomodel->control_type,NULL,NULL,iomodel_handle,ControlTypeEnum);
+		iomodel->FetchData(&iomodel->control_type,NULL,NULL,ControlTypeEnum);
 		parameters->AddObject(new IntVecParam(ControlTypeEnum,iomodel->control_type,iomodel->num_control_type));
 		xfree((void**)&iomodel->control_type);
@@ -47,8 +47,8 @@
 
 		/*Now, recover fit, optscal and maxiter as vectors: */
-		IoModelFetchData(&iomodel->cm_responses,NULL,NULL,iomodel_handle,CmResponsesEnum);
-		IoModelFetchData(&iomodel->cm_jump,NULL,NULL,iomodel_handle,CmJumpEnum);
-		IoModelFetchData(&iomodel->optscal,NULL,NULL,iomodel_handle,OptscalEnum);
-		IoModelFetchData(&iomodel->maxiter,NULL,NULL,iomodel_handle,MaxiterEnum);
+		iomodel->FetchData(&iomodel->cm_responses,NULL,NULL,CmResponsesEnum);
+		iomodel->FetchData(&iomodel->cm_jump,NULL,NULL,CmJumpEnum);
+		iomodel->FetchData(&iomodel->optscal,NULL,NULL,OptscalEnum);
+		iomodel->FetchData(&iomodel->maxiter,NULL,NULL,MaxiterEnum);
 
 		parameters->AddObject(new DoubleMatParam(OptscalEnum,iomodel->optscal,iomodel->nsteps,iomodel->num_control_type));
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel,FILE* iomodel_handle){
+void	UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -26,30 +26,30 @@
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxObsEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyObsEnum); 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessObsEnum);
+	IoModelToInputsx(elements,iomodel,VxObsEnum);
+	IoModelToInputsx(elements,iomodel,VyObsEnum); 
+	IoModelToInputsx(elements,iomodel,ThicknessObsEnum);
 
-	IoModelFetchData(&iomodel->control_type,NULL,NULL,iomodel_handle,ControlTypeEnum);
-	IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,WeightsEnum);
-	IoModelFetchData(&iomodel->cm_min,NULL,NULL,iomodel_handle,CmMinEnum);
-	IoModelFetchData(&iomodel->cm_max,NULL,NULL,iomodel_handle,CmMaxEnum);
+	iomodel->FetchData(&iomodel->control_type,NULL,NULL,ControlTypeEnum);
+	iomodel->FetchData(&iomodel->weights,NULL,NULL,WeightsEnum);
+	iomodel->FetchData(&iomodel->cm_min,NULL,NULL,CmMinEnum);
+	iomodel->FetchData(&iomodel->cm_max,NULL,NULL,CmMaxEnum);
 	for(i=0;i<iomodel->num_control_type;i++){
 		switch((int)iomodel->control_type[i]){
 			case DhdtEnum:
-				IoModelFetchData(&iomodel->dhdt,NULL,NULL,iomodel_handle,DhdtEnum);
+				iomodel->FetchData(&iomodel->dhdt,NULL,NULL,DhdtEnum);
 				break;
 			case VxEnum:
-				IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,VxEnum);
+				iomodel->FetchData(&iomodel->vx,NULL,NULL,VxEnum);
 				break;
 			case VyEnum:
-				IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,VyEnum);
+				iomodel->FetchData(&iomodel->vy,NULL,NULL,VyEnum);
 				break;
 			case DragCoefficientEnum:
-				IoModelFetchData(&iomodel->drag_coefficient,NULL,NULL,iomodel_handle,DragCoefficientEnum);
+				iomodel->FetchData(&iomodel->drag_coefficient,NULL,NULL,DragCoefficientEnum);
 				break;
 			case RheologyBbarEnum:
-				IoModelFetchData(&iomodel->rheology_B,NULL,NULL,iomodel_handle,RheologyBEnum);
+				iomodel->FetchData(&iomodel->rheology_B,NULL,NULL,RheologyBEnum);
 				break;
 			default:
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 9340)
@@ -16,5 +16,5 @@
 
 
-void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
+void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
 
 	bool        continuous = true;
@@ -24,5 +24,5 @@
 			
 	/*Create elements, vertices and materials, independent of analysis_type: */
-	CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,iomodel_handle,nummodels);
+	CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,nummodels);
 
 	/*Recover elements and materials, for future update: */
@@ -33,78 +33,78 @@
 	switch(analysis_type){
 		case DiagnosticHorizAnalysisEnum:
-			CreateNodesDiagnosticHoriz(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsDiagnosticHoriz(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsDiagnosticHoriz(ploads,iomodel,iomodel_handle);
-			UpdateElementsDiagnosticHoriz(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesDiagnosticHoriz(pnodes, iomodel);
+			CreateConstraintsDiagnosticHoriz(pconstraints,iomodel);
+			CreateLoadsDiagnosticHoriz(ploads,iomodel);
+			UpdateElementsDiagnosticHoriz(elements,iomodel,analysis_counter,analysis_type);
 			break;
 		
 		case DiagnosticVertAnalysisEnum:
-			CreateNodesDiagnosticVert(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsDiagnosticVert(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsDiagnosticVert(ploads,iomodel,iomodel_handle);
-			UpdateElementsDiagnosticVert(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesDiagnosticVert(pnodes, iomodel);
+			CreateConstraintsDiagnosticVert(pconstraints,iomodel);
+			CreateLoadsDiagnosticVert(ploads,iomodel);
+			UpdateElementsDiagnosticVert(elements,iomodel,analysis_counter,analysis_type);
 			break;
 	
 		case DiagnosticHutterAnalysisEnum:
-			CreateNodesDiagnosticHutter(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsDiagnosticHutter(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsDiagnosticHutter(ploads,iomodel,iomodel_handle);
-			UpdateElementsDiagnosticHutter(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesDiagnosticHutter(pnodes, iomodel);
+			CreateConstraintsDiagnosticHutter(pconstraints,iomodel);
+			CreateLoadsDiagnosticHutter(ploads,iomodel);
+			UpdateElementsDiagnosticHutter(elements,iomodel,analysis_counter,analysis_type);
 			break;
 
 		case BedSlopeAnalysisEnum:
-			CreateNodesBedSlope(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsBedSlope(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsBedSlope(ploads,iomodel,iomodel_handle);
-			UpdateElementsBedSlope(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesBedSlope(pnodes, iomodel);
+			CreateConstraintsBedSlope(pconstraints,iomodel);
+			CreateLoadsBedSlope(ploads,iomodel);
+			UpdateElementsBedSlope(elements,iomodel,analysis_counter,analysis_type);
 			break;
 
 		case SurfaceSlopeAnalysisEnum:
-			CreateNodesSurfaceSlope(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsSurfaceSlope(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsSurfaceSlope(ploads,iomodel,iomodel_handle);
-			UpdateElementsSurfaceSlope(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesSurfaceSlope(pnodes, iomodel);
+			CreateConstraintsSurfaceSlope(pconstraints,iomodel);
+			CreateLoadsSurfaceSlope(ploads,iomodel);
+			UpdateElementsSurfaceSlope(elements,iomodel,analysis_counter,analysis_type);
 			break;
 
 		case ThermalAnalysisEnum:
-			CreateNodesThermal(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsThermal(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsThermal(ploads,iomodel,iomodel_handle);
-			UpdateElementsThermal(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesThermal(pnodes, iomodel);
+			CreateConstraintsThermal(pconstraints,iomodel);
+			CreateLoadsThermal(ploads,iomodel);
+			UpdateElementsThermal(elements,iomodel,analysis_counter,analysis_type);
 			break;
 		
 		case EnthalpyAnalysisEnum:
-			CreateNodesEnthalpy(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsEnthalpy(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsEnthalpy(ploads,iomodel,iomodel_handle);
-			UpdateElementsEnthalpy(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesEnthalpy(pnodes, iomodel);
+			CreateConstraintsEnthalpy(pconstraints,iomodel);
+			CreateLoadsEnthalpy(ploads,iomodel);
+			UpdateElementsEnthalpy(elements,iomodel,analysis_counter,analysis_type);
 			break;
 		
 		case HydrologyAnalysisEnum:
-			CreateNodesHydrology(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsHydrology(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsHydrology(ploads,iomodel,iomodel_handle);
-			UpdateElementsHydrology(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesHydrology(pnodes, iomodel);
+			CreateConstraintsHydrology(pconstraints,iomodel);
+			CreateLoadsHydrology(ploads,iomodel);
+			UpdateElementsHydrology(elements,iomodel,analysis_counter,analysis_type);
 			break;
 
 		case MeltingAnalysisEnum:
-			CreateNodesMelting(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsMelting(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsMelting(ploads,iomodel,iomodel_handle);
-			UpdateElementsMelting(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesMelting(pnodes, iomodel);
+			CreateConstraintsMelting(pconstraints,iomodel);
+			CreateLoadsMelting(ploads,iomodel);
+			UpdateElementsMelting(elements,iomodel,analysis_counter,analysis_type);
 			break;
 
 		case PrognosticAnalysisEnum:
-			CreateNodesPrognostic(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsPrognostic(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsPrognostic(ploads,iomodel,iomodel_handle);
-			UpdateElementsPrognostic(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesPrognostic(pnodes, iomodel);
+			CreateConstraintsPrognostic(pconstraints,iomodel);
+			CreateLoadsPrognostic(ploads,iomodel);
+			UpdateElementsPrognostic(elements,iomodel,analysis_counter,analysis_type);
 			break;
 
 		case BalancethicknessAnalysisEnum:
-			CreateNodesBalancethickness(pnodes, iomodel,iomodel_handle);
-			CreateConstraintsBalancethickness(pconstraints,iomodel,iomodel_handle);
-			CreateLoadsBalancethickness(ploads,iomodel,iomodel_handle);
-			UpdateElementsBalancethickness(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+			CreateNodesBalancethickness(pnodes, iomodel);
+			CreateConstraintsBalancethickness(pconstraints,iomodel);
+			CreateLoadsBalancethickness(ploads,iomodel);
+			UpdateElementsBalancethickness(elements,iomodel,analysis_counter,analysis_type);
 			break;
 
@@ -114,13 +114,13 @@
 
 	/*Update Elements and Materials For Control methods*/
-	UpdateElementsAndMaterialsControl(elements,materials,iomodel,iomodel_handle);
+	UpdateElementsAndMaterialsControl(elements,materials,iomodel);
 
 	/*Generate objects that are not dependent on any analysis_type: */
-	CreateParameters(pparameters,iomodel,iomodel_handle,solution_type,analysis_type,analysis_counter);
+	CreateParameters(pparameters,iomodel,solution_type,analysis_type,analysis_counter);
 
 	/*Update Elements in case we are running a transient solution: */
 	parameters=*pparameters;
 	if(analysis_counter==(nummodels-1)&& solution_type==TransientSolutionEnum){
-		UpdateElementsTransient(elements,parameters,iomodel,iomodel_handle,analysis_counter,analysis_type);
+		UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_type);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "./ModelProcessorx.h"
 
-void	CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,FILE* iomodel_handle,const int nummodels){
+void	CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels){
 
 	/*Intermediary*/
@@ -32,16 +32,16 @@
 	
 	/*First, partition elements and vertices. Nodes will partitioned on a per analysis_type basis. If partitining already done, ignore: */
-	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel,iomodel_handle);
+	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
 	
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-	IoModelFetchData(&iomodel->elementconnectivity,NULL,NULL,iomodel_handle,ElementconnectivityEnum);
-	IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,UpperelementsEnum);
-	IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,LowerelementsEnum);
-	IoModelFetchData(&iomodel->rheology_B,NULL,NULL,iomodel_handle,RheologyBEnum);
-	IoModelFetchData(&iomodel->rheology_n,NULL,NULL,iomodel_handle,RheologyNEnum);
-	IoModelFetchData(&iomodel->control_type,NULL,NULL,iomodel_handle,ControlTypeEnum);
-	IoModelFetchData(&iomodel->cm_min,NULL,NULL,iomodel_handle,CmMinEnum);
-	IoModelFetchData(&iomodel->cm_max,NULL,NULL,iomodel_handle,CmMaxEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&iomodel->elementconnectivity,NULL,NULL,ElementconnectivityEnum);
+	iomodel->FetchData(&iomodel->upperelements,NULL,NULL,UpperelementsEnum);
+	iomodel->FetchData(&iomodel->lowerelements,NULL,NULL,LowerelementsEnum);
+	iomodel->FetchData(&iomodel->rheology_B,NULL,NULL,RheologyBEnum);
+	iomodel->FetchData(&iomodel->rheology_n,NULL,NULL,RheologyNEnum);
+	iomodel->FetchData(&iomodel->control_type,NULL,NULL,ControlTypeEnum);
+	iomodel->FetchData(&iomodel->cm_min,NULL,NULL,CmMinEnum);
+	iomodel->FetchData(&iomodel->cm_max,NULL,NULL,CmMaxEnum);
 	
 	/*Create elements and materials: */
@@ -76,9 +76,9 @@
 	
 	/*Create vertices: */
-	IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,XEnum);
-	IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,YEnum);
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,ZEnum);
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,BedEnum);
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,ThicknessEnum);
+	iomodel->FetchData(&iomodel->x,NULL,NULL,XEnum);
+	iomodel->FetchData(&iomodel->y,NULL,NULL,YEnum);
+	iomodel->FetchData(&iomodel->z,NULL,NULL,ZEnum);
+	iomodel->FetchData(&iomodel->bed,NULL,NULL,BedEnum);
+	iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
 	
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 9340)
@@ -12,5 +12,5 @@
 #include "./ModelProcessorx.h"
 
-void CreateParameters(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,const int solution_type,int analysis_type,int analysis_counter){
+void CreateParameters(Parameters** pparameters,IoModel* iomodel,const int solution_type,int analysis_type,int analysis_counter){
 	
 	int i;
@@ -77,5 +77,5 @@
 
 	/*Deal with more complex parameters*/
-	IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,RiftinfoEnum);
+	iomodel->FetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,RiftinfoEnum);
 	parameters->AddObject(new IntParam(NumRiftsEnum,iomodel->numrifts));
 	xfree((void**)&iomodel->riftinfo); 
@@ -83,5 +83,5 @@
 
 	/*Requested output?*/
-	IoModelFetchData(&requestedoutputs,&numoutputs,NULL,iomodel_handle,RequestedOutputsEnum);
+	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,RequestedOutputsEnum);
 	parameters->AddObject(new IntParam(NumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new IntVecParam(RequestedOutputsEnum,requestedoutputs,numoutputs));
@@ -89,6 +89,6 @@
 	
 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
-	CreateParametersControl(&parameters,iomodel,iomodel_handle,solution_type,analysis_type);
-	CreateParametersQmu(&parameters,iomodel,iomodel_handle,solution_type,analysis_type);
+	CreateParametersControl(&parameters,iomodel,solution_type,analysis_type);
+	CreateParametersQmu(&parameters,iomodel,solution_type,analysis_type);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -32,14 +32,14 @@
 	
 	/*Constraints: fetch data: */
-	IoModelFetchData(&iomodel->spcvx,NULL,NULL,iomodel_handle,SpcvxEnum);
-	IoModelFetchData(&iomodel->spcvy,NULL,NULL,iomodel_handle,SpcvyEnum);
-	IoModelFetchData(&iomodel->spcvz,NULL,NULL,iomodel_handle,SpcvzEnum);
-	IoModelFetchData(&iomodel->nodeonhutter,NULL,NULL,iomodel_handle,NodeOnHutterEnum);
-	IoModelFetchData(&iomodel->nodeonmacayeal,NULL,NULL,iomodel_handle,NodeOnMacayealEnum);
-	if(iomodel->dim==3)IoModelFetchData(&iomodel->nodeonpattyn,NULL,NULL,iomodel_handle,NodeOnPattynEnum);
-	if(iomodel->dim==3)IoModelFetchData(&iomodel->nodeonstokes,NULL,NULL,iomodel_handle,NodeOnStokesEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,SurfaceEnum);
-	IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,ZEnum);
+	iomodel->FetchData(&iomodel->spcvx,NULL,NULL,SpcvxEnum);
+	iomodel->FetchData(&iomodel->spcvy,NULL,NULL,SpcvyEnum);
+	iomodel->FetchData(&iomodel->spcvz,NULL,NULL,SpcvzEnum);
+	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
+	iomodel->FetchData(&iomodel->nodeonmacayeal,NULL,NULL,NodeOnMacayealEnum);
+	if(iomodel->dim==3)iomodel->FetchData(&iomodel->nodeonpattyn,NULL,NULL,NodeOnPattynEnum);
+	if(iomodel->dim==3)iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->surface,NULL,NULL,SurfaceEnum);
+	iomodel->FetchData(&iomodel->z,NULL,NULL,ZEnum);
 
 	/*Initialize counter: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel){
 
 	/*DataSets*/
@@ -37,8 +37,8 @@
 	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the nodes
 	 * referenced by a certain load must belong to the cluster node): */
-	IoModelFetchData(&iomodel->pressureload,&iomodel->numberofpressureloads,NULL,iomodel_handle,PressureloadEnum);
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,ElementsTypeEnum);
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,ThicknessEnum);
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,BedEnum);
+	iomodel->FetchData(&iomodel->pressureload,&iomodel->numberofpressureloads,NULL,PressureloadEnum);
+	iomodel->FetchData(&iomodel->elements_type,NULL,NULL,ElementsTypeEnum);
+	iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
+	iomodel->FetchData(&iomodel->bed,NULL,NULL,BedEnum);
 
 	/*Initialize counter: */
@@ -103,12 +103,12 @@
 
 	/*create penalties for nodes on the base of icesheet. We must have wb=ub*db/dx+vb*db/dy */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeonstokes,NULL,NULL,iomodel_handle,NodeOnStokesEnum);
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-	IoModelFetchData(&iomodel->spcvx,NULL,NULL,iomodel_handle,SpcvxEnum);
-	IoModelFetchData(&iomodel->spcvy,NULL,NULL,iomodel_handle,SpcvyEnum);
-	IoModelFetchData(&iomodel->spcvz,NULL,NULL,iomodel_handle,SpcvzEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&iomodel->spcvx,NULL,NULL,SpcvxEnum);
+	iomodel->FetchData(&iomodel->spcvy,NULL,NULL,SpcvyEnum);
+	iomodel->FetchData(&iomodel->spcvz,NULL,NULL,SpcvzEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
 	CreateSingleNodeToElementConnectivity(iomodel);
 	
@@ -137,5 +137,5 @@
 
 	/*Create Penpair for penalties: */
-	IoModelFetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,iomodel_handle,PenaltiesEnum);
+	iomodel->FetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,PenaltiesEnum);
 	
 	for(i=0;i<iomodel->numpenalties;i++){
@@ -160,9 +160,9 @@
 
 	/*Create Riffront loads for rifts: */
-	IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,RiftinfoEnum);
-	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,ThicknessEnum);
-	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,BedEnum);
-	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,SurfaceEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,RiftinfoEnum);
+	iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
+	iomodel->FetchData(&iomodel->bed,NULL,NULL,BedEnum);
+	iomodel->FetchData(&iomodel->surface,NULL,NULL,SurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
 
 	
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -32,17 +32,17 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*Create nodes: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonhutter,NULL,NULL,iomodel_handle,NodeOnHutterEnum);
-	IoModelFetchData(&iomodel->nodeonmacayeal,NULL,NULL,iomodel_handle,NodeOnMacayealEnum);
-	IoModelFetchData(&iomodel->nodeonstokes,NULL,NULL,iomodel_handle,NodeOnStokesEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->diagnostic_ref,NULL,NULL,iomodel_handle,DiagnosticRefEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
+	iomodel->FetchData(&iomodel->nodeonmacayeal,NULL,NULL,NodeOnMacayealEnum);
+	iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->diagnostic_ref,NULL,NULL,DiagnosticRefEnum);
 	
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
@@ -20,6 +20,6 @@
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,ElementsTypeEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements_type,NULL,NULL,ElementsTypeEnum);
 
 	/*Update elements: */
@@ -34,34 +34,34 @@
 
 	/*Create inputs: */
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessCoeffEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragCoefficientEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragPEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragQEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragTypeEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyBEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyNEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxEnum,VxObsEnum,0);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyEnum,VyObsEnum,0);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BathymetryEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessCoeffEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,DragCoefficientEnum);
+	IoModelToInputsx(elements,iomodel,DragPEnum);
+	IoModelToInputsx(elements,iomodel,DragQEnum);
+	IoModelToInputsx(elements,iomodel,DragTypeEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,RheologyBEnum);
+	IoModelToInputsx(elements,iomodel,RheologyNEnum);
+	IoModelToInputsx(elements,iomodel,VxEnum,VxObsEnum,0);
+	IoModelToInputsx(elements,iomodel,VyEnum,VyObsEnum,0);
+	IoModelToInputsx(elements,iomodel,BathymetryEnum);
 
 	if (iomodel->dim==3){
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,VzEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAccumulationRateEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAblationRateEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceMassBalanceEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,BasalMeltingRateEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,NodeOnStokesEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
+		IoModelToInputsx(elements,iomodel,VzEnum);
+		IoModelToInputsx(elements,iomodel,SurfaceAccumulationRateEnum);
+		IoModelToInputsx(elements,iomodel,SurfaceAblationRateEnum);
+		IoModelToInputsx(elements,iomodel,SurfaceMassBalanceEnum);
+		IoModelToInputsx(elements,iomodel,BasalMeltingRateEnum);
+		IoModelToInputsx(elements,iomodel,NodeOnStokesEnum);
 	}
 
 	if(iomodel->control_analysis){
-		IoModelToInputsx(elements,iomodel,iomodel_handle,VxObsEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,VyObsEnum);
+		IoModelToInputsx(elements,iomodel,VxObsEnum);
+		IoModelToInputsx(elements,iomodel,VyObsEnum);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -31,7 +31,7 @@
 
 	/*Fetch data: */
-	IoModelFetchData(&iomodel->spcvx,NULL,NULL,iomodel_handle,SpcvxEnum);
-	IoModelFetchData(&iomodel->spcvy,NULL,NULL,iomodel_handle,SpcvyEnum);
-	IoModelFetchData(&iomodel->nodeonhutter,NULL,NULL,iomodel_handle,NodeOnHutterEnum);
+	iomodel->FetchData(&iomodel->spcvx,NULL,NULL,SpcvxEnum);
+	iomodel->FetchData(&iomodel->spcvy,NULL,NULL,SpcvyEnum);
+	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
 
 	/*Initialize conunter*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -32,15 +32,15 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*First fetch data: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonhutter,NULL,NULL,iomodel_handle,NodeOnHutterEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonhutter,NULL,NULL,NodeOnHutterEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	CreateNumberNodeToElementConnectivity(iomodel);
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Now, is the flag hutter on? otherwise, do nothing: */
@@ -20,6 +20,6 @@
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,ElementsTypeEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements_type,NULL,NULL,ElementsTypeEnum);
 
 	/*Update elements: */
@@ -33,7 +33,7 @@
 	}
 	
-	IoModelToInputsx(elements,iomodel,iomodel_handle,NodeOnHutterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessCoeffEnum);
+	IoModelToInputsx(elements,iomodel,NodeOnHutterEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessCoeffEnum);
 	
 	/*Free data: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsDiagnosticVert(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsDiagnosticVert(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -30,6 +30,6 @@
 
 	/*Fetch data: */
-	IoModelFetchData(&iomodel->spcvz,NULL,NULL,iomodel_handle,SpcvzEnum);
-	IoModelFetchData(&iomodel->nodeonstokes,NULL,NULL,iomodel_handle,NodeOnStokesEnum);
+	iomodel->FetchData(&iomodel->spcvz,NULL,NULL,SpcvzEnum);
+	iomodel->FetchData(&iomodel->nodeonstokes,NULL,NULL,NodeOnStokesEnum);
 
 	/*Initialize counter*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -32,13 +32,13 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 	
 	/*First fetch data: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsDiagnosticVert(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsDiagnosticVert(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -20,5 +20,5 @@
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -32,18 +32,18 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessCoeffEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BasalMeltingRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAccumulationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAblationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceMassBalanceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessCoeffEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,BasalMeltingRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAccumulationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAblationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceMassBalanceEnum);
+	IoModelToInputsx(elements,iomodel,VxEnum);
+	IoModelToInputsx(elements,iomodel,VyEnum);
 
 	/*Free data: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 9340)
@@ -18,5 +18,5 @@
 #include "../ModelProcessorx/ModelProcessorx.h"
 
-void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel, FILE* iomodel_handle){
+void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel){
 
 	int i;
@@ -46,9 +46,9 @@
 	if(iomodel->dim==2){
 		/*load elements: */
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+		iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	}
 	else{
 		/*load elements2d: */
-		IoModelFetchData(&iomodel->elements2d,NULL,NULL,iomodel_handle,Elements2DEnum);
+		iomodel->FetchData(&iomodel->elements2d,NULL,NULL,Elements2DEnum);
 	}
 
@@ -65,5 +65,5 @@
 
 	/*Deal with rifts, they have to be included into one partition only, not several: */
-	IoModelFetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,iomodel_handle,RiftinfoEnum);
+	iomodel->FetchData(&iomodel->riftinfo,&iomodel->numrifts,NULL,RiftinfoEnum);
 
 	for(i=0;i<iomodel->numrifts;i++){
@@ -81,5 +81,5 @@
 
 	/*Start figuring out, out of the partition, which elements belong to this cpu: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	for (i=0;i<iomodel->numberofelements;i++){
 
@@ -110,5 +110,5 @@
 	 * penpair has 2 nodes that are poointing toward 2 vertices.
 	 * The 2 vertices must be in the same cpu as the penpair*/
-	IoModelFetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,iomodel_handle,PenaltiesEnum);
+	iomodel->FetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,PenaltiesEnum);
 	for(i=0;i<iomodel->numpenalties;i++){
 		if(my_vertices[(int)iomodel->penalties[2*i+0]-1] && !my_vertices[(int)iomodel->penalties[2*i+1]-1]){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsEnthalpy(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsEnthalpy(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -31,5 +31,5 @@
 
 	/*Fetch data: */
-	IoModelFetchData(&iomodel->spctemperature,NULL,NULL,iomodel_handle,SpctemperatureEnum);
+	iomodel->FetchData(&iomodel->spctemperature,NULL,NULL,SpctemperatureEnum);
 
 	/*Initialize counter*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,13 +29,13 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*Create nodes and vertices: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -20,5 +20,5 @@
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -32,24 +32,24 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragCoefficientEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragPEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragQEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementsTypeEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyBEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyNEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,PressureEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,TemperatureEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,WaterfractionEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,GeothermalfluxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VzEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,DragCoefficientEnum);
+	IoModelToInputsx(elements,iomodel,DragPEnum);
+	IoModelToInputsx(elements,iomodel,DragQEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,ElementsTypeEnum);
+	IoModelToInputsx(elements,iomodel,RheologyBEnum);
+	IoModelToInputsx(elements,iomodel,RheologyNEnum);
+	IoModelToInputsx(elements,iomodel,PressureEnum);
+	IoModelToInputsx(elements,iomodel,TemperatureEnum);
+	IoModelToInputsx(elements,iomodel,WaterfractionEnum);
+	IoModelToInputsx(elements,iomodel,GeothermalfluxEnum);
+	IoModelToInputsx(elements,iomodel,VxEnum);
+	IoModelToInputsx(elements,iomodel,VyEnum);
+	IoModelToInputsx(elements,iomodel,VzEnum);
 	
 	/*Free data: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 9340)
@@ -12,5 +12,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsHydrology(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsHydrology(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Output*/
@@ -22,5 +22,5 @@
 	/*Create constraints if they do not exist yet*/
 	if(!constraints) constraints = new Constraints(ConstraintsEnum);
-	IoModelToConstraintsx(constraints,iomodel,iomodel_handle,SpcwatercolumnEnum,HydrologyAnalysisEnum);
+	IoModelToConstraintsx(constraints,iomodel,SpcwatercolumnEnum,HydrologyAnalysisEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsHydrology(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsHydrology(Loads** ploads, IoModel* iomodel){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesHydrology(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesHydrology(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,13 +29,13 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*Create nodes and vertices: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 9340)
@@ -14,8 +14,8 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsHydrology(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsHydrology(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -29,25 +29,25 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragCoefficientEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragPEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragQEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementsTypeEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyBEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyNEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,PressureEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,TemperatureEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BasalMeltingRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,WatercolumnEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,GeothermalfluxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VzEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,DragCoefficientEnum);
+	IoModelToInputsx(elements,iomodel,DragPEnum);
+	IoModelToInputsx(elements,iomodel,DragQEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,ElementsTypeEnum);
+	IoModelToInputsx(elements,iomodel,RheologyBEnum);
+	IoModelToInputsx(elements,iomodel,RheologyNEnum);
+	IoModelToInputsx(elements,iomodel,PressureEnum);
+	IoModelToInputsx(elements,iomodel,TemperatureEnum);
+	IoModelToInputsx(elements,iomodel,BasalMeltingRateEnum);
+	IoModelToInputsx(elements,iomodel,WatercolumnEnum);
+	IoModelToInputsx(elements,iomodel,GeothermalfluxEnum);
+	IoModelToInputsx(elements,iomodel,VxEnum);
+	IoModelToInputsx(elements,iomodel,VyEnum);
+	IoModelToInputsx(elements,iomodel,VzEnum);
 
 	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsMelting(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsMelting(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,6 +29,6 @@
 
 	//create penalties for nodes: no node can have a temperature over the melting point
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	CreateSingleNodeToElementConnectivity(iomodel);
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,13 +29,13 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*First fetch data: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -20,5 +20,5 @@
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -33,22 +33,22 @@
 
 	/*Create inputs: */
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragCoefficientEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragPEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragQEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementsTypeEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyBEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyNEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAccumulationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAblationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceMassBalanceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BasalMeltingRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,PressureEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,DragCoefficientEnum);
+	IoModelToInputsx(elements,iomodel,DragPEnum);
+	IoModelToInputsx(elements,iomodel,DragQEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,ElementsTypeEnum);
+	IoModelToInputsx(elements,iomodel,RheologyBEnum);
+	IoModelToInputsx(elements,iomodel,RheologyNEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAccumulationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAblationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceMassBalanceEnum);
+	IoModelToInputsx(elements,iomodel,BasalMeltingRateEnum);
+	IoModelToInputsx(elements,iomodel,PressureEnum);
 	
 	/*Free data: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 9340)
@@ -43,5 +43,5 @@
 	
 		_printf_(VerboseMProcessor(),"   create datasets for analysis %s\n",EnumToStringx(analysis_type));
-		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,IOMODEL,solution_type,analysis_type,nummodels,i);
+		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,solution_type,analysis_type,nummodels,i);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 9340)
@@ -16,85 +16,85 @@
 
 /*Creation of fem datasets: general drivers*/
-void  CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
-void  CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,FILE* iomodel_handle,const int nummodels);
-void  CreateParameters(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,const int solution_type,int analysis_type,int analysis_counter);
-void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,int solution_type,int analysis_type);
-void  CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,int solution_type,int analysis_type);
-void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel,FILE* iomodel_handle);
+void  CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
+void  CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels);
+void  CreateParameters(Parameters** pparameters,IoModel* iomodel,const int solution_type,int analysis_type,int analysis_counter);
+void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+void  CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
 
 /*Creation of fem datasets: specialised drivers: */
 
 /*diagnostic horizontal*/
-void	CreateNodesDiagnosticHoriz(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsDiagnosticHoriz(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesDiagnosticHoriz(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsDiagnosticHoriz(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*diagnostic vertical*/
-void	CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*diagnostic hutter*/
-void	CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*bed slope*/
-void	CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*surface slope*/
-void	CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*thermal:*/
-void	CreateNodesThermal(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsThermal(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsThermal(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesThermal(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsThermal(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsThermal(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*enthalpy:*/
-void	CreateNodesEnthalpy(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsEnthalpy(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsEnthalpy(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesEnthalpy(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsEnthalpy(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsEnthalpy(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*hydrology:*/
-void	CreateNodesHydrology(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsHydrology(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsHydrology(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsHydrology(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesHydrology(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsHydrology(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsHydrology(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsHydrology(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*melting:*/
-void	CreateNodesMelting(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsMelting(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsMelting(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsMelting(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesMelting(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsMelting(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsMelting(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsMelting(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*prognostic:*/
-void	CreateNodesPrognostic(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsPrognostic(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsPrognostic(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesPrognostic(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsPrognostic(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsPrognostic(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*balancedthickness:*/
-void	CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
-void	CreateConstraintsBalancethickness(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
-void  CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
-void	UpdateElementsBalancethickness(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel);
+void	CreateConstraintsBalancethickness(Constraints** pconstraints,IoModel* iomodel);
+void  CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel);
+void	UpdateElementsBalancethickness(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*transient: */
-void	UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+void	UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 /*partitioning: */
-void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel, FILE* iomodel_handle);
-void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, FILE* iomodel_handle,bool continuous);
+void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
+void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
 
 /*Connectivity*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 9340)
@@ -18,8 +18,8 @@
 #include "../ModelProcessorx/ModelProcessorx.h"
 
-void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle);
-void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle);
+void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel);
+void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel);
 
-void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle,bool continuous){
+void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, bool continuous){
 	
 	/*First thing, this is a new partition for a new analysis_type, therefore, to avoid a leak, erase the nodes partition that might come through pmy_nodes: */
@@ -28,10 +28,10 @@
 	/*Now, depending on whether we are running galerkin discontinous or continuous elements, carry out a different partition of the nodes: */
 	if(continuous==true)
-		ContinuousGalerkinNodesPartitioning(pmy_nodes,my_elements, my_vertices, iomodel, iomodel_handle);
+		ContinuousGalerkinNodesPartitioning(pmy_nodes,my_elements, my_vertices, iomodel);
 	else
-		DiscontinuousGalerkinNodesPartitioning(pmy_nodes,my_elements, my_vertices, iomodel, iomodel_handle);
+		DiscontinuousGalerkinNodesPartitioning(pmy_nodes,my_elements, my_vertices, iomodel);
 }
 
-void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle){
+void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel){
 
 	/*as many nodes as there are vertices */
@@ -48,5 +48,5 @@
 
 
-void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle){
+void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel){
 
 	/*each element has it own nodes (as many as vertices) + additional nodes from neighbouring elements for each edge. This yields to a very different partition for 
@@ -93,6 +93,6 @@
 
 	/*Get edges and elements*/
-	IoModelFetchData(&iomodel->edges,&iomodel->numberofedges,&cols,iomodel_handle,EdgesEnum);
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->edges,&iomodel->numberofedges,&cols,EdgesEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	if (cols!=4) _error_("field edges should have 4 columns");
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 9340)
@@ -8,5 +8,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsPrognostic(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsPrognostic(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Output*/
@@ -21,5 +21,5 @@
 	/*Do not add constraints in DG, they are weakly imposed*/
 	if(!iomodel->prognostic_DG){
-		IoModelToConstraintsx(constraints,iomodel,iomodel_handle,SpcthicknessEnum,PrognosticAnalysisEnum);
+		IoModelToConstraintsx(constraints,iomodel,SpcthicknessEnum,PrognosticAnalysisEnum);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel){
 
 	/*Intermediaries*/
@@ -32,7 +32,7 @@
 
 		/*Get edges and elements*/
-		IoModelFetchData(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel_handle,EdgesEnum);
-		IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-		IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,ThicknessEnum);
+		iomodel->FetchData(&iomodel->edges,&iomodel->numberofedges,NULL,EdgesEnum);
+		iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+		iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
 
 		/*First load data:*/
@@ -57,6 +57,6 @@
 
 	/*Create Penpair for penalties: */
-	IoModelFetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,iomodel_handle,PenaltiesEnum);
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,PenaltiesEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
 
 	for(i=0;i<iomodel->numpenalties;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesPrognostic(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesPrognostic(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -33,5 +33,5 @@
 	/*Create partition of nodes: */
 	if(iomodel->prognostic_DG) continuous_galerkin=false;
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*Check in 3d*/
@@ -39,11 +39,11 @@
 
 	/*First fetch data: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	if(continuous_galerkin){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 9340)
@@ -14,8 +14,8 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -29,26 +29,26 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAccumulationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceAblationRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceMassBalanceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BasalMeltingRateEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BasalMeltingRateCorrectionEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAccumulationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceAblationRateEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceMassBalanceEnum);
+	IoModelToInputsx(elements,iomodel,BasalMeltingRateEnum);
+	IoModelToInputsx(elements,iomodel,BasalMeltingRateCorrectionEnum);
+	IoModelToInputsx(elements,iomodel,VxEnum);
+	IoModelToInputsx(elements,iomodel,VyEnum);
 
 	if(iomodel->prognostic_DG){
-		IoModelToInputsx(elements,iomodel,iomodel_handle,SpcthicknessEnum); //for DG, we need the spc in the element
+		IoModelToInputsx(elements,iomodel,SpcthicknessEnum); //for DG, we need the spc in the element
 	}
 	
 	if (iomodel->dim==3){
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,PressureEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,TemperatureEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
+		IoModelToInputsx(elements,iomodel,PressureEnum);
+		IoModelToInputsx(elements,iomodel,TemperatureEnum);
 	}
 	
Index: /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,int solution_type,int analysis_type){
+void CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
 
 	/*variable declarations: {{{1*/
@@ -75,5 +75,5 @@
 		/*}}}*/
 		/*Fetch variable descriptors: {{{1*/
-		IoModelFetchData(&variabledescriptors,&numvariabledescriptors,iomodel_handle,VariabledescriptorsEnum);
+		iomodel->FetchData(&variabledescriptors,&numvariabledescriptors,VariabledescriptorsEnum);
 
 		/*Ok, we have all the variable descriptors. Build a parameter with it: */
@@ -82,5 +82,5 @@
 		/*}}}*/
 		/*Fetch response descriptors: {{{1*/
-		IoModelFetchData(&responsedescriptors,&numresponsedescriptors,iomodel_handle,ResponsedescriptorsEnum);
+		iomodel->FetchData(&responsedescriptors,&numresponsedescriptors,ResponsedescriptorsEnum);
 
 		/*Ok, we have all the response descriptors. Build a parameter with it: */
@@ -92,10 +92,10 @@
 		parameters->AddObject(new    IntParam(QmuNPartEnum,iomodel->qmu_npart));
 		
-		IoModelFetchData(&dpart,NULL,NULL,iomodel_handle,PartEnum);
+		iomodel->FetchData(&dpart,NULL,NULL,PartEnum);
 
 		if(!dpart){
 
 			/*Partition elements and vertices and nodes: */
-			ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel,iomodel_handle);
+			ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
 
 			dpart=(double*)xmalloc(iomodel->numberofvertices*sizeof(double));
@@ -113,5 +113,5 @@
 				
 				/*Recover data: */
-				IoModelFetchData(&dakota_parameter,NULL,NULL,iomodel_handle,StringToEnumx(tag));
+				iomodel->FetchData(&dakota_parameter,NULL,NULL,StringToEnumx(tag));
 
 				/*Convert units: */
@@ -138,5 +138,5 @@
 			
 			/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
-			IoModelFetchData(&array,&mdims_array,&ndims_array,&qmu_mass_flux_num_profiles,iomodel_handle,QmuMassFluxSegmentsEnum);
+			iomodel->FetchData(&array,&mdims_array,&ndims_array,&qmu_mass_flux_num_profiles,QmuMassFluxSegmentsEnum);
 			if(qmu_mass_flux_num_profiles==0)_error_(" qmu_mass_flux_num_profiles is 0, when MassFlux computations were requested!");
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsSurfaceSlope(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsSurfaceSlope(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Output*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,13 +29,13 @@
 	
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 	
 	/*First fetch data: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 9340)
@@ -14,8 +14,8 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsSurfaceSlope(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsSurfaceSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -29,11 +29,11 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
 	
 	if (iomodel->dim==3){
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-		IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+		IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
 	}
 	
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 9340)
@@ -12,5 +12,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsThermal(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateConstraintsThermal(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,5 +29,5 @@
 	/*Only 3d mesh supported*/
 	if (iomodel->dim==3){
-		IoModelToConstraintsx(constraints,iomodel,iomodel_handle,SpctemperatureEnum,ThermalAnalysisEnum);
+		IoModelToConstraintsx(constraints,iomodel,SpctemperatureEnum,ThermalAnalysisEnum);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 9340)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsThermal(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateLoadsThermal(Loads** ploads, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -30,6 +30,6 @@
 
 	//create penalties for nodes: no node can have a temperature over the melting point
-	IoModelFetchData(&iomodel->spctemperature,NULL,NULL,iomodel_handle,SpctemperatureEnum);
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->spctemperature,NULL,NULL,SpctemperatureEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	CreateSingleNodeToElementConnectivity(iomodel);
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 9340)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
+void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
 
 	/*Intermediary*/
@@ -29,13 +29,13 @@
 
 	/*Continuous Galerkin partition of nodes: */
-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,iomodel_handle,continuous_galerkin);
+	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
 
 	/*Create nodes and vertices: */
-	IoModelFetchData(&iomodel->nodeonbed,NULL,NULL,iomodel_handle,NodeOnBedEnum);
-	IoModelFetchData(&iomodel->nodeonsurface,NULL,NULL,iomodel_handle,NodeOnSurfaceEnum);
-	IoModelFetchData(&iomodel->nodeonicesheet,NULL,NULL,iomodel_handle,NodeOnIceSheetEnum);
-	IoModelFetchData(&iomodel->nodeoniceshelf,NULL,NULL,iomodel_handle,NodeOnIceShelfEnum);
-	IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,VerticesTypeEnum);
-	IoModelFetchData(&iomodel->nodeonwater,NULL,NULL,iomodel_handle,NodeOnWaterEnum);
+	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
+	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
+	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
+	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
+	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
 
 	for (i=0;i<iomodel->numberofvertices;i++){
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -20,5 +20,5 @@
 
 	/*Fetch data needed: */
-	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,ElementsEnum);
+	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 
 	/*Update elements: */
@@ -32,24 +32,24 @@
 	}
 
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ThicknessEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,SurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,BedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragCoefficientEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragPEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragQEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,DragTypeEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnIceShelfEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnBedEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnSurfaceEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementOnWaterEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,ElementsTypeEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyBEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,RheologyNEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,PressureEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,TemperatureEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,GeothermalfluxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VxEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VyEnum);
-	IoModelToInputsx(elements,iomodel,iomodel_handle,VzEnum);
+	IoModelToInputsx(elements,iomodel,ThicknessEnum);
+	IoModelToInputsx(elements,iomodel,SurfaceEnum);
+	IoModelToInputsx(elements,iomodel,BedEnum);
+	IoModelToInputsx(elements,iomodel,DragCoefficientEnum);
+	IoModelToInputsx(elements,iomodel,DragPEnum);
+	IoModelToInputsx(elements,iomodel,DragQEnum);
+	IoModelToInputsx(elements,iomodel,DragTypeEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnIceShelfEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnBedEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnSurfaceEnum);
+	IoModelToInputsx(elements,iomodel,ElementOnWaterEnum);
+	IoModelToInputsx(elements,iomodel,ElementsTypeEnum);
+	IoModelToInputsx(elements,iomodel,RheologyBEnum);
+	IoModelToInputsx(elements,iomodel,RheologyNEnum);
+	IoModelToInputsx(elements,iomodel,PressureEnum);
+	IoModelToInputsx(elements,iomodel,TemperatureEnum);
+	IoModelToInputsx(elements,iomodel,GeothermalfluxEnum);
+	IoModelToInputsx(elements,iomodel,VxEnum);
+	IoModelToInputsx(elements,iomodel,VyEnum);
+	IoModelToInputsx(elements,iomodel,VzEnum);
 	
 	if(iomodel->qmu_analysis)elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
Index: /issm/trunk/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 9339)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 9340)
@@ -14,5 +14,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsTransient(Elements* elements, Parameters* parameters,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsTransient(Elements* elements, Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*nothing for now: */
Index: /issm/trunk/src/c/objects/IoModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/IoModel.cpp	(revision 9339)
+++ /issm/trunk/src/c/objects/IoModel.cpp	(revision 9340)
@@ -124,6 +124,9 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::IoModel(ConstDataHandle iomodel_handle){{{1*/
+/*FUNCTION IoModel::IoModel(FILE*  iomodel_handle){{{1*/
 IoModel::IoModel(FILE* iomodel_handle){
+
+	/*First, keep track of the fil handle: */
+	this->fid=iomodel_handle;
 	
 	int i,j;
@@ -134,111 +137,111 @@
 	/*Get all the data that consists of scalars, integers and strings: */
 
-	IoModelFetchData(&this->name,iomodel_handle,NameEnum); 
-	IoModelFetchData(&this->inputfilename,iomodel_handle,InputfilenameEnum); 
-	IoModelFetchData(&this->outputfilename,iomodel_handle,OutputfilenameEnum); 
-	IoModelFetchData(&this->qmu_analysis,iomodel_handle,QmuAnalysisEnum); 
-	IoModelFetchData(&this->control_analysis,iomodel_handle,ControlAnalysisEnum); 
-	IoModelFetchData(&this->dim,iomodel_handle,DimEnum);
+	this->FetchData(&this->name,NameEnum); 
+	this->FetchData(&this->inputfilename,InputfilenameEnum); 
+	this->FetchData(&this->outputfilename,OutputfilenameEnum); 
+	this->FetchData(&this->qmu_analysis,QmuAnalysisEnum); 
+	this->FetchData(&this->control_analysis,ControlAnalysisEnum); 
+	this->FetchData(&this->dim,DimEnum);
 	/*!Get numberofelements and numberofvertices: */
-	IoModelFetchData(&this->numberofvertices,iomodel_handle,NumberOfNodesEnum);
-	IoModelFetchData(&this->numberofelements,iomodel_handle,NumberOfElementsEnum);
+	this->FetchData(&this->numberofvertices,NumberOfNodesEnum);
+	this->FetchData(&this->numberofelements,NumberOfElementsEnum);
 	/*!In case we are running 3d, we are going to need the collapsed and non-collapsed 2d meshes, from which the 3d mesh was extruded: */
 	if (this->dim==3){
 	
 		/*!Deal with 2d mesh: */
-		IoModelFetchData(&this->numberofelements2d,iomodel_handle,NumberOfElements2DEnum);
-		IoModelFetchData(&this->numberofvertices2d,iomodel_handle,NumberOfNodes2DEnum);
-		IoModelFetchData(&this->numlayers,iomodel_handle,NumlayersEnum);
+		this->FetchData(&this->numberofelements2d,NumberOfElements2DEnum);
+		this->FetchData(&this->numberofvertices2d,NumberOfNodes2DEnum);
+		this->FetchData(&this->numlayers,NumlayersEnum);
 	}
 
 
 	/*elements type: */
-	IoModelFetchData(&this->ishutter,iomodel_handle,IshutterEnum);
-	IoModelFetchData(&this->ismacayealpattyn,iomodel_handle,IsmacayealpattynEnum);
-	IoModelFetchData(&this->isstokes,iomodel_handle,IsstokesEnum);
+	this->FetchData(&this->ishutter,IshutterEnum);
+	this->FetchData(&this->ismacayealpattyn,IsmacayealpattynEnum);
+	this->FetchData(&this->isstokes,IsstokesEnum);
 
 	/*!Get drag_type, drag and p,q: */
-	IoModelFetchData(&this->drag_type,iomodel_handle,DragTypeEnum);
+	this->FetchData(&this->drag_type,DragTypeEnum);
 
 	/*!Get materials: */
-	IoModelFetchData(&this->rho_water,iomodel_handle,RhoWaterEnum);
-	IoModelFetchData(&this->rho_ice,iomodel_handle,RhoIceEnum);
-	IoModelFetchData(&this->g,iomodel_handle,GEnum);
+	this->FetchData(&this->rho_water,RhoWaterEnum);
+	this->FetchData(&this->rho_ice,RhoIceEnum);
+	this->FetchData(&this->g,GEnum);
 
 	/*Get control parameters: */
-	IoModelFetchData(&this->num_control_type,iomodel_handle,NumControlTypeEnum); 
-	IoModelFetchData(&this->num_cm_responses,iomodel_handle,NumCmResponsesEnum); 
+	this->FetchData(&this->num_control_type,NumControlTypeEnum); 
+	this->FetchData(&this->num_cm_responses,NumCmResponsesEnum); 
 
 	/*!Get solution parameters: */
-	IoModelFetchData(&this->yts,iomodel_handle,YtsEnum);
-	IoModelFetchData(&this->meanvel,iomodel_handle,MeanvelEnum);
-	IoModelFetchData(&this->epsvel,iomodel_handle,EpsvelEnum);
-	IoModelFetchData(&this->verbose,iomodel_handle,VerboseBinaryEnum);
-	IoModelFetchData(&this->output_frequency,iomodel_handle,OutputFrequencyEnum);
-	IoModelFetchData(&this->prognostic_DG,iomodel_handle,PrognosticDGEnum);
-	IoModelFetchData(&this->nsteps,iomodel_handle,NstepsEnum);
-	IoModelFetchData(&this->eps_cm,iomodel_handle,EpsCmEnum);
-	IoModelFetchData(&this->tolx,iomodel_handle,TolxEnum);
-	IoModelFetchData(&this->cm_gradient,iomodel_handle,CmGradientEnum);
-	IoModelFetchData(&this->eps_res,iomodel_handle,EpsResEnum);
-	IoModelFetchData(&this->eps_rel,iomodel_handle,EpsRelEnum);
-	IoModelFetchData(&this->eps_abs,iomodel_handle,EpsAbsEnum);
-	IoModelFetchData(&this->max_nonlinear_iterations,iomodel_handle,MaxNonlinearIterationsEnum);
-	IoModelFetchData(&this->max_steadystate_iterations,iomodel_handle,MaxSteadystateIterationsEnum);
-	IoModelFetchData(&this->dt,iomodel_handle,DtEnum);
-	IoModelFetchData(&this->ndt,iomodel_handle,NdtEnum);
-	IoModelFetchData(&this->time_adapt,iomodel_handle,TimeAdaptEnum);
-	IoModelFetchData(&this->cfl_coefficient,iomodel_handle,CflCoefficientEnum);
-	IoModelFetchData(&this->hydrostatic_adjustment,iomodel_handle,HydrostaticAdjustmentEnum);
-	IoModelFetchData(&this->penalty_offset,iomodel_handle,PenaltyOffsetEnum);
-	IoModelFetchData(&this->penalty_melting,iomodel_handle,PenaltyMeltingEnum);
-	IoModelFetchData(&this->penalty_lock,iomodel_handle,PenaltyLockEnum);
-	IoModelFetchData(&this->sparsity,iomodel_handle,SparsityEnum);
-	IoModelFetchData(&this->connectivity,iomodel_handle,ConnectivityEnum);
-	IoModelFetchData(&this->lowmem,iomodel_handle,LowmemEnum);
-	IoModelFetchData(&this->viscosity_overshoot,iomodel_handle,ViscosityOvershootEnum);
-	IoModelFetchData(&this->artdiff,iomodel_handle,ArtificialDiffusivityEnum);
-	IoModelFetchData(&this->prognostic_DG,iomodel_handle,PrognosticDGEnum);
-	IoModelFetchData(&this->stokesreconditioning,iomodel_handle,StokesreconditioningEnum);
-	IoModelFetchData(&this->shelf_dampening,iomodel_handle,ShelfDampeningEnum);
-	IoModelFetchData(&this->waitonlock,iomodel_handle,WaitonlockEnum);
-	IoModelFetchData(&this->gl_migration,iomodel_handle,GlMigrationEnum);
-	IoModelFetchData(&this->isdiagnostic,iomodel_handle,IsdiagnosticEnum); 
-	IoModelFetchData(&this->isprognostic,iomodel_handle,IsprognosticEnum); 
-	IoModelFetchData(&this->isthermal,iomodel_handle,IsthermalEnum); 
+	this->FetchData(&this->yts,YtsEnum);
+	this->FetchData(&this->meanvel,MeanvelEnum);
+	this->FetchData(&this->epsvel,EpsvelEnum);
+	this->FetchData(&this->verbose,VerboseBinaryEnum);
+	this->FetchData(&this->output_frequency,OutputFrequencyEnum);
+	this->FetchData(&this->prognostic_DG,PrognosticDGEnum);
+	this->FetchData(&this->nsteps,NstepsEnum);
+	this->FetchData(&this->eps_cm,EpsCmEnum);
+	this->FetchData(&this->tolx,TolxEnum);
+	this->FetchData(&this->cm_gradient,CmGradientEnum);
+	this->FetchData(&this->eps_res,EpsResEnum);
+	this->FetchData(&this->eps_rel,EpsRelEnum);
+	this->FetchData(&this->eps_abs,EpsAbsEnum);
+	this->FetchData(&this->max_nonlinear_iterations,MaxNonlinearIterationsEnum);
+	this->FetchData(&this->max_steadystate_iterations,MaxSteadystateIterationsEnum);
+	this->FetchData(&this->dt,DtEnum);
+	this->FetchData(&this->ndt,NdtEnum);
+	this->FetchData(&this->time_adapt,TimeAdaptEnum);
+	this->FetchData(&this->cfl_coefficient,CflCoefficientEnum);
+	this->FetchData(&this->hydrostatic_adjustment,HydrostaticAdjustmentEnum);
+	this->FetchData(&this->penalty_offset,PenaltyOffsetEnum);
+	this->FetchData(&this->penalty_melting,PenaltyMeltingEnum);
+	this->FetchData(&this->penalty_lock,PenaltyLockEnum);
+	this->FetchData(&this->sparsity,SparsityEnum);
+	this->FetchData(&this->connectivity,ConnectivityEnum);
+	this->FetchData(&this->lowmem,LowmemEnum);
+	this->FetchData(&this->viscosity_overshoot,ViscosityOvershootEnum);
+	this->FetchData(&this->artdiff,ArtificialDiffusivityEnum);
+	this->FetchData(&this->prognostic_DG,PrognosticDGEnum);
+	this->FetchData(&this->stokesreconditioning,StokesreconditioningEnum);
+	this->FetchData(&this->shelf_dampening,ShelfDampeningEnum);
+	this->FetchData(&this->waitonlock,WaitonlockEnum);
+	this->FetchData(&this->gl_migration,GlMigrationEnum);
+	this->FetchData(&this->isdiagnostic,IsdiagnosticEnum); 
+	this->FetchData(&this->isprognostic,IsprognosticEnum); 
+	this->FetchData(&this->isthermal,IsthermalEnum); 
 
 	/*!Get thermal parameters: */
-	IoModelFetchData(&this->beta,iomodel_handle,BetaEnum);
-	IoModelFetchData(&this->meltingpoint,iomodel_handle,MeltingpointEnum);
-	IoModelFetchData(&this->referencetemperature,iomodel_handle,ReferencetemperatureEnum);
-	IoModelFetchData(&this->latentheat,iomodel_handle,LatentheatEnum);
-	IoModelFetchData(&this->heatcapacity,iomodel_handle,HeatcapacityEnum);
-	IoModelFetchData(&this->thermalconductivity,iomodel_handle,ThermalconductivityEnum);
-	IoModelFetchData(&this->min_thermal_constraints,iomodel_handle,MinThermalConstraintsEnum);
-	IoModelFetchData(&this->min_mechanical_constraints,iomodel_handle,MinMechanicalConstraintsEnum);
-	IoModelFetchData(&this->stabilize_constraints,iomodel_handle,StabilizeConstraintsEnum);
-	IoModelFetchData(&this->mixed_layer_capacity,iomodel_handle,MixedLayerCapacityEnum);
-	IoModelFetchData(&this->thermal_exchange_velocity,iomodel_handle,ThermalExchangeVelocityEnum);
-	IoModelFetchData(&this->basal_melting_rate_correction_apply,iomodel_handle,BasalMeltingRateCorrectionApplyEnum);
-	IoModelFetchData(&this->gl_melting_rate,iomodel_handle,GlMeltingRateEnum);
-	IoModelFetchData(&this->rheology_law,iomodel_handle,RheologyLawEnum);
+	this->FetchData(&this->beta,BetaEnum);
+	this->FetchData(&this->meltingpoint,MeltingpointEnum);
+	this->FetchData(&this->referencetemperature,ReferencetemperatureEnum);
+	this->FetchData(&this->latentheat,LatentheatEnum);
+	this->FetchData(&this->heatcapacity,HeatcapacityEnum);
+	this->FetchData(&this->thermalconductivity,ThermalconductivityEnum);
+	this->FetchData(&this->min_thermal_constraints,MinThermalConstraintsEnum);
+	this->FetchData(&this->min_mechanical_constraints,MinMechanicalConstraintsEnum);
+	this->FetchData(&this->stabilize_constraints,StabilizeConstraintsEnum);
+	this->FetchData(&this->mixed_layer_capacity,MixedLayerCapacityEnum);
+	this->FetchData(&this->thermal_exchange_velocity,ThermalExchangeVelocityEnum);
+	this->FetchData(&this->basal_melting_rate_correction_apply,BasalMeltingRateCorrectionApplyEnum);
+	this->FetchData(&this->gl_melting_rate,GlMeltingRateEnum);
+	this->FetchData(&this->rheology_law,RheologyLawEnum);
 
 	/*!Get hydrology parameters: */		 
-	IoModelFetchData(&this->hydro_kn,iomodel_handle,HydroKnEnum);			 
-	IoModelFetchData(&this->hydro_p,iomodel_handle,HydroPEnum);		 
-	IoModelFetchData(&this->hydro_q,iomodel_handle,HydroQEnum);		 
-	IoModelFetchData(&this->hydro_CR,iomodel_handle,HydroCREnum);		 
-	IoModelFetchData(&this->hydro_n,iomodel_handle,HydroNEnum); 
+	this->FetchData(&this->hydro_kn,HydroKnEnum);			 
+	this->FetchData(&this->hydro_p,HydroPEnum);		 
+	this->FetchData(&this->hydro_q,HydroQEnum);		 
+	this->FetchData(&this->hydro_CR,HydroCREnum);		 
+	this->FetchData(&this->hydro_n,HydroNEnum); 
 
 	/*qmu: */
 	if(this->qmu_analysis){
-		IoModelFetchData(&this->numberofvariables,iomodel_handle,NumberOfVariablesEnum);
-		IoModelFetchData(&this->numberofresponses,iomodel_handle,NumberOfResponsesEnum);
-		IoModelFetchData(&this->qmu_npart,iomodel_handle,NpartEnum);
-		IoModelFetchData(&this->qmu_save_femmodel,iomodel_handle,QmuSaveFemmodelEnum); 
+		this->FetchData(&this->numberofvariables,NumberOfVariablesEnum);
+		this->FetchData(&this->numberofresponses,NumberOfResponsesEnum);
+		this->FetchData(&this->qmu_npart,NpartEnum);
+		this->FetchData(&this->qmu_save_femmodel,QmuSaveFemmodelEnum); 
 	}
 
 	/*i/o: */
-	IoModelFetchData(&this->io_gather,iomodel_handle,IoGatherEnum);
+	this->FetchData(&this->io_gather,IoGatherEnum);
 }
 /*}}}*/
@@ -424,4 +427,398 @@
 }
 /*}}}*/
+/*FUNCTION IoModel::FetchData(bool*     pbool,int data_enum){{{1*/
+void  IoModel::FetchData(bool* pboolean,int data_enum){
+
+	extern int my_rank;
+	extern int num_procs;
+	
+
+	/*output: */
+	bool  boolean;
+	int   code;
+	
+	/*Set file pointer to beginning of the data: */
+	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+	
+	if(code!=1)_error_("%s%s","IoModel::FetchData expecting a boolean for enum ",EnumToStringx(data_enum));
+	
+	/*We have to read a boolean from disk. */
+	if(my_rank==0){  
+		if(fread(&boolean,sizeof(bool),1,fid)!=1) _error_(" could not read boolean ");
+	}
+
+	MPI_Bcast(&boolean,1,MPI_BYTE,0,MPI_COMM_WORLD); 
+
+	/*Assign output pointers: */
+	*pboolean=boolean;
+
+}
+/*}}}*/
+/*FUNCTION IoModel::FetchData(int*      pinteger,int data_enum){{{1*/
+void  IoModel::FetchData(int* pinteger,int data_enum){
+
+	extern int my_rank;
+	extern int num_procs;
+	
+
+	/*output: */
+	int   integer;
+	int   code;
+	
+	/*Set file pointer to beginning of the data: */
+	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+	
+	if(code!=2)_error_("%s%s","IoModel::FetchData expecting an integer for enum ",EnumToStringx(data_enum));
+	
+	/*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
+	if(my_rank==0){  
+		if(fread(&integer,sizeof(int),1,fid)!=1) _error_(" could not read integer ");
+	}
+
+	MPI_Bcast(&integer,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+	/*Assign output pointers: */
+	*pinteger=integer;
+
+}
+/*}}}*/
+/*FUNCTION IoModel::FetchData(double*   pscalar,int data_enum){{{1*/
+void  IoModel::FetchData(double* pscalar,int data_enum){
+
+
+	extern int my_rank;
+	extern int num_procs;
+	
+
+	/*output: */
+	double   scalar;
+	int      code;
+	
+	/*Set file pointer to beginning of the data: */
+	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+	
+	if(code!=3)_error_("%s%s","IoModel::FetchData expecting a double for enum ",EnumToStringx(data_enum));
+	
+	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+	if(my_rank==0){
+		if(fread(&scalar,sizeof(double),1,fid)!=1)_error_(" could not read scalar ");
+	}
+	MPI_Bcast(&scalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+
+	/*Assign output pointers: */
+	*pscalar=scalar;
+		 
+}
+/*}}}*/
+/*FUNCTION IoModel::FetchData(char**    pstring,int data_enum){{{1*/
+void  IoModel::FetchData(char** pstring,int data_enum){
+
+	extern int my_rank;
+	extern int num_procs;
+	
+
+	/*output: */
+	char* string=NULL;
+	int   string_size;
+	int code=0;
+	
+	/*Set file pointer to beginning of the data: */
+	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+	
+	if(code!=4)_error_("%s%s","IoModel::FetchData expecting a string for enum ",EnumToStringx(data_enum));
+	
+	/*Now fetch: */
+	
+	/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+	if(my_rank==0){  
+		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_(" could not read length of string ");
+	}
+
+	MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+	/*Now allocate string: */
+	if(string_size){
+		string=(char*)xmalloc((string_size+1)*sizeof(char));
+		string[string_size]='\0';
+
+		/*Read string on node 0, then broadcast: */
+		if(my_rank==0){  
+			if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_("  could not read string ");
+		}
+		MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
+	}
+	else{
+		string=(char*)xmalloc(sizeof(char));
+		string[0]='\0';
+	}
+
+
+	/*Assign output pointers: */
+	*pstring=string;
+}
+/*}}}*/
+/*FUNCTION IoModel::FetchData(double**  pdoublematrix,int* pM,int* pN,int data_enum){{{1*/
+void  IoModel::FetchData(double** pmatrix,int* pM,int* pN,int data_enum){
+
+	extern int my_rank;
+	extern int num_procs;
+
+	/*output: */
+	int M,N;
+	double* matrix=NULL;
+	int code=0;
+	int vector_type=0;
+	
+	
+	
+	/*Set file pointer to beginning of the data: */
+	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+
+	if((code!=5) && (code!=6) && (code!=7))_error_("%s%s","IoModel::FetchData expecting a double, integer or boolean matrix for enum ",EnumToStringx(data_enum));
+	
+	/*Now fetch: */
+
+	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+	/*numberofelements: */
+	if(my_rank==0){  
+		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+	}
+
+	MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+	if(my_rank==0){  
+		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+	}
+	MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+	/*Now allocate matrix: */
+	if(M*N){
+		matrix=(double*)xmalloc(M*N*sizeof(double));
+
+		/*Read matrix on node 0, then broadcast: */
+		if(my_rank==0){  
+			if(fread(matrix,M*N*sizeof(double),1,fid)!=1) _error_("could not read matrix ");
+		}
+		
+		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+	}
+
+	/*Assign output pointers: */
+	*pmatrix=matrix;
+	if (pM)*pM=M;
+	if (pN)*pN=N;
+
+}
+/*}}}*/
+/*FUNCTION IoModel::FetchData(char***   pstrings,int* pnumstrings,int data_enum){{{1*/
+void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
+
+	extern int my_rank;
+	extern int num_procs;
+	
+	int i;
+
+	/*output: */
+	int   numstrings=0;
+	char** strings=NULL;
+	
+	/*intermediary: */
+	char* string=NULL;
+	int   string_size;
+	int   code;
+	
+	/*Set file pointer to beginning of the data: */
+	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+	
+	if(code!=9)_error_("%s%s","IoModel::FetchData expecting a string array for enum ",EnumToStringx(data_enum));
+	
+	/*We have to read a bunch of strings from disk. First read the number of strings, and allocate: */
+	if(my_rank==0){  
+		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_(" could not read length of string array");
+	}
+	MPI_Bcast(&numstrings,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+	/*Now allocate string array: */
+	if(numstrings){
+		strings=(char**)xmalloc(numstrings*sizeof(char*));
+		for(i=0;i<numstrings;i++)strings[i]=NULL;
+
+		/*Go through strings, and read: */
+		for(i=0;i<numstrings;i++){
+			
+			if(my_rank==0){  
+				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_(" could not read length of string ");
+			}
+			MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
+			if(string_size){
+				string=(char*)xmalloc((string_size+1)*sizeof(char));
+				string[string_size]='\0';
+
+				/*Read string on node 0, then broadcast: */
+				if(my_rank==0){  
+					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_("  could not read string ");
+				}
+				MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
+			}
+			else{
+				string=(char*)xmalloc(sizeof(char));
+				string[0]='\0';
+			}
+
+			strings[i]=string;
+		}
+	}
+
+	/*Assign output pointers: */
+	*pstrings=strings;
+	*pnumstrings=numstrings;
+}
+/*}}}*/
+/*FUNCTION IoModel::FetchData(double*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{1*/
+void  IoModel::FetchData(double*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+
+	int i;
+
+	extern int my_rank;
+	extern int num_procs;
+
+	/*output: */
+	double** matrices=NULL;
+	int*     mdims=NULL;
+	int*     ndims=NULL;
+	int      numrecords=0;
+
+	/*intermediary: */
+	int M,N;
+	double* matrix=NULL;
+	
+	
+	int   code;
+	
+	/*Set file pointer to beginning of the data: */
+	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+	
+	if(code!=8)_error_("%s%s","IoModel::FetchData expecting a double mat  array for enum ",EnumToStringx(data_enum));
+	
+	/*Now fetch: */
+	if(my_rank==0){  
+		if(fread(&numrecords,sizeof(int),1,fid)!=1) _error_("could not read number of records in matrix array ");
+	}
+	MPI_Bcast(&numrecords,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+	if(numrecords){
+
+		/*Allocate matrices :*/
+		matrices=(double**)xmalloc(numrecords*sizeof(double*));
+		mdims=(int*)xmalloc(numrecords*sizeof(int));
+		ndims=(int*)xmalloc(numrecords*sizeof(int));
+
+		for(i=0;i<numrecords;i++){
+			matrices[i]=NULL;
+			mdims[i]=0;
+			ndims[i]=0;
+		}
+
+		/*Loop through records and fetch matrix: */
+		for(i=0;i<numrecords;i++){
+
+			if(my_rank==0){  
+				if(fread(&M,sizeof(int),1,fid)!=1) _error_("%s%i%s","could not read number of rows in ",i,"th matrix of matrix array");
+			}
+			MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+			if(my_rank==0){  
+				if(fread(&N,sizeof(int),1,fid)!=1) _error_("%s%i%s","could not read number of columns in ",i,"th matrix of matrix array");
+			}
+			MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+			/*Now allocate matrix: */
+			if(M*N){
+				matrix=(double*)xmalloc(M*N*sizeof(double));
+
+				/*Read matrix on node 0, then broadcast: */
+				if(my_rank==0){  
+					if(fread(matrix,M*N*sizeof(double),1,fid)!=1) _error_("could not read matrix ");
+				}
+
+				MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+			}
+
+			/*Assign: */
+			matrices[i]=matrix;
+			mdims[i]=M;
+			ndims[i]=N;
+		}
+	}
+
+	/*Assign output pointers: */
+	*pmatrices=matrices;
+	*pmdims=mdims;
+	*pndims=ndims;
+	*pnumrecords=numrecords;
+}
+/*}}}*/
+/*FUNCTION IoModel::SetFilePointerToData(int* pcode,int* pvector_type, int data_enum){{{1*/
+FILE* IoModel::SetFilePointerToData(int* pcode,int* pvector_type, int data_enum){
+
+	extern int my_rank;
+	extern int num_procs;
+	
+	
+	int found=0;
+	int record_enum;
+	int record_length;
+	int record_code; //1 to 7 number
+	int vector_type; //nodal or elementary
+ 
+	/*Go find in the binary file, the position of the data we want to fetch: */
+	if(my_rank==0){
+	
+		/*First set FILE* position to the beginning of the file: */
+		fseek(fid,0,SEEK_SET);
+
+		/*Now march through file looking for the correct data identifier: */
+		for(;;){
+			/*Read enum for this size of first string name: */
+			if(fread(&record_enum,sizeof(int),1,fid)==0){
+				/*Ok, we have reached the end of the file. break: */
+				found=0;
+				break;
+			}
+			
+			/*Is this the record sought for? : */
+			if (data_enum==record_enum){
+				/*Ok, we have found the correct string. Pass the record length, and read data type code: */
+				fseek(fid,sizeof(int),SEEK_CUR);
+				fread(&record_code,sizeof(int),1,fid);
+
+				/*if record_code points to a vector, get its type (nodal or elementary): */
+				if(5<=record_code && record_code<=7)fread(&vector_type,sizeof(int),1,fid);
+				found=1;
+				break;
+			}
+			else{
+				/*This is not the correct string, read the record length, and use it to skip this record: */
+				fread(&record_length,sizeof(int),1,fid);
+				/*skip: */
+				fseek(fid,record_length,SEEK_CUR);
+			}
+		}
+	}
+	MPI_Bcast(&found,1,MPI_INT,0,MPI_COMM_WORLD); 
+	if(!found)_error_("%s %s ","could not find data with name",EnumToStringx(data_enum));
+
+	/*Broadcast code and vector type: */
+	MPI_Bcast(&record_code,1,MPI_INT,0,MPI_COMM_WORLD); 
+	MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
+	if(record_code==5) MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
+
+	/*Assign output pointers:*/
+	*pcode=record_code;
+	if(pvector_type)*pvector_type=vector_type;
+
+	return fid;
+}
+/*}}}*/
 /*FUNCTION IoModel::Echo{{{1*/
 void IoModel::Echo(int which_part,int rank) {
Index: /issm/trunk/src/c/objects/IoModel.h
===================================================================
--- /issm/trunk/src/c/objects/IoModel.h	(revision 9339)
+++ /issm/trunk/src/c/objects/IoModel.h	(revision 9340)
@@ -11,4 +11,7 @@
 
 class IoModel {
+
+	private: 
+		FILE* fid; //pointer to input file
 
 	public:
@@ -229,4 +232,14 @@
 		void Echo(int which_part,int rank);
 		/*}}}*/
+		/*Input/Output:{{{1*/
+		void  FetchData(bool*     pboolean,int data_enum);
+		void  FetchData(int*      pinteger,int data_enum);
+		void  FetchData(double*   pscalar,int data_enum);
+		void  FetchData(char**    pstring,int data_enum);
+		void  FetchData(double**  pscalarmatrix,int* pM,int* pN,int data_enum);
+		void  FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
+		void  FetchData(double*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+		FILE* SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+		/*}}}*/
 
 };
