Index: /issm/trunk-jpl/src/m/classes/model/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model/model.m	(revision 14620)
+++ /issm/trunk-jpl/src/m/classes/model/model.m	(revision 14621)
@@ -25,5 +25,5 @@
 		verbose          = 0;
 		settings         = 0;
-		solver           = 0;
+		toolkits         = 0;
 		cluster          = 0;
 
@@ -817,5 +817,5 @@
 			if isfield(structmd,'gridonwater'), md.mask.vertexonwater=structmd.gridonwater; end
 			if isfield(structmd,'gridonboundary'), md.mesh.vertexonboundary=structmd.gridonboundary; end
-			if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.solver=structmd.petscoptions; end
+			if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.toolkits=structmd.petscoptions; end
 			if isfield(structmd,'g'), md.constants.g=structmd.g; end
 			if isfield(structmd,'yts'), md.constants.yts=structmd.yts; end
@@ -1087,5 +1087,5 @@
 			md.verbose          = verbose();
 			md.settings         = settings();
-			md.solver           = solver();
+			md.toolkits         = toolkits();
 			md.cluster          = generic();
 			md.balancethickness = balancethickness();
@@ -1122,5 +1122,5 @@
 			disp(sprintf('%19s: %-22s -- %s','verbose'         ,['[1x1 ' class(obj.verbose) ']'],'verbosity level in solve'));
 			disp(sprintf('%19s: %-22s -- %s','settings'        ,['[1x1 ' class(obj.settings) ']'],'settings properties'));
-			disp(sprintf('%19s: %-22s -- %s','solver'          ,['[1x1 ' class(obj.solver) ']'],'PETSc options for each solution'));
+			disp(sprintf('%19s: %-22s -- %s','toolkits'          ,['[1x1 ' class(obj.toolkits) ']'],'PETSc options for each solution'));
 			disp(sprintf('%19s: %-22s -- %s','cluster'         ,['[1x1 ' class(obj.cluster) ']'],'cluster parameters (number of cpus...)'));
 			disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(obj.balancethickness) ']'],'parameters for balancethickness solution'));
Index: /issm/trunk-jpl/src/m/classes/model/model.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/model/model.py	(revision 14620)
+++ /issm/trunk-jpl/src/m/classes/model/model.py	(revision 14621)
@@ -18,5 +18,5 @@
 from verbose import verbose
 from settings import settings
-from solver import solver
+from toolkits import toolkits
 from generic import generic
 from balancethickness import balancethickness
@@ -68,5 +68,5 @@
 		self.verbose          = verbose()
 		self.settings         = settings()
-		self.solver           = solver()
+		self.toolkits         = toolkits()
 		self.cluster          = generic()
 
@@ -108,5 +108,5 @@
 		        'verbose',\
 		        'settings',\
-		        'solver',\
+		        'toolkits',\
 		        'cluster',\
 		        'balancethickness',\
@@ -147,5 +147,5 @@
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("verbose","[%s,%s]" % ("1x1",obj.verbose.__class__.__name__),"verbosity level in solve"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("settings","[%s,%s]" % ("1x1",obj.settings.__class__.__name__),"settings properties"))
-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("solver","[%s,%s]" % ("1x1",obj.solver.__class__.__name__),"PETSc options for each solution"))
+		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("toolkits","[%s,%s]" % ("1x1",obj.toolkits.__class__.__name__),"PETSc options for each solution"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("cluster","[%s,%s]" % ("1x1",obj.cluster.__class__.__name__),"cluster parameters (number of cpus...)"))
 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("balancethickness","[%s,%s]" % ("1x1",obj.balancethickness.__class__.__name__),"parameters for balancethickness solution"))
