Index: /issm/trunk-jpl/src/m/classes/issmsettings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/issmsettings.m	(revision 22296)
+++ /issm/trunk-jpl/src/m/classes/issmsettings.m	(revision 22296)
@@ -0,0 +1,110 @@
+%ISSMSETTINGS class definition
+%
+%   Usage:
+%      issmsettings=issmsettings();
+
+classdef issmsettings
+	properties (SetAccess=public) 
+		results_on_nodes    = 0;
+		io_gather           = 0;
+		lowmem              = 0;
+		output_frequency    = 0;
+		recording_frequency   = 0;
+		waitonlock          = 0;
+		upload_server       = '';
+		upload_path         = '';
+		upload_login        = '';
+		upload_port         = 0;
+		upload_filename     = '';
+		solver_residue_threshold = 0;
+	end
+	methods
+		function self = issmsettings(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+
+			%are we short in memory ? (0 faster but requires more memory)
+			self.lowmem=0;
+
+			%i/o:
+			self.io_gather=1;
+
+			%results frequency by default every step
+			self.output_frequency=1;
+
+			%checkpoints frequency, by default never: 
+			self.recording_frequency=0;
+
+			%this option can be activated to load automatically the results
+			%onto the model after a parallel run by waiting for the lock file
+			%N minutes that is generated once the solution has converged
+			%0 to deactivate
+			self.waitonlock=Inf;
+
+			%upload options: 
+			self.upload_port         = 0;
+
+			%throw an error if solver residue exceeds this value
+			self.solver_residue_threshold = 1e-6;
+
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			md = checkfield(md,'fieldname','issmsettings.results_on_nodes','numel',[1],'values',[0 1]);
+			md = checkfield(md,'fieldname','issmsettings.io_gather','numel',[1],'values',[0 1]);
+			md = checkfield(md,'fieldname','issmsettings.lowmem','numel',[1],'values',[0 1]);
+			md = checkfield(md,'fieldname','issmsettings.output_frequency','numel',[1],'>=',1);
+			md = checkfield(md,'fieldname','issmsettings.recording_frequency','numel',[1],'>=',0);
+			md = checkfield(md,'fieldname','issmsettings.waitonlock','numel',[1]);
+			md = checkfield(md,'fieldname','issmsettings.solver_residue_threshold','numel',[1],'>',0);
+
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   general issmsettings parameters:'));
+
+			fielddisplay(self,'results_on_nodes','results are output for all the nodes of each element');
+			fielddisplay(self,'io_gather','I/O gathering strategy for result outputs (default 1)');
+			fielddisplay(self,'lowmem','is the memory limited ? (0 or 1)');
+			fielddisplay(self,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
+			fielddisplay(self,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
+			fielddisplay(self,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
+			fielddisplay(self,'upload_server','server hostname where model should be uploaded');
+			fielddisplay(self,'upload_path','path on server where model should be uploaded');
+			fielddisplay(self,'upload_login','server login');
+			fielddisplay(self,'upload_port','port login (default is 0)');
+			fielddisplay(self,'upload_filename','unique id generated when uploading the file to server');
+			fielddisplay(self,'solver_residue_threshold','throw an error if solver residue exceeds this value (NaN to deactivate)');
+
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double');
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.issmsettings.results_on_nodes'],self.results_on_nodes);
+			writejsdouble(fid,[modelname '.issmsettings.io_gather'],self.io_gather);
+			writejsdouble(fid,[modelname '.issmsettings.lowmem'],self.lowmem);
+			writejsdouble(fid,[modelname '.issmsettings.output_frequency'],self.output_frequency);
+			writejsdouble(fid,[modelname '.issmsettings.recording_frequency'],self.recording_frequency);
+			writejsdouble(fid,[modelname '.issmsettings.waitonlock'],self.waitonlock);
+			writejsstring(fid,[modelname '.issmsettings.upload_server'],self.upload_server);
+			writejsstring(fid,[modelname '.issmsettings.upload_path'],self.upload_path);
+			writejsstring(fid,[modelname '.issmsettings.upload_login'],self.upload_login);
+			writejsdouble(fid,[modelname '.issmsettings.upload_port'],self.upload_port);
+			writejsstring(fid,[modelname '.issmsettings.upload_filename'],self.upload_filename);
+			writejsstring(fid,[modelname '.issmsettings.solver_residue_threshold'],self.solver_residue_threshold);
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 22295)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 22296)
@@ -128,4 +128,9 @@
 			%2016 October 11
 			if isa(md.esa,'double'); md.esa=esa(); end
+			%2017 Dec 21st (needs to be here)
+			if isempty(md.settings)
+				disp('Warning: md.settings had to be reset, make sure to adjust md.settings.output_frequency and other fields');
+				md.settings = issmsettings();
+			end
 			%2017 February 10th
 			if md.settings.solver_residue_threshold==0,
@@ -1146,5 +1151,5 @@
 			md.debug            = debug();
 			md.verbose          = verbose();
-			md.settings         = settings();
+			md.settings         = issmsettings();
 			md.toolkits         = toolkits();
 			md.cluster          = generic();
Index: /issm/trunk-jpl/src/m/classes/qmu/continuous_design.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu/continuous_design.m	(revision 22295)
+++ /issm/trunk-jpl/src/m/classes/qmu/continuous_design.m	(revision 22296)
@@ -31,197 +31,197 @@
 %
 classdef continuous_design
-    properties
-        descriptor='';
-        initpt    = 0.;
-        lower     =-Inf;
-        upper     = Inf;
-        scale_type='none';
-        scale     = 1.;
-    end
-
-    methods
-        function [cdv]=continuous_design(varargin)
-
-            switch nargin
-
-%  create a default object
-
-                case 0
-
-%  copy the object
-
-                case 1
-                    if isa(varargin{1},'continuous_design')
-                        cdv=varargin{1};
-                    else
-                        error('Object ''%s'' is a ''%s'' class object, not ''%s''.',...
-                            inputname(1),class(varargin{1}),'continuous_design');
-                    end
-
-%  create the object from the input
-
-                otherwise
-                    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,'vector')];
-                        end
-                    end
-
-                    if (nargin >= 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)
-                            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)
-                                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)
-                                    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)
-                                        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',...
-                                                'Extra arguments for object of class ''%s''.',...
-                                                class(cdv));
-                                        end
-                                    end
-                                end
-                            end
-                        end
-                    end
-            end
-
-        end
-
-        function []=disp(cdv)
-
-%  display the object
-
-            disp(sprintf('\n'));
-            for i=1:numel(cdv)
-                disp(sprintf('class ''%s'' object ''%s%s'' = \n',...
-                    class(cdv),inputname(1),string_dim(cdv,i)));
-                disp(sprintf('    descriptor: ''%s'''  ,cdv(i).descriptor));
-                disp(sprintf('        initpt: %g'      ,cdv(i).initpt));
-                disp(sprintf('         lower: %g'      ,cdv(i).lower));
-                disp(sprintf('         upper: %g'      ,cdv(i).upper));
-                disp(sprintf('    scale_type: ''%s'''  ,cdv(i).scale_type));
-                disp(sprintf('         scale: %g\n'    ,cdv(i).scale));
-            end
-
-        end
-
-        function [desc]  =prop_desc(cdv,dstr)
-            desc=cell(1,numel(cdv));
-            for i=1:numel(cdv)
-                if ~isempty(cdv(i).descriptor)
-                    desc(i)=cellstr(cdv(i).descriptor);
-                elseif ~isempty(inputname(1))
-                    desc(i)=cellstr([inputname(1) string_dim(cdv,i,'vector')]);
-                elseif exist('dstr','var')
-                    desc(i)=cellstr([dstr         string_dim(cdv,i,'vector')]);
-                else
-                    desc(i)=cellstr(['cdv'        string_dim(cdv,i,'vector')]);
-                end
-            end
-            desc=allempty(desc);
-        end
-        function [initpt]=prop_initpt(cdv)
-            initpt=zeros(1,numel(cdv));
-            for i=1:numel(cdv)
-                initpt(i)=cdv(i).initpt;
-            end
-            initpt=allequal(initpt,0.);
-        end
-        function [lower] =prop_lower(cdv)
-            lower=zeros(1,numel(cdv));
-            for i=1:numel(cdv)
-                lower(i)=cdv(i).lower;
-            end
-            lower=allequal(lower,-Inf);
-        end
-        function [upper] =prop_upper(cdv)
-            upper=zeros(1,numel(cdv));
-            for i=1:numel(cdv)
-                upper(i)=cdv(i).upper;
-            end
-            upper=allequal(upper, Inf);
-        end
-        function [mean]  =prop_mean(cdv)
-            mean=[];
-        end
-        function [stddev]=prop_stddev(cdv)
-            stddev=[];
-        end
-        function [initst]=prop_initst(cdv)
-            initst=[];
-        end
-        function [stype] =prop_stype(cdv)
-            stype=cell(1,numel(cdv));
-            for i=1:numel(cdv)
-                stype(i)=cellstr(cdv(i).scale_type);
-            end
-            stype=allequal(stype,'none');
-        end
-        function [scale] =prop_scale(cdv)
-            scale=zeros(1,numel(cdv));
-            for i=1:numel(cdv)
-                scale(i)=cdv(i).scale;
-            end
-            scale=allequal(scale,1.);
-        end
-    end
-
-    methods (Static)
-        function []=dakota_write(fidi,dvar)
-
-%  collect only the variables of the appropriate class
-
-            cdv=struc_class(dvar,'continuous_design');
-
-%  write variables
-
-            vlist_write(fidi,'continuous_design','cdv',cdv);
-        end
-    end
+	properties
+		descriptor='';
+		initpt    = 0.;
+		lower     =-Inf;
+		upper     = Inf;
+		scale_type='none';
+		scale     = 1.;
+	end
+
+	methods
+		function [cdv]=continuous_design(varargin)
+
+			switch nargin
+
+				%  create a default object
+
+				case 0
+
+					%  copy the object
+
+				case 1
+					if isa(varargin{1},'continuous_design')
+						cdv=varargin{1};
+					else
+						error('Object ''%s'' is a ''%s'' class object, not ''%s''.',...
+							inputname(1),class(varargin{1}),'continuous_design');
+					end
+
+					%  create the object from the input
+
+				otherwise
+					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,'vector')];
+						end
+					end
+
+					if (nargin >= 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)
+							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)
+								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)
+									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)
+										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',...
+												'Extra arguments for object of class ''%s''.',...
+												class(cdv));
+										end
+									end
+								end
+							end
+						end
+					end
+			end
+
+		end
+
+		function []=disp(cdv)
+
+			%  display the object
+
+			disp(sprintf('\n'));
+			for i=1:numel(cdv)
+				disp(sprintf('class ''%s'' object ''%s%s'' = \n',...
+					class(cdv),inputname(1),string_dim(cdv,i)));
+				disp(sprintf('    descriptor: ''%s'''  ,cdv(i).descriptor));
+				disp(sprintf('        initpt: %g'      ,cdv(i).initpt));
+				disp(sprintf('         lower: %g'      ,cdv(i).lower));
+				disp(sprintf('         upper: %g'      ,cdv(i).upper));
+				disp(sprintf('    scale_type: ''%s'''  ,cdv(i).scale_type));
+				disp(sprintf('         scale: %g\n'    ,cdv(i).scale));
+			end
+
+		end
+
+		function [desc]  =prop_desc(cdv,dstr)
+			desc=cell(1,numel(cdv));
+			for i=1:numel(cdv)
+				if ~isempty(cdv(i).descriptor)
+					desc(i)=cellstr(cdv(i).descriptor);
+				elseif ~isempty(inputname(1))
+					desc(i)=cellstr([inputname(1) string_dim(cdv,i,'vector')]);
+				elseif exist('dstr','var')
+					desc(i)=cellstr([dstr         string_dim(cdv,i,'vector')]);
+				else
+					desc(i)=cellstr(['cdv'        string_dim(cdv,i,'vector')]);
+				end
+			end
+			desc=allempty(desc);
+		end
+		function [initpt]=prop_initpt(cdv)
+			initpt=zeros(1,numel(cdv));
+			for i=1:numel(cdv)
+				initpt(i)=cdv(i).initpt;
+			end
+			initpt=allequal(initpt,0.);
+		end
+		function [lower] =prop_lower(cdv)
+			lower=zeros(1,numel(cdv));
+			for i=1:numel(cdv)
+				lower(i)=cdv(i).lower;
+			end
+			lower=allequal(lower,-Inf);
+		end
+		function [upper] =prop_upper(cdv)
+			upper=zeros(1,numel(cdv));
+			for i=1:numel(cdv)
+				upper(i)=cdv(i).upper;
+			end
+			upper=allequal(upper, Inf);
+		end
+		function [mean]  =prop_mean(cdv)
+			mean=[];
+		end
+		function [stddev]=prop_stddev(cdv)
+			stddev=[];
+		end
+		function [initst]=prop_initst(cdv)
+			initst=[];
+		end
+		function [stype] =prop_stype(cdv)
+			stype=cell(1,numel(cdv));
+			for i=1:numel(cdv)
+				stype(i)=cellstr(cdv(i).scale_type);
+			end
+			stype=allequal(stype,'none');
+		end
+		function [scale] =prop_scale(cdv)
+			scale=zeros(1,numel(cdv));
+			for i=1:numel(cdv)
+				scale(i)=cdv(i).scale;
+			end
+			scale=allequal(scale,1.);
+		end
+	end
+
+	methods (Static)
+		function []=dakota_write(fidi,dvar)
+
+			%  collect only the variables of the appropriate class
+
+			cdv=struc_class(dvar,'continuous_design');
+
+			%  write variables
+
+			vlist_write(fidi,'continuous_design','cdv',cdv);
+		end
+	end
 end
