Index: /issm/trunk/src/m/classes/public/parametercontrolB.m
===================================================================
--- /issm/trunk/src/m/classes/public/parametercontrolB.m	(revision 2473)
+++ /issm/trunk/src/m/classes/public/parametercontrolB.m	(revision 2473)
@@ -0,0 +1,130 @@
+function md=parametercontrolB(md,varargin),
+%PARAMETERCONTROLB - control method on B parameterization
+%
+%   Usage:
+%       md=parametercontrolB(md,varargin)
+
+%process options
+options=pairoptions(varargin{:});
+
+%control type and analysis
+md.control_type='B';
+md.control_analysis=1;
+
+%nsteps
+nsteps=getfieldvalue(options,'nsteps',100);
+if (length(nsteps)~=1 | nsteps<=0 | floor(nsteps)~=nsteps)
+	md.nsteps=100;
+else
+	md.nsteps=nsteps;
+end
+
+%cm_min
+cm_min=getfieldvalue(options,'cm_min',1);
+if (length(cm_min)~=1)
+	md.cm_min=1;
+else
+	md.cm_min=cm_min;
+end
+
+%cm_max
+cm_max=getfieldvalue(options,'cm_max',10^10);
+if (length(cm_max)~=1)
+	md.cm_max=10^10;
+else
+	md.cm_max=cm_max;
+end
+
+%cm_noisedmp
+cm_noisedmp=getfieldvalue(options,'cm_noisedmp',2*10^-21);
+if (length(cm_noisedmp)~=1)
+	md.cm_noisedmp=5*10^1;
+else
+	md.cm_noisedmp=cm_noisedmp;
+end
+
+%cm_maxdmp
+cm_maxdmp_value=getfieldvalue(options,'cm_maxdmp_value',6.5*10^8);%=paterson(223)
+if (length(cm_maxdmp_value)~=1)
+	md.cm_maxdmp_value=6.5*10^8;
+else
+	md.cm_maxdmp_value=cm_maxdmp_value;
+end
+cm_maxdmp_slope=getfieldvalue(options,'cm_maxdmp_slope',5*10^-20);
+if (length(cm_maxdmp_slope)~=1)
+	md.cm_maxdmp_slope=5*10^-20;
+else
+	md.cm_maxdmp_slope=cm_maxdmp_slope;
+end
+
+%cm_mindmp
+cm_mindmp_value=getfieldvalue(options,'cm_mindmp_value',5*10^7); %=paterson(273.15)
+if (length(cm_mindmp_value)~=1)
+	md.cm_mindmp_value=5*10^7;
+else
+	md.cm_mindmp_value=cm_mindmp_value;
+end
+cm_mindmp_slope=getfieldvalue(options,'cm_mindmp_slope',10^-18);
+if (length(cm_mindmp_slope)~=1)
+	md.cm_mindmp_slope=10^-18;
+else
+	md.cm_mindmp_slope=cm_mindmp_slope;
+end
+
+%eps_cm
+eps_cm=getfieldvalue(options,'eps_cm',NaN);
+if (length(eps_cm)~=1 | eps_cm<0 )
+	md.eps_cm=NaN;
+else
+	md.eps_cm=eps_cm;
+end
+
+%maxiter
+maxiter=getfieldvalue(options,'maxiter',10*ones(md.nsteps,1));
+if (any(maxiter<0) | any(floor(maxiter)~=maxiter))
+	md.maxiter=10*ones(md.nsteps,1);
+else
+	md.maxiter=repmat(maxiter(:),md.nsteps,1);
+	md.maxiter(md.nsteps+1:end)=[];
+end
+
+%cm_jump
+cm_jump=getfieldvalue(options,'cm_jump',0.9*ones(md.nsteps,1));
+if ~isreal(cm_jump)
+	md.cm_jump=0.9*ones(md.nsteps,1);
+else
+	md.cm_jump=repmat(cm_jump(:),md.nsteps,1);
+	md.cm_jump(md.nsteps+1:end)=[];
+end
+
+%fit
+found=0;
+if exist(options,'fit'),
+	fit=getfieldvalue(options,'fit');
+	if ~any(fit~=0 & fit~=1 & fit~=2),
+		md.fit=repmat(fit(:),md.nsteps,1);
+		md.fit(md.nsteps+1:end)=[];
+		found=1;
+	end
+end
+if ~found
+	third=ceil(md.nsteps/3);
+	md.fit=[2*ones(third,1);0*ones(third,1);repmat([0;0;2;0],third,1)];
+	md.fit(md.nsteps+1:end)=[];
+end
+
+%optscal
+found=0;
+if exist(options,'optscal'),
+	optscal=getfieldvalue(options,'optscal');
+	if ~any(optscal<0),
+		md.optscal=repmat(optscal(:),md.nsteps,1);
+		md.optscal(md.nsteps+1:end)=[];
+		found=1;
+	end
+end
+if ~found
+	third=ceil(md.nsteps/3);
+	md.optscal=[2*10^8*ones(3,1);10^8*ones(third-3,1);10^7*ones(2*third,1);];
+	md.optscal(md.nsteps+1:end)=[];
+end
