Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13277)
@@ -21,5 +21,5 @@
 /*Object constructors and destructor*/
 /*FUNCTION FemModel::constructor {{{*/
-FemModel::FemModel(char* inputfilename, char* outputfilename, const int in_solution_type,const int* analyses,const int nummodels){
+FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, const int in_solution_type,const int* analyses,const int nummodels){
 
 	/*intermediary*/
@@ -45,5 +45,5 @@
 
 	/*create datasets for all analyses*/
-	ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,IOMODEL,this->solution_type,nummodels,analyses);
+	ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,IOMODEL,rootpath,this->solution_type,nummodels,analyses);
 
 	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13276)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13277)
@@ -43,5 +43,5 @@
 
 		/*constructors, destructors: */
-		FemModel(char* inputfilename, char* outputfilename, const int solution_type,const int* analyses,const int nummodels);
+		FemModel(char* rootpath, char* inputfilename, char* outputfilename, const int solution_type,const int* analyses,const int nummodels);
 		~FemModel();
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 13277)
@@ -16,5 +16,5 @@
 
 
-void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
+void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
 
 	bool        continuous = true;
@@ -133,5 +133,5 @@
 
 	/*Generate objects that are not dependent on any analysis_type: */
-	CreateParameters(pparameters,iomodel,solution_type,analysis_type,analysis_counter);
+	CreateParameters(pparameters,iomodel,rootpath,solution_type,analysis_type,analysis_counter);
 
 	/*Update Elements in case we are running a transient solution: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13277)
@@ -19,5 +19,5 @@
 #include "./ModelProcessorx.h"
 
-void CreateParameters(Parameters** pparameters,IoModel* iomodel,const int solution_type,int analysis_type,int analysis_counter){
+void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter){
 	
 	int         i;
@@ -143,5 +143,5 @@
 
 	#ifdef _HAVE_DAKOTA_
-	CreateParametersDakota(&parameters,iomodel,solution_type,analysis_type);
+	CreateParametersDakota(&parameters,iomodel,rootpath,solution_type,analysis_type);
 	#endif
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13277)
@@ -13,5 +13,5 @@
 #include "../ModelProcessorx.h"
 
-void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type){
 
 	/*variable declarations: {{{*/
@@ -74,14 +74,14 @@
 
 		/*name of qmu input, error and output files:{{{*/
-		qmuinname=xNew<char>((strlen(name)+strlen(".qmu.in")+1));
-		sprintf(qmuinname,"%s%s",name,".qmu.in");
+		qmuinname=xNew<char>((strlen(rootpath)+strlen(name)+strlen(".qmu.in")+1));
+		sprintf(qmuinname,"%s%s%s",rootpath,name,".qmu.in");
 		parameters->AddObject(new   StringParam(QmuInNameEnum,qmuinname));
 
-		qmuoutname=xNew<char>((strlen(name)+strlen(".qmu.out")+1));
-		sprintf(qmuoutname,"%s%s",name,".qmu.out");
+		qmuoutname=xNew<char>((strlen(rootpath)+strlen(name)+strlen(".qmu.out")+1));
+		sprintf(qmuoutname,"%s%s%s",rootpath,name,".qmu.out");
 		parameters->AddObject(new   StringParam(QmuOutNameEnum,qmuoutname));
 
-		qmuerrname=xNew<char>((strlen(name)+strlen(".qmu.err")+1));
-		sprintf(qmuerrname,"%s%s",name,".qmu.err");
+		qmuerrname=xNew<char>((strlen(rootpath)+strlen(name)+strlen(".qmu.err")+1));
+		sprintf(qmuerrname,"%s%s%s",rootpath,name,".qmu.err");
 		parameters->AddObject(new   StringParam(QmuErrNameEnum,qmuerrname));
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 13277)
@@ -17,5 +17,5 @@
 #include "../../modules/modules.h"
 
-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){
+void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
 
 	int   i,analysis_type,dim,verbose;
@@ -69,8 +69,8 @@
 	
 		if(VerboseMProcessor()) _pprintLine_("   creating datasets for analysis " << EnumToStringx(analysis_type));
-		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,solution_type,analysis_type,nummodels,i);
+		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,rootpath,solution_type,analysis_type,nummodels,i);
 	}
 
-	/*Free ressources:*/
+	/*Free resources:*/
 	delete iomodel;
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 13276)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 13277)
@@ -15,12 +15,12 @@
 #include "../../io/io.h"
 
