Index: /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m	(revision 24829)
+++ /issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m	(revision 24830)
@@ -20,5 +20,5 @@
     end
     methods
-        function self=normal_uncertain(varargin) %constructor {{{
+		function self=normal_uncertain(varargin) %constructor {{{
 
 			%recover options: 
@@ -29,72 +29,98 @@
 			self.mean=getfieldvalue(options,'mean');
 			self.stddev=getfieldvalue(options,'stddev');
+			self.partition=getfieldvalue(options,'partition',[]); %default not used.
 
-        end %}}}
-        function disp(self) % {{{
-			
-			disp(sprintf('   normal uncertain variable: '));
-			fielddisplay(self,'descriptor','name tag');
-			fielddisplay(self,'mean','pdf mean');
-			fielddisplay(self,'mean','pdf standard deviation');
+		end %}}}
+	function disp(self) % {{{
 
-        end 
-		%}}}
-        function [desc]  =prop_desc(nuv,dstr) % {{{
-            desc=cell(1,numel(nuv));
-            for i=1:numel(nuv)
-                if ~isempty(nuv(i).descriptor)
-                    desc(i)=cellstr(nuv(i).descriptor);
-                elseif ~isempty(inputname(1))
-                    desc(i)=cellstr([inputname(1) string_dim(nuv,i,'vector')]);
-                elseif exist('dstr','var')
-                    desc(i)=cellstr([dstr         string_dim(nuv,i,'vector')]);
-                else
-                    desc(i)=cellstr(['nuv'        string_dim(nuv,i,'vector')]);
-                end
-            end
-            desc=allempty(desc);
-        end %}}}
-        function [mean]  =prop_mean(nuv) % {{{
-            mean=zeros(1,numel(nuv));
-            for i=1:numel(nuv)
-                mean(i)=nuv(i).mean;
-            end
-        end % }}}
-        function [stddev]=prop_stddev(nuv) % {{{
-            stddev=zeros(1,numel(nuv));
-            for i=1:numel(nuv)
-                stddev(i)=nuv(i).stddev;
-            end
-        end % }}}
-		function checkconsistency(self,md,solution,analyses) % {{{
-		end % }}}
+		disp(sprintf('   normal uncertain variable: '));
+		fielddisplay(self,'descriptor','name tag');
+		fielddisplay(self,'mean','pdf mean');
+		fielddisplay(self,'stddev','pdf standard deviation');
+		self.partition
+		if ~isempty(self.partition),
+			fielddisplay(self,'partition','partition vector defining where sampling will occur');
+		end
+	end 
+	%}}}
+	function md=checkconsistency(self,md,solution,analyses) % {{{
+
+		md = checkfield(md,'field',self.mean,'fieldname','normal_uncertain.mean','NaN',1,'Inf',1,'>=',0);
+		md = checkfield(md,'field',self.stddev,'fieldname','normal_uncertain.stddev','NaN',1,'Inf',1,'>=',0,'numel',length(self.mean));
+		if ~isempty(self.partition),
+			md = checkfield(md,'field',self.partition,'fieldname','normal_uncertain.partition','NaN',1,'Inf',1,'>=',-1,'numel',[md.mesh.numberofvertices,md.mesh.numberofelements]);
+			if size(self.partition,1)>1,
+				error('normal_uncertain error message: partition should be a column vector');
+			end
+			partcheck=unique(self.partition); 
+			partmin=min(partcheck); 
+			partmax=max(partcheck);
+			if partmax<-1,
+				error('normal_uncertain error message: partition vector''s min value should be -1 (for no partition), or start at 0');
+			end
+			nmax=max(md.mesh.numberofelements,md.mesh.numberofvertices);
+			if partmax>nmax,
+				error('normal_uncertain error message: partition vector''s values cannot go over the number of vertices or elements');
+			end
+
+		end
+	end % }}}
 	%virtual functions needed by qmu processing algorithms:
-		function [abscissas] =prop_abscissas(hbu) % {{{
-            abscissas=[]; 
-        end % }}}
-        function [counts] =prop_counts(hbu) % {{{
-            counts=[]; 
-        end % }}}
-        function [pairs_per_variable] =prop_pairs_per_variable(hbu) % {{{
-			pairs_per_variable=[];
-        end % }}}
-        function [initpt]=prop_initpt(nuv) % {{{
-            initpt=[];
-        end % }}}
-        function [lower]  =prop_lower(nuv) % {{{
-			lower=[];
-        end % }}}
-        function [upper]  =prop_upper(nuv) % {{{
-			upper=[];
-        end % }}}
-        function [initst]=prop_initst(nuv) % {{{
-            initst=[];
-        end % }}}
-        function [stype] =prop_stype(nuv) % {{{
-            stype={};
-        end % }}}
-        function [scale] =prop_scale(nuv) % {{{
-            scale=[];
-        end % }}}
+	%implemented:
+	function [desc]  =prop_desc(nuv,dstr) % {{{
+		desc=cell(1,numel(nuv));
+		for i=1:numel(nuv)
+			if ~isempty(nuv(i).descriptor)
+				desc(i)=cellstr(nuv(i).descriptor);
+			elseif ~isempty(inputname(1))
+				desc(i)=cellstr([inputname(1) string_dim(nuv,i,'vector')]);
+			elseif exist('dstr','var')
+				desc(i)=cellstr([dstr         string_dim(nuv,i,'vector')]);
+			else
+				desc(i)=cellstr(['nuv'        string_dim(nuv,i,'vector')]);
+			end
+		end
+		desc=allempty(desc);
+	end %}}}
+	function [mean]  =prop_mean(nuv) % {{{
+		mean=zeros(1,numel(nuv));
+		for i=1:numel(nuv)
+			mean(i)=nuv(i).mean;
+		end
+	end % }}}
+	function [stddev]=prop_stddev(nuv) % {{{
+		stddev=zeros(1,numel(nuv));
+		for i=1:numel(nuv)
+			stddev(i)=nuv(i).stddev;
+		end
+	end % }}}
+	%default
+	function [abscissas] =prop_abscissas(hbu) % {{{
+		abscissas=[]; 
+	end % }}}
+	function [counts] =prop_counts(hbu) % {{{
+		counts=[]; 
+	end % }}}
+	function [pairs_per_variable] =prop_pairs_per_variable(hbu) % {{{
+		pairs_per_variable=[];
+	end % }}}
+	function [initpt]=prop_initpt(nuv) % {{{
+		initpt=[];
+	end % }}}
+	function [lower]  =prop_lower(nuv) % {{{
+		lower=[];
+	end % }}}
+	function [upper]  =prop_upper(nuv) % {{{
+		upper=[];
+	end % }}}
+	function [initst]=prop_initst(nuv) % {{{
+		initst=[];
+	end % }}}
+	function [stype] =prop_stype(nuv) % {{{
+		stype={};
+	end % }}}
+	function [scale] =prop_scale(nuv) % {{{
+		scale=[];
+	end % }}}
     end
     methods (Static)
Index: /issm/trunk-jpl/src/m/classes/qmu/uniform_uncertain.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/uniform_uncertain.m	(revision 24829)
+++ /issm/trunk-jpl/src/m/classes/qmu/uniform_uncertain.m	(revision 24830)
@@ -1,29 +1,15 @@
+%UNIFORM_UNCERTAIN Class definition
 %
-%  definition for the uniform_uncertain class.
-%
-%  [uuv]=uniform_uncertain(varargin)
-%
-%  where the required varargin are:
-%    descriptor    (char, description, '')
-%    lower         (double, lower bound, -Inf)
-%    upper         (double, upper bound,  Inf)
-%
-%  note that zero arguments constructs a default instance; one
-%  argument of the class copies the instance; and three or more
-%  arguments constructs a new instance from the arguments.
-%
-%  "Copyright 2009, by the California Institute of Technology.
-%  ALL RIGHTS RESERVED. United States Government Sponsorship
-%  acknowledged. Any commercial use must be negotiated with
-%  the Office of Technology Transfer at the California Institute
-%  of Technology.  (J. Schiermeier, NTR 47078)
-%
-%  This software may be subject to U.S. export control laws.
-%  By accepting this  software, the user agrees to comply with
-%  all applicable U.S. export laws and regulations. User has the
-%  responsibility to obtain export licenses, or other export
-%  authority as may be required before exporting such information
-%  to foreign countries or providing access to foreign persons."
-%
+%%   Usage:
+%      nuv=uniform_uncertain('descriptor',descriptor,'lower',lower,'upper',upper,'partition',partition);
+%      where nuv is the uniform_uncertain object returned by the constructor, lower and upper are the 
+%      pdf distribution bounds, and partition is the partition vector for distributed variables. 
+%      Can be a partition %      vector over elements or vertices.
+% 
+%   Example:
+%      md.qmu.variables.rheology=uniform_uncertain('descriptor','RheologyBBar','lower',1e8,'upper',1e9);
+%      md.qmu.variables.rheology=uniform_uncertain('descriptor','RheologyBBar','lower',1e8,'upper',1e9,'partition',vpartition);
+% 
+
 classdef uniform_uncertain
     properties
