Index: /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13548)
+++ /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13549)
@@ -512,4 +512,6 @@
 	OldGradientEnum,
 	OutputFilePointerEnum,
+	OutputFileNameEnum,
+	LockFileNameEnum,
 	PetscOptionsAnalysesEnum,
 	PetscOptionsStringsEnum,
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 13548)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 13549)
@@ -236,4 +236,5 @@
 					./io/Disk/pfopen.cpp\
 					./io/Disk/pfclose.cpp\
+					./io/Disk/WriteLockFile.cpp\
 					./io/PrintfFunction.cpp\
 					./EnumDefinitions/EnumDefinitions.h\
@@ -344,5 +345,4 @@
 					./solutions/convergence.cpp\
 					./solutions/ProcessArguments.cpp\
-					./solutions/WriteLockFile.cpp\
 					./solutions/ResetBoundaryConditions.cpp\
 					./solutions/AnalysisConfiguration.cpp\
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13548)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13549)
@@ -20,5 +20,5 @@
 /*Object constructors and destructor*/
 /*FUNCTION FemModel::constructor {{{*/
-FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, const int in_solution_type,const int* analyses,const int nummodels){
+FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){
 
 	/*intermediary*/
@@ -26,4 +26,6 @@
 	int         analysis_type;
 	FILE       *IOMODEL = NULL;
+	FILE       *petscoptionsfid = NULL;
+	FILE       *output_fid = NULL;
 	extern int  my_rank;
 
@@ -71,6 +73,16 @@
 	if(my_rank==0) pfclose(IOMODEL,inputfilename);
 
-	/*Add output file name to parameters: */
-	this->parameters->AddObject(new StringParam(OutputfilenameEnum,outputfilename));
+	/*Open output file once for all and add output file name and file descriptor to parameters*/
+	output_fid=pfopen(outputfilename,"wb");
+	this->parameters->AddObject(new StringParam(OutputFileNameEnum,outputfilename));
+	this->parameters->SetParam(output_fid,OutputFilePointerEnum);
+	
+	/*Save lock file name for later: */
+	this->parameters->AddObject(new StringParam(LockFileNameEnum,lockfilename));
+
+	/*Now, deal with petsc options, which need to be put into the parameters dataset: */
+	petscoptionsfid=pfopen(petscfilename,"r");
+	ParsePetscOptionsx(this->parameters,petscoptionsfid);
+	pfclose(petscoptionsfid,petscfilename);
 }
 /*}}}*/
@@ -80,7 +92,26 @@
 	/*Intermediary*/
 	int i;
+	FILE* output_fid;
+	char* outbinfilename=NULL;
+	char* lockfilename=NULL;
+	bool   waitonlock=false;
+
+	/*Close output file: */
+	this->parameters->FindParam(&output_fid,OutputFilePointerEnum); 
+	this->parameters->FindParam(&outbinfilename,OutputFileNameEnum); 
+	pfclose(output_fid,outbinfilename);
+	
+	/*Write lock file if requested: */
+	this->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
+	this->parameters->FindParam(&lockfilename,LockFileNameEnum);
+	if (waitonlock>0){
+		_pprintLine_("write lock file:");
+		WriteLockFile(lockfilename);
+	}
 
 	/*Delete all the datasets: */
 	xDelete<int>(analysis_type_list);
+	xDelete<char>(outbinfilename);
+	xDelete<char>(lockfilename);
 	delete elements;
 	delete nodes;
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13548)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13549)
@@ -43,5 +43,5 @@
 
 		/*constructors, destructors: */
-		FemModel(char* rootpath, char* inputfilename, char* outputfilename, const int solution_type,const int* analyses,const int nummodels);
+		FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
 		~FemModel();
 
