Index: /issm/trunk/src/m/classes/@model/model.m
===================================================================
--- /issm/trunk/src/m/classes/@model/model.m	(revision 6303)
+++ /issm/trunk/src/m/classes/@model/model.m	(revision 6304)
@@ -229,4 +229,5 @@
 	%debugging
 	md.verbose=0;
+	md.verbose_binary=0;
 	md.element_debug=0;
 	md.element_debugid=NaN;
Index: /issm/trunk/src/m/classes/@model/setdefaultparameters.m
===================================================================
--- /issm/trunk/src/m/classes/@model/setdefaultparameters.m	(revision 6303)
+++ /issm/trunk/src/m/classes/@model/setdefaultparameters.m	(revision 6304)
@@ -88,5 +88,5 @@
 %parameter used to print temporary results (convergence criterion,
 %current step,...)
-md.verbose=0;
+md.verbose=verbose;
 
 %Stokes mesh
Index: /issm/trunk/src/m/classes/verbose.m
===================================================================
--- /issm/trunk/src/m/classes/verbose.m	(revision 6304)
+++ /issm/trunk/src/m/classes/verbose.m	(revision 6304)
@@ -0,0 +1,79 @@
+%VERBOSE class definition
+%
+%   Usage:
+%      verbose=verbose();
+%      verbose=verbose(3);
+%      verbose=verbose('001100');
+%      verbose=verbose('module',true,'solver',false);
+
+classdef verbose
+    properties (SetAccess=public) 
+		 % {{{1
+		 module=false;
+		 convergence=false;
+		 modelprocessor=false;
+		 solver=false;
+		 % }}}
+	 end
+	 %}}}
+	 methods
+		 function verbose=verbose(varargin) % {{{1
+
+			 if nargin==1,
+
+				 binary=varargin{1};
+				 if ischar(binary),
+					 binary=bin2dec(binary);
+				 end 
+				 verbose=BinaryToVerbose(verbose,binary);
+
+			 else
+
+				 options=pairoptions(varargin{:});
+				 for i=1:size(options.list,1),
+					 fieldname=options.list{i,1};
+					 fieldvalue=options.list{i,2};
+					 if ismember(fieldname,properties(verbose)),
+						 verbose.(fieldname)=fieldvalue;
+					 else
+						 disp(['''' fieldname ''' is not a property of verbose verbose']);
+					 end
+				 end
+
+			 end
+		 end
+		 %}}}
+		 function binary=VerboseToBinary(verbose) % {{{1
+
+			 %WARNING: Must be synchronized with src/c/shared/Numerics/Verbosity.cpp
+
+			 binary=0;
+			 if (verbose.module),         binary=bitor(binary,1); end
+			 if (verbose.convergence),    binary=bitor(binary,2); end
+			 if (verbose.modelprocessor), binary=bitor(binary,4); end
+			 if (verbose.solver),         binary=bitor(binary,8); end
+
+		 end
+		 %}}}
+		 function verbose=BinaryToVerbose(verbose,binary) % {{{1
+
+			 %WARNING: Must be synchronized with src/c/shared/Numerics/Verbosity.cpp
+
+			 if bitand(binary,1), verbose.module=true;         else verbose.module=false;         end
+			 if bitand(binary,2), verbose.convergence=true;    else verbose.convergence=false;    end
+			 if bitand(binary,4), verbose.modelprocessor=true; else verbose.modelprocessor=false; end
+			 if bitand(binary,8), verbose.solver=true;         else verbose.solver=false;         end
+
+		 end
+		 %}}}
+		 function disp(verbose) % {{{1
+			 %  display the object
+			 disp(sprintf('class ''%s''  = ',class(verbose)));
+			 disp(sprintf('    module        : %s',mat2str(verbose.module)));
+			 disp(sprintf('    convergence   : %s',mat2str(verbose.convergence)));
+			 disp(sprintf('    modelprocessor: %s',mat2str(verbose.modelprocessor)));
+			 disp(sprintf('    solver        : %s',mat2str(verbose.solver)));
+		 end
+		 %}}}
+	end
+end
Index: /issm/trunk/src/m/model/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 6303)
+++ /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 6304)
@@ -36,6 +36,11 @@
 % Common checks
 %VERBOSE{{{1
-if md.verbose~=floor(abs(md.verbose)),
-	error(['field verbose should be a positive integer']);
+if ~strcmp('verbose',class(md.verbose))
+	disp('WARNING: md.verbose must now be an object of class ''verbose''');
+	disp('         To update your model use the following command:');
+	disp(' ');
+	disp('         md.verbose=verbose;');
+	disp(' ');
+	error(['field verbose should be of class ''verbose'' ']);
 end
 %}}}
