Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 8329)
+++ /issm/trunk/src/c/Makefile.am	(revision 8330)
@@ -467,5 +467,8 @@
 					./modules/ModelProcessorx/Balancevelocities/CreateConstraintsBalancevelocities.cpp\
 					./modules/ModelProcessorx/Balancevelocities/CreateLoadsBalancevelocities.cpp\
+					./modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp\
 					./modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp\
+					./modules/ParsePetscOptionsx/ParsePetscOptionsx.h\
+					./modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp\
 					./modules/NodesDofx/NodesDofx.h\
 					./modules/NodesDofx/NodesDofx.cpp\
@@ -1105,5 +1108,8 @@
 					./modules/ModelProcessorx/Balancevelocities/CreateConstraintsBalancevelocities.cpp\
 					./modules/ModelProcessorx/Balancevelocities/CreateLoadsBalancevelocities.cpp\
+					./modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp\
 					./modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp\
+					./modules/ParsePetscOptionsx/ParsePetscOptionsx.h\
+					./modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp\
 					./modules/NodesDofx/NodesDofx.h\
 					./modules/NodesDofx/NodesDofx.cpp\
Index: /issm/trunk/src/c/io/FetchData.cpp
===================================================================
--- /issm/trunk/src/c/io/FetchData.cpp	(revision 8329)
+++ /issm/trunk/src/c/io/FetchData.cpp	(revision 8330)
@@ -571,5 +571,5 @@
 #endif
 
