Index: /issm/trunk-jpl/src/py/classes/solver.py
===================================================================
--- /issm/trunk-jpl/src/py/classes/solver.py	(revision 11789)
+++ /issm/trunk-jpl/src/py/classes/solver.py	(revision 11790)
@@ -1,6 +1,8 @@
-#module imports
+#module imports {{{
 import fielddisplay 
 import ismumps
-
+from  mumpsoptions import *
+from  iluasmoptions import *
+#}}}
 class solver:
 	#properties
@@ -8,7 +10,7 @@
 		# {{{ Properties
 		if ismumps:
-			self.options=['NoneAnalysis',mumpsoptions]
+			self.options=[["NoneAnalysis",mumpsoptions()]]
 		else:
-			self.options=['NoneAnalysis',iluasmoptions]
+			self.options=[["NoneAnalysis",iluasmoptions()]]
 		#}}}
 	def __repr__(obj):
@@ -36,4 +38,6 @@
 					elif isinstance(option[1],str):
 						string="%s%s%s%s%s"%(string," -",option[0]," ",option[1])
+					elif isinstance(option[1],int):
+						string="%s%s%s%s%s"%(string," -",option[0]," ","%i"%(option[1]))
 					else:
 						raise RuntimeError("%s%s%s"%("PetscString error: option #","%i"%(i)," is not well formatted"))
Index: /issm/trunk-jpl/src/py/model/petscversion.py
===================================================================
--- /issm/trunk-jpl/src/py/model/petscversion.py	(revision 11790)
+++ /issm/trunk-jpl/src/py/model/petscversion.py	(revision 11790)
@@ -0,0 +1,39 @@
+#PETSCVERSION - recover petsc version number, inside config.h file
+#
+#   Usage:
+#       PETSC_VERSION=petscversion();
+
+#Module imports {{{
+import os
+import sys
+from issmtier import *
+#}}}
+
+def petscversion():
+
+	#default
+	PETSC_VERSION=3;
+	
+	configfile=issmtier() + "/bin/config.h" #should find it in the install target
+	
+	if not os.path.isfile(configfile):
+		raise RuntimeError("%s%s%s"%("File ",configfile," not found. ISSM has not been configured yet!"))
+
+	#go through the file, and recover the line we want
+	fid=open(configfile,'r');
+
+	tline=fid.readline()
+	while tline:
+
+		if tline=='': 
+			break
+		
+		if tline[0:21]=="#define _PETSC_MAJOR_":
+			PETSC_VERSION=int(tline[23])
+			break
+		
+		tline=fid.readline()
+	
+	fid.close();
+
+	return PETSC_VERSION
Index: /issm/trunk-jpl/src/py/model/solvers/iluasmoptions.py
===================================================================
--- /issm/trunk-jpl/src/py/model/solvers/iluasmoptions.py	(revision 11789)
+++ /issm/trunk-jpl/src/py/model/solvers/iluasmoptions.py	(revision 11790)
@@ -1,31 +1,31 @@
-function options=iluasmoptions(varargin)
-%ASMOPTIONS - return Additive Shwartz Method with ILU preconditioner petsc options
-%
-%   Usage:
-%      options=iluasmoptions;
-			 
-%retrieve options provided in varargin
-arguments=pairoptions(varargin{:});
+#module imports {{{
+from pairoptions import *
+from petscversion  import *
+#}}}
+def iluasmoptions(*args):
+	#ILUASMOPTIONS - return MUMPS direct solver  petsc options
+	#
+	#   Usage:
+	#      options=iluasmoptions;
+	
+	#retrieve options provided in varargin
+	arguments=pairoptions(*args) 
+	
+	options=[['mat_type','aij'],['ksp_type','gmres'],['pc_type','asm'],['sub_pc_type','ilu'],['pc_asm_overlap',5],['ksp_max_it',100],['ksp_rtol',1e-15]];
 
