Index: /issm/trunk-jpl/src/m/classes/m1qn3inversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/m1qn3inversion.py	(revision 19040)
+++ /issm/trunk-jpl/src/m/classes/m1qn3inversion.py	(revision 19041)
@@ -24,4 +24,5 @@
 			self.incomplete_adjoint          = 0
 			self.control_parameters          = float('NaN')
+			self.control_scaling_factors     = float('NaN')
 			self.maxsteps                    = 0
 			self.maxiter                     = 0
@@ -43,4 +44,8 @@
 			print 'converting inversion to m1qn3inversion'
 			inv=args[0]
+			#first call setdefaultparameters: 
+			self.setdefaultparameters()
+
+			#then go fish whatever is available in the inversion object provided to the constructor
 			self.iscontrol                   = inv.iscontrol
 			self.incomplete_adjoint          = inv.incomplete_adjoint
@@ -64,4 +69,5 @@
 		string="%s\n%s"%(string,fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'))
 		string="%s\n%s"%(string,fielddisplay(self,'control_parameters','ex: [''FrictionCoefficient''], or [''MaterialsRheologyBbar'']'))
+		string="%s\n%s"%(string,fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)'))
 		string="%s\n%s"%(string,fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)'))
 		string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)'))
@@ -96,4 +102,7 @@
 		#drag and B are supported yet)
 		self.control_parameters='FrictionCoefficient'
+		
+		#Scaling factor for each control
+		self.control_scaling_factors=1
 
 		#number of iterations
@@ -122,4 +131,5 @@
 		md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
 		md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols())
+		md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[num_controls],'>',0,'NaN',1)
 		md = checkfield(md,'fieldname','inversion.maxsteps','numel',[1],'>=',0)
 		md = checkfield(md,'fieldname','inversion.maxiter','numel',[1],'>=',0)
@@ -148,4 +158,5 @@
 			return
 		WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
+		WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3)
 		WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer')
 		WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer')
