comparison src/DLD-FUNCTIONS/luinc.cc @ 10154:40dfc0c99116

DLD-FUNCTIONS/*.cc: untabify
author John W. Eaton <jwe@octave.org>
date Wed, 20 Jan 2010 17:33:41 -0500
parents 7c02ec148a3c
children d0ce5e973937
comparison
equal deleted inserted replaced
10153:2c28f9d0360f 10154:40dfc0c99116
111 Matrix thresh; 111 Matrix thresh;
112 double droptol = -1.; 112 double droptol = -1.;
113 bool vecout; 113 bool vecout;
114 114
115 if (args(1).is_string ()) 115 if (args(1).is_string ())
116 { 116 {
117 if (args(1).string_value () == "0") 117 if (args(1).string_value () == "0")
118 zero_level = true; 118 zero_level = true;
119 else 119 else
120 error ("luinc: unrecognized string argument"); 120 error ("luinc: unrecognized string argument");
121 } 121 }
122 else if (args(1).is_map ()) 122 else if (args(1).is_map ())
123 { 123 {
124 Octave_map map = args(1).map_value (); 124 Octave_map map = args(1).map_value ();
125 125
126 if (map.contains ("droptol")) 126 if (map.contains ("droptol"))
127 droptol = map.contents ("droptol")(0).double_value (); 127 droptol = map.contents ("droptol")(0).double_value ();
128 128
129 if (map.contains ("milu")) 129 if (map.contains ("milu"))
130 { 130 {
131 double tmp = map.contents ("milu")(0).double_value (); 131 double tmp = map.contents ("milu")(0).double_value ();
132 132
133 milu = (tmp == 0. ? false : true); 133 milu = (tmp == 0. ? false : true);
134 } 134 }
135 135
136 if (map.contains ("udiag")) 136 if (map.contains ("udiag"))
137 { 137 {
138 double tmp = map.contents ("udiag")(0).double_value (); 138 double tmp = map.contents ("udiag")(0).double_value ();
139 139
140 udiag = (tmp == 0. ? false : true); 140 udiag = (tmp == 0. ? false : true);
141 } 141 }
142 142
143 if (map.contains ("thresh")) 143 if (map.contains ("thresh"))
144 { 144 {
145 thresh = map.contents ("thresh")(0).matrix_value (); 145 thresh = map.contents ("thresh")(0).matrix_value ();
146 146
147 if (thresh.nelem () == 1) 147 if (thresh.nelem () == 1)
148 { 148 {
149 thresh.resize(1,2); 149 thresh.resize(1,2);
150 thresh(1) = thresh(0); 150 thresh(1) = thresh(0);
151 } 151 }
152 else if (thresh.nelem () != 2) 152 else if (thresh.nelem () != 2)
153 error ("chol: expecting 2 element vector for thresh"); 153 error ("chol: expecting 2 element vector for thresh");
154 } 154 }
155 } 155 }
156 else 156 else
157 droptol = args(1).double_value (); 157 droptol = args(1).double_value ();
158 158
159 if (nargin == 3) 159 if (nargin == 3)
160 { 160 {
161 std::string tmp = args(2).string_value (); 161 std::string tmp = args(2).string_value ();
162 162
163 if (! error_state ) 163 if (! error_state )
164 { 164 {
165 if (tmp.compare ("vector") == 0) 165 if (tmp.compare ("vector") == 0)
166 vecout = true; 166 vecout = true;
167 else 167 else
168 error ("luinc: unrecognized string argument"); 168 error ("luinc: unrecognized string argument");
169 } 169 }
170 } 170 }
171 171
172 // FIXME Add code for zero-level factorization 172 // FIXME Add code for zero-level factorization
173 if (zero_level) 173 if (zero_level)
174 error ("luinc: zero-level factorization not implemented"); 174 error ("luinc: zero-level factorization not implemented");
175 175
176 if (!error_state) 176 if (!error_state)
177 { 177 {
178 if (args(0).type_name () == "sparse matrix") 178 if (args(0).type_name () == "sparse matrix")
179 { 179 {
180 SparseMatrix sm = args(0).sparse_matrix_value (); 180 SparseMatrix sm = args(0).sparse_matrix_value ();
181 octave_idx_type sm_nr = sm.rows (); 181 octave_idx_type sm_nr = sm.rows ();
182 octave_idx_type sm_nc = sm.cols (); 182 octave_idx_type sm_nc = sm.cols ();
183 ColumnVector Qinit (sm_nc); 183 ColumnVector Qinit (sm_nc);
184 184
185 for (octave_idx_type i = 0; i < sm_nc; i++) 185 for (octave_idx_type i = 0; i < sm_nc; i++)
186 Qinit (i) = i; 186 Qinit (i) = i;
187 187
188 if (! error_state) 188 if (! error_state)
189 { 189 {
190 switch (nargout) 190 switch (nargout)
191 { 191 {
192 case 0: 192 case 0:
193 case 1: 193 case 1:
194 case 2: 194 case 2:
195 { 195 {
196 SparseLU fact (sm, Qinit, thresh, false, true, droptol, 196 SparseLU fact (sm, Qinit, thresh, false, true, droptol,
197 milu, udiag); 197 milu, udiag);
198 198
199 if (! error_state) 199 if (! error_state)
200 { 200 {
201 SparseMatrix P = fact.Pr (); 201 SparseMatrix P = fact.Pr ();
202 SparseMatrix L = P.transpose () * fact.L (); 202 SparseMatrix L = P.transpose () * fact.L ();
203 retval(1) = octave_value (fact.U (), 203 retval(1) = octave_value (fact.U (),
204 MatrixType (MatrixType::Upper)); 204 MatrixType (MatrixType::Upper));
205 retval(0) = octave_value (L, MatrixType 205 retval(0) = octave_value (L, MatrixType
206 (MatrixType::Permuted_Lower, 206 (MatrixType::Permuted_Lower,
207 sm_nr, fact.row_perm ())); 207 sm_nr, fact.row_perm ()));
208 } 208 }
209 } 209 }
210 break; 210 break;
211 211
212 case 3: 212 case 3:
213 { 213 {
214 SparseLU fact (sm, Qinit, thresh, false, true, droptol, 214 SparseLU fact (sm, Qinit, thresh, false, true, droptol,
215 milu, udiag); 215 milu, udiag);
216 216
217 if (! error_state) 217 if (! error_state)
218 { 218 {
219 if (vecout) 219 if (vecout)
220 retval(2) = fact.Pr_vec (); 220 retval(2) = fact.Pr_vec ();
221 else 221 else
222 retval(2) = fact.Pr (); 222 retval(2) = fact.Pr ();
223 retval(1) = octave_value (fact.U (), 223 retval(1) = octave_value (fact.U (),
224 MatrixType (MatrixType::Upper)); 224 MatrixType (MatrixType::Upper));
225 retval(0) = octave_value (fact.L (), 225 retval(0) = octave_value (fact.L (),
226 MatrixType (MatrixType::Lower)); 226 MatrixType (MatrixType::Lower));
227 } 227 }
228 } 228 }
229 break; 229 break;
230 230
231 case 4: 231 case 4:
232 default: 232 default:
233 { 233 {
234 SparseLU fact (sm, Qinit, thresh, false, false, droptol, 234 SparseLU fact (sm, Qinit, thresh, false, false, droptol,
235 milu, udiag); 235 milu, udiag);
236 236
237 if (! error_state) 237 if (! error_state)
238 { 238 {
239 if (vecout) 239 if (vecout)
240 { 240 {
241 retval(3) = fact.Pc_vec (); 241 retval(3) = fact.Pc_vec ();
242 retval(2) = fact.Pr_vec (); 242 retval(2) = fact.Pr_vec ();
243 } 243 }
244 else 244 else
245 { 245 {
246 retval(3) = fact.Pc (); 246 retval(3) = fact.Pc ();
247 retval(2) = fact.Pr (); 247 retval(2) = fact.Pr ();
248 } 248 }
249 retval(1) = octave_value (fact.U (), 249 retval(1) = octave_value (fact.U (),
250 MatrixType (MatrixType::Upper)); 250 MatrixType (MatrixType::Upper));
251 retval(0) = octave_value (fact.L (), 251 retval(0) = octave_value (fact.L (),
252 MatrixType (MatrixType::Lower)); 252 MatrixType (MatrixType::Lower));
253 } 253 }
254 } 254 }
255 break; 255 break;
256 } 256 }
257 } 257 }
258 } 258 }
259 else if (args(0).type_name () == "sparse complex matrix") 259 else if (args(0).type_name () == "sparse complex matrix")
260 { 260 {
261 SparseComplexMatrix sm = 261 SparseComplexMatrix sm =
262 args(0).sparse_complex_matrix_value (); 262 args(0).sparse_complex_matrix_value ();
263 octave_idx_type sm_nr = sm.rows (); 263 octave_idx_type sm_nr = sm.rows ();
264 octave_idx_type sm_nc = sm.cols (); 264 octave_idx_type sm_nc = sm.cols ();
265 ColumnVector Qinit (sm_nc); 265 ColumnVector Qinit (sm_nc);
266 266
267 for (octave_idx_type i = 0; i < sm_nc; i++) 267 for (octave_idx_type i = 0; i < sm_nc; i++)
268 Qinit (i) = i; 268 Qinit (i) = i;
269 269
270 if (! error_state) 270 if (! error_state)
271 { 271 {
272 switch (nargout) 272 switch (nargout)
273 { 273 {
274 case 0: 274 case 0:
275 case 1: 275 case 1:
276 case 2: 276 case 2:
277 { 277 {
278 SparseComplexLU fact (sm, Qinit, thresh, false, true, 278 SparseComplexLU fact (sm, Qinit, thresh, false, true,
279 droptol, milu, udiag); 279 droptol, milu, udiag);
280 280
281 281
282 if (! error_state) 282 if (! error_state)
283 { 283 {
284 SparseMatrix P = fact.Pr (); 284 SparseMatrix P = fact.Pr ();
285 SparseComplexMatrix L = P.transpose () * fact.L (); 285 SparseComplexMatrix L = P.transpose () * fact.L ();
286 retval(1) = octave_value (fact.U (), 286 retval(1) = octave_value (fact.U (),
287 MatrixType (MatrixType::Upper)); 287 MatrixType (MatrixType::Upper));
288 retval(0) = octave_value (L, MatrixType 288 retval(0) = octave_value (L, MatrixType
289 (MatrixType::Permuted_Lower, 289 (MatrixType::Permuted_Lower,
290 sm_nr, fact.row_perm ())); 290 sm_nr, fact.row_perm ()));
291 } 291 }
292 } 292 }
293 break; 293 break;
294 294
295 case 3: 295 case 3:
296 { 296 {
297 SparseComplexLU fact (sm, Qinit, thresh, false, true, 297 SparseComplexLU fact (sm, Qinit, thresh, false, true,
298 droptol, milu, udiag); 298 droptol, milu, udiag);
299 299
300 if (! error_state) 300 if (! error_state)
301 { 301 {
302 if (vecout) 302 if (vecout)
303 retval(2) = fact.Pr_vec (); 303 retval(2) = fact.Pr_vec ();
304 else 304 else
305 retval(2) = fact.Pr (); 305 retval(2) = fact.Pr ();
306 retval(1) = octave_value (fact.U (), 306 retval(1) = octave_value (fact.U (),
307 MatrixType (MatrixType::Upper)); 307 MatrixType (MatrixType::Upper));
308 retval(0) = octave_value (fact.L (), 308 retval(0) = octave_value (fact.L (),
309 MatrixType (MatrixType::Lower)); 309 MatrixType (MatrixType::Lower));
310 } 310 }
311 } 311 }
312 break; 312 break;
313 313
314 case 4: 314 case 4:
315 default: 315 default:
316 { 316 {
317 SparseComplexLU fact (sm, Qinit, thresh, false, false, 317 SparseComplexLU fact (sm, Qinit, thresh, false, false,
318 droptol, milu, udiag); 318 droptol, milu, udiag);
319 319
320 if (! error_state) 320 if (! error_state)
321 { 321 {
322 if (vecout) 322 if (vecout)
323 { 323 {
324 retval(3) = fact.Pc_vec (); 324 retval(3) = fact.Pc_vec ();
325 retval(2) = fact.Pr_vec (); 325 retval(2) = fact.Pr_vec ();
326 } 326 }
327 else 327 else
328 { 328 {
329 retval(3) = fact.Pc (); 329 retval(3) = fact.Pc ();
330 retval(2) = fact.Pr (); 330 retval(2) = fact.Pr ();
331 } 331 }
332 retval(1) = octave_value (fact.U (), 332 retval(1) = octave_value (fact.U (),
333 MatrixType (MatrixType::Upper)); 333 MatrixType (MatrixType::Upper));
334 retval(0) = octave_value (fact.L (), 334 retval(0) = octave_value (fact.L (),
335 MatrixType (MatrixType::Lower)); 335 MatrixType (MatrixType::Lower));
336 } 336 }
337 } 337 }
338 break; 338 break;
339 } 339 }
340 } 340 }
341 } 341 }
342 else 342 else
343 error ("luinc: first argument must be sparse"); 343 error ("luinc: first argument must be sparse");
344 } 344 }
345 } 345 }
346 346
347 return retval; 347 return retval;
348 } 348 }
349 349