Index: /issm/trunk/src/m/classes/public/display/displaycontrol.m
===================================================================
--- /issm/trunk/src/m/classes/public/display/displaycontrol.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/display/displaycontrol.m	(revision 5359)
@@ -11,10 +11,10 @@
 disp(sprintf('   Control solution parameters:\n'));
 if md.control_analysis,
-	fielddisplay(md,'control_type','parameter where inverse control is carried out; ex: ''drag_coefficient'', or ''rheology_B'')');
+	fielddisplay(md,'control_type','parameter where inverse control is carried out; ex: DragCoefficientEnum, or RheologyBbarEnum)');
 	fielddisplay(md,'weights','weights applied to the misfit of each node');
 	fielddisplay(md,'nsteps','number of optimization searches');
 	fielddisplay(md,'eps_cm','misfit convergence criterion. Default is 1%, NaN if not applied');
 	fielddisplay(md,'optscal','scaling factor on gradient direction during optimization, for each optimization step');
-	fielddisplay(md,'fit','''absolute: 0'', ''relative: 1'', or ''logarithmic: 2''. for each optimization steps');
+	fielddisplay(md,'cmResponses','for each optimization steps: SurfaceVelAbsMisfitEnum, ...');
 	fielddisplay(md,'maxiter','maximum iterations during each optimization step');
 	fielddisplay(md,'tolx','minimum tolerance which will stop one optimization search');
Index: /issm/trunk/src/m/classes/public/graddetection.m
===================================================================
--- /issm/trunk/src/m/classes/public/graddetection.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/graddetection.m	(revision 5359)
@@ -14,5 +14,5 @@
 
 %plug optimized parameter in model. 
-md2.(md2.results.DiagnosticAnalysis.control_type)=parameter1;
+md2.(EnumToModelField(md2.results.DiagnosticAnalysis.control_type))=parameter1;
 
 %put nsteps to 1: 
Index: /issm/trunk/src/m/classes/public/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/classes/public/ismodelselfconsistent.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/ismodelselfconsistent.m	(revision 5359)
@@ -343,10 +343,8 @@
 
 	%CONTROL TYPE
-	if ~ischar(md.control_type),
-		error('model not consistent: control_type should be a string');
-	end
-	if ~(strcmpi(md.control_type,'rheology_B') | strcmpi(md.control_type,'drag_coefficient') | strcmpi(md.control_type,'dhdt')),
-		error('model not consistent: control_type should be rheology_B or drag_coefficient');
-	end
+	if ~isnumeric(md.control_type),
+		error('model not consistent: control_type should be an enum');
+	end
+	checkvalues(md,{'control_type'},[DhDtEnum DragCoefficientEnum RheologyBbarEnum]);
 
 	%LENGTH CONTROL FIELDS
Index: /issm/trunk/src/m/classes/public/marshall.m
===================================================================
--- /issm/trunk/src/m/classes/public/marshall.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/marshall.m	(revision 5359)
@@ -100,5 +100,5 @@
 %Control methods
 WriteData(fid,md.control_analysis,'Integer','control_analysis');
-WriteData(fid,md.control_type,'String','control_type');
+WriteData(fid,md.control_type,'Integer','control_type');
 
 %Write solution parameters
Index: /issm/trunk/src/m/classes/public/parametercontroloptimization.m
===================================================================
--- /issm/trunk/src/m/classes/public/parametercontroloptimization.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/parametercontroloptimization.m	(revision 5359)
@@ -33,5 +33,5 @@
 md2.cm_mindmp_slope=0;
 md2.nsteps=getfieldvalue(options,'nsteps',5);
-md2.control_type=getfieldvalue(options,'md2.control_type','drag');
+md2.control_type=getfieldvalue(options,'md2.control_type',DragCoefficientEnum);
 md2.maxiter=10*ones(md2.nsteps,1);
 md2.cm_jump=0.99*ones(md2.nsteps,1);
Index: /issm/trunk/src/m/classes/public/parameterization/parametercontrolB.m
===================================================================
--- /issm/trunk/src/m/classes/public/parameterization/parametercontrolB.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/parameterization/parametercontrolB.m	(revision 5359)
@@ -22,5 +22,5 @@
 
 %control type
-md.control_type='rheology_B';
+md.control_type=RheologyBbarEnum;
 
 %weights
Index: /issm/trunk/src/m/classes/public/parameterization/parametercontroldrag.m
===================================================================
--- /issm/trunk/src/m/classes/public/parameterization/parametercontroldrag.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/parameterization/parametercontroldrag.m	(revision 5359)
@@ -22,5 +22,5 @@
 
 %control type
-md.control_type='drag_coefficient';
+md.control_type=DragCoefficientEnum;
 
 %weights
Index: /issm/trunk/src/m/classes/public/tres.m
===================================================================
--- /issm/trunk/src/m/classes/public/tres.m	(revision 5358)
+++ /issm/trunk/src/m/classes/public/tres.m	(revision 5359)
@@ -40,5 +40,13 @@
 	end
 	if md.control_analysis==1,
-		md.(md.control_type)=PatchToVec(md.results.DiagnosticSolution.(md.results.DiagnosticSolution.ControlType));
+		if (md.control_type==DragCoefficientEnum)
+			md.drag_coefficient=PatchToVec(md.results.DiagnosticSolution.(md.results.DiagnosticSolution.ControlType));
+		elseif (md.control_type==RheologyBbarEnum)
+			md.rheology_B=PatchToVec(md.results.DiagnosticSolution.(md.results.DiagnosticSolution.ControlType));
+		elseif (md.control_type==DhDtEnum)
+			md.dhdt=PatchToVec(md.results.DiagnosticSolution.(md.results.DiagnosticSolution.ControlType));
+		else
+			error('control type not implemented yet')
+		end
 	end
 elseif strcmpi(string,'dakota'),