Index: /issm/trunk/src/m/model/marshall.m
===================================================================
--- /issm/trunk/src/m/model/marshall.m	(revision 6303)
+++ /issm/trunk/src/m/model/marshall.m	(revision 6304)
@@ -109,5 +109,5 @@
 WriteData(fid,md.meanvel,'Scalar','meanvel');
 WriteData(fid,md.epsvel,'Scalar','epsvel');
-WriteData(fid,md.verbose,'Integer','verbose');
+WriteData(fid,md.verbose_binary,'Integer','verbose_binary');
 WriteData(fid,md.plot,'Integer','plot');
 WriteData(fid,md.output_frequency,'Integer','output_frequency');
Index: /issm/trunk/src/m/model/presolve.m
===================================================================
--- /issm/trunk/src/m/model/presolve.m	(revision 6303)
+++ /issm/trunk/src/m/model/presolve.m	(revision 6304)
@@ -8,4 +8,7 @@
 md.inputfilename=[md.name '.bin'];
 md.outputfilename=[md.name '.outbin'];
+
+%verbose;
+md.verbose_binary=VerboseToBinary(md.verbose);
 
 %deal with control methods
Index: /issm/trunk/src/m/model/solve.m
===================================================================
--- /issm/trunk/src/m/model/solve.m	(revision 6303)
+++ /issm/trunk/src/m/model/solve.m	(revision 6304)
@@ -28,5 +28,5 @@
 
 %check model consistency
-displaystring(md.verbose,'\n%s\n','checking model consistency');
+disp('checking model consistency');
 ismodelselfconsistent(md),
 
@@ -43,5 +43,5 @@
 assignin('base',inputname(1),md);
 
-displaystring(md.verbose,'\n%s\n','launching solution sequence');
+disp('launching solution sequence');
 
 %If running in parallel, we have a different way of launching the solution
@@ -63,5 +63,5 @@
 
 %Check result is consistent
-displaystring(md.verbose,'%s\n','checking result consistency');
+disp('checking result consistency');
 %if ~isresultconsistent(md,options.analysis_type),
 %	disp('!! results not consistent correct the model !!') %it would be very cruel to put an error, it would kill the computed results (even if not consistent...)
Index: /issm/trunk/src/m/model/solveparallel.m
===================================================================
--- /issm/trunk/src/m/model/solveparallel.m	(revision 6303)
+++ /issm/trunk/src/m/model/solveparallel.m	(revision 6304)
@@ -37,5 +37,5 @@
 		else
 			%load results
-			displaystring(md.verbose,'loading results from cluster');
+			disp('loading results from cluster');
 			md=loadresultsfromcluster(md);
 		end
Index: /issm/trunk/src/m/model/structtomodel.m
===================================================================
--- /issm/trunk/src/m/model/structtomodel.m	(revision 6303)
+++ /issm/trunk/src/m/model/structtomodel.m	(revision 6304)
@@ -33,4 +33,5 @@
 	if strcmpi(structmd.type,'3d'), md.dim=3; end
 end
+if isnumeric(md.verbose), md.verbose=verbose; end
 
 %New fields
Index: /issm/trunk/src/m/solutions/NewFemModel.m
===================================================================
--- /issm/trunk/src/m/solutions/NewFemModel.m	(revision 6303)
+++ /issm/trunk/src/m/solutions/NewFemModel.m	(revision 6304)
@@ -9,11 +9,13 @@
 %
 
