Index: /issm/trunk/src/m/classes/model.m
===================================================================
--- /issm/trunk/src/m/classes/model.m	(revision 9541)
+++ /issm/trunk/src/m/classes/model.m	(revision 9542)
@@ -184,5 +184,5 @@
 		 nsteps           = modelfield('default',0,'marshall',true,'format','Integer');
 		 maxiter          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
-		 cm_responses     = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
+		 cm_responses     = modelfield('default',NaN,'marshall',true,'preprocess','marshallcmresponses','format','DoubleMat','mattype',3);
 		 tolx             = modelfield('default',0,'marshall',true,'format','Double');
 		 optscal          = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3);
@@ -499,4 +499,15 @@
 				 if (structmd.control_type==147), md.control_type={'Dhdt'}; end
 			 end
+			 if ismember(structmd.cm_responses(end,end),[165:170 383 388 389]),
+				 pos=find(structmd.cm_responses==166), md.control_type(pos)=101;
+				 pos=find(structmd.cm_responses==167), md.control_type(pos)=102;
+				 pos=find(structmd.cm_responses==168), md.control_type(pos)=103;
+				 pos=find(structmd.cm_responses==169), md.control_type(pos)=104;
+				 pos=find(structmd.cm_responses==170), md.control_type(pos)=105;
+				 pos=find(structmd.cm_responses==165), md.control_type(pos)=201;
+				 pos=find(structmd.cm_responses==389), md.control_type(pos)=501;
+				 pos=find(structmd.cm_responses==388), md.control_type(pos)=502;
+				 pos=find(structmd.cm_responses==382), md.control_type(pos)=503;
+			 end
 
 			 %New fields
@@ -688,5 +699,5 @@
 
 			 %several responses can be used:
-			 md.cm_responses=SurfaceAbsVelMisfitEnum*ones(md.nsteps,1);
+			 md.cm_responses=101*ones(md.nsteps,1);
 
 			 %cm_jump is used to speed up control method. When
Index: /issm/trunk/src/m/model/display/displaycontrol.m
===================================================================
--- /issm/trunk/src/m/model/display/displaycontrol.m	(revision 9541)
+++ /issm/trunk/src/m/model/display/displaycontrol.m	(revision 9542)
@@ -16,5 +16,5 @@
 	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,'cm_responses','indicate the type of response for each optimization steps: SurfaceAbsVelMisfitEnum, SurfaceRelVelMisfitEnum, SurfaceLogVelMisfitEnum, SurfaceLogVxVyMisfitEnum, SurfaceAverageVelMisfitEnum or ThicknessAbsMisfitEnum');
+	fielddisplay(md,'cm_responses','indicate the type of response for each optimization steps');
 	fielddisplay(md,'maxiter','maximum iterations during each optimization step');
 	fielddisplay(md,'tolx','minimum tolerance which will stop one optimization search');
@@ -26,4 +26,14 @@
 	fielddisplay(md,'epsvel','for relative fit, avoids misfit becoming infinity, for logarithmic fit, threshold for velocity');
 	fielddisplay(md,'plot','visualization of the results of each iteration yes -> 1 no -> 0. Default is 1');
+	disp('Available responses:');
+	disp('   101: SurfaceAbsVelMisfit');
+	disp('   102: SurfaceRelVelMisfit');
+	disp('   103: SurfaceLogVelMisfit');
+	disp('   104: SurfaceLogVxVyMisfit');
+	disp('   105: SurfaceAverageVelMisfit');
+	disp('   201: ThicknessAbsMisfit');
+	disp('   501: DragCoefficientAbsGradient');
+	disp('   502: RheologyBbarAbsGradient');
+	disp('   503: ThicknessAbsGradient');
 else
 	disp(sprintf('         %s','no scheduled control. activate by doing md.control_analysis=1'));
Index: /issm/trunk/src/m/model/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9541)
+++ /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9542)
@@ -221,7 +221,5 @@
 
 	%RESPONSES
-	checkvalues(md,{'cm_responses'},...
-		[SurfaceAbsVelMisfitEnum SurfaceRelVelMisfitEnum SurfaceLogVelMisfitEnum SurfaceLogVxVyMisfitEnum SurfaceAverageVelMisfitEnum...
-		ThicknessAbsMisfitEnum DragCoefficientAbsGradientEnum RheologyBbarAbsGradientEnum ThicknessAbsGradientEnum]);
+	checkvalues(md,{'cm_responses'},[101:105 201 501:503]);
 
 	%WEIGHTS