Index: /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp
===================================================================
--- /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13549)
+++ /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13549)
@@ -0,0 +1,25 @@
+/*!\file:  WriteLockFile.cpp
+ * \brief
+ */ 
+#include <stdio.h>
+#include "../../shared/shared.h"
+#include "../../include/include.h"
+
+void WriteLockFile(char* filename){
+
+	int i;
+	extern int my_rank;
+	
+	/* output: */
+	FILE* fid=NULL;
+
+	/* Open lock file and write 1 into it: */
+	if(my_rank==0){
+		fid=fopen(filename,"w");
+		if(fid==NULL) _error_("error message: could not open lock file " << filename);
+
+		/*Close file: */
+		if(fclose(fid)!=0) _error_("could not close lock file " << filename);
+	}
+
+}	
Index: /issm/trunk-jpl/src/c/io/Disk/diskio.h
===================================================================
--- /issm/trunk-jpl/src/c/io/Disk/diskio.h	(revision 13548)
+++ /issm/trunk-jpl/src/c/io/Disk/diskio.h	(revision 13549)
@@ -10,4 +10,5 @@
 FILE* pfopen(char* filename,const char* format);
 void  pfclose(FILE* fid,char* filename);
+void WriteLockFile(char* filename);
 
 #endif	/* _IO_H_ */
Index: /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13548)
+++ /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13549)
@@ -489,4 +489,6 @@
 		case OldGradientEnum : return "OldGradient";
 		case OutputFilePointerEnum : return "OutputFilePointer";
+		case OutputFileNameEnum : return "OutputFileName";
+		case LockFileNameEnum : return "LockFileName";
 		case PetscOptionsAnalysesEnum : return "PetscOptionsAnalyses";
 		case PetscOptionsStringsEnum : return "PetscOptionsStrings";
Index: /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13548)
+++ /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13549)
@@ -499,4 +499,6 @@
 	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
 	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
+	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
+	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
 	      else if (strcmp(name,"PetscOptionsAnalyses")==0) return PetscOptionsAnalysesEnum;
 	      else if (strcmp(name,"PetscOptionsStrings")==0) return PetscOptionsStringsEnum;
@@ -505,10 +507,10 @@
 	      else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
 	      else if (strcmp(name,"Regular")==0) return RegularEnum;
-	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
-	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"Sset")==0) return SsetEnum;
+	      if (strcmp(name,"Scaled")==0) return ScaledEnum;
+	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
+	      else if (strcmp(name,"Sset")==0) return SsetEnum;
 	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
Index: sm/trunk-jpl/src/c/solutions/WriteLockFile.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/WriteLockFile.cpp	(revision 13548)
+++ 	(revision )
@@ -1,25 +1,0 @@
-/*!\file:  WriteLockFile.cpp
- * \brief
- */ 
-#include <stdio.h>
-#include "../shared/shared.h"
-#include "../include/include.h"
-
-void WriteLockFile(char* filename){
-
-	int i;
-	extern int my_rank;
-	
-	/* output: */
-	FILE* fid=NULL;
-
-	/* Open lock file and write 1 into it: */
-	if(my_rank==0){
-		fid=fopen(filename,"w");
-		if(fid==NULL) _error_("error message: could not open lock file " << filename);
-
-		/*Close file: */
-		if(fclose(fid)!=0) _error_("could not close lock file " << filename);
-	}
-
-}	
Index: /issm/trunk-jpl/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13548)
+++ /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13549)
@@ -10,9 +10,4 @@
 
 int main(int argc,char **argv){
-
-	/*I/O: */
-	FILE *output_fid       = NULL;
-	FILE *petscoptionsfid  = NULL;
-	bool  waitonlock       = false;
 
 	/*FemModel: */
@@ -50,4 +45,5 @@
 	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
 	_pprintLine_("");
+
 	ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&rootpath,argc,argv);
 
@@ -55,24 +51,12 @@
 	AnalysisConfiguration(&analyses,&numanalyses,solution_type);
 
-	/*Create femmodel, using input file: */
+	/*Create femmodel from input files: */
 	profiler->Tag(StartInit);