+	%Set verbosity
+	SetVerbosityLevel(md.verbose_binary);
+
+   %Dynamically allocate whatever is a list of length nummodels: */
    femmodel.solution_type=solution_type;
    femmodel.analysis_counter=nummodels; %point to last analysis_type carried out
-
-   %Dynamically allocate whatever is a list of length nummodels: */
    femmodel.analysis_type_list=analysis_types;
 
-   displaystring(md.verbose,'\n   reading data from model %s...',md.name);
+	displaystring(VerbModProc(),'\n   reading data from model %s...',md.name);
    [femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.constraints,femmodel.loads,femmodel.materials,femmodel.parameters]=ModelProcessor(md,solution_type,femmodel.analysis_type_list);
    
@@ -27,26 +29,26 @@
 
 		analysis_type=femmodel.analysis_type_list(i);
-		displaystring(md.verbose,'%s%s','   dealing with analysis type: ',EnumToString(analysis_type));
+		displaystring(VerbModProc(),'%s%s','   dealing with analysis type: ',EnumToString(analysis_type));
 
 		femmodel=SetCurrentConfiguration(femmodel,analysis_type);
 
 		if i==1, %only  create vertices dofs once!
-			displaystring(md.verbose,'%s','      generating vertices degrees of freedom');
+			displaystring(VerbModProc(),'%s','      generating vertices degrees of freedom');
 			femmodel.vertices=VerticesDof(femmodel.vertices, femmodel.parameters); 
 		end
 
-		displaystring(md.verbose,'%s','      resolve node constraints');
+		displaystring(VerbModProc(),'%s','      resolve node constraints');
 		[femmodel.nodes]=SpcNodes(femmodel.nodes,femmodel.constraints,analysis_type);
 
-		displaystring(md.verbose,'%s','      create nodal degrees of freedom');
+		displaystring(VerbModProc(),'%s','      create nodal degrees of freedom');
 		[femmodel.nodes]=NodesDof(femmodel.nodes,femmodel.parameters);
 
-		displaystring(md.verbose,'%s','      create nodal constraints vector');
+		displaystring(VerbModProc(),'%s','      create nodal constraints vector');
 		femmodel.m_ys{i}=CreateNodalConstraints(femmodel.nodes,analysis_type);
 
-		displaystring(md.verbose,'%s','      create node sets');
+		displaystring(VerbModProc(),'%s','      create node sets');
 		femmodel.m_nodesets{i}=BuildNodeSets(femmodel.nodes,analysis_type);
 
-		displaystring(md.verbose,'%s','      configuring elements and loads');
+		displaystring(VerbModProc(),'%s','      configuring elements and loads');
 		[femmodel.elements,femmodel.loads,femmodel.nodes,femmodel.parameters] = ConfigureObjects( femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices,femmodel.materials,femmodel.parameters);
 	end
Index: /issm/trunk/src/m/solutions/convergence.m
===================================================================
--- /issm/trunk/src/m/solutions/convergence.m	(revision 6303)
+++ /issm/trunk/src/m/solutions/convergence.m	(revision 6304)
@@ -5,5 +5,4 @@
 
 %Get convergence options
-verbose=parameters.Verbose;
 yts=parameters.Yts;
 eps_res=parameters.EpsRes;
@@ -13,11 +12,10 @@
 %initialization
 converged=false;
-displaystring(verbose,' ');
 
 %Display solver caracteristics
-if (verbose>1),
+if (VerbConverge()),
 	solver_res=norm(K_ff*u_f-p_f,2)/norm(p_f,2);
-	displaystring(verbose>1,'%s%g','      condition number of stiffness matrix: ',condest(K_ff));
-	displaystring(verbose>1,'%s%g','      solver residue: norm(KU-F)/norm(F)=',solver_res);
+	displaystring(VerbConverge(),'%s%g','      condition number of stiffness matrix: ',condest(K_ff));
+	displaystring(VerbConverge(),'%s%g','      solver residue: norm(KU-F)/norm(F)=',solver_res);
 end
 
@@ -28,13 +26,13 @@
 end
 if (res<=eps_res),