Index: /issm/trunk/src/m/model/marshall.m
===================================================================
--- /issm/trunk/src/m/model/marshall.m	(revision 9541)
+++ /issm/trunk/src/m/model/marshall.m	(revision 9542)
@@ -386,2 +386,13 @@
 		out(i)=StringToEnum(in{i});
 	end
+function out=marshallcmresponses(in),
+	out=in;
+	pos=find(in==101); out(pos)=SurfaceAbsVelMisfitEnum;
+	pos=find(in==102); out(pos)=SurfaceRelVelMisfitEnum;
+	pos=find(in==103); out(pos)=SurfaceLogVelMisfitEnum;
+	pos=find(in==104); out(pos)=SurfaceLogVxVyMisfitEnum;
+	pos=find(in==105); out(pos)=SurfaceAverageVelMisfitEnum;
+	pos=find(in==201); out(pos)=ThicknessAbsMisfitEnum;
+	pos=find(in==501); out(pos)=DragCoefficientAbsGradientEnum;
+	pos=find(in==502); out(pos)=RheologyBbarAbsGradientEnum;
+	pos=find(in==503); out(pos)=ThicknessAbsGradientEnum;
Index: /issm/trunk/src/m/model/parameterization/parametercontrolB.m
===================================================================
--- /issm/trunk/src/m/model/parameterization/parametercontrolB.m	(revision 9541)
+++ /issm/trunk/src/m/model/parameterization/parametercontrolB.m	(revision 9542)
@@ -90,5 +90,5 @@
 if exist(options,'cm_responses'),
 	cm_responses=getfieldvalue(options,'cm_responses');
-	if ~any(~ismember(cm_responses,[ SurfaceAbsVelMisfitEnum, SurfaceRelVelMisfitEnum, SurfaceLogVelMisfitEnum, SurfaceLogVxVyMisfitEnum, SurfaceAverageVelMisfitEnum ]));
+	if ~any(~ismember(cm_responses,[ 101:105])),
 		md.cm_responses=repmat(cm_responses(:),md.nsteps,1);
 		md.cm_responses(md.nsteps+1:end)=[];
@@ -99,7 +99,7 @@
 	third=ceil(md.nsteps/3);
 	md.cm_responses=[...
-		SurfaceLogVelMisfitEnum*ones(third,1);...
-		SurfaceAbsVelMisfitEnum*ones(third,1);...
-		repmat([SurfaceAbsVelMisfitEnum;SurfaceAbsVelMisfitEnum;SurfaceLogVelMisfitEnum;SurfaceAbsVelMisfitEnum],third,1)...
+		103*ones(third,1);...
+		101*ones(third,1);...
+		repmat([101;101;103;101],third,1)...
 		];
 	md.cm_responses(md.nsteps+1:end)=[];
Index: /issm/trunk/src/m/model/parameterization/parametercontroldrag.m
===================================================================
--- /issm/trunk/src/m/model/parameterization/parametercontroldrag.m	(revision 9541)
+++ /issm/trunk/src/m/model/parameterization/parametercontroldrag.m	(revision 9542)
@@ -89,5 +89,5 @@
 if exist(options,'cm_responses'),
 	cm_responses=getfieldvalue(options,'cm_responses');
-	if ~any(~ismember(cm_responses,[ SurfaceAbsVelMisfitEnum, SurfaceRelVelMisfitEnum, SurfaceLogVelMisfitEnum, SurfaceLogVxVyMisfitEnum, SurfaceAverageVelMisfitEnum ]));
+	if ~any(~ismember(cm_responses,[101 105])).
 		md.cm_responses=repmat(cm_responses(:),md.nsteps,1);
 		md.cm_responses(md.nsteps+1:end)=[];
@@ -98,7 +98,7 @@
 	third=ceil(md.nsteps/3);
 	md.cm_responses=[...
-		SurfaceLogVelMisfitEnum*ones(third,1);...
-		SurfaceAbsVelMisfitEnum*ones(third,1);...
-		repmat([SurfaceAbsVelMisfitEnum;SurfaceAbsVelMisfitEnum;SurfaceLogVelMisfitEnum;SurfaceAbsVelMisfitEnum],third,1)...
+		103*ones(third,1);...
+		101*ones(third,1);...
+		repmat([101;101;103;101],third,1)...
 		];
 	md.cm_responses(md.nsteps+1:end)=[];