-	femmodel=new FemModel(rootpath,binfilename,outbinfilename,solution_type,analyses,numanalyses);
-	
-	/*get type of solution we are going to run: */
-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
-
-	/*Open output file once for all*/
-	output_fid=pfopen(outbinfilename,"wb");
-	femmodel->parameters->SetParam(output_fid,OutputFilePointerEnum);
-
-	/*add petsc options to parameters: */
-	petscoptionsfid=pfopen(petscfilename,"r");
-	ParsePetscOptionsx(femmodel->parameters,petscoptionsfid);
-	pfclose(petscoptionsfid,petscfilename);
-
+	femmodel=new FemModel(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,solution_type,analyses,numanalyses);
 	profiler->Tag(FinishInit);
 	
 	/*call cores: */
 	_pprintLine_("call computational core:");
+	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
 	profiler->Tag(StartCore);   solutioncore(femmodel); profiler->Tag(FinishCore); 
 	profiler->Tag(StartAdCore); ad_core(femmodel);      profiler->Tag(FinishAdCore); 
@@ -82,12 +66,8 @@
 	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
 	
-	/*Close output and petsc options file and write lock file if requested*/
-	pfclose(output_fid,lockfilename);
-	femmodel->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
-	if (waitonlock>0){
-		_pprintLine_("write lock file:");
-		WriteLockFile(lockfilename);
-	}
-
+	/*Profiling at the end: */
+	profiler->Tag(Finish); 
+	ProfilerEcho(profiler);
+	
 	/*Free resources */
 	xDelete<int>(analyses);
@@ -98,8 +78,4 @@
 	xDelete<char>(rootpath);
 	delete femmodel;
-
-	/*Profiling at the end: */
-	profiler->Tag(Finish); 
-	ProfilerEcho(profiler);
 
 	/*Finalize environment:*/
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13548)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13549)
@@ -4729,4 +4729,24 @@
 	return StringToEnum('OutputFilePointer')[0]
 
+def OutputFileNameEnum():
+	"""
+	OUTPUTFILENAMEENUM - Enum of OutputFileName
+
+	   Usage:
+	      macro=OutputFileNameEnum()
+	"""
+
+	return StringToEnum('OutputFileName')[0]
+
+def LockFileNameEnum():
+	"""
+	LOCKFILENAMEENUM - Enum of LockFileName
+
+	   Usage:
+	      macro=LockFileNameEnum()
+	"""
+
+	return StringToEnum('LockFileName')[0]
+
 def PetscOptionsAnalysesEnum():
 	"""
@@ -4977,4 +4997,4 @@
 	"""
 
-	return 496
-
+	return 498
+
Index: /issm/trunk-jpl/src/m/enum/LockFileNameEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/LockFileNameEnum.m	(revision 13549)
+++ /issm/trunk-jpl/src/m/enum/LockFileNameEnum.m	(revision 13549)
@@ -0,0 +1,11 @@
+function macro=LockFileNameEnum()
+%LOCKFILENAMEENUM - Enum of LockFileName
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=LockFileNameEnum()
+
+macro=StringToEnum('LockFileName');
Index: /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13548)
+++ /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13549)
@@ -9,3 +9,3 @@
 %      macro=MaximumNumberOfEnums()
 
-macro=496;
+macro=498;
Index: /issm/trunk-jpl/src/m/enum/OutputfilenameEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/OutputfilenameEnum.m	(revision 13548)
+++ /issm/trunk-jpl/src/m/enum/OutputfilenameEnum.m	(revision 13549)
@@ -1,4 +1,4 @@
-function macro=OutputfilenameEnum()
-%OUTPUTFILENAMEENUM - Enum of Outputfilename
+function macro=OutputFileNameEnum()
+%OUTPUTFILENAMEENUM - Enum of OutputFileName
 %
 %   WARNING: DO NOT MODIFY THIS FILE
@@ -7,5 +7,5 @@
 %
 %   Usage:
-%      macro=OutputfilenameEnum()
+%      macro=OutputFileNameEnum()
 
-macro=StringToEnum('Outputfilename');
+macro=StringToEnum('OutputFileName');