-#if defined(_PARALLEL_) && defined(_HAVE_PETSC_)
+#if defined(_HAVE_PETSC_)
 /*FUNCTION FetchData(double** pmatrix, int* pM,int* pN,FILE* fid){{{1*/
 void FetchData(double** pmatrix, int* pM,int* pN,FILE* fid){
Index: /issm/trunk/src/c/io/IoModelFetchData.cpp
===================================================================
--- /issm/trunk/src/c/io/IoModelFetchData.cpp	(revision 8329)
+++ /issm/trunk/src/c/io/IoModelFetchData.cpp	(revision 8330)
@@ -11,71 +11,55 @@
 #include "./io.h"
 
-#ifdef _SERIAL_
-/***************** **************** **************** **************** **************** **************** **************** **************** **************** ****************
-													  Serial IoModelFetch Data Routines, all overloaded.
-**************** **************** **************** **************** **************** **************** **************** **************** **************** *****************/
-/*FUNCTION IoModelFetchData(DataSet** pdataset,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(DataSet** pdataset,ConstDataHandle model_handle,char* data_name){
-
-	FetchData(pdataset,mxGetAssignedField(model_handle,0,data_name));
+/*FUNCTION IoModelFetchData(double** pmatrix,int* pM,int* pN,FILE* model_handle,char* data_name){{{1*/
+void  IoModelFetchData(double** pmatrix,int* pM,int* pN,FILE* model_handle,char* data_name){
+	
+	FILE* fid=NULL;
+	
+	/*Set file pointer to beginning of the data: */
+	fid=SetFilePointerToData(model_handle,data_name);
+	
+	/*Now fetch: */
+	FetchData(pmatrix,pM,pN,fid);
 
 }
 /*}}}*/
-/*FUNCTION IoModelFetchData(double** pmatrix,int* pM,int *pN,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(double** pmatrix,int* pM,int *pN,ConstDataHandle model_handle,char* data_name){
+/*FUNCTION IoModelFetchData(char** pstring,FILE* model_handle,char* data_name){{{1*/
+void  IoModelFetchData(char** pstring,FILE* model_handle,char* data_name){
+
+	FILE* fid=NULL;
 	
-	FetchData(pmatrix,pM,pN,mxGetAssignedField(model_handle,0,data_name));
-
+	/*Set file pointer to beginning of the data: */
+	fid=SetFilePointerToData(model_handle,data_name);
+	
+	/*Now fetch: */
+	FetchData(pstring,fid);
 }
 /*}}}*/
-/*FUNCTION IoModelFetchData(Mat* pmatrix,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(Mat* pmatrix,ConstDataHandle model_handle,char* data_name){
+/*FUNCTION IoModelFetchData(double* pscalar,FILE* model_handle,char* data_name){{{1*/
+void  IoModelFetchData(double* pscalar,FILE* model_handle,char* data_name){
+
+	FILE* fid=NULL;
 	
-	FetchData(pmatrix,mxGetAssignedField(model_handle,0,data_name));
-
+	/*Set file pointer to beginning of the data: */
+	fid=SetFilePointerToData(model_handle,data_name);
+	
+	/*Now fetch: */
+	FetchData(pscalar,fid);
 }
 /*}}}*/
-/*FUNCTION IoModelFetchData(double** pvector,int* pM,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(double** pvector,int* pM,ConstDataHandle model_handle,char* data_name){
+/*FUNCTION IoModelFetchData(int* pinteger,FILE* model_handle,char* data_name){{{1*/
+void  IoModelFetchData(int* pinteger,FILE* model_handle,char* data_name){
+
+	FILE* fid=NULL;
 	
-	FetchData(pvector,pM,mxGetAssignedField(model_handle,0,data_name));
-
+	/*Set file pointer to beginning of the data: */
+	fid=SetFilePointerToData(model_handle,data_name);
+	
+	/*Now fetch: */
+	FetchData(pinteger,fid);
 }
 /*}}}*/
-/*FUNCTION IoModelFetchData(Vec* pvector,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(Vec* pvector,ConstDataHandle model_handle,char* data_name){
-	
-	FetchData(pvector,mxGetAssignedField(model_handle,0,data_name));
-
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(char** pstring,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(char** pstring,ConstDataHandle model_handle,char* data_name){
-	
-	FetchData(pstring,mxGetAssignedField(model_handle,0,data_name));
-
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(double* pscalar,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(double* pscalar,ConstDataHandle model_handle,char* data_name){
-	
-	FetchData(pscalar,mxGetAssignedField(model_handle,0,data_name));
-
-}
-/*}}}*/
-/*FUNCTION IoModelFetchData(int* pinteger,ConstDataHandle model_handle,char* data_name){{{1*/
-void IoModelFetchData(int* pinteger,ConstDataHandle model_handle,char* data_name){
-
-	FetchData(pinteger,mxGetAssignedField(model_handle,0,data_name));
-}
-/*}}}*/
-#endif
-
-#ifdef _PARALLEL_
-/***************** **************** **************** **************** **************** **************** **************** **************** **************** ****************
-													  Parallel IoModelFetch Data Routines, all overloaded.
-**************** **************** **************** **************** **************** **************** **************** **************** **************** *****************/
-/*FUNCTION SetFilePointerToData(ConstDataHandle model_handle,char* data_name){{{1*/
-FILE* SetFilePointerToData(ConstDataHandle model_handle,char* data_name){
+/*FUNCTION SetFilePointerToData(FILE* model_handle,char* data_name){{{1*/
+FILE* SetFilePointerToData(FILE* model_handle,char* data_name){
 
 	extern int my_rank;
@@ -140,51 +124,62 @@
 }
 /*}}}*/
-/*FUNCTION IoModelFetchData(double** pmatrix,int* pM,int* pN,ConstDataHandle model_handle,char* data_name){{{1*/
-void  IoModelFetchData(double** pmatrix,int* pM,int* pN,ConstDataHandle model_handle,char* data_name){
+
+#ifdef _SERIAL_
+/***************** **************** **************** **************** **************** **************** **************** **************** **************** ****************
+													  Serial IoModelFetch Data Routines, all overloaded.
+**************** **************** **************** **************** **************** **************** **************** **************** **************** *****************/
+/*FUNCTION IoModelFetchData(DataSet** pdataset,ConstDataHandle model_handle,char* data_name){{{1*/
+void IoModelFetchData(DataSet** pdataset,ConstDataHandle model_handle,char* data_name){
+
+	FetchData(pdataset,mxGetAssignedField(model_handle,0,data_name));
+
+}
+/*}}}*/
+/*FUNCTION IoModelFetchData(double** pmatrix,int* pM,int *pN,ConstDataHandle model_handle,char* data_name){{{1*/
+void IoModelFetchData(double** pmatrix,int* pM,int *pN,ConstDataHandle model_handle,char* data_name){
 	
-	FILE* fid=NULL;
+	FetchData(pmatrix,pM,pN,mxGetAssignedField(model_handle,0,data_name));
+
+}
+/*}}}*/
+/*FUNCTION IoModelFetchData(Mat* pmatrix,ConstDataHandle model_handle,char* data_name){{{1*/
+void IoModelFetchData(Mat* pmatrix,ConstDataHandle model_handle,char* data_name){
 	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(model_handle,data_name);
+	FetchData(pmatrix,mxGetAssignedField(model_handle,0,data_name));
+
+}
+/*}}}*/
+/*FUNCTION IoModelFetchData(double** pvector,int* pM,ConstDataHandle model_handle,char* data_name){{{1*/
+void IoModelFetchData(double** pvector,int* pM,ConstDataHandle model_handle,char* data_name){
 	
-	/*Now fetch: */
-	FetchData(pmatrix,pM,pN,fid);
+	FetchData(pvector,pM,mxGetAssignedField(model_handle,0,data_name));
+
+}
+/*}}}*/
+/*FUNCTION IoModelFetchData(Vec* pvector,ConstDataHandle model_handle,char* data_name){{{1*/
+void IoModelFetchData(Vec* pvector,ConstDataHandle model_handle,char* data_name){
+	
+	FetchData(pvector,mxGetAssignedField(model_handle,0,data_name));
 
 }
 /*}}}*/
 /*FUNCTION IoModelFetchData(char** pstring,ConstDataHandle model_handle,char* data_name){{{1*/
-void  IoModelFetchData(char** pstring,ConstDataHandle model_handle,char* data_name){
+void IoModelFetchData(char** pstring,ConstDataHandle model_handle,char* data_name){
+	
+	FetchData(pstring,mxGetAssignedField(model_handle,0,data_name));
 
-	FILE* fid=NULL;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(model_handle,data_name);
-	
-	/*Now fetch: */
-	FetchData(pstring,fid);
 }
 /*}}}*/
 /*FUNCTION IoModelFetchData(double* pscalar,ConstDataHandle model_handle,char* data_name){{{1*/
-void  IoModelFetchData(double* pscalar,ConstDataHandle model_handle,char* data_name){
+void IoModelFetchData(double* pscalar,ConstDataHandle model_handle,char* data_name){
+	
+	FetchData(pscalar,mxGetAssignedField(model_handle,0,data_name));
 
-	FILE* fid=NULL;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(model_handle,data_name);
-	
-	/*Now fetch: */
-	FetchData(pscalar,fid);
 }
 /*}}}*/
 /*FUNCTION IoModelFetchData(int* pinteger,ConstDataHandle model_handle,char* data_name){{{1*/
-void  IoModelFetchData(int* pinteger,ConstDataHandle model_handle,char* data_name){
+void IoModelFetchData(int* pinteger,ConstDataHandle model_handle,char* data_name){
 
-	FILE* fid=NULL;
-	
-	/*Set file pointer to beginning of the data: */
-	fid=SetFilePointerToData(model_handle,data_name);
-	
-	/*Now fetch: */
-	FetchData(pinteger,fid);
+	FetchData(pinteger,mxGetAssignedField(model_handle,0,data_name));
 }
 /*}}}*/
Index: sm/trunk/src/c/io/ParsePetscOptions.cpp
===================================================================
--- /issm/trunk/src/c/io/ParsePetscOptions.cpp	(revision 8329)
+++ 	(revision )
@@ -1,119 +1,0 @@
-/*!\file:  ParsePetscOptions.cpp
- * \brief: parse options present in a petsc file, and create petsc options 
- * objects accordingly. This will be used to drive the behaviour of Petsc for 
- * each analysis type.
- */ 
-
-#ifdef HAVE_CONFIG_H
-	#include "config.h"
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-#include "./io.h"
-
-
-#ifdef _PARALLEL_
-void ParsePetscOptions(Parameters* parameters,char* optionsname){
-
-	FILE* fid=NULL;
-	char line [1000];
-	extern int my_rank;
-	int i;
-
-	/*intermediary: */
-	double* analyses=NULL;
-	char** strings=NULL;
-	int numanalyses;
-	char* string=NULL;
-	char* newstring=NULL;
-	char* catstring=NULL;
-	int   stringlength;
-
-	if(my_rank==0){
-
-		/*try to open file: */
-		fid =pfopen(optionsname ,"r");
-
-		/*Now, go through lines and figure out how many analyses we have: */
-		numanalyses=0;
-		while ( fgets(line, sizeof line, fid) ){
-			/*skip comments and empty lines: */
-			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r'))continue;
-			/*ok, first time, we should get an analysis enum, starting with a +: */
-			if (line[0]=='+')numanalyses++;
-			else continue;
-		}
-
-		/*Now, allocate analyses and strings: */
-		analyses=(double*)xmalloc(numanalyses*sizeof(double));
-		strings=(char**)xmalloc(numanalyses*sizeof(char*));
-		for(i=0;i<numanalyses;i++)strings[i]=NULL; 
-
-		/*Go back to beginning of file:*/
-		fseek(fid,0,SEEK_SET);
-		numanalyses=0;
-		while ( fgets(line, sizeof line, fid) ){
-		
-			/*skip comments and empty lines: */
-			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r'))continue;
-		
-			/*Get rid of end of line: */
-			line[strlen(line)-1]='\0';
-		
-			if (line[0]=='+'){ /*this is the analysis line: */
-				analyses[numanalyses]=StringToEnumx(&line[1]);  //skip the '+'
-				numanalyses++;
-			}
-			else{ /*this is an option corresponding to analysis numanalyses-1. Add it 
-			to the already existing options*/
-				if(strings[numanalyses-1]==NULL){
-					string=(char*)xmalloc((strlen(line)+1)*sizeof(char)); strcpy(string,line);
-					strings[numanalyses-1]=string;
-				}
-				else{
-					string=strings[numanalyses-1];
-					newstring=(char*)xmalloc((strlen(line)+1)*sizeof(char)); strcpy(newstring,line);
-					/*concatenate:*/
-					catstring=(char*)xmalloc((strlen(string)+1+strlen(newstring)+1+1)*sizeof(char)); //fit in a space " "
-					strcpy(catstring,string);
-					strcat(catstring," ");
-					strcat(catstring,newstring);
-					strings[numanalyses-1]=catstring;
-					xfree((void**)&newstring);
-					xfree((void**)&string);
-				}
-			}
-		}
-
-		/*close file: */
-		pfclose(fid,optionsname);
-	}
-
-	/*Ok, broadcast to other cpus: */
-	MPI_Bcast(&numanalyses,1,MPI_INT,0,MPI_COMM_WORLD);
-	if(my_rank!=0){
-		analyses=(double*)xmalloc(numanalyses*sizeof(double));
-		strings=(char**)xmalloc(numanalyses*sizeof(char*));
-	}
-	MPI_Bcast(analyses,numanalyses,MPI_DOUBLE,0,MPI_COMM_WORLD);
-	for(i=0;i<numanalyses;i++){
-		char* string=strings[i];
-		if(my_rank==0)stringlength=(strlen(string)+1)*sizeof(char);
-		MPI_Bcast(&stringlength,1,MPI_INT,0,MPI_COMM_WORLD);
-		if(my_rank!=0)string=(char*)xmalloc(stringlength);
-		MPI_Bcast(string,stringlength,MPI_CHAR,0,MPI_COMM_WORLD);
-		if(my_rank!=0)strings[i]=string;
-	}
-
-	/*Ok, out of strings and analyses and numanalyses, create parameters, and plug them into parameters container: */
-	parameters->AddObject(new StringArrayParam(PetscOptionsStringsEnum,strings,numanalyses));
-	parameters->AddObject(new DoubleVecParam(PetscOptionsAnalysesEnum,analyses,numanalyses));
-
-	/*Clean up and return*/
-	for(i=0;i<numanalyses;i++) xfree((void**)&strings[i]);
-	xfree((void**)&strings);
-	xfree((void**)&analyses);
-	return;
-}
-#endif
Index: /issm/trunk/src/c/io/io.h
===================================================================
--- /issm/trunk/src/c/io/io.h	(revision 8329)
+++ /issm/trunk/src/c/io/io.h	(revision 8330)
@@ -15,4 +15,16 @@
 FILE* pfopen(char* filename,char* format);
 void  pfclose(FILE* fid,char* filename);
+
+
+void FetchData(double** pmatrix, int* pM,int* pN,FILE* fid);
+void FetchData(char** pstring,FILE* fid);
+void FetchData(double* pscalar,FILE* fid);
+void FetchData(int* pinteger,FILE* fid);
+void  IoModelFetchData(double** pmatrix,int* pM,int* pN,FILE* model_handle,char* data_name);
+void  IoModelFetchData(char** pstring,FILE* model_handle,char* data_name);
+void  IoModelFetchData(double* pscalar,FILE* model_handle,char* data_name);
+void  IoModelFetchData(int* pinteger,FILE* model_handle,char* data_name);
+FILE* SetFilePointerToData(FILE* model_handle,char* data_name);
+
 
 #ifdef _SERIAL_
@@ -75,21 +87,9 @@
 
 #ifdef _PARALLEL_
-void FetchData(double** pmatrix, int* pM,int* pN,FILE* fid);
-void FetchData(char** pstring,FILE* fid);
-void FetchData(double* pscalar,FILE* fid);
-void FetchData(int* pinteger,FILE* fid);
 
-
-FILE* SetFilePointerToData(ConstDataHandle model_handle,char* data_name);
-void  IoModelFetchData(double** pmatrix,int* pM,int* pN,ConstDataHandle model_handle,char* data_name);
-void  IoModelFetchData(char** pstring,ConstDataHandle model_handle,char* data_name);
-void  IoModelFetchData(double* pscalar,ConstDataHandle model_handle,char* data_name);
-void  IoModelFetchData(int* pinteger,ConstDataHandle model_handle,char* data_name);
 
 void WriteData(int* pdummy,void* data,char* data_type);
 void WriteDataToDisk(void* data,int* pM,int* pN,char* datatype,FILE* fid);
 
-/*petsc options: */
-void ParsePetscOptions(Parameters* parameters, char* filename);
 
 #endif
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesBalancethickness(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesBalancethickness(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateConstraintsBalancevelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateConstraintsBalancevelocities.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateConstraintsBalancevelocities.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsBalancevelocities(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsBalancevelocities(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateLoadsBalancevelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateLoadsBalancevelocities.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateLoadsBalancevelocities.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsBalancevelocities(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsBalancevelocities(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateNodesBalancevelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateNodesBalancevelocities.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/CreateNodesBalancevelocities.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesBalancevelocities(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesBalancevelocities(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/UpdateElementsBalancevelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/UpdateElementsBalancevelocities.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancevelocities/UpdateElementsBalancevelocities.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsBalancevelocities(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsBalancevelocities(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsBedSlope(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsBedSlope(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Output*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsBedSlope(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsBedSlope(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 8330)
@@ -12,5 +12,5 @@
 #include "../ModelProcessorx.h"
 
-void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type){
+void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,int solution_type,int analysis_type){
 	
 	int i;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 8330)
@@ -16,5 +16,5 @@
 
 
-void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle 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,FILE* iomodel_handle,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
 
 	bool       continuous = true;
@@ -114,4 +114,10 @@
 	UpdateElementsAndMaterialsControl(elements,materials,iomodel,iomodel_handle);
 
+	/*Update Elements in case we are running a transient solution: */
+	if(analysis_counter==nummodels && (solution_type==Transient2DSolutionEnum | solution_type==Transient3DSolutionEnum)){
+		UpdateElementsTransient(elements,iomodel,iomodel_handle,analysis_counter,analysis_type);
+	}
+
+
 	/*Generate objects that are not dependent on any analysis_type: */
 	CreateParameters(pparameters,iomodel,iomodel_handle,solution_type,analysis_type,analysis_counter);
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "./ModelProcessorx.h"
 
-void	CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle,const int nummodels){
+void	CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,FILE* iomodel_handle,const int nummodels){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 8330)
@@ -12,5 +12,5 @@
 #include "./ModelProcessorx.h"
 
-void CreateParameters(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,const int solution_type,int analysis_type,int analysis_counter){
+void CreateParameters(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,const int solution_type,int analysis_type,int analysis_counter){
 	
 	int i;
@@ -93,12 +93,4 @@
 		parameteroutput=(char**)xmalloc(iomodel->numoutput*sizeof(char*));
 
-		#ifdef _SERIAL_
-		pfield=mxGetAssignedField(iomodel_handle,0,"parameteroutput");
-		for(i=0;i<iomodel->numoutput;i++){
-			pfield2=mxGetCell(pfield,i);
-			FetchData(&descriptor,pfield2);
-			parameteroutput[i]=descriptor;
-		}
-		#else
 		tag=(char*)xmalloc((strlen("parameteroutput_i")+1)*sizeof(char));
 		for(i=0;i<iomodel->numoutput;i++){
@@ -107,24 +99,8 @@
 			parameteroutput[i]=descriptor;
 		}
-		#endif
 
 		/*Ok, we have all the parameter output  descriptors. Build a parameter with it: */
 		parameters->AddObject(new StringArrayParam(ParameterOutputEnum,parameteroutput,iomodel->numoutput));
 	}
-
-	/*Deal with petsc options: */
-	#ifdef _SERIAL_
-		pfield=mxGetAssignedField(iomodel_handle,0,"petscoptions_analyses");
-		FetchData(&analyses,&numpetscoptions,pfield);
-		pfield=mxGetAssignedField(iomodel_handle,0,"petscoptions_strings");
-		petscstrings=(char**)xmalloc(numpetscoptions*sizeof(char*)); //allocate
-		for (i=0;i<numpetscoptions;i++){
-			pfield2=mxGetCell(pfield,i);
-			FetchData(&descriptor,pfield2);
-			petscstrings[i]=descriptor;
-		}
-		parameters->AddObject(new StringArrayParam(PetscOptionsStringsEnum,petscstrings,numpetscoptions));
-		parameters->AddObject(new DoubleVecParam(PetscOptionsAnalysesEnum,analyses,numpetscoptions));
-	#endif
 
 	/*Free data: {{{1*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*DataSets*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsDiagnosticVert(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsDiagnosticVert(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsDiagnosticVert(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsDiagnosticVert(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 8330)
@@ -18,5 +18,5 @@
 #include "../ModelProcessorx/ModelProcessorx.h"
 
-void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel, ConstDataHandle iomodel_handle){
+void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel, FILE* iomodel_handle){
 
 	int i;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsHydrology(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsHydrology(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsHydrology(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsHydrology(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesHydrology(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesHydrology(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsHydrology(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsHydrology(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsMelting(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsMelting(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 8330)
@@ -16,5 +16,5 @@
 #include "../../modules/modules.h"
 
-void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, ConstDataHandle IOMODEL,const int solution_type,const int nummodels,const int* analysis_type_list){
+void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,const int solution_type,const int nummodels,const int* analysis_type_list){
 
 	int i;
Index: /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 8330)
@@ -13,86 +13,89 @@
 #include "../../io/io.h"
 
-void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, ConstDataHandle iomodel_handle,const int solution_type,const int nummodels,const int* analysis_type_list);
+void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,const int solution_type,const int nummodels,const int* analysis_type_list);
 
 /*Creation of fem datasets: general drivers*/
-void  CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle 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,ConstDataHandle iomodel_handle,const int nummodels);
-void  CreateParameters(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,const int solution_type,int analysis_type,int analysis_counter);
-void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type);
-void  CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type);
-void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel,ConstDataHandle iomodel_handle);
+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);
 
 /*Creation of fem datasets: specialised drivers: */
 
 /*diagnostic horizontal*/
-void	CreateNodesDiagnosticHoriz(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsDiagnosticHoriz(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*diagnostic vertical*/
-void	CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*diagnostic hutter*/
-void	CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*bed slope*/
-void	CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*surface slope*/
-void	CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*thermal:*/
-void	CreateNodesThermal(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsThermal(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsThermal(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*hydrology:*/
-void	CreateNodesHydrology(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsHydrology(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsHydrology(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsHydrology(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 
 /*melting:*/
-void	CreateNodesMelting(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsMelting(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsMelting(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsMelting(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*prognostic:*/
-void	CreateNodesPrognostic(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsPrognostic(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsPrognostic(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*balancedthickness:*/
-void	CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsBalancethickness(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsBalancethickness(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+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);
 
 /*balancedvelocities:*/
-void	CreateNodesBalancevelocities(Nodes** pnodes,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void	CreateConstraintsBalancevelocities(Constraints** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle);
-void  CreateLoadsBalancevelocities(Loads** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void	UpdateElementsBalancevelocities(Elements* elements,IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type);
+void	CreateNodesBalancevelocities(Nodes** pnodes,IoModel* iomodel,FILE* iomodel_handle);
+void	CreateConstraintsBalancevelocities(Constraints** pconstraints,IoModel* iomodel,FILE* iomodel_handle);
+void  CreateLoadsBalancevelocities(Loads** ploads, IoModel* iomodel, FILE* iomodel_handle);
+void	UpdateElementsBalancevelocities(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
+
+/*transient: */
+void	UpdateElementsTransient(Elements* elements,IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type);
 
 /*partitioning: */
-void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, ConstDataHandle iomodel_handle,bool continuous);
+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);
 
 /*Connectivity*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 8330)
@@ -18,8 +18,8 @@
 #include "../ModelProcessorx/ModelProcessorx.h"
 
-void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, ConstDataHandle iomodel_handle);
-void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, ConstDataHandle iomodel_handle);
+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  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, ConstDataHandle iomodel_handle,bool continuous){
+void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle,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: */
@@ -33,5 +33,5 @@
 }
 
-void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, ConstDataHandle iomodel_handle){
+void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle){
 
 	/*as many nodes as there are vertices */
@@ -48,5 +48,5 @@
 
 
-void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, ConstDataHandle iomodel_handle){
+void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, FILE* iomodel_handle){
 
 	/*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 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsPrognostic(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsPrognostic(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediaries*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesPrognostic(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesPrognostic(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle,int solution_type,int analysis_type){
+void CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,FILE* iomodel_handle,int solution_type,int analysis_type){
 
 	/*variable declarations: {{{1*/
@@ -49,8 +49,4 @@
 	int      count;
 
-	#ifdef _SERIAL_
-		mxArray* pfield=NULL;
-		mxArray* pfield2=NULL;
-	#endif
 	/*}}}*/
 	
@@ -81,12 +77,4 @@
 		 * the variables are in md.variables(md.ivar), as a strucuture: */
 
-		#ifdef _SERIAL_
-		pfield=mxGetAssignedField(iomodel_handle,0,"variabledescriptors");
-		for(i=0;i<iomodel->numvariabledescriptors;i++){
-			pfield2=mxGetCell(pfield,i);
-			FetchData(&descriptor,pfield2);
-			variabledescriptors[i]=descriptor;
-		}
-		#else
 		for(i=0;i<iomodel->numvariabledescriptors;i++){
 			sprintf(tag,"%s%i","variabledescriptor",i+1);
@@ -94,5 +82,4 @@
 			variabledescriptors[i]=descriptor;
 		}
-		#endif
 
 		/*Ok, we have all the variable descriptors. Build a parameter with it: */
@@ -104,12 +91,4 @@
 
 		/*Fetch descriptors: */
-		#ifdef _SERIAL_
-		pfield=mxGetAssignedField(iomodel_handle,0,"responsedescriptors");
-		for(i=0;i<iomodel->numresponsedescriptors;i++){
-			pfield2=mxGetCell(pfield,i);
-			FetchData(&descriptor,pfield2);
-			responsedescriptors[i]=descriptor;
-		}
-		#else
 		for(i=0;i<iomodel->numresponsedescriptors;i++){
 			sprintf(tag,"%s%i","responsedescriptor",i+1);
@@ -117,5 +96,4 @@
 			responsedescriptors[i]=descriptor;
 		}
-		#endif
 
 		/*Ok, we have all the response descriptors. Build a parameter with it: */
@@ -182,12 +160,4 @@
 			M=iomodel->qmu_mass_flux_num_profiles;
 
-			#ifdef _SERIAL_
-			pfield=mxGetAssignedField(iomodel_handle,0,"qmu_mass_flux_segments");
-			for(i=0;i<M;i++){
-				pfield2=mxGetCell(pfield,i);
-				FetchData(&matrix,mdims_array+i,ndims_array+i,pfield2);
-				array[i]=matrix;
-			}
-			#else
 			for(i=0;i<M;i++){
 				sprintf(tag,"%s%i","qmu_mass_flux_segments",i+1); //names were created using Matlab indexing convention
@@ -222,5 +192,4 @@
 				xfree((void**)&temp_matrix);
 			}
-			#endif
 
 			/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsSurfaceSlope(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsSurfaceSlope(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Output*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*DataSet*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsSurfaceSlope(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsSurfaceSlope(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsThermal(Constraints** pconstraints, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateConstraintsThermal(Constraints** pconstraints, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 8330)
@@ -11,5 +11,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsThermal(Loads** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateLoadsThermal(Loads** ploads, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel,ConstDataHandle iomodel_handle){
+void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel,FILE* iomodel_handle){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 8329)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,ConstDataHandle iomodel_handle,int analysis_counter,int analysis_type){
+void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
 
 	/*Intermediary*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 8330)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 8330)
@@ -0,0 +1,90 @@
+/*
+ * UpdateElementsTransient:
+ */
+
+#include "../../../Container/Container.h"
+#include "../../../toolkits/toolkits.h"
+#include "../../../io/io.h"
+#include "../../../EnumDefinitions/EnumDefinitions.h"
+#include "../../../objects/objects.h"
+#include "../../../shared/shared.h"
+#include "../../MeshPartitionx/MeshPartitionx.h"
+#include "../../../include/include.h"
+#include "../ModelProcessorx.h"
+
+void	UpdateElementsTransient(Elements* elements, IoModel* iomodel,FILE* iomodel_handle,int analysis_counter,int analysis_type){
+
+	/*Intermediary*/
+	int      i;
+	int      counter;
+	Element *element = NULL;
+
+	/*Ok, let's go through forcings: */
+
+	/*Fetch data needed: */
+	IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
+	IoModelFetchData(&iomodel->elements_type,NULL,NULL,iomodel_handle,"elements_type");
+	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
+	IoModelFetchData(&iomodel->thickness_coeff,NULL,NULL,iomodel_handle,"thickness_coeff");
+	IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
+	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
+	IoModelFetchData(&iomodel->drag_coefficient,NULL,NULL,iomodel_handle,"drag_coefficient");
+	IoModelFetchData(&iomodel->drag_p,NULL,NULL,iomodel_handle,"drag_p");
+	IoModelFetchData(&iomodel->drag_q,NULL,NULL,iomodel_handle,"drag_q");
+	IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
+	IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
+	IoModelFetchData(&iomodel->rheology_B,NULL,NULL,iomodel_handle,"rheology_B");
+	IoModelFetchData(&iomodel->rheology_n,NULL,NULL,iomodel_handle,"rheology_n");
+	IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
+	IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
+	if(iomodel->gl_migration!=NoneEnum) IoModelFetchData(&iomodel->bathymetry,NULL,NULL,iomodel_handle,"bathymetry");
+
+	if (iomodel->dim==3){
+		IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
+		IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
+		IoModelFetchData(&iomodel->vz,NULL,NULL,iomodel_handle,"vz");
+		IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
+		IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
+		IoModelFetchData(&iomodel->nodeonstokes,NULL,NULL,iomodel_handle,"nodeonstokes");
+	}
+	if(iomodel->control_analysis){
+		IoModelFetchData(&iomodel->vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
+		IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
+	}
+
+	/*Update elements: */
+	counter=0;
+	for (i=0;i<iomodel->numberofelements;i++){
+		if(iomodel->my_elements[i]){
+			element=(Element*)elements->GetObjectByOffset(counter);
+			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+			counter++;
+		}
+	}
+cleanup_and_return:
+
+	/*Free data: */
+	xfree((void**)&iomodel->elements);
+	xfree((void**)&iomodel->elements_type);
+	xfree((void**)&iomodel->thickness);
+	xfree((void**)&iomodel->thickness_coeff);
+	xfree((void**)&iomodel->surface);
+	xfree((void**)&iomodel->bed);
+	xfree((void**)&iomodel->drag_coefficient);
+	xfree((void**)&iomodel->drag_p);
+	xfree((void**)&iomodel->drag_q);
+	xfree((void**)&iomodel->rheology_n);
+	xfree((void**)&iomodel->rheology_B);
+	xfree((void**)&iomodel->elementoniceshelf);
+	xfree((void**)&iomodel->elementonbed);
+	xfree((void**)&iomodel->elementonsurface);
+	xfree((void**)&iomodel->elementonwater);
+	xfree((void**)&iomodel->accumulation_rate);
+	xfree((void**)&iomodel->melting_rate);
+	xfree((void**)&iomodel->nodeonstokes);
+	xfree((void**)&iomodel->vx);
+	xfree((void**)&iomodel->vy);
+	xfree((void**)&iomodel->vz);
+	xfree((void**)&iomodel->vx_obs);
+	xfree((void**)&iomodel->vy_obs);
+}
Index: /issm/trunk/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 8330)
+++ /issm/trunk/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 8330)
@@ -0,0 +1,117 @@
+/*!\file ParsePetscOptionsx
+ * * \brief: parse options present in a petsc file, and create petsc options 
+ * objects accordingly. This will be used to drive the behaviour of Petsc for 
+ * each analysis type.
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./ParsePetscOptionsx.h"
+#include "../../io/io.h"
+#include "../../shared/shared.h"
+#include "../../include/include.h"
+#include "../../toolkits/toolkits.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+void ParsePetscOptionsx(Parameters* parameters,FILE* fid){
+
+	char line [1000];
+	extern int my_rank;
+	int i;
+
+	/*intermediary: */
+	double* analyses=NULL;
+	char** strings=NULL;
+	int numanalyses;
+	char* string=NULL;
+	char* newstring=NULL;
+	char* catstring=NULL;
+	int   stringlength;
+
+	if(my_rank==0){
+
+		/*Now, go through lines and figure out how many analyses we have: */
+		numanalyses=0;
+		while ( fgets(line, sizeof line, fid) ){
+			/*skip comments and empty lines: */
+			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r'))continue;
+			/*ok, first time, we should get an analysis enum, starting with a +: */
+			if (line[0]=='+')numanalyses++;
+			else continue;
+		}
+
+		/*Now, allocate analyses and strings: */
+		analyses=(double*)xmalloc(numanalyses*sizeof(double));
+		strings=(char**)xmalloc(numanalyses*sizeof(char*));
+		for(i=0;i<numanalyses;i++)strings[i]=NULL; 
+
+		/*Go back to beginning of file:*/
+		fseek(fid,0,SEEK_SET);
+		numanalyses=0;
+		while ( fgets(line, sizeof line, fid) ){
+		
+			/*skip comments and empty lines: */
+			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r'))continue;
+		
+			/*Get rid of end of line: */
+			line[strlen(line)-1]='\0';
+		
+			if (line[0]=='+'){ /*this is the analysis line: */
+				analyses[numanalyses]=StringToEnumx(&line[1]);  //skip the '+'
+				numanalyses++;
+			}
+			else{ /*this is an option corresponding to analysis numanalyses-1. Add it 
+			to the already existing options*/
+				if(strings[numanalyses-1]==NULL){
+					string=(char*)xmalloc((strlen(line)+1)*sizeof(char)); strcpy(string,line);
+					strings[numanalyses-1]=string;
+				}
+				else{
+					string=strings[numanalyses-1];
+					newstring=(char*)xmalloc((strlen(line)+1)*sizeof(char)); strcpy(newstring,line);
+					/*concatenate:*/
+					catstring=(char*)xmalloc((strlen(string)+1+strlen(newstring)+1+1)*sizeof(char)); //fit in a space " "
+					strcpy(catstring,string);
+					strcat(catstring," ");
+					strcat(catstring,newstring);
+					strings[numanalyses-1]=catstring;
+					xfree((void**)&newstring);
+					xfree((void**)&string);
+				}
+			}
+		}
+	}
+
+	#ifdef _PARALLEL_
+	/*Ok, broadcast to other cpus: */
+	MPI_Bcast(&numanalyses,1,MPI_INT,0,MPI_COMM_WORLD);
+	if(my_rank!=0){
+		analyses=(double*)xmalloc(numanalyses*sizeof(double));
+		strings=(char**)xmalloc(numanalyses*sizeof(char*));
+	}
+	MPI_Bcast(analyses,numanalyses,MPI_DOUBLE,0,MPI_COMM_WORLD);
+	for(i=0;i<numanalyses;i++){
+		char* string=strings[i];
+		if(my_rank==0)stringlength=(strlen(string)+1)*sizeof(char);
+		MPI_Bcast(&stringlength,1,MPI_INT,0,MPI_COMM_WORLD);
+		if(my_rank!=0)string=(char*)xmalloc(stringlength);
+		MPI_Bcast(string,stringlength,MPI_CHAR,0,MPI_COMM_WORLD);
+		if(my_rank!=0)strings[i]=string;
+	}
+	#endif
+
+	/*Ok, out of strings and analyses and numanalyses, create parameters, and plug them into parameters container: */
+	parameters->AddObject(new StringArrayParam(PetscOptionsStringsEnum,strings,numanalyses));
+	parameters->AddObject(new DoubleVecParam(PetscOptionsAnalysesEnum,analyses,numanalyses));
+
+	/*Clean up and return*/
+	for(i=0;i<numanalyses;i++) xfree((void**)&strings[i]);
+	xfree((void**)&strings);
+	xfree((void**)&analyses);
+	return;
+}
+
Index: /issm/trunk/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.h
===================================================================
--- /issm/trunk/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.h	(revision 8330)
+++ /issm/trunk/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.h	(revision 8330)
@@ -0,0 +1,14 @@
+/*!\file:  ParsePetscOptionsx.h
+ * \brief header file for parsing petsc options file
+ */ 
+
+#ifndef _PARSEPETSCOPTIONSX_H
+#define _PARSEPETSCOPTIONSX_H
+
+#include "../../Container/Container.h"
+#include "../../objects/objects.h"
+
+/* local prototypes: */
+void ParsePetscOptionsx(Parameters* parameters, FILE* petscoptionsfid);
+
+#endif  /* _PARSEPETSCOPTIONSX_H */
Index: /issm/trunk/src/c/modules/modules.h
===================================================================
--- /issm/trunk/src/c/modules/modules.h	(revision 8329)
+++ /issm/trunk/src/c/modules/modules.h	(revision 8330)
@@ -71,4 +71,5 @@
 #include "./SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h"
 #include "./ModelProcessorx/ModelProcessorx.h"
+#include "./ParsePetscOptionsx/ParsePetscOptionsx.h"
 #include "./NodeConnectivityx/NodeConnectivityx.h"
 #include "./NodesDofx/NodesDofx.h"
Index: /issm/trunk/src/c/objects/IoModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/IoModel.cpp	(revision 8329)
+++ /issm/trunk/src/c/objects/IoModel.cpp	(revision 8330)
@@ -121,5 +121,5 @@
 /*}}}*/
 /*FUNCTION IoModel::IoModel(ConstDataHandle iomodel_handle){{{1*/
-IoModel::IoModel(ConstDataHandle iomodel_handle){
+IoModel::IoModel(FILE* iomodel_handle){
 	
 	int i,j;
Index: /issm/trunk/src/c/objects/IoModel.h
===================================================================
--- /issm/trunk/src/c/objects/IoModel.h	(revision 8329)
+++ /issm/trunk/src/c/objects/IoModel.h	(revision 8330)
@@ -221,5 +221,5 @@
 		~IoModel();
 		IoModel();
-		IoModel(ConstDataHandle iomodel_handle);
+		IoModel(FILE* iomodel_handle);
 		void IoModelInit(void);
 		void Echo(int which_part,int rank);
Index: /issm/trunk/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk/src/c/solutions/issm.cpp	(revision 8329)
+++ /issm/trunk/src/c/solutions/issm.cpp	(revision 8330)
@@ -13,5 +13,5 @@
 	/*I/O: */
 	FILE     *output_fid       = NULL;
-	char     *petscoptionsfilename = NULL;
+	FILE     *petscoptionsfid = NULL;
 	char     *lockname         = NULL;
 	bool      qmu_analysis     = false;
@@ -52,5 +52,4 @@
 	if(argc<2)_error_("Usage error: no solution requested");
 	solution_type=StringToEnumx(argv[1]);
-	petscoptionsfilename=argv[4];
 	lockname=argv[6];
 
@@ -69,5 +68,7 @@
 
 	/*add petsc options to parameters: */
-	ParsePetscOptions(femmodel->parameters,petscoptionsfilename);
+	petscoptionsfid=pfopen(argv[4],"r");
+	ParsePetscOptionsx(femmodel->parameters,petscoptionsfid);
+	pfclose(petscoptionsfid,argv[4]);
 
 	/*get parameters: */
@@ -111,5 +112,5 @@
 	}
 
-	/*Close output file and write lock file if requested*/
+	/*Close output and petsc options file and write lock file if requested*/
 	pfclose(output_fid,argv[5]);
 	if (waitonlock>0){
Index: /issm/trunk/src/m/classes/model.m
===================================================================
--- /issm/trunk/src/m/classes/model.m	(revision 8329)
+++ /issm/trunk/src/m/classes/model.m	(revision 8330)
@@ -303,6 +303,4 @@
 		 %PETSc and MATLAB solver string
 		 petscoptions=NaN;
-		 petscoptions_analyses=[];
-		 petscoptions_strings={};
 
 		 %Analysis
Index: /issm/trunk/src/m/classes/petscoptions.m
===================================================================
--- /issm/trunk/src/m/classes/petscoptions.m	(revision 8329)
+++ /issm/trunk/src/m/classes/petscoptions.m	(revision 8330)
@@ -43,14 +43,4 @@
 		 end
 		 %}}}
-		 function [analyses strings]=marshall(o)%{{{1
-			 %marshall options into analyses and strings
-			 analyses=zeros(size(o.options,1),1);
-			 strings=cell(size(o.options,1),1);
-			 for i=1:size(o.options,1),
-				 analyses(i)=o.options{i,1};
-				 strings{i}=petscoptiontostring(o.options{i,2});
-			 end
-		 end
-		 %}}}
 	end
 end
Index: /issm/trunk/src/m/model/presolve.m
===================================================================
--- /issm/trunk/src/m/model/presolve.m	(revision 8329)
+++ /issm/trunk/src/m/model/presolve.m	(revision 8330)
@@ -45,9 +45,3 @@
 end
 
-%package together petscoptions for serial runs
-[md.petscoptions_analyses md.petscoptions_strings]=marshall(md.petscoptions);
 
-%write a template file for issm to use, in parallel
-if ~strcmpi(md.cluster.name,'none'),
-	PetscOptions2PetscFile(md.petscoptions,[md.name '.petsc']);
-end
Index: /issm/trunk/src/m/model/solve.m
===================================================================
--- /issm/trunk/src/m/model/solve.m	(revision 8329)
+++ /issm/trunk/src/m/model/solve.m	(revision 8330)
@@ -41,4 +41,15 @@
 end
 
+%Marshall model data into a binary file.
+marshall(md);
+
+%add qmu fields to binary file if running qmu analysis
+if md.qmu_analysis,
+	qmumarshall(md,md.variables(options.ivar),md.responses(options.iresp));
+end
+
+%write a template file for issm to use, in parallel
+PetscOptions2PetscFile(md.petscoptions,[md.name '.petsc']);
+
 %If running in parallel, we have a different way of launching the solution
 %sequences. 
Index: /issm/trunk/src/m/model/solveparallel.m
===================================================================
--- /issm/trunk/src/m/model/solveparallel.m	(revision 8329)
+++ /issm/trunk/src/m/model/solveparallel.m	(revision 8330)
@@ -13,12 +13,4 @@
 	%directories, name jobs, etc ...
 	c=clock; md.runtimename=sprintf('%s-%i-%i-%i-%i-%i-%i-%i',md.name,c(2),c(3),c(1),c(4),c(5),floor(c(6)),GetPId());
-
-	%Marshall model data into a binary file.
-	marshall(md);
-
-	%add qmu fields to binary file if running qmu analysis
-	if md.qmu_analysis,
-		qmumarshall(md,md.variables(options.ivar),md.responses(options.iresp));
-	end
 
 	%Now, we need to build the queuing script, used by the cluster to launch the job.
Index: /issm/trunk/src/m/solutions/NewFemModel.m
===================================================================
--- /issm/trunk/src/m/solutions/NewFemModel.m	(revision 8329)
+++ /issm/trunk/src/m/solutions/NewFemModel.m	(revision 8330)
@@ -17,6 +17,6 @@
    femmodel.analysis_type_list=analysis_types;
 
-	issmprintf(VerboseMProcessor(),'\n   reading data from model %s...',md.name);
-   [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.constraints,femmodel.loads,femmodel.materials,femmodel.parameters]=ModelProcessor(md,solution_type,femmodel.analysis_type_list);
+	issmprintf(VerboseMProcessor(),'\n   reading data from input file %s.bin...',md.name);
+   [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.constraints,femmodel.loads,femmodel.materials,femmodel.parameters]=ModelProcessor([md.name '.bin'],solution_type,femmodel.analysis_type_list);
    
 	%Initialize some fiels with empty celils
Index: /issm/trunk/src/m/solutions/issm.m
===================================================================
--- /issm/trunk/src/m/solutions/issm.m	(revision 8329)
+++ /issm/trunk/src/m/solutions/issm.m	(revision 8330)
@@ -14,4 +14,7 @@
 	%create finite element model
 	femmodel=NewFemModel(md,solution_type,analyses,numanalyses);
+	
+	%process petsc options: 
+	femmodel.parameters=ParsePetscOptions(femmodel.parameters,[md.name '.petsc']);
 
 	%retrieve parameters
Index: /issm/trunk/src/mex/Makefile.am
===================================================================
--- /issm/trunk/src/mex/Makefile.am	(revision 8329)
+++ /issm/trunk/src/mex/Makefile.am	(revision 8330)
@@ -52,4 +52,5 @@
 				OutputRifts\
 				OutputResults\
+				ParsePetscOptions\
 				PenaltyConstraints\
 				PointCloudFindNeighbors\
@@ -334,4 +335,8 @@
 			  UpdateVertexPositions/UpdateVertexPositions.h
 
+ParsePetscOptions_SOURCES = ParsePetscOptions/ParsePetscOptions.cpp\
+			  ParsePetscOptions/ParsePetscOptions.h
+
+
 VerticesDof_SOURCES = VerticesDof/VerticesDof.cpp\
 			  VerticesDof/VerticesDof.h
Index: /issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp
===================================================================
--- /issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp	(revision 8329)
+++ /issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp	(revision 8330)
@@ -11,9 +11,11 @@
 
 	/*inputs: */
+	char* inputfilename=NULL;
+	FILE* IOMODEL;
 	int     solution_type;
 	double* double_analyses=NULL;
 	int*    analyses=NULL;
 	int     numanalyses;
-
+	
 	/* output datasets: */
 	Elements* elements=NULL;
@@ -24,5 +26,5 @@
 	Materials* materials=NULL;
 	Parameters* parameters=NULL;
-
+	
 	/*Boot module: */
 	MODULEBOOT();
@@ -30,13 +32,17 @@
 	/*checks on arguments on the matlab side: */
 	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&ModelProcessorUsage);
+	
+	/*open file input for reading: */
+	FetchData(&inputfilename,INPUTFILE);
+	IOMODEL= pfopen(inputfilename ,"rb");
 
+	/*retrieve solution type and analyses: */
 	FetchData(&solution_type,SOLUTIONTYPE);
-	
 	FetchData(&double_analyses,&numanalyses,ANALYSES);
 	analyses=(int*)xmalloc(numanalyses*sizeof(int));
 	for(i=0;i<numanalyses;i++)analyses[i]=(int)double_analyses[i];
-
+	
 	/*call x code ModelProcessorx: */
-	ModelProcessorx(&elements,&nodes,&vertices,&materials,&constraints, &loads, &parameters, MODEL,solution_type,numanalyses,analyses);
+	ModelProcessorx(&elements,&nodes,&vertices,&materials,&constraints, &loads, &parameters, IOMODEL,solution_type,numanalyses,analyses);
 
 	/*Write output data: */
@@ -59,4 +65,8 @@
 	xfree((void**)&analyses);
 	xfree((void**)&double_analyses);
+	xfree((void**)&inputfilename);
+	
+	/*Close input file: */
+	pfclose(IOMODEL,inputfilename);
 	
 	/*end module: */
@@ -66,6 +76,7 @@
 void ModelProcessorUsage(void) {
 	_printf_(true,"\n");
-	_printf_(true,"   usage: [elements,vertices,constraints,loads,materials,parameters,part,tpart]=ModelProcessor(model,analyses)\n");
+	_printf_(true,"   usage: [elements,vertices,constraints,loads,materials,parameters,part,tpart]=ModelProcessor(model,analyses,inputfile)\n");
 	_printf_(true,"   where: model is an instance of the matlab @model class and analyses is a list of analysis types being performed.\n");
+	_printf_(true,"          inputfile is the file holding the marshalled datasets from the model.\n");
 	_printf_(true,"\n");
 }
Index: /issm/trunk/src/mex/ModelProcessor/ModelProcessor.h
===================================================================
--- /issm/trunk/src/mex/ModelProcessor/ModelProcessor.h	(revision 8329)
+++ /issm/trunk/src/mex/ModelProcessor/ModelProcessor.h	(revision 8330)
@@ -23,5 +23,5 @@
 
 /* serial input macros: */
-#define MODEL (mxArray*)prhs[0]
+#define INPUTFILE (mxArray*)prhs[0]
 #define SOLUTIONTYPE (mxArray*)prhs[1]
 #define ANALYSES (mxArray*)prhs[2]
Index: /issm/trunk/src/mex/ParsePetscOptions/ParsePetscOptions.cpp
===================================================================
--- /issm/trunk/src/mex/ParsePetscOptions/ParsePetscOptions.cpp	(revision 8330)
+++ /issm/trunk/src/mex/ParsePetscOptions/ParsePetscOptions.cpp	(revision 8330)
@@ -0,0 +1,46 @@
+/*\file ParsePetscOptions.c
+ *\brief: add petsc options to parameters
+ */
+
+#include "./ParsePetscOptions.h"
+
+void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
+
+	/*input datasets: */
+	Parameters *parameters = NULL;
+	char*       petscoptionsfilename=NULL;
+	FILE*       petscoptionsfid=NULL;
+	
+	/*Boot module: */
+	MODULEBOOT();
+
+	/*checks on arguments on the matlab side: */
+	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&ParsePetscOptionsUsage);
+
+	/*Input datasets: */
+	FetchParams(&parameters,PARAMETERS);
+	FetchData(&petscoptionsfilename,PETSCOPTIONSFILENAME); 
+
+	petscoptionsfid=fopen(petscoptionsfilename,"r");
+	if(petscoptionsfid==NULL)_error_("could not open petsc solver options  file for reading\n");
+
+	ParsePetscOptionsx(parameters,petscoptionsfid);
+
+	/*write output datasets: */
+	WriteParams(PARAMETERSOUT,parameters);
+	
+	/*Free ressources: */
+	delete parameters;
+	xfree((void**)&petscoptionsfilename);
+	fclose(petscoptionsfid);
+
+	/*end module: */
+	MODULEEND();
+}
+
+void ParsePetscOptionsUsage(void)
+{
+	_printf_(true,"\n");
+	_printf_(true,"   usage: [parameters] = %s(parameters,petscoptionsfilename);\n",__FUNCT__);
+	_printf_(true,"\n");
+}
Index: /issm/trunk/src/mex/ParsePetscOptions/ParsePetscOptions.h
===================================================================
--- /issm/trunk/src/mex/ParsePetscOptions/ParsePetscOptions.h	(revision 8330)
+++ /issm/trunk/src/mex/ParsePetscOptions/ParsePetscOptions.h	(revision 8330)
@@ -0,0 +1,32 @@
+/*
+	ParsePetscOptions.h
+*/
+
+#ifndef _PARSEPETSCOPTIONS_H
+#define _PARSEPETSCOPTIONS_H
+
+/* local prototypes: */
+void ParsePetscOptionsUsage(void);
+
+#include "../../c/modules/modules.h"
+#include "../../c/Container/Container.h"
+#include "../../c/shared/shared.h"
+#include "../../c/EnumDefinitions/EnumDefinitions.h"
+
+#undef __FUNCT__ 
+#define __FUNCT__  "ParsePetscOptions"
+
+/* serial input macros: */
+#define PARAMETERS   (mxArray *)prhs[0]
+#define PETSCOPTIONSFILENAME        (mxArray *)prhs[1]
+
+/* serial output macros: */
+#define PARAMETERSOUT  (mxArray**)&plhs[0]
+
+/* serial arg counts: */
+#undef NLHS
+#define NLHS  1
+#undef NRHS
+#define NRHS  2
+
+#endif  /* _PARSEPETSCOPTIONS_H */
