Index: /issm/trunk/src/m/classes/continuous_design.m
===================================================================
--- /issm/trunk/src/m/classes/continuous_design.m	(revision 3576)
+++ /issm/trunk/src/m/classes/continuous_design.m	(revision 3577)
@@ -62,16 +62,62 @@
 
                 otherwise
-                    cdv.descriptor=varargin{1};
+                    asizec=num2cell(array_size(varargin{1:min(nargin,6)}));
+                    cdv(asizec{:})=continuous_design;
+                    clear asizec
+                    
+                    if ischar(varargin{1})
+                        varargin{1}=cellstr(varargin{1});
+                    end
+                    for i=1:numel(cdv)
+                        if (numel(varargin{1}) > 1)
+                            cdv(i).descriptor=varargin{1}{i};
+                        else
+                            cdv(i).descriptor=[char(varargin{1}) string_dim(cdv,i)];
+                        end
+                    end
 
                     if (nargin >= 2)
-                        cdv.initpt    =varargin{2};
+                        for i=1:numel(cdv)
+                            if (numel(varargin{2}) > 1)
+                                cdv(i).initpt    =varargin{2}(i);
+                            else
+                                cdv(i).initpt    =varargin{2};
+                            end
+                        end
                         if (nargin >= 3)
-                            cdv.lower     =varargin{3};
+                            for i=1:numel(cdv)
+                                if (numel(varargin{3}) > 1)
+                                    cdv(i).lower     =varargin{3}(i);
+                                else
+                                    cdv(i).lower     =varargin{3};
+                                end
+                            end
                             if (nargin >= 4)
-                                cdv.upper     =varargin{4};
+                                for i=1:numel(cdv)
+                                    if (numel(varargin{4}) > 1)
+                                        cdv(i).upper     =varargin{4}(i);
+                                    else
+                                        cdv(i).upper     =varargin{4};
+                                    end
+                                end
                                 if (nargin >= 5)
-                                    cdv.scale_type=varargin{5};
+                                    if ischar(varargin{5})
+                                        varargin{5}=cellstr(varargin{5});
+                                    end
+                                    for i=1:numel(cdv)
+                                        if (numel(varargin{5}) > 1)
+                                            cdv(i).scale_type=varargin{5}{i};
+                                        else
+                                            cdv(i).scale_type=char(varargin{5});
+                                        end
+                                    end
                                     if (nargin >= 6)
