Index: /issm/trunk/src/m/classes/inversion.m
===================================================================
--- /issm/trunk/src/m/classes/inversion.m	(revision 9751)
+++ /issm/trunk/src/m/classes/inversion.m	(revision 9752)
@@ -93,6 +93,52 @@
 			%Check NaN
 			fields={'nsteps','maxiter_per_step'};
-			checknan(md,'materials',fields);
+			checknan(md,'inversion',fields);
 
+			%CONTROL TYPE
+			num_controls=numel(md.inversion.control_parameters);
+			num_costfunc=size(md.inversion.cost_functions,2);
+			if ~iscell(md.inversion.control_parameters)
+				checkmessage(['model not consistent: model ' md.miscellaneous.name ' inversion.control_parameters field should be a cell of strings']);
+			end
+			if ~ismember(md.inversion.control_parameters,{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'Vx' 'Vy'});
+				checkmessage(['model not consistent: model ' md.miscellaneous.name ' inversion.control_parameters field should be ''BalancethicknessThickeningRate'' ''FrictionCoefficient'' ''MaterialsRheologyBbar'' ''Vx'' ''Vy''']);
+			end
+
+			%LENGTH CONTROL FIELDS
+			fields={'maxiter_per_step','step_threshold'};
+			checksize(md,'inversion',fields,[md.inversion.nsteps 1]);
+			fields={'cost_functions'};
+			checksize(md,'inversion',fields,[md.inversion.nsteps num_costfunc]);
+			fields={'gradient_scaling'};
+			checksize(md,'inversion',fields,[md.inversion.nsteps num_controls]);
+			fields={'min_parameters','max_parameters'};
+			checksize(md,'inversion',fields,[md.mesh.numberofvertices num_controls]);
+
+			%RESPONSES
+			checkvalues(md,'inversion',{'cost_functions'},[101:105 201 501:503]);
+
+			%WEIGHTS
+			fields={'cost_functions_coefficients'};
+			checksize(md,'inversion',fields,[md.mesh.numberofvertices num_costfunc]);
+			checkgreater(md,'inversion',fields,0);
+
+			%OBSERVED VELOCITIES
+			if md.private.solution==BalancethicknessSolutionEnum
+				fields={'thickness_obs'};
+				checksize(md,'inversion',fields,[md.mesh.numberofvertices 1]);
+				checknan(md,'inversion',fields);
+			else
+				fields={'vx_obs','vy_obs'};
+				checksize(md,'inversion',fields,[md.mesh.numberofvertices 1]);
+				checknan(md,'inversion',fields);
+			end
+
+			%DIRICHLET IF THICKNESS <= 0
+			if any(md.geometry.thickness<=0),
+				pos=find(md.geometry.thickness<=0);
+				if any(isnan(md.balancethickness.spcthickness(pos))),
+					checkmessage(['model not consistent: model ' md.miscellaneous.name ' has some nodes with 0 thickness']);
+				end
+			end
 		end % }}}
 		function disp(obj) % {{{
Index: /issm/trunk/src/m/classes/qmu.m
===================================================================
--- /issm/trunk/src/m/classes/qmu.m	(revision 9751)
+++ /issm/trunk/src/m/classes/qmu.m	(revision 9752)
@@ -50,4 +50,39 @@
 		function checkconsistency(obj,md) % {{{
 
+			%Early return
+			if ~md.qmu.isdakota, return; end
+
+			if md.qmu.params.evaluation_concurrency~=1,
+				checkmessage(['model not consistent: concurrency should be set to 1 when running dakota in library mode']);
+			end
+			if ~isempty(md.qmu.partition),
+				if numel(md.qmu.partition)~=md.mesh.numberofvertices,
+					checkmessage(['model not consistent: user supplied partition for qmu analysis should have size md.mesh.numberofvertices x 1 ']);
+				end
+				if find(md.qmu.partition)>=md.mesh.numberofvertices,
+					checkmessage(['model not consistent: user supplied partition should be indexed from 0 (c-convention)']);
+				end
+				if min(md.qmu.partition)~=0,
+					checkmessage(['model not consistent: partition vector not indexed from 0 on']);
+				end
+				if max(md.qmu.partition)>=md.mesh.numberofvertices,
+					checkmessage(['model not consistent: partition vector cannot have maximum index larger than number of nodes']);
+				end
+				if ~isempty(find(md.qmu.partition<0)),
+					checkmessage(['model not consistent: partition vector cannot have values less than 0']);
+				end
+				if ~isempty(find(md.qmu.partition>=md.qmu.numberofpartitions)),
+					checkmessage(['model not consistent: partition vector cannot have values more than md.qmu.numberofpartitions-1']);
+				end
+				if max(md.qmu.partition)>=md.qmu.numberofpartitions,
+					checkmessage(['model not consistent: for qmu analysis, partitioning vector cannot go over npart, number of partition areas']);
+				end
+			end
+
+			if ~strcmpi(md.cluster.name,'none'),
+				if md.settings.waitonlock==0,
+					checkmessage(['model is not correctly configured: waitonlock should be activated when running qmu in parallel mode!']);
+				end
+			end
 		end % }}}
 		function disp(obj) % {{{
Index: /issm/trunk/src/m/classes/steadystate.m
===================================================================
--- /issm/trunk/src/m/classes/steadystate.m	(revision 9751)
+++ /issm/trunk/src/m/classes/steadystate.m	(revision 9752)
@@ -42,5 +42,11 @@
 		end % }}}
 		function checkconsistency(obj,md) % {{{
+			if md.timestepping.time_step~=0,
+				checkmessage(['model not consistent: for a steadystate computation, timestepping.time_step must be zero.']);
+			end
 
+			if isnan(md.diagnostic.reltol),
+				checkmessage(['model not consistent: for a steadystate computation, diagnostic.reltol (relative convergence criterion) must be defined!']);
+			end
 		end % }}}
 	end
Index: /issm/trunk/src/m/classes/timestepping.m
===================================================================
--- /issm/trunk/src/m/classes/timestepping.m	(revision 9751)
+++ /issm/trunk/src/m/classes/timestepping.m	(revision 9752)
@@ -50,4 +50,13 @@
 				checkmessage(['model not consistent: model ' md.miscellaneous.name ' time_adapt field should be 0 or 1']);
 			end
+			if md.timestepping.time_step<=0,
+				checkmessage('model not consistent: field timestepping.time_step must be positive for a transient run')
+			end
+			if(md.timestepping.cfl_coefficient>1 | md.timestepping.cfl_coefficient<0),
+				checkmessage(['model not consistent: model ' md.miscellaneous.name ' cfl_coefficient field should between  0 and 1']);
+			end
+			if(md.timestepping.cfl_coefficient>1 | md.timestepping.cfl_coefficient<0),
+				checkmessage(['model not consistent: model ' md.miscellaneous.name ' cfl_coefficient field should between  0 and 1']);
+			end
 		end % }}}
 	end
Index: /issm/trunk/src/m/classes/transient.m
===================================================================
--- /issm/trunk/src/m/classes/transient.m	(revision 9751)
+++ /issm/trunk/src/m/classes/transient.m	(revision 9752)
@@ -53,4 +53,16 @@
 		end % }}}
 		function checkconsistency(obj,md) % {{{
+			if ~ismember(md.transient.isdiagnostic,[0 1]),
+				checkmessage('model not consistent: transient.isdiagnostic should be a scalar (1 or 0)');
+			end
+			if ~ismember(md.transient.isprognostic,[0 1]),
+				checkmessage('model not consistent: transient.isprognostic should be a scalar (1 or 0)');
+			end
+			if ~ismember(md.transient.isthermal,[0 1]),
+				checkmessage('model not consistent: transient.isthermal should be a scalar (1 or 0)');
+			end
+			if ~ismember(md.transient.isgroundingline,[0 1]),
+				checkmessage('model not consistent: transient.isgroundingline should be a scalar (1 or 0)');
+			end
 
 		end % }}}