Index: sm/trunk-jpl/src/m/classes/settings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/settings.m	(revision 22295)
+++ 	(revision )
@@ -1,110 +1,0 @@
-%SETTINGS class definition
-%
-%   Usage:
-%      settings=settings();
-
-classdef settings
-	properties (SetAccess=public) 
-		results_on_nodes    = 0;
-		io_gather           = 0;
-		lowmem              = 0;
-		output_frequency    = 0;
-		recording_frequency   = 0;
-		waitonlock          = 0;
-		upload_server       = '';
-		upload_path         = '';
-		upload_login        = '';
-		upload_port         = 0;
-		upload_filename     = '';
-		solver_residue_threshold = 0;
-	end
-	methods
-		function self = settings(varargin) % {{{
-			switch nargin
-				case 0
-					self=setdefaultparameters(self);
-				otherwise
-					error('constructor not supported');
-			end
-		end % }}}
-		function self = setdefaultparameters(self) % {{{
-
-			%are we short in memory ? (0 faster but requires more memory)
-			self.lowmem=0;
-
-			%i/o:
-			self.io_gather=1;
-
-			%results frequency by default every step
-			self.output_frequency=1;
-
-			%checkpoints frequency, by default never: 
-			self.recording_frequency=0;
-
-			%this option can be activated to load automatically the results
-			%onto the model after a parallel run by waiting for the lock file
-			%N minutes that is generated once the solution has converged
-			%0 to deactivate
-			self.waitonlock=Inf;
-
-			%upload options: 
-			self.upload_port         = 0;
-
-			%throw an error if solver residue exceeds this value
-			self.solver_residue_threshold = 1e-6;
-
-		end % }}}
-		function md = checkconsistency(self,md,solution,analyses) % {{{
-
-			md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0 1]);
-			md = checkfield(md,'fieldname','settings.io_gather','numel',[1],'values',[0 1]);
-			md = checkfield(md,'fieldname','settings.lowmem','numel',[1],'values',[0 1]);
-			md = checkfield(md,'fieldname','settings.output_frequency','numel',[1],'>=',1);
-			md = checkfield(md,'fieldname','settings.recording_frequency','numel',[1],'>=',0);
-			md = checkfield(md,'fieldname','settings.waitonlock','numel',[1]);
-			md = checkfield(md,'fieldname','settings.solver_residue_threshold','numel',[1],'>',0);
-
-		end % }}}
-		function disp(self) % {{{
-			disp(sprintf('   general settings parameters:'));
-
-			fielddisplay(self,'results_on_nodes','results are output for all the nodes of each element');
-			fielddisplay(self,'io_gather','I/O gathering strategy for result outputs (default 1)');
-			fielddisplay(self,'lowmem','is the memory limited ? (0 or 1)');
-			fielddisplay(self,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
-			fielddisplay(self,'recording_frequency','frequency at which the runs are being recorded, allowing for a restart');
-			fielddisplay(self,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
-			fielddisplay(self,'upload_server','server hostname where model should be uploaded');
-			fielddisplay(self,'upload_path','path on server where model should be uploaded');
-			fielddisplay(self,'upload_login','server login');
-			fielddisplay(self,'upload_port','port login (default is 0)');
-			fielddisplay(self,'upload_filename','unique id generated when uploading the file to server');
-			fielddisplay(self,'solver_residue_threshold','throw an error if solver residue exceeds this value (NaN to deactivate)');
-
-		end % }}}
-		function marshall(self,prefix,md,fid) % {{{
-			WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean');
-			WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean');
-			WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean');
-			WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
-			WriteData(fid,prefix,'object',self,'fieldname','solver_residue_threshold','format','Double');
-		end % }}}
-		function savemodeljs(self,fid,modelname) % {{{
-		
-			writejsdouble(fid,[modelname '.settings.results_on_nodes'],self.results_on_nodes);
-			writejsdouble(fid,[modelname '.settings.io_gather'],self.io_gather);
-			writejsdouble(fid,[modelname '.settings.lowmem'],self.lowmem);
-			writejsdouble(fid,[modelname '.settings.output_frequency'],self.output_frequency);
-			writejsdouble(fid,[modelname '.settings.recording_frequency'],self.recording_frequency);
-			writejsdouble(fid,[modelname '.settings.waitonlock'],self.waitonlock);
-			writejsstring(fid,[modelname '.settings.upload_server'],self.upload_server);
-			writejsstring(fid,[modelname '.settings.upload_path'],self.upload_path);
-			writejsstring(fid,[modelname '.settings.upload_login'],self.upload_login);
-			writejsdouble(fid,[modelname '.settings.upload_port'],self.upload_port);
-			writejsstring(fid,[modelname '.settings.upload_filename'],self.upload_filename);
-			writejsstring(fid,[modelname '.settings.solver_residue_threshold'],self.solver_residue_threshold);
-		end % }}}
-	end
-end