-                                        cdv.scale     =varargin{6};
+                                        for i=1:numel(cdv)
+                                            if (numel(varargin{6}) > 1)
+                                                cdv(i).scale     =varargin{6}(i);
+                                            else
+                                                cdv(i).scale     =varargin{6};
+                                            end
+                                        end
                                         if (nargin > 6)
                                             warning('continuous_design:extra_arg',...
@@ -101,5 +147,5 @@
                 disp(sprintf('         upper: %g'      ,cdv(i).upper));
                 disp(sprintf('    scale_type: ''%s'''  ,cdv(i).scale_type));
-                disp(sprintf('         scale: %g'      ,cdv(i).scale));
+                disp(sprintf('         scale: %g\n'    ,cdv(i).scale));
             end
 
Index: /issm/trunk/src/m/classes/continuous_state.m
===================================================================
--- /issm/trunk/src/m/classes/continuous_state.m	(revision 3576)
+++ /issm/trunk/src/m/classes/continuous_state.m	(revision 3577)
@@ -58,12 +58,43 @@
 
                 otherwise
-                    csv.descriptor=varargin{1};
+                    asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                    csv(asizec{:})=continuous_state;
+                    clear asizec
+                    
+                    if ischar(varargin{1})
+                        varargin{1}=cellstr(varargin{1});
+                    end
+                    for i=1:numel(csv)
+                        if (numel(varargin{1}) > 1)
+                            csv(i).descriptor=varargin{1}{i};
+                        else
+                            csv(i).descriptor=[char(varargin{1}) string_dim(csv,i)];
+                        end
+                    end
 
                     if (nargin >= 2)
-                        csv.initst    =varargin{2};
+                        for i=1:numel(csv)
+                            if (numel(varargin{2}) > 1)
+                                csv(i).initst    =varargin{2}(i);
+                            else
+                                csv(i).initst    =varargin{2};
+                            end
+                        end
                         if (nargin >= 3)
-                            csv.lower     =varargin{3};
+                            for i=1:numel(csv)
+                                if (numel(varargin{3}) > 1)
+                                    csv(i).lower     =varargin{3}(i);
+                                else
+                                    csv(i).lower     =varargin{3};
+                                end
+                            end
                             if (nargin >= 4)
-                                csv.upper     =varargin{4};
+                                for i=1:numel(csv)
+                                    if (numel(varargin{4}) > 1)
+                                        csv(i).upper     =varargin{4}(i);
+                                    else
+                                        csv(i).upper     =varargin{4};
+                                    end
+                                end
                                 if (nargin > 4)
                                     warning('continuous_state:extra_arg',...
Index: /issm/trunk/src/m/classes/least_squares_term.m
===================================================================
--- /issm/trunk/src/m/classes/least_squares_term.m	(revision 3576)
+++ /issm/trunk/src/m/classes/least_squares_term.m	(revision 3577)
@@ -51,12 +51,47 @@
                         lst=varargin{1};
                     else
+                        asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                        lst(asizec{:})=least_squares_term;
+                        clear asizec
+                    
+                        if ischar(varargin{1})
+                            varargin{1}=cellstr(varargin{1});
+                        end
+                        for i=1:numel(lst)
+                            if (numel(varargin{1}) > 1)
+                                lst(i).descriptor=varargin{1}{i};
+                            else
+                                lst(i).descriptor=[char(varargin{1}) string_dim(lst,i)];
+                            end
+                        end
                         lst.descriptor=varargin{1};
 
                         if (nargin >= 2)
-                            lst.scale_type=varargin{2};
+                            if ischar(varargin{2})
+                                varargin{2}=cellstr(varargin{2});
+                            end
+                            for i=1:numel(lst)
+                                if (numel(varargin{2}) > 1)
+                                    lst(i).scale_type=varargin{2}{i};
+                                else
+                                    lst(i).scale_type=char(varargin{2});
+                                end
+                            end
                             if (nargin >= 3)
-                                lst.scale     =varargin{3};
+                                for i=1:numel(lst)
+                                    if (numel(varargin{3}) > 1)
+                                        lst(i).scale     =varargin{3}(i);
+                                    else
+                                        lst(i).scale     =varargin{3};
+                                    end
+                                end
                                 if (nargin >= 4)
-                                    lst.weight    =varargin{4};
+                                    for i=1:numel(lst)
+                                        if (numel(varargin{4}) > 1)
+                                            lst(i).weight    =varargin{4}(i);
+                                        else
+                                            lst(i).weight    =varargin{4};
+                                        end
+                                    end
 
                                     if (nargin > 4)
Index: /issm/trunk/src/m/classes/linear_equality_constraint.m
===================================================================
--- /issm/trunk/src/m/classes/linear_equality_constraint.m	(revision 3576)
+++ /issm/trunk/src/m/classes/linear_equality_constraint.m	(revision 3577)
@@ -58,17 +58,51 @@
 
                 otherwise
-                    if (size(varargin{1},1) > 1)
-                        warning('linear_equality_constraint:matrix_rows',...
-                            'Matrix for object of class ''%s'' has %d rows.',...
-                            class(lec),size(varargin{1},1));
+                    if     (size(varargin{1},1) == array_numel(varargin{2:min(nargin,4)}) || ...
+                            size(varargin{1},1) == 1)
+                        asizec=num2cell(array_size(varargin{2:min(nargin,4)}));
+                    elseif (array_numel(varargin{2:min(nargin,4)}) == 1)
+                        asizec=num2cell([size(varargin{1},1) 1]);
+                    else
+                        error('Matrix for object of class ''%s'' has inconsistent number of rows.',...
+                              class(lec));
                     end
-                    lec.matrix    =varargin{1}(1,:);
+                    lec(asizec{:})=linear_equality_constraint;
+                    clear asizec
+                    
+                    for i=1:numel(lec)
+                        if (size(varargin{1},1) > 1)
+                            lec(i).matrix    =varargin{1}(i,:);
+                        else
+                            lec(i).matrix    =varargin{1};
+                        end
+                    end
 
                     if (nargin >= 2)
-                        lec.target    =varargin{2};
+                        for i=1:numel(lec)
+                            if (numel(varargin{2}) > 1)
+                                lec(i).target    =varargin{2}(i);
+                            else
+                                lec(i).target    =varargin{2};
+                            end
+                        end
                         if (nargin >= 3)
-                            lec.scale_type=varargin{3};
+                            if ischar(varargin{3})
+                                varargin{3}=cellstr(varargin{3});
+                            end
+                            for i=1:numel(lec)
+                                if (numel(varargin{3}) > 1)
+                                    lec(i).scale_type=varargin{3}{i};
+                                else
+                                    lec(i).scale_type=char(varargin{3});
+                                end
+                            end
                             if (nargin >= 4)
-                                lec.scale     =varargin{4};
+                                for i=1:numel(lec)
+                                    if (numel(varargin{4}) > 1)
+                                        lec(i).scale     =varargin{4}(i);
+                                    else
+                                        lec(i).scale     =varargin{4};
+                                    end
+                                end
 
                                 if (nargin > 4)
Index: /issm/trunk/src/m/classes/linear_inequality_constraint.m
===================================================================
--- /issm/trunk/src/m/classes/linear_inequality_constraint.m	(revision 3576)
+++ /issm/trunk/src/m/classes/linear_inequality_constraint.m	(revision 3577)
@@ -66,19 +66,59 @@
 
                 otherwise
-                    if (size(varargin{1},1) > 1)
-                        warning('linear_inequality_constraint:matrix_rows',...
-                            'Matrix for object of class ''%s'' has %d rows.',...
-                            class(lic),size(varargin{1},1));
-                    end
-                    lic.matrix    =varargin{1}(1,:);
+                    if     (size(varargin{1},1) == array_numel(varargin{2:min(nargin,5)}) || ...
+                            size(varargin{1},1) == 1)
+                        asizec=num2cell(array_size(varargin{2:min(nargin,5)}));
+                    elseif (array_numel(varargin{2:min(nargin,5)}) == 1)
+                        asizec=num2cell([size(varargin{1},1) 1]);
+                    else
+                        error('Matrix for object of class ''%s'' has inconsistent number of rows.',...
+                              class(lic));
+                    end
+                    lic(asizec{:})=linear_inequality_constraint;
+                    clear asizec
+                    
+                    for i=1:numel(lic)
+                        if (size(varargin{1},1) > 1)
+                            lic(i).matrix    =varargin{1}(i,:);
+                        else
+                            lic(i).matrix    =varargin{1};
+                        end
+                    end
 
                     if (nargin >= 2)
-                        lic.lower     =varargin{2};
+                        for i=1:numel(lic)
+                            if (numel(varargin{2}) > 1)
+                                lic(i).lower     =varargin{2}(i);
+                            else
+                                lic(i).lower     =varargin{2};
+                            end
+                        end
                         if (nargin >= 3)
-                            lic.upper     =varargin{3};
+                            for i=1:numel(lic)
+                                if (numel(varargin{3}) > 1)
+                                    lic(i).upper     =varargin{3}(i);
+                                else
+                                    lic(i).upper     =varargin{3};
+                                end
+                            end
                             if (nargin >= 4)
-                                lic.scale_type=varargin{4};
+                                if ischar(varargin{4})
+                                    varargin{4}=cellstr(varargin{4});
+                                end
+                                for i=1:numel(lic)
+                                    if (numel(varargin{4}) > 1)
+                                        lic(i).scale_type=varargin{4}{i};
+                                    else
+                                        lic(i).scale_type=char(varargin{4});
+                                    end
+                                end
                                 if (nargin >= 5)
-                                    lic.scale     =varargin{5};
+                                    for i=1:numel(lic)
+                                        if (numel(varargin{5}) > 1)
+                                            lic(i).scale     =varargin{5}(i);
+                                        else
+                                            lic(i).scale     =varargin{5};
+                                        end
+                                    end
 
                                     if (nargin > 5)
Index: /issm/trunk/src/m/classes/nonlinear_equality_constraint.m
===================================================================
--- /issm/trunk/src/m/classes/nonlinear_equality_constraint.m	(revision 3576)
+++ /issm/trunk/src/m/classes/nonlinear_equality_constraint.m	(revision 3577)
@@ -58,11 +58,43 @@
 
                 otherwise
-                    nec.descriptor=varargin{1};
-                    nec.target    =varargin{2};
+                    asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                    nec(asizec{:})=nonlinear_equality_constraint;
+                    clear asizec
+                    
+                    if ischar(varargin{1})
+                        varargin{1}=cellstr(varargin{1});
+                    end
+                    for i=1:numel(nec)
+                        if (numel(varargin{1}) > 1)
+                            nec(i).descriptor=varargin{1}{i};
+                        else
+                            nec(i).descriptor=[char(varargin{1}) string_dim(nec,i)];
+                        end
+                        if (numel(varargin{2}) > 1)
+                            nec(i).target    =varargin{2}(i);
+                        else
+                            nec(i).target    =varargin{2};
+                        end
+                    end
 
                     if (nargin >= 3)
-                        nec.scale_type=varargin{3};
+                        if ischar(varargin{3})
+                            varargin{3}=cellstr(varargin{3});
+                        end
+                        for i=1:numel(nec)
+                            if (numel(varargin{3}) > 1)
+                                nec(i).scale_type=varargin{3}{i};
+                            else
+                                nec(i).scale_type=char(varargin{3});
+                            end
+                        end
                         if (nargin >= 4)
-                            nec.scale     =varargin{4};
+                            for i=1:numel(nec)
+                                if (numel(varargin{4}) > 1)
+                                    nec(i).scale     =varargin{4}(i);
+                                else
+                                    nec(i).scale     =varargin{4};
+                                end
+                            end
 
                             if (nargin > 4)
Index: /issm/trunk/src/m/classes/nonlinear_inequality_constraint.m
===================================================================
--- /issm/trunk/src/m/classes/nonlinear_inequality_constraint.m	(revision 3576)
+++ /issm/trunk/src/m/classes/nonlinear_inequality_constraint.m	(revision 3577)
@@ -66,12 +66,48 @@
 
                 otherwise
-                    nic.descriptor=varargin{1};
-                    nic.lower     =varargin{2};
-                    nic.upper     =varargin{3};
+                    asizec=num2cell(array_size(varargin{1:min(nargin,5)}));
+                    nic(asizec{:})=nonlinear_inequality_constraint;
+                    clear asizec
+                    
+                    if ischar(varargin{1})
+                        varargin{1}=cellstr(varargin{1});
+                    end
+                    for i=1:numel(nic)
+                        if (numel(varargin{1}) > 1)
+                            nic(i).descriptor=varargin{1}{i};
+                        else
+                            nic(i).descriptor=[char(varargin{1}) string_dim(nic,i)];
+                        end
+                        if (numel(varargin{2}) > 1)
+                            nic(i).lower     =varargin{2}(i);
+                        else
+                            nic(i).lower     =varargin{2};
+                        end
+                        if (numel(varargin{3}) > 1)
+                            nic(i).upper     =varargin{3}(i);
+                        else
+                            nic(i).upper     =varargin{3};
+                        end
+                    end
 
                     if (nargin >= 4)
-                        nic.scale_type=varargin{4};
+                        if ischar(varargin{4})
+                            varargin{4}=cellstr(varargin{4});
+                        end
+                        for i=1:numel(nic)
+                            if (numel(varargin{4}) > 1)
+                                nic(i).scale_type=varargin{4}{i};
+                            else
+                                nic(i).scale_type=char(varargin{4});
+                            end
+                        end
                         if (nargin >= 5)
-                            nic.scale     =varargin{5};
+                            for i=1:numel(nic)
+                                if (numel(varargin{5}) > 1)
+                                    nic(i).scale     =varargin{5}(i);
+                                else
+                                    nic(i).scale     =varargin{5};
+                                end
+                            end
 
                             if (nargin > 5)
Index: /issm/trunk/src/m/classes/normal_uncertain.m
===================================================================
--- /issm/trunk/src/m/classes/normal_uncertain.m	(revision 3576)
+++ /issm/trunk/src/m/classes/normal_uncertain.m	(revision 3577)
@@ -66,12 +66,45 @@
 
                 otherwise
-                    nuv.descriptor=varargin{1};
-                    nuv.mean      =varargin{2};
-                    nuv.stddev    =varargin{3};
+                    asizec=num2cell(array_size(varargin{1:min(nargin,5)}));
+                    nuv(asizec{:})=normal_uncertain;
+                    clear asizec
+                    
+                    if ischar(varargin{1})
+                        varargin{1}=cellstr(varargin{1});
+                    end
+                    for i=1:numel(nuv)
+                        if (numel(varargin{1}) > 1)
+                            nuv(i).descriptor=varargin{1}{i};
+                        else
+                            nuv(i).descriptor=[char(varargin{1}) string_dim(nuv,i)];
+                        end
+                        if (numel(varargin{2}) > 1)
+                            nuv(i).mean      =varargin{2}(i);
+                        else
+                            nuv(i).mean      =varargin{2};
+                        end
+                        if (numel(varargin{3}) > 1)
+                            nuv(i).stddev    =varargin{3}(i);
+                        else
+                            nuv(i).stddev    =varargin{3};
+                        end
+                    end
 
                     if (nargin >= 4)
-                        nuv.lower     =varargin{4};
+                        for i=1:numel(nuv)
+                            if (numel(varargin{4}) > 1)
+                                nuv(i).lower     =varargin{4}(i);
+                            else
+                                nuv(i).lower     =varargin{4};
+                            end
+                        end
                         if (nargin >= 5)
-                            nuv.upper     =varargin{5};
+                            for i=1:numel(nuv)
+                                if (numel(varargin{5}) > 1)
+                                    nuv(i).upper     =varargin{5}(i);
+                                else
+                                    nuv(i).upper     =varargin{5};
+                                end
+                            end
                             if (nargin > 5)
                                 warning('normal_uncertain:extra_arg',...
Index: /issm/trunk/src/m/classes/objective_function.m
===================================================================
--- /issm/trunk/src/m/classes/objective_function.m	(revision 3576)
+++ /issm/trunk/src/m/classes/objective_function.m	(revision 3577)
@@ -51,12 +51,46 @@
                         of=varargin{1};
                     else
-                        of.descriptor=varargin{1};
+                        asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                        of(asizec{:})=objective_function;
+                        clear asizec
+                    
+                        if ischar(varargin{1})
+                            varargin{1}=cellstr(varargin{1});
+                        end
+                        for i=1:numel(of)
+                            if (numel(varargin{1}) > 1)
+                                of(i).descriptor=varargin{1}{i};
+                            else
+                                of(i).descriptor=[char(varargin{1}) string_dim(of,i)];
+                            end
+                        end
 
                         if (nargin >= 2)
-                            of.scale_type=varargin{2};
+                            if ischar(varargin{2})
+                                varargin{2}=cellstr(varargin{2});
+                            end
+                            for i=1:numel(of)
+                                if (numel(varargin{2}) > 1)
+                                    of(i).scale_type=varargin{2}{i};
+                                else
+                                    of(i).scale_type=char(varargin{2});
+                                end
+                            end
                             if (nargin >= 3)
-                                of.scale     =varargin{3};
+                                for i=1:numel(of)
+                                    if (numel(varargin{3}) > 1)
+                                        of(i).scale     =varargin{3}(i);
+                                    else
+                                        of(i).scale     =varargin{3};
+                                    end
+                                end
                                 if (nargin >= 4)
-                                    of.weight    =varargin{4};
+                                    for i=1:numel(of)
+                                        if (numel(varargin{4}) > 1)
+                                            of(i).weight    =varargin{4}(i);
+                                        else
+                                            of(i).weight    =varargin{4};
+                                        end
+                                    end
 
                                     if (nargin > 4)
Index: /issm/trunk/src/m/classes/response_function.m
===================================================================
--- /issm/trunk/src/m/classes/response_function.m	(revision 3576)
+++ /issm/trunk/src/m/classes/response_function.m	(revision 3577)
@@ -53,14 +53,35 @@
                         rf=varargin{1};
                     else
-                        rf.descriptor=varargin{1};
+                        asizec=num2cell(array_size(varargin{1:min(nargin,1)}));
+                        rf(asizec{:})=response_function;
+                        clear asizec
+                    
+                        if ischar(varargin{1})
+                            varargin{1}=cellstr(varargin{1});
+                        end
+                        for i=1:numel(rf)
+                            if (numel(varargin{1}) > 1)
+                                rf(i).descriptor=varargin{1}{i};
+                            else
+                                rf(i).descriptor=[char(varargin{1}) string_dim(rf,i)];
+                            end
+                        end
 
                         if (nargin >= 2)
-                            rf.respl     =varargin{2};
+                        	for i=1:numel(rf)
+                                rf(i).respl     =varargin{2};
+                            end
                             if (nargin >= 3)
-                                rf.probl     =varargin{3};
+                        		for i=1:numel(rf)
+                                    rf(i).probl     =varargin{3};
+                                end
                                 if (nargin >= 4)
-                                    rf.rell      =varargin{4};
+                        			for i=1:numel(rf)
+                                        rf(i).rell      =varargin{4};
+                                    end
                                     if (nargin >= 5)
-                                        rf.grell     =varargin{5};
+                        				for i=1:numel(rf)
+                                            rf(i).grell     =varargin{5};
+                                        end
 
                                         if (nargin > 5)
Index: /issm/trunk/src/m/classes/uniform_uncertain.m
===================================================================
--- /issm/trunk/src/m/classes/uniform_uncertain.m	(revision 3576)
+++ /issm/trunk/src/m/classes/uniform_uncertain.m	(revision 3577)
@@ -61,7 +61,28 @@
 
                 otherwise
-                    uuv.descriptor=varargin{1};
-                    uuv.lower     =varargin{2};
-                    uuv.upper     =varargin{3};
+                    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)];
+                        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
 