-	displaystring(verbose,'%-60s%g%s%g%s','      mechanical equilibrium convergence criterion',res*100,' < ',eps_res*100,' %');
+	displaystring(VerbConverge(),'%-60s%g%s%g%s','      mechanical equilibrium convergence criterion',res*100,' < ',eps_res*100,' %');
 	converged=true;
 else
-	displaystring(verbose,'%-60s%g%s%g%s','      mechanical equilibrium convergence criterion',res*100,' > ',eps_res*100,' %');
+	displaystring(VerbConverge(),'%-60s%g%s%g%s','      mechanical equilibrium convergence criterion',res*100,' > ',eps_res*100,' %');
 	converged=false;
 end
 
 %Relative criterion (optional)
-if ((~isnan(eps_rel)) | (verbose>1)),
+if ((~isnan(eps_rel)) | (VerbConverge())),
 
 	%compute ndu/nu
@@ -50,7 +48,7 @@
 		if nu, %avoid "dividing by zero" warning
 			if (ndu/nu<=eps_rel),
-				displaystring(verbose,'%-60s%g%s%g%s','      relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' < ',eps_rel*100,' %');
+				displaystring(VerbConverge(),'%-60s%g%s%g%s','      relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' < ',eps_rel*100,' %');
 			else
-				displaystring(verbose,'%-60s%g%s%g%s','      relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' > ',eps_rel*100,' %');
+				displaystring(VerbConverge(),'%-60s%g%s%g%s','      relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' > ',eps_rel*100,' %');
 				converged=false;
 			end
@@ -60,5 +58,5 @@
 	else
 		if nu, %avoid "dividing by zero" warning
-			displaystring(verbose,'%-60s%g%s','      relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' %');
+			displaystring(VerbConverge(),'%-60s%g%s','      relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' %');
 		end
 	end
@@ -67,5 +65,5 @@
 
 %Absolute criterion (optional)
-if ((~isnan(eps_abs)) | (verbose>1)),
+if ((~isnan(eps_abs)) | VerbConverge()),
 
 	%compute max(du)
@@ -79,11 +77,11 @@
 	if ~isnan(eps_abs),
 		if (nduinf<=eps_abs),
-			displaystring(verbose,'%-60s%g%s%g%s','      absolute convergence criterion: max(du)',nduinf,' < ',eps_abs,' m/yr');
+			displaystring(VerbConverge(),'%-60s%g%s%g%s','      absolute convergence criterion: max(du)',nduinf,' < ',eps_abs,' m/yr');
 		else
-			displaystring(verbose,'%-60s%g%s%g%s','      absolute convergence criterion: max(du)',nduinf,' > ',eps_abs,' m/yr');
+			displaystring(VerbConverge(),'%-60s%g%s%g%s','      absolute convergence criterion: max(du)',nduinf,' > ',eps_abs,' m/yr');
 			converged=false;
 		end
 	else
-		displaystring(verbose,'%-60s%g%s','      absolute convergence criterion: max(du)',nduinf,' m/yr');
+		displaystring(VerbConverge(),'%-60s%g%s','      absolute convergence criterion: max(du)',nduinf,' m/yr');
 	end
 
Index: /issm/trunk/src/m/solutions/issm.m
===================================================================
--- /issm/trunk/src/m/solutions/issm.m	(revision 6303)
+++ /issm/trunk/src/m/solutions/issm.m	(revision 6304)
@@ -11,5 +11,5 @@
 	[analyses,numanalyses,solutioncore]=SolutionConfiguration(solution_type);
 
-	displaystring(md.verbose,'%s',['create finite element model']);
+	disp('create finite element model');
 	femmodel=NewFemModel(md,solution_type,analyses,numanalyses);
 
@@ -37,3 +37,3 @@
 	%stop timing
 	t2=clock;
-	displaystring(md.verbose,'\n%s\n',['solution converged in ' num2str(etime(t2,t1)) ' seconds']);
+	disp(['solution converged in ' num2str(etime(t2,t1)) ' seconds']);