Index: sm/trunk-jpl/src/m/classes/solver.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/solver.m	(revision 14620)
+++ 	(revision )
@@ -1,117 +1,0 @@
-%SOLVER class definition
-%
-%   Usage:
-%      obj=solver();
-
-classdef solver < dynamicprops
-    properties (SetAccess=public) 
-		 NoneAnalysis           = struct();
-		 DiagnosticVertAnalysis = struct();
-		 %The other properties are dynamic
-	 end
-	 methods
-		 function obj = solver(varargin) % {{{
-			 switch nargin
-				 case 0
-					 obj=setdefaultparameters(obj);
-				 otherwise
-					 error('constructor not supported');
-				 end
-			 end % }}}
-		 function obj = addoptions(obj,analysis,varargin) % {{{
-		 % Usage example:
-		 %    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum(),stokesoptions());
-		 %    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum());
-
-			 %Convert analysis from enum to string
-			 analysis=EnumToString(analysis);
-
-			 %Create dynamic property if property does not exist yet
-			 if ~ismember(analysis,properties(obj)),
-				 obj.addprop(analysis);
-			 end
-
-			 %Add solver options to analysis
-			 if nargin==3, obj.(analysis) = varargin{1}; end
-		 end
-		 %}}}
-		 function obj = setdefaultparameters(obj) % {{{
-
-			 %MUMPS is the default solver
-			 if ismumps(),
-				 obj.NoneAnalysis           = mumpsoptions();
-				 obj.DiagnosticVertAnalysis = mumpsoptions();
-			 else
-				 obj.NoneAnalysis           = iluasmoptions();
-				 obj.DiagnosticVertAnalysis = iluasmoptions();
-			 end
-
-		 end % }}}
-		 function disp(obj) % {{{
-			 analyses=properties(obj);
-			 disp(sprintf('List of solver options per analysis:\n'));
-			 for i=1:numel(analyses),
-				 analysis=analyses{i};
-				 disp([analysis ':']);
-				 disp(obj.(analysis));
-			 end
-		 end % }}}
-		 function md = checkconsistency(obj,md,solution,analyses) % {{{
-			 analyses=properties(obj);
-			 for i=1:numel(analyses),
-				 if isempty(fieldnames(obj.(analyses{i})))
-					 md = checkmessage(md,['md.solver.' analyses{i} ' is empty']);
-				 end
-			 end
-		 end % }}}
-		 function PetscFile(solver,filename) % {{{
-		 %PETSCFILE - build petsc file
-		 %
-		 %   Build a Petsc compatible options file, from the solver model field  + return options string
-		 %
-		 %   Usage:     PetscFile(solver,filename);
-
-			 %open file for writing
-			 fid=fopen(filename,'w');
-			 if fid==-1,
-				 error(['PetscFile error: could not open ' filename ' for writing']);
-			 end
-
-			 %write header
-			 fprintf(fid,'%s%s%s\n','%Petsc options file: ',filename,' written from Matlab solver array');
-
-			 %start writing options
-			 analyses=properties(solver);
-			 for i=1:numel(analyses),
-				 analysis=analyses{i};
-				 options=solver.(analysis);
-
-				 %first write analysis:
-				 fprintf(fid,'\n+%s\n',analysis); %append a + to recognize it's an analysis enum
-
-				 %now, write options
-				 optionslist=fieldnames(options);
-				 for j=1:numel(optionslist),
-					 optionname=optionslist{j};
-					 optionvalue=options.(optionname);
-
-					 if isempty(optionvalue),
-						 %this option has only one argument
-						 fprintf(fid,'-%s\n',optionname);
-					 else
-						 %option with value. value can be string or scalar
-						 if isnumeric(optionvalue),
-							 fprintf(fid,'-%s %g\n',optionname,optionvalue);
-						 elseif ischar(optionvalue),
-							 fprintf(fid,'-%s %s\n',optionname,optionvalue);
-						 else
-							 error(['PetscFile error: option ' optionname ' is not well formatted']);
-						 end
-					 end
-				 end
-			 end
-
-			 fclose(fid);
-		 end %}}}
-	 end
- end
Index: sm/trunk-jpl/src/m/classes/solver.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/solver.py	(revision 14620)
+++ 	(revision )
@@ -1,108 +1,0 @@
-from ismumps import *
-from mumpsoptions import *
-from iluasmoptions import *
-from EnumToString import EnumToString
-from fielddisplay import fielddisplay
-from EnumDefinitions import *
-from checkfield import *
-from MatlabFuncs import *
-
-class solver(object):
-	"""
-	SOLVER class definition
-
-	   Usage:
-	      obj=solver();
-	"""
-
-	def __init__(self):    # {{{
-		#MUMPS is the default solver
-		if ismumps():
-			self.NoneAnalysis           = mumpsoptions()
-			self.DiagnosticVertAnalysis = mumpsoptions()
-		else:
-			self.NoneAnalysis           = iluasmoptions()
-			self.DiagnosticVertAnalysis = iluasmoptions()
-
-		#The other properties are dynamic
-	# }}}
-
-	def addoptions(self,analysis,*args):    # {{{
-		# Usage example:
-		#    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum(),stokesoptions());
-		#    md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum());
-
-		#Convert analysis from enum to string
-		[analysis]=EnumToString(analysis)
-
-		#Create dynamic property if property does not exist yet
-		if not hasattr(self,analysis):
-#			exec("self.%s = None" % analysis)
-			setattr(self,analysis,None)
-
-		#Add solver options to analysis
-		if len(args)==1:
-			setattr(self,analysis,args[0])
-
-		return self
-	# }}}
-
-	def __repr__(self):    # {{{
-		s ="List of solver options per analysis:\n\n"
-		for analysis in vars(self).iterkeys():
-			s+="%s\n" % fielddisplay(self,analysis,'')
-
-		return s
-	# }}}
-
-	def checkconsistency(self,md,solution,analyses):    # {{{
-		for analysis in vars(self).iterkeys():
-			if not getattr(self,analysis):
-				md.checkmessage("md.solver.%s is empty" % analysis)
-
-		return md
-	# }}}
-
-	def PetscFile(self,filename):    # {{{
-		"""
-		PETSCFILE - build petsc file
-
-		   Build a Petsc compatible options file, from the solver model field  + return options string
-
-		   Usage:     PetscFile(solver,filename);
-		"""
-
-		#open file for writing
-		try:
-			fid=open(filename,'w')
-		except IOError as e:
-			raise IOError("PetscFile error: could not open '%s' for writing." % filename)
-
-		#write header
-		fid.write("%s%s%s\n" % ('%Petsc options file: ',filename,' written from Matlab solver array'))
-
-		#start writing options
-		for analysis in vars(self).iterkeys():
-			options=getattr(self,analysis)
-
-			#first write analysis:
-			fid.write("\n+%s\n" % analysis)    #append a + to recognize it's an analysis enum
-
-			#now, write options
-			for optionname,optionvalue in options.iteritems():
-
-				if not optionvalue:
-					#this option has only one argument
-					fid.write("-%s\n" % optionname)
-				else:
-					#option with value. value can be string or scalar
-					if   isinstance(optionvalue,(bool,int,long,float)):
-						fid.write("-%s %g\n" % (optionname,optionvalue))
-					elif isinstance(optionvalue,(str,unicode)):
-						fid.write("-%s %s\n" % (optionname,optionvalue))
-					else:
-						raise TypeError("PetscFile error: option '%s' is not well formatted." % optionname)
-
-		fid.close()
-	# }}}
-
Index: /issm/trunk-jpl/src/m/classes/toolkits.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/toolkits.m	(revision 14621)
+++ /issm/trunk-jpl/src/m/classes/toolkits.m	(revision 14621)
@@ -0,0 +1,120 @@
+%TOOLKITS class definition
+%
+%   Usage:
+%      obj=toolkits();
+
+classdef toolkits < dynamicprops
+    properties (SetAccess=public) 
+		 NoneAnalysis           = struct();
+		 DiagnosticVertAnalysis = struct();
+		 %The other properties are dynamic
+	 end
+	 methods
+		 function obj = toolkits(varargin) % {{{
+			 switch nargin
+				 case 0
+					 obj=setdefaultparameters(obj);
+				 case 1
+					 obj=structtoobj(obj,varargin{1});
+				 otherwise
+					 error('constructor not supported');
+				 end
+			 end % }}}
+		 function obj = addoptions(obj,analysis,varargin) % {{{
+		 % Usage example:
+		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),stokesoptions());
+		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
+
+			 %Convert analysis from enum to string
+			 analysis=EnumToString(analysis);
+
+			 %Create dynamic property if property does not exist yet
+			 if ~ismember(analysis,properties(obj)),
+				 obj.addprop(analysis);
+			 end
+
+			 %Add toolkits options to analysis
+			 if nargin==3, obj.(analysis) = varargin{1}; end
+		 end
+		 %}}}
+		 function obj = setdefaultparameters(obj) % {{{
+
+			 %MUMPS is the default toolkits
+			 if ismumps(),
+				 obj.NoneAnalysis           = mumpsoptions();
+				 obj.DiagnosticVertAnalysis = mumpsoptions();
+			 else
+				 obj.NoneAnalysis           = iluasmoptions();
+				 obj.DiagnosticVertAnalysis = iluasmoptions();
+			 end
+
+		 end % }}}
+		 function disp(obj) % {{{
+			 analyses=properties(obj);
+			 disp(sprintf('List of toolkits options per analysis:\n'));
+			 for i=1:numel(analyses),
+				 analysis=analyses{i};
+				 disp([analysis ':']);
+				 disp(obj.(analysis));
+			 end
+		 end % }}}
+		 function md = checkconsistency(obj,md,solution,analyses) % {{{
+			 analyses=properties(obj);
+			 for i=1:numel(analyses),
+				 if isempty(fieldnames(obj.(analyses{i})))
+					 md = checkmessage(md,['md.toolkits.' analyses{i} ' is empty']);
+				 end
+			 end
+		 end % }}}
+		 function ToolkitsFile(toolkits,filename) % {{{
+		 %TOOLKITSFILE - build petsc file
+		 %
+		 %   Build a Petsc compatible options file, from the toolkits model field  + return options string. 
+		 %   This file will also be used when the toolkit used is 'issm' instead of 'petsc'
+		 %
+		 %   Usage:     ToolkitsFile(toolkits,filename);
+
+			 %open file for writing
+			 fid=fopen(filename,'w');
+			 if fid==-1,
+				 error(['ToolkitsFile error: could not open ' filename ' for writing']);
+			 end
+
+			 %write header
+			 fprintf(fid,'%s%s%s\n','%Toolkits options file: ',filename,' written from Matlab toolkits array');
+
+			 %start writing options
+			 analyses=properties(toolkits);
+			 for i=1:numel(analyses),
+				 analysis=analyses{i};
+				 options=toolkits.(analysis);
+
+				 %first write analysis:
+				 fprintf(fid,'\n+%s\n',analysis); %append a + to recognize it's an analysis enum
+
+				 %now, write options
+				 optionslist=fieldnames(options);
+				 for j=1:numel(optionslist),
+					 optionname=optionslist{j};
+					 optionvalue=options.(optionname);
+
+					 if isempty(optionvalue),
+						 %this option has only one argument
+						 fprintf(fid,'-%s\n',optionname);
+					 else
+						 %option with value. value can be string or scalar
+						 if isnumeric(optionvalue),
+							 fprintf(fid,'-%s %g\n',optionname,optionvalue);
+						 elseif ischar(optionvalue),
+							 fprintf(fid,'-%s %s\n',optionname,optionvalue);
+						 else
+							 error(['ToolkitsFile error: option ' optionname ' is not well formatted']);
+						 end
+					 end
+				 end
+			 end
+
+			 fclose(fid);
+		 end %}}}
+	 end
+ end
Index: /issm/trunk-jpl/src/m/classes/toolkits.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/toolkits.py	(revision 14621)
+++ /issm/trunk-jpl/src/m/classes/toolkits.py	(revision 14621)
@@ -0,0 +1,110 @@
+from ismumps import *
+from mumpsoptions import *
+from iluasmoptions import *
+from EnumToString import EnumToString
+from fielddisplay import fielddisplay
+from EnumDefinitions import *
+from checkfield import *
+from MatlabFuncs import *
+
+class toolkits(object):
+	"""
+	TOOLKITS class definition
+
+	   Usage:
+	      obj=toolkits();
+	"""
+
+	def __init__(self):    # {{{
+		#MUMPS is the default toolkits
+		if ismumps():
+			self.NoneAnalysis           = mumpsoptions()
+			self.DiagnosticVertAnalysis = mumpsoptions()
+		else:
+			self.NoneAnalysis           = iluasmoptions()
+			self.DiagnosticVertAnalysis = iluasmoptions()
+
+		#The other properties are dynamic
+	# }}}
+
+	def addoptions(self,analysis,*args):    # {{{
+		# Usage example:
+		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),stokesoptions());
+		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
+
+		#Convert analysis from enum to string
+		[analysis]=EnumToString(analysis)
+
+		#Create dynamic property if property does not exist yet
+		if not hasattr(self,analysis):
+#			exec("self.%s = None" % analysis)
+			setattr(self,analysis,None)
+
+		#Add toolkits options to analysis
+		if len(args)==1:
+			setattr(self,analysis,args[0])
+
+		return self
+	# }}}
+
+	def __repr__(self):    # {{{
+		s ="List of toolkits options per analysis:\n\n"
+		for analysis in vars(self).iterkeys():
+			s+="%s\n" % fielddisplay(self,analysis,'')
+
+		return s
+	# }}}
+
+	def checkconsistency(self,md,solution,analyses):    # {{{
+		for analysis in vars(self).iterkeys():
+			if not getattr(self,analysis):
+				md.checkmessage("md.toolkits.%s is empty" % analysis)
+
+		return md
+	# }}}
+
+	def ToolkitsFile(self,filename):    # {{{
+		"""
+		TOOLKITSFILE- build toolkits file
+
+		   Build a Petsc compatible options file, from the toolkits model field  + return options string
+		   This file will also be used when the toolkit used is 'issm' instead of 'petsc'
+
+
+		   Usage:     ToolkitsFile(toolkits,filename);
+		"""
+
+		#open file for writing
+		try:
+			fid=open(filename,'w')
+		except IOError as e:
+			raise IOError("ToolkitsFile error: could not open '%s' for writing." % filename)
+
+		#write header
+		fid.write("%s%s%s\n" % ('%Petsc options file: ',filename,' written from Matlab toolkits array'))
+
+		#start writing options
+		for analysis in vars(self).iterkeys():
+			options=getattr(self,analysis)
+
+			#first write analysis:
+			fid.write("\n+%s\n" % analysis)    #append a + to recognize it's an analysis enum
+
+			#now, write options
+			for optionname,optionvalue in options.iteritems():
+
+				if not optionvalue:
+					#this option has only one argument
+					fid.write("-%s\n" % optionname)
+				else:
+					#option with value. value can be string or scalar
+					if   isinstance(optionvalue,(bool,int,long,float)):
+						fid.write("-%s %g\n" % (optionname,optionvalue))
+					elif isinstance(optionvalue,(str,unicode)):
+						fid.write("-%s %s\n" % (optionname,optionvalue))
+					else:
+						raise TypeError("ToolkitsFile error: option '%s' is not well formatted." % optionname)
+
+		fid.close()
+	# }}}
+
Index: /issm/trunk-jpl/src/m/solve/solve.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.m	(revision 14620)
+++ /issm/trunk-jpl/src/m/solve/solve.m	(revision 14621)
@@ -76,5 +76,5 @@
 %Write all input files
 marshall(md);                                          % bin file
-PetscFile(md.solver,[md.miscellaneous.name '.petsc']); % petsc file
+ToolkitsFile(md.solver,[md.miscellaneous.name '.petsc']); % petsc file
 BuildQueueScript(cluster,md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof); % queue file
 
Index: /issm/trunk-jpl/src/m/solve/solve.py
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.py	(revision 14620)
+++ /issm/trunk-jpl/src/m/solve/solve.py	(revision 14621)
@@ -80,5 +80,5 @@
 	#Write all input files
 	marshall(md)                                           # bin file
-	md.solver.PetscFile(md.miscellaneous.name+'.petsc')    # petsc file
+	md.solver.ToolkitsFile(md.miscellaneous.name+'.petsc')    # petsc file
 	cluster.BuildQueueScript(md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof)    # queue file
 