-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);
+void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
 
 /*Creation of fem datasets: general drivers*/
-void  CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
+void  CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
 void  CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels);
-void  CreateParameters(Parameters** pparameters,IoModel* iomodel,const int solution_type,int analysis_type,int analysis_counter);
+void  CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter);
 void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
-void  CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+void  CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
 void  CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
 void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
Index: /issm/trunk-jpl/src/c/solutions/ProcessArguments.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/ProcessArguments.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/solutions/ProcessArguments.cpp	(revision 13277)
@@ -9,5 +9,5 @@
 #include "../include/include.h"
 
-void ProcessArguments(int* solution_type,char** pbinfilename,char** poutbinfilename,char** ppetscfilename,char** plockfilename,int argc,char **argv){
+void ProcessArguments(int* solution_type,char** pbinfilename,char** poutbinfilename,char** ppetscfilename,char** plockfilename,char** prootpath, int argc,char **argv){
 
 	char *modelname      = NULL;
@@ -16,13 +16,32 @@
 	char *petscfilename  = NULL;
 	char *lockfilename   = NULL;
+	char *rootpath       = NULL;
+	char *rootpatharg    = NULL;
 
 	if(argc<2)_error_("Usage error: no solution requested");
 	*solution_type=StringToEnumx(argv[1]);
 	if(argc<3)_error_("Usage error: missing model name");
+
+	rootpatharg=argv[2];
+	if(strcmp(strstr(rootpatharg,"/"),"/")!=0){ 
+		rootpath       = xNew<char>(strlen(rootpatharg)+2); sprintf(rootpath,"%s/",rootpatharg);
+	}
+	else{
+		rootpath       = xNew<char>(strlen(rootpatharg)+1); sprintf(rootpath,"%s",rootpatharg);
+	}
+
 	modelname=argv[3];
-	binfilename    = xNew<char>(strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s",modelname,".bin");
-	outbinfilename = xNew<char>(strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s",modelname,".outbin");
-	petscfilename  = xNew<char>(strlen(modelname)+strlen(".petsc") +1); sprintf(petscfilename, "%s%s",modelname,".petsc");
-	lockfilename   = xNew<char>(strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s",modelname,".lock");
+	if(strstr(modelname,rootpath)==NULL){
+		binfilename    = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s%s",rootpath,modelname,".bin");
+		outbinfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s%s",rootpath,modelname,".outbin");
+		petscfilename  = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".petsc") +1); sprintf(petscfilename, "%s%s%s",rootpath,modelname,".petsc");
+		lockfilename   = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s%s",rootpath,modelname,".lock");
+	}
+	else{
+		binfilename    = xNew<char>(strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s",modelname,".bin");
+		outbinfilename = xNew<char>(strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s",modelname,".outbin");
+		petscfilename  = xNew<char>(strlen(modelname)+strlen(".petsc") +1); sprintf(petscfilename, "%s%s",modelname,".petsc");
+		lockfilename   = xNew<char>(strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s",modelname,".lock");
+	}
 
 	/*Clean up and assign output pointer*/
@@ -31,3 +50,5 @@
 	*ppetscfilename=petscfilename;
 	*plockfilename=lockfilename;
+	*prootpath=rootpath;
+
 }
Index: /issm/trunk-jpl/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13277)
@@ -37,4 +37,5 @@
 	char *outbinfilename = NULL;
 	char *petscfilename  = NULL;
+	char *rootpath       = NULL;
 
 	/*time*/
@@ -79,5 +80,5 @@
 	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
 	_pprintLine_("");
-	ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,argc,argv);
+	ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&rootpath,argc,argv);
 
 	/*out of solution_type, figure out types of analyses needed in the femmodel: */
@@ -90,5 +91,5 @@
 	start_init=(IssmPDouble)clock();
 	#endif
-	femmodel=new FemModel(binfilename,outbinfilename,solution_type,analyses,numanalyses);
+	femmodel=new FemModel(rootpath,binfilename,outbinfilename,solution_type,analyses,numanalyses);
 	
 	/*get type of solution we are going to run: */
@@ -203,4 +204,5 @@
 	xDelete<char>(outbinfilename);
 	xDelete<char>(petscfilename);
+	xDelete<char>(rootpath);
 	delete femmodel;
 
Index: /issm/trunk-jpl/src/c/solutions/kriging.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/kriging.cpp	(revision 13276)
+++ /issm/trunk-jpl/src/c/solutions/kriging.cpp	(revision 13277)
@@ -7,5 +7,5 @@
 
 /*Local prototypes*/
-void ProcessArguments2(char** pbinfilename,char** poutbinfilename,char** plockfilename,int argc,char **argv);
+void ProcessArguments2(char** pbinfilename,char** poutbinfilename,char** plockfilename,char** prootpath,int argc,char **argv);
 void ProcessInputfile(IssmDouble **px,IssmDouble **py,IssmDouble **pdata,int *pnobs,IssmDouble **px_interp,IssmDouble **py_interp,int *pninterp,Options **poptions,FILE* fid);
 
@@ -21,4 +21,5 @@
 	char *binfilename    = NULL;
 	char *outbinfilename = NULL;
+	char *rootpath       = NULL;
 
 	/*Input*/
@@ -58,5 +59,5 @@
 	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
 	_pprintLine_("");
-	ProcessArguments2(&binfilename,&outbinfilename,&lockfilename,argc,argv);
+	ProcessArguments2(&binfilename,&outbinfilename,&lockfilename,&rootpath,argc,argv);
 
 	/*Process input files*/
@@ -89,4 +90,5 @@
 	xDelete<char>(binfilename);
 	xDelete<char>(outbinfilename);
+	xDelete<char>(rootpath);
 	xDelete<IssmDouble>(x);
 	xDelete<IssmDouble>(y);
@@ -115,5 +117,5 @@
 }
 
-void ProcessArguments2(char** pbinfilename,char** poutbinfilename,char** plockfilename,int argc,char **argv){
+void ProcessArguments2(char** pbinfilename,char** poutbinfilename,char** plockfilename,char** prootpath,int argc,char **argv){
 
 	char *modelname      = NULL;
@@ -121,10 +123,29 @@
 	char *outbinfilename = NULL;
 	char *lockfilename   = NULL;
-
+	char *rootpatharg    = NULL;
+	char *rootpath       = NULL;
+
+	if(argc<1)_error_("Usage error: no execution path provided");
 	if(argc<2)_error_("Usage error: missing model name");
+
+	rootpatharg=argv[1];
+	if(strcmp(strstr(rootpatharg,"/"),"/")!=0){ 
+		rootpath       = xNew<char>(strlen(rootpatharg)+2); sprintf(rootpath,"%s/",rootpatharg);
+	}  
+	else{
+		rootpath       = xNew<char>(strlen(rootpatharg)+1); sprintf(rootpath,"%s",rootpatharg);
+	} 
+
 	modelname=argv[2];
-	binfilename    = xNew<char>((strlen(modelname)+strlen(".bin")   +1)); sprintf(binfilename,   "%s%s",modelname,".bin");
-	outbinfilename = xNew<char>((strlen(modelname)+strlen(".outbin")+1)); sprintf(outbinfilename,"%s%s",modelname,".outbin");
-	lockfilename   = xNew<char>((strlen(modelname)+strlen(".lock")  +1)); sprintf(lockfilename,  "%s%s",modelname,".lock");
+	if(strstr(modelname,rootpath)==NULL){
+		binfilename    = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s%s",rootpath,modelname,".bin");
+		outbinfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s%s",rootpath,modelname,".outbin");
+		lockfilename   = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s%s",rootpath,modelname,".lock");
+	}
+	else{
+		binfilename    = xNew<char>(strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s",modelname,".bin");
+		outbinfilename = xNew<char>(strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s",modelname,".outbin");
+		lockfilename   = xNew<char>(strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s",modelname,".lock");
+	}
 
 	/*Clean up and assign output pointer*/
@@ -132,4 +153,6 @@
 	*poutbinfilename=outbinfilename;
 	*plockfilename=lockfilename;
+	*prootpath=rootpath;
+
 }
 
Index: /issm/trunk-jpl/src/c/solutions/solutions.h
===================================================================
--- /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 13276)
+++ /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 13277)
@@ -41,5 +41,5 @@
 
 //diverse
-void ProcessArguments(int* solution,char** pbinname,char** poutbinname,char** ppetscname,char** plockname,int argc,char **argv);
+void ProcessArguments(int* solution,char** pbinname,char** poutbinname,char** ppetscname,char** plockname,char** prootpath,int argc,char **argv);
 void WriteLockFile(char* filename);
 void controlrestart(FemModel* femmodel,IssmDouble* J);
