time | calls | line |
---|
| | 1 | function [return1,return2] = spparms(arg1,arg2)
|
| | 2 | %SPPARMS Set parameters for sparse matrix routines.
|
| | 3 | % SPPARMS('key',value) sets one or more of the "tunable" parameters
|
| | 4 | % used in the sparse routines, particularly sparse / and \.
|
| | 5 | %
|
| | 6 | % SPPARMS, by itself, prints a description of the current settings.
|
| | 7 | %
|
| | 8 | % If no input argument is present, values = SPPARMS returns a
|
| | 9 | % vector whose components give the current settings.
|
| | 10 | % [keys,values] = SPPARMS returns that vector, and also returns
|
| | 11 | % a character matrix whose rows are the keywords for the parameters.
|
| | 12 | %
|
| | 13 | % SPPARMS(values), with no output argument, sets all the parameters
|
| | 14 | % to the values specified by the argument vector.
|
| | 15 | %
|
| | 16 | % value = SPPARMS('key') returns the current setting of one parameter.
|
| | 17 | %
|
| | 18 | % SPPARMS('default') sets all the parameters to their default settings.
|
| | 19 | % SPPARMS('tight') sets the minimum degree ordering parameters to their
|
| | 20 | % "tight" settings, which may lead to orderings with less fill-in, but
|
| | 21 | % which makes the ordering functions themselves use more execution time.
|
| | 22 | %
|
| | 23 | % The parameters with the default and "tight" values are:
|
| | 24 | %
|
| | 25 | % keyword default tight
|
| | 26 | %
|
| | 27 | % values(1) 'spumoni' 0
|
| | 28 | % values(2) 'thr_rel' 1.1 1.0
|
| | 29 | % values(3) 'thr_abs' 1.0 0.0
|
| | 30 | % values(4) 'exact_d' 0 1
|
| | 31 | % values(5) 'supernd' 3 1
|
| | 32 | % values(6) 'rreduce' 3 1
|
| | 33 | % values(7) 'wh_frac' 0.5 0.5
|
| | 34 | % values(8) 'autommd' 1
|
| | 35 | % values(9) 'autoamd' 1
|
| | 36 | % values(10) 'piv_tol' 0.1
|
| | 37 | % values(11) 'bandden' 0.5
|
| | 38 | % values(12) 'umfpack' 1
|
| | 39 | % values(13) 'sym_tol' 0.001
|
| | 40 | % values(14) 'ldl_tol' 0.01
|
| | 41 | %
|
| | 42 | % The meanings of the parameters are
|
| | 43 | %
|
| | 44 | % spumoni: The Sparse Monitor Flag controls diagnostic output;
|
| | 45 | % 0 means none, 1 means some, 2 means too much.
|
| | 46 | % thr_rel,
|
| | 47 | % thr_abs: Minimum degree threshold is thr_rel*mindegree + thr_abs.
|
| | 48 | % exact_d: Nonzero to use exact degrees in minimum degree,
|
| | 49 | % Zero to use approximate degrees.
|
| | 50 | % supernd: If > 0, MMD amalgamates supernodes every supernd stages.
|
| | 51 | % rreduce: If > 0, MMD does row reduction every rreduce stages.
|
| | 52 | % wh_frac: Rows with density > wh_frac are ignored in COLMMD.
|
| | 53 | % autommd: Nonzero to use SYMMMD and COLMMD orderings with \ and /.
|
| | 54 | % autoamd: Nonzero to use AMD or COLAMD ordering with CHOLMOD, UMFPACK,
|
| | 55 | % and SuiteSparseQR in \ and /.
|
| | 56 | % piv_tol: Pivot tolerance used by LU-based (UMFPACK) \ and /.
|
| | 57 | % bandden: Backslash uses band solver if band density is > bandden.
|
| | 58 | % If bandden = 1.0, never use band solver.
|
| | 59 | % If bandden = 0.0, always use band solver.
|
| | 60 | % umfpack: Nonzero to use UMFPACK instead of the v4 LU-based solver
|
| | 61 | % in \ and /.
|
| | 62 | % sym_tol: Symmetric pivot tolerance used by UMFPACK. See LU for
|
| | 63 | % more information about the role of the symmetric pivot
|
| | 64 | % tolerance.
|
| | 65 | % ldl_tol: Pivot tolerance used by LDL-based (MA57) \ and /.
|
| | 66 | %
|
| | 67 | % Note:
|
| | 68 | % Solving symmetric positive definite matrices within \ and /:
|
| | 69 | % The CHOLMOD CHOL-based solver uses AMD.
|
| | 70 | % Solving general square matrices within \ and /:
|
| | 71 | % The UMFPACK LU-based solver uses either AMD or a modified COLAMD.
|
| | 72 | % The v4 LU-based solver uses COLMMD.
|
| | 73 | % Solving rectangular matrices within \ and /:
|
| | 74 | % The SuiteSparseQR QR-based solver uses COLAMD.
|
| | 75 | % All of these algorithms respond to SPPARMS('autoamd') except for the
|
| | 76 | % v4 LU-based, which responds to SPPARMS('autommd').
|
| | 77 | %
|
| | 78 | % See also AMD, COLAMD, SYMAMD.
|
| | 79 |
|
| | 80 | % Copyright 1984-2011 The MathWorks, Inc.
|
| | 81 |
|
| | 82 | % The following are "constants".
|
| | 83 |
|
| 8 | 84 | allkeys = ['spumoni'
|
| | 85 | 'thr_rel'
|
| | 86 | 'thr_abs'
|
| | 87 | 'exact_d'
|
| | 88 | 'supernd'
|
| | 89 | 'rreduce'
|
| | 90 | 'wh_frac'
|
| | 91 | 'autommd'
|
| | 92 | 'autoamd'
|
| | 93 | 'piv_tol'
|
| | 94 | 'bandden'
|
| | 95 | 'umfpack'
|
| | 96 | 'sym_tol'
|
| | 97 | 'ldl_tol'
|
| | 98 | 'usema57'
|
| | 99 | 'spqrtol'
|
| | 100 | 'chmodsp'];
|
| 8 | 101 | nparms = size(allkeys,1);
|
| 8 | 102 | spuparmrange = 1:1; % Which parameters pertain to SPUMONI?
|
| 8 | 103 | mmdparmrange = 2:7; % Which parameters pertain to minimum degree?
|
| 8 | 104 | bslparmrange = 8:16; % Which parameters pertain to sparse backslash?
|
| 8 | 105 | cspparmrange = 17:17;
|
| 8 | 106 | defaultparms = [0 1.1 1.0 0 3 3 0.5 1 1 0.1 0.5 1 0.001 0.01 1 -2 0]';
|
| 8 | 107 | tightmmdparms = [1.0 0.0 1 1 1 0.5]';
|
| | 108 |
|
| | 109 | % First find out what the current parameters are.
|
| | 110 |
|
| 8 | 111 | oldvalues = zeros(nparms,1);
|
| 8 | 112 | oldvalues(spuparmrange) = sparsfun('spumoni');
|
| 8 | 113 | oldvalues(mmdparmrange) = sparsfun('mmdset');
|
| 8 | 114 | oldvalues(bslparmrange) = sparsfun('slashset');
|
| 8 | 115 | oldvalues(cspparmrange) = sparsfun('chmodsp');
|
| | 116 |
|
| | 117 | % No input args, no output args: Describe current settings.
|
| 8 | 118 | if nargin == 0 && nargout == 0
|
| | 119 | a = num2str(oldvalues(1));
|
| | 120 | if oldvalues(1)
|
| | 121 | fprintf('%s',getString(message('MATLAB:spparms:SparseMonitorOutputLevel', a)));
|
| | 122 | else
|
| | 123 | fprintf('%s',getString(message('MATLAB:spparms:NoSparseMonitorOutput')));
|
| | 124 | end
|
| | 125 | a = num2str(oldvalues(2));
|
| | 126 | b = num2str(oldvalues(3));
|
| | 127 | fprintf('%s',getString(message('MATLAB:spparms:MmdThreshold', a, b)));
|
| | 128 | if oldvalues(4)
|
| | 129 | fprintf(' ');
|
| | 130 | fprintf('%s',getString(message('MATLAB:spparms:UsingExactDegreesInAprimeA')));
|
| | 131 | else
|
| | 132 | fprintf(' ');
|
| | 133 | fprintf('%s',getString(message('MATLAB:spparms:UsingApproximateDegreesInAprimeA')));
|
| | 134 | end
|
| | 135 | s = int2str(oldvalues(5));
|
| | 136 | if oldvalues(5)
|
| | 137 | fprintf(' ');
|
| | 138 | fprintf('%s',getString(message('MATLAB:spparms:SupernodeAmalgamationEveryNStages', s)));
|
| | 139 | else
|
| | 140 | fprintf(' ');
|
| | 141 | fprintf('%s',getString(message('MATLAB:spparms:NoSupernodeAmalgamation')));
|
| | 142 | end
|
| | 143 | s = int2str(oldvalues(6));
|
| | 144 | if oldvalues(6)
|
| | 145 | fprintf(' ');
|
| | 146 | fprintf('%s',getString(message('MATLAB:spparms:RowReductionEveryNStages', s)));
|
| | 147 | else
|
| | 148 | fprintf(' ');
|
| | 149 | fprintf(getString(message('MATLAB:spparms:NoRowReductionn')));
|
| | 150 | end
|
| | 151 | a = num2str(100*oldvalues(7));
|
| | 152 | if oldvalues(7)
|
| | 153 | fprintf(' ');
|
| | 154 | fprintf('%s',getString(message('MATLAB:spparms:WithholdRowsAtLeastNPercentDenseInColmmd', a)));
|
| | 155 | else
|
| | 156 | fprintf(' ');
|
| | 157 | fprintf('%s',getString(message('MATLAB:spparms:NoRowWithholdingInColmmd')));
|
| | 158 | end
|
| | 159 | if oldvalues(8)
|
| | 160 | fprintf('%s',getString(message('MATLAB:spparms:MinimumDegreeOrderingsUsedWithV4')));
|
| | 161 | else
|
| | 162 | fprintf('%s',getString(message('MATLAB:spparms:NoAutomaticOrderingsUsedWithV4')));
|
| | 163 | end
|
| | 164 | if oldvalues(9)
|
| | 165 | fprintf('%s',getString(message('MATLAB:spparms:ApproximateMinimumDegreeOrderingsUsedCholmodUmfpack')));
|
| | 166 | else
|
| | 167 | fprintf('%s',getString(message('MATLAB:spparms:NoAutomaticOrderingsUsedWithCholmodUmfpack')));
|
| | 168 | end
|
| | 169 | a = num2str(oldvalues(10));
|
| | 170 | fprintf('%s',getString(message('MATLAB:spparms:PivotToleranceOfUsedByUMFPACK', a)));
|
| | 171 | a = num2str(oldvalues(11));
|
| | 172 | fprintf('%s',getString(message('MATLAB:spparms:BackslashUsesBandSolverIfBandDensityGT', a)));
|
| | 173 | if oldvalues(12)
|
| | 174 | fprintf('%s',getString(message('MATLAB:spparms:UMFPACKUsedForLu')));
|
| | 175 | else
|
| | 176 | fprintf('%s',getString(message('MATLAB:spparms:V4AlgorithmUsedForLu')));
|
| | 177 | end
|
| | 178 | a = num2str(oldvalues(13));
|
| | 179 | fprintf('%s',getString(message('MATLAB:spparms:SymmetricPivotToleranceUsedByUMFPACK', a)));
|
| | 180 | a = num2str(oldvalues(14));
|
| | 181 | fprintf('%s',getString(message('MATLAB:spparms:PivotToleranceUsedByMA57', a)));
|
| | 182 | return;
|
| | 183 |
|
| | 184 | % No input args, one or two output args: Return current settings.
|
| 8 | 185 | elseif nargin == 0 && nargout > 0
|
| | 186 | if nargout <= 1
|
| | 187 | return1 = oldvalues;
|
| | 188 | else
|
| | 189 | return1 = allkeys;
|
| | 190 | return2 = oldvalues;
|
| | 191 | end
|
| | 192 | return;
|
| | 193 |
|
| | 194 | % One input arg of suitable size: Reset all parameters.
|
| 8 | 195 | elseif nargin == 1 && length(arg1) == nparms && min(size(arg1)) == 1
|
| | 196 | if nargout > 0
|
| | 197 | error (message('MATLAB:spparms:TooManyOutputs'))
|
| | 198 | end
|
| | 199 | sparsfun('spumoni',arg1(spuparmrange));
|
| | 200 | sparsfun('mmdset',arg1(mmdparmrange));
|
| | 201 | sparsfun('slashset',arg1(bslparmrange));
|
| | 202 | sparsfun('chmodsp',arg1(cspparmrange));
|
| | 203 | return;
|
| | 204 |
|
| | 205 | % Input arg 'tight': Reset minimum degree parameters.
|
| 8 | 206 | elseif nargin == 1 && strcmpi(arg1,'tight')
|
| | 207 | if nargout > 0
|
| | 208 | error (message('MATLAB:spparms:TooManyOutputs'))
|
| | 209 | end
|
| | 210 | newvalues = oldvalues;
|
| | 211 | newvalues(mmdparmrange) = tightmmdparms;
|
| | 212 | spparms(newvalues);
|
| | 213 | return;
|
| | 214 |
|
| | 215 | % Input arg 'default': Reset all parameters.
|
| 8 | 216 | elseif nargin == 1 && strcmpi(arg1,'default')
|
| | 217 | if nargout > 0
|
| | 218 | error (message('MATLAB:spparms:TooManyOutputs'))
|
| | 219 | end
|
| | 220 | spparms(defaultparms);
|
| | 221 | return;
|
| | 222 |
|
| | 223 | % One input arg: Return one current setting.
|
| 8 | 224 | elseif (nargin == 1)
|
| 8 | 225 | if ~ischar(arg1)
|
| | 226 | error (message('MATLAB:spparms:OptionNotString'))
|
| | 227 | end
|
| 8 | 228 | if nargout > 1
|
| | 229 | error (message('MATLAB:spparms:TooManyOutputs'))
|
| | 230 | end
|
| 8 | 231 | if size(arg1,1) > 1
|
| | 232 | error (message('MATLAB:spparms:TooManyParamsPerKeyword'))
|
| | 233 | end
|
| 8 | 234 | key = lower(arg1);
|
| 8 | 235 | for i = 1:nparms
|
| 8 | 236 | if strcmp (key, allkeys(i,:))
|
| 8 | 237 | return1 = oldvalues(i);
|
| 8 | 238 | return;
|
| | 239 | end
|
| | 240 | end
|
| | 241 | error(message('MATLAB:spparms:UnknownKeyword', key));
|
| | 242 |
|
| | 243 | % Two input args: Reset some parameters.
|
| | 244 | else
|
| | 245 | if ~ischar(arg1)
|
| | 246 | error (message('MATLAB:spparms:OptionNotString'));
|
| | 247 | end
|
| | 248 | if nargout > 0
|
| | 249 | error (message('MATLAB:spparms:TooManyOutputs'));
|
| | 250 | end
|
| | 251 | if size(arg1,1) ~= length(arg2)
|
| | 252 | error (message('MATLAB:spparms:ParamsMismatchKeywords'));
|
| | 253 | end
|
| | 254 | newvalues = oldvalues;
|
| | 255 | for k = 1:size(arg1,1)
|
| | 256 | key = lower(arg1(k,:));
|
| | 257 | value = arg2(k);
|
| | 258 | found = 0;
|
| | 259 | for i = 1:nparms
|
| | 260 | if strcmp (key, allkeys(i,:))
|
| | 261 | newvalues(i) = value;
|
| | 262 | found = 1;
|
| | 263 | break
|
| | 264 | end
|
| | 265 | end
|
| | 266 | if ~found
|
| | 267 | warning(message('MATLAB:spparms:UnknownKeyword', key));
|
| | 268 | end
|
| | 269 | end
|
| | 270 | spparms(newvalues);
|
| | 271 | return;
|
| | 272 |
|
| | 273 | end
|