@@ -31,149 +17,119 @@
         lower     =-Inf;
         upper     = Inf;
+		partition = [];
     end
+    methods
+		function self=uniform_uncertain(varargin) %constructor {{{
 
-    methods
-        function [uuv]=uniform_uncertain(varargin)
+			%recover options: 
+			options = pairoptions(varargin{:});
 
-            switch nargin
+			%initialize fields: 
+			self.descriptor=getfieldvalue(options,'descriptor');
+			self.upper=getfieldvalue(options,'upper');
+			self.lower=getfieldvalue(options,'lower');
+			self.partition=getfieldvalue(options,'partition',[]); %default not used.
 
-%  create a default object
+		end %}}}
+		function disp(self) % {{{
 
-                case 0
+			disp(sprintf('   uniform uncertain variable: '));
+			fielddisplay(self,'descriptor','name tag');
+			fielddisplay(self,'lower','pdf lower bound');
+			fielddisplay(self,'upper','pdf upper bound');
+			if ~isempty(self.partition),
+				fielddisplay(self,'partition','partition vector defining where sampling will occur');
+			end
+		end 
+		%}}}
+		function md=checkconsistency(self,md,solution,analyses) % {{{
 
-%  copy the object
+			md = checkfield(md,'field',self.upper,'fieldname','uniform_uncertain.upper','NaN',1,'Inf',1);
+			md = checkfield(md,'field',self.lower,'fieldname','uniform_uncertain.lower','NaN',1,'Inf',1);
+			if ~isempty(self.partition),
+				md = checkfield(md,'field',self.partition,'fieldname','uniform_uncertain.partition','NaN',1,'Inf',1,'>=',-1,'numel',[md.mesh.numberofvertices,md.mesh.numberofelements]);
+				if size(self.partition,1)>1,
+					error('uniform_uncertain error message: partition should be a column vector');
+				end
+				partcheck=unique(self.partition); 
+				partmin=min(partcheck); 
+				partmax=max(partcheck);
+				if partmax<-1,
+					error('uniform_uncertain error message: partition vector''s min value should be -1 (for no partition), or start at 0');
+				end
+				nmax=max(md.mesh.numberofelements,md.mesh.numberofvertices);
+				if partmax>nmax,
+					error('uniform_uncertain error message: partition vector''s values cannot go over the number of vertices or elements');
+				end
 
-                case 1
-                    if isa(varargin{1},'uniform_uncertain')
-                        uuv=varargin{1};
-                    else
-                        error('Object ''%s'' is a ''%s'' class object, not ''%s''.',...
-                            inputname(1),class(varargin{1}),'uniform_uncertain');
-                    end
-
-%  not enough arguments
-
-                case 2
-                    error('Construction of ''%s'' class object requires at least %d inputs.',...
-                        'uniform_uncertain',3)
-
-%  create the object from the input
-
-                otherwise
-                    asizec=num2cell(array_size(varargin{1:min(nargin,3)}));
-                    uuv(asizec{:})=uniform_uncertain;
-                    clear asizec
-
-                    if ischar(varargin{1})
-                        varargin{1}=cellstr(varargin{1});
-                    end
-                    for i=1:numel(uuv)
-                        if (numel(varargin{1}) > 1)
-                            uuv(i).descriptor=varargin{1}{i};
-                        else
-                            uuv(i).descriptor=[char(varargin{1}) string_dim(uuv,i,'vector')];
-                        end
-                        if (numel(varargin{2}) > 1)
-                            uuv(i).lower     =varargin{2}(i);
-                        else
-                            uuv(i).lower     =varargin{2};
-                        end
-                        if (numel(varargin{3}) > 1)
-                            uuv(i).upper     =varargin{3}(i);
-                        else
-                            uuv(i).upper     =varargin{3};
-                        end
-                    end
-            end
-
-        end
-
-        function []=disp(uuv)
-
-%  display the object
-
-            disp(sprintf('\n'));
-            for i=1:numel(uuv)
-                disp(sprintf('class ''%s'' object ''%s%s'' = \n',...
-                    class(uuv),inputname(1),string_dim(uuv,i)));
-                disp(sprintf('    descriptor: ''%s'''  ,uuv(i).descriptor));
-                disp(sprintf('         lower: %g'      ,uuv(i).lower));
-                disp(sprintf('         upper: %g\n'    ,uuv(i).upper));
-            end
-
-        end
-
-        function [desc]  =prop_desc(uuv,dstr)
-            desc=cell(1,numel(uuv));
-            for i=1:numel(uuv)
-                if ~isempty(uuv(i).descriptor)
-                    desc(i)=cellstr(uuv(i).descriptor);
-                elseif ~isempty(inputname(1))
-                    desc(i)=cellstr([inputname(1) string_dim(uuv,i,'vector')]);
-                elseif exist('dstr','var')
-                    desc(i)=cellstr([dstr         string_dim(uuv,i,'vector')]);
-                else
-                    desc(i)=cellstr(['uuv'        string_dim(uuv,i,'vector')]);
-                end
-            end
-            desc=allempty(desc);
-        end
-        function [initpt]=prop_initpt(uuv)
-            initpt=[];
-        end
-        function [lower] =prop_lower(uuv)
-            lower=zeros(1,numel(uuv));
-            for i=1:numel(uuv)
-                lower(i)=uuv(i).lower;
-            end
-            lower=allequal(lower,-Inf);
-        end
-        function [upper] =prop_upper(uuv)
-            upper=zeros(1,numel(uuv));
-            for i=1:numel(uuv)
-                upper(i)=uuv(i).upper;
-            end
-            upper=allequal(upper, Inf);
-        end
-        function [mean]  =prop_mean(uuv)
-            mean=[];
-        end
-        function [stddev]=prop_stddev(uuv)
-            stddev=[];
-        end
-        function [initst]=prop_initst(uuv)
-            initst=[];
-        end
-        function [stype] =prop_stype(uuv)
-            stype={};
-        end
-        function [scale] =prop_scale(uuv)
-            scale=[];
-        end
-		function [abscissas] =prop_abscissas(hbu) % {{{
-            abscissas=[]; 
-        end % }}}
-        function [counts] =prop_counts(hbu) % {{{
-            counts=[]; 
-        end % }}}
-        function [pairs_per_variable] =prop_pairs_per_variable(hbu) % {{{
-			pairs_per_variable=[];
-        end % }}}
-		function checkconsistency(self,md,solution,analyses) % {{{
+			end
 		end % }}}
-
+	%virtual functions needed by qmu processing algorithms:
+	%implemented:
+		function [desc]  =prop_desc(uuv,dstr) % {{{
+			desc=cell(1,numel(uuv));
+			for i=1:numel(uuv)
+				if ~isempty(uuv(i).descriptor)
+					desc(i)=cellstr(uuv(i).descriptor);
+				elseif ~isempty(inputname(1))
+					desc(i)=cellstr([inputname(1) string_dim(uuv,i,'vector')]);
+				elseif exist('dstr','var')
+					desc(i)=cellstr([dstr         string_dim(uuv,i,'vector')]);
+				else
+					desc(i)=cellstr(['uuv'        string_dim(uuv,i,'vector')]);
+				end
+			end
+			desc=allempty(desc);
+		end %}}}
+		function [lower] =prop_lower(uuv) %{{{
+			lower=zeros(1,numel(uuv));
+			for i=1:numel(uuv)
+				lower(i)=uuv(i).lower;
+			end
+			lower=allequal(lower,-Inf);
+		end %}}}
+		function [upper] =prop_upper(uuv) %{{{
+			upper=zeros(1,numel(uuv));
+			for i=1:numel(uuv)
+				upper(i)=uuv(i).upper;
+			end
+			upper=allequal(upper, Inf);
+		end % }}}
+	%default
+		function [stddev]=prop_stddev(uuv)  %{{{
+			stddev=[];
+			end % }}}
+			function [mean]  =prop_mean(nuv) % {{{
+			mean=[];
+			end % }}}
+			function [initpt]=prop_initpt(uuv) %{{{
+			initpt=[];
+			end %}}}
+			function [initst]=prop_initst(uuv) %{{{
+				initst=[];
+				end %}}}
+				function [stype] =prop_stype(uuv) %{{{
+				stype={};
+				end %}}}
+				function [scale] =prop_scale(uuv) %{{{
+				scale=[];
+				end %}}}
+				function [abscissas] =prop_abscissas(hbu) % {{{
+				abscissas=[]; 
+				end % }}}
+				function [counts] =prop_counts(hbu) % {{{
+				counts=[]; 
+				end % }}}
+				function [pairs_per_variable] =prop_pairs_per_variable(hbu) % {{{
+				pairs_per_variable=[];
+				end % }}}
     end
-
-    methods (Static)
-        function []=dakota_write(fidi,dvar)
-
-%  collect only the variables of the appropriate class
-
+	methods (Static)
+        function []=dakota_write(fidi,dvar) % {{{
+			%  collect only the variables of the appropriate class
             uuv=struc_class(dvar,'uniform_uncertain');
-
-%  write variables
-
+			%  write variables
             vlist_write(fidi,'uniform_uncertain','uuv',uuv);
-        end
+        end %}}}
     end
 end