-%default iluasm options
-options={{'mat_type','aij'},{'ksp_type','gmres'},{'pc_type','asm'},{'sub_pc_type','ilu'},{'pc_asm_overlap',5},{'ksp_max_it',100},{'ksp_rtol',1e-15'}};
-
-%now, go through our arguments, and write over default options.
-for i=1:size(arguments.list,1),
-	arg1=arguments.list{i,1};
-	arg2=arguments.list{i,2};
-	found=0;
-	for j=1:size(options,2),
-		joption=options{j};
-		if strcmpi(joption{1},arg1),
-			joption{2}=arg2;
-			options{j}=joption;
-			found=1;
-			break;
-		end
-	end
-	if ~found,
-		%this option did not exist, add it: 
-		options{end+1}={arg1,arg2};
-	end
-end
+	#now, go through our arguments, and write over default options.
+	for i in range(len(arguments.list)):
+		arg1=arguments.list[i][0]
+		arg2=arguments.list[i][1]
+		found=0;
+		for j in range(len(options)):
+			joption=options[j][0]
+			if joption==arg1:
+				joption[1]=arg2;
+				options[j]=joption;
+				found=1;
+				break
+		if not found:
+			#this option did not exist, add it: 
+			options.append([arg1,arg2])
+	return options
Index: /issm/trunk-jpl/src/py/model/solvers/mumpsoptions.py
===================================================================
--- /issm/trunk-jpl/src/py/model/solvers/mumpsoptions.py	(revision 11789)
+++ /issm/trunk-jpl/src/py/model/solvers/mumpsoptions.py	(revision 11790)
@@ -1,38 +1,38 @@
-function options=mumpsoptions(varargin)
-%MUMPSOPTIONS - return MUMPS direct solver  petsc options
-%
-%   Usage:
-%      options=mumpsoptions;
+#module imports {{{
+from pairoptions import *
+from petscversion  import *
+#}}}
+def mumpsoptions(*args):
+	#MUMPSOPTIONS - return MUMPS direct solver  petsc options
+	#
+	#   Usage:
+	#      options=mumpsoptions;
+	
+	#retrieve options provided in varargin
+	arguments=pairoptions(*args) 
 
-%retrieve options provided in varargin
-arguments=pairoptions(varargin{:});
 
-%default mumps options
-PETSC_VERSION=petscversion();
-if PETSC_VERSION==2,
-	options={{'mat_type','aijmumps'},{'ksp_type','preonly'},{'pc_type','lu'},{'mat_mumps_icntl_14',120},{'pc_factor_shift_positive_definite','true'}};
-end
-if PETSC_VERSION==3,
-	options={{'mat_type','mpiaij'},{'ksp_type','preonly'},{'pc_type','lu'},{'pc_factor_mat_solver_package','mumps'},{'mat_mumps_icntl_14',120},{'pc_factor_shift_positive_definite','true'}};
+	#default mumps options
+	PETSC_VERSION=petscversion()
 
-end
+	if PETSC_VERSION==2:
+		options=[['mat_type','aijmumps'],['ksp_type','preonly'],['pc_type','lu'],['mat_mumps_icntl_14',120],['pc_factor_shift_positive_definite','true']]
+	if PETSC_VERSION==3:
+		options=[['mat_type','mpiaij'],['ksp_type','preonly'],['pc_type','lu'],['pc_factor_mat_solver_package','mumps'],['mat_mumps_icntl_14',120],['pc_factor_shift_positive_definite','true']]
 
-%now, go through our arguments, and write over default options.
-for i=1:size(arguments.list,1),
-	arg1=arguments.list{i,1};
-	arg2=arguments.list{i,2};
-	found=0;
-	for j=1:size(options,2),
-		joption=options{j};
-		if strcmpi(joption{1},arg1),
-			joption{2}=arg2;
-			options{j}=joption;
-			found=1;
-			break;
-		end
-	end
-	if ~found,
-		%this option did not exist, add it: 
-		options{end+1}={arg1,arg2};
-	end
-end
+	#now, go through our arguments, and write over default options.
+	for i in range(len(arguments.list)):
+		arg1=arguments.list[i][0]
+		arg2=arguments.list[i][1]
+		found=0;
+		for j in range(len(options)):
+			joption=options[j][0]
+			if joption==arg1:
+				joption[1]=arg2;
+				options[j]=joption;
+				found=1;
+				break
+		if not found:
+			#this option did not exist, add it: 
+			options.append([arg1,arg2])
+	return options
