source: issm/trunk-jpl/src/m/classes/verbose.m@ 27930

Last change on this file since 27930 was 27930, checked in by Mathieu Morlighem, 19 months ago

CHG: extending capabilities of extract

File size: 5.3 KB
Line 
1%VERBOSE class definition
2%
3% Available verbosity levels:
4% mprocessor : model processing
5% module : modules
6% solution : solution sequence
7% solver : solver info (extensive)
8% convergence : convergence criteria
9% control : control method
10% qmu : sensitivity analysis
11% autodiff : AD analysis
12% smb : smb analysis
13%
14% Usage:
15% verbose=verbose();
16% verbose=verbose(3);
17% verbose=verbose('all');
18% verbose=verbose('001100');
19% verbose=verbose('module',true,'solver',false);
20
21%WARNING: some parts of this file are Synchronized with src/c/shared/Numerics/Verbosity.h
22% Do not modify these sections. See src/c/shared/Numerics/README for more info
23
24classdef verbose
25 properties (SetAccess=public)
26 % {{{
27 %BEGINFIELDS
28 mprocessor=false;
29 module=false;
30 solution=false;
31 solver=false;
32 convergence=false;
33 control=false;
34 qmu=false;
35 autodiff=false;
36 smb=false;
37 %ENDFIELDS
38 % }}}
39 end
40 %}}}
41 methods
42 function verbose=verbose(varargin) % {{{
43
44 switch(nargin),
45 case 0,
46 verbose.solution=true;
47 verbose.qmu=true;
48 verbose.control=true;
49 case 1,
50 binary=varargin{1};
51 if ischar(binary),
52 if strcmpi(binary,'all'),
53 binary=2^11-1; %all ones
54 verbose=BinaryToVerbose(verbose,binary);
55 verbose.solver=false; %Do not use by default
56 else
57 binary=bin2dec(binary);
58 verbose=BinaryToVerbose(verbose,binary);
59 end
60 elseif isnumeric(binary),
61 verbose=BinaryToVerbose(verbose,binary);
62 end
63 otherwise,
64 %Use options to initialize object
65 verbose=AssignObjectFields(pairoptions(varargin{:}),verbose);
66
67 %Cast to logicals
68 listproperties=properties('verbose');
69 for i=1:numel(listproperties),
70 fieldname=listproperties{i};
71 fieldvalue=verbose.(fieldname);
72 if (islogical(fieldvalue) | isnumeric(fieldvalue)) & numel(fieldvalue)==1,
73 verbose.(fieldname)=logical(fieldvalue);
74 else
75 error('verbose supported field values are logicals only (true or false)');
76 end
77 end
78 end
79 end
80 %}}}
81 function binary=VerboseToBinary(verbose) % {{{
82
83 %BEGINVERB2BIN
84 binary=0;
85 if (verbose.mprocessor), binary=bitor(binary,1); end
86 if (verbose.module), binary=bitor(binary,2); end
87 if (verbose.solution), binary=bitor(binary,4); end
88 if (verbose.solver), binary=bitor(binary,8); end
89 if (verbose.convergence), binary=bitor(binary,16); end
90 if (verbose.control), binary=bitor(binary,32); end
91 if (verbose.qmu), binary=bitor(binary,64); end
92 if (verbose.autodiff), binary=bitor(binary,128); end
93 if (verbose.smb), binary=bitor(binary,256); end
94 %ENDVERB2BIN
95
96 end
97 %}}}
98 function verbose=BinaryToVerbose(verbose,binary) % {{{
99
100 %BEGINBIN2VERB
101 if bitand(binary,1), verbose.mprocessor=true; else verbose.mprocessor=false; end
102 if bitand(binary,2), verbose.module=true; else verbose.module=false; end
103 if bitand(binary,4), verbose.solution=true; else verbose.solution=false; end
104 if bitand(binary,8), verbose.solver=true; else verbose.solver=false; end
105 if bitand(binary,16), verbose.convergence=true; else verbose.convergence=false; end
106 if bitand(binary,32), verbose.control=true; else verbose.control=false; end
107 if bitand(binary,64), verbose.qmu=true; else verbose.qmu=false; end
108 if bitand(binary,128), verbose.autodiff=true; else verbose.autodiff=false; end
109 if bitand(binary,256), verbose.smb=true; else verbose.smb=false; end
110 %ENDBIN2VERB
111
112 end
113 %}}}
114 function md = checkconsistency(self,md,solution,analyses) % {{{
115
116 if md.inversion.iscontrol
117 temp = verbose('control',1);
118 if(VerboseToBinary(self) ~= VerboseToBinary(temp))
119 disp('INFO: the outlog will look better if only md.verbose.control is turned on');
120 end
121 end
122
123 end % }}}
124 function disp(verbose) % {{{
125
126 %BEGINDISP
127 disp(sprintf('class ''%s'' = ',class(verbose)));
128 disp(sprintf(' %15s : %s','mprocessor',mat2str(verbose.mprocessor)));
129 disp(sprintf(' %15s : %s','module',mat2str(verbose.module)));
130 disp(sprintf(' %15s : %s','solution',mat2str(verbose.solution)));
131 disp(sprintf(' %15s : %s','solver',mat2str(verbose.solver)));
132 disp(sprintf(' %15s : %s','convergence',mat2str(verbose.convergence)));
133 disp(sprintf(' %15s : %s','control',mat2str(verbose.control)));
134 disp(sprintf(' %15s : %s','qmu',mat2str(verbose.qmu)));
135 disp(sprintf(' %15s : %s','autodiff',mat2str(verbose.autodiff)));
136 disp(sprintf(' %15s : %s','smb',mat2str(verbose.smb)));
137 %ENDDISP
138
139 end
140 %}}}
141 function marshall(self,prefix,md,fid) % {{{
142 WriteData(fid,prefix,'data',VerboseToBinary(self),'name','md.verbose','format','Integer');
143 end % }}}
144 function savemodeljs(self,fid,modelname) % {{{
145
146 writejsdouble(fid,[modelname '.verbose.mprocessor'],self.mprocessor);
147 writejsdouble(fid,[modelname '.verbose.module'],self.module);
148 writejsdouble(fid,[modelname '.verbose.solution'],self.solution);
149 writejsdouble(fid,[modelname '.verbose.solver'],self.solver);
150 writejsdouble(fid,[modelname '.verbose.convergence'],self.convergence);
151 writejsdouble(fid,[modelname '.verbose.control'],self.control);
152 writejsdouble(fid,[modelname '.verbose.qmu'],self.qmu);
153 writejsdouble(fid,[modelname '.verbose.autodiff'],self.autodiff);
154 writejsdouble(fid,[modelname '.verbose.smb'],self.smb);
155
156 end % }}}
157 end
158end
Note: See TracBrowser for help on using the repository browser.