Index: ../trunk-jpl/src/m/classes/settings.m =================================================================== --- ../trunk-jpl/src/m/classes/settings.m (revision 22295) +++ ../trunk-jpl/src/m/classes/settings.m (nonexistent) @@ -1,110 +0,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 Index: ../trunk-jpl/src/m/classes/qmu/continuous_design.m =================================================================== --- ../trunk-jpl/src/m/classes/qmu/continuous_design.m (revision 22295) +++ ../trunk-jpl/src/m/classes/qmu/continuous_design.m (revision 22296) @@ -30,198 +30,198 @@ % to foreign countries or providing access to foreign persons." % classdef continuous_design - properties - descriptor=''; - initpt = 0.; - lower =-Inf; - upper = Inf; - scale_type='none'; - scale = 1.; - end + properties + descriptor=''; + initpt = 0.; + lower =-Inf; + upper = Inf; + scale_type='none'; + scale = 1.; + end - methods - function [cdv]=continuous_design(varargin) + methods + function [cdv]=continuous_design(varargin) - switch nargin + switch nargin -% create a default object + % create a default object - case 0 + case 0 -% copy the object + % 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 + 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 + % create the object from the input - otherwise - asizec=num2cell(array_size(varargin{1:min(nargin,6)})); - cdv(asizec{:})=continuous_design; - clear asizec + 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 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 + 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 + end - function []=disp(cdv) + function []=disp(cdv) -% display the object + % 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 + 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 + 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 + 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) + methods (Static) + function []=dakota_write(fidi,dvar) -% collect only the variables of the appropriate class + % collect only the variables of the appropriate class - cdv=struc_class(dvar,'continuous_design'); + cdv=struc_class(dvar,'continuous_design'); -% write variables + % write variables - vlist_write(fidi,'continuous_design','cdv',cdv); - end - end + vlist_write(fidi,'continuous_design','cdv',cdv); + end + end end Index: ../trunk-jpl/src/m/classes/model.m =================================================================== --- ../trunk-jpl/src/m/classes/model.m (revision 22295) +++ ../trunk-jpl/src/m/classes/model.m (revision 22296) @@ -127,6 +127,11 @@ if isa(md.slr,'double'); md.slr=slr(); end %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, md.settings.solver_residue_threshold = 1e-6; @@ -1145,7 +1150,7 @@ md.flowequation = flowequation(); md.debug = debug(); md.verbose = verbose(); - md.settings = settings(); + md.settings = issmsettings(); md.toolkits = toolkits(); md.cluster = generic(); md.balancethickness = balancethickness(); Index: ../trunk-jpl/src/m/classes/issmsettings.m =================================================================== --- ../trunk-jpl/src/m/classes/issmsettings.m (nonexistent) +++ ../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