-
Notifications
You must be signed in to change notification settings - Fork 1
/
amd_8h_source.html
514 lines (512 loc) · 68.3 KB
/
amd_8h_source.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
<!-- HTML header for doxygen 1.8.11-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<title>qpSWIFT: amd.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">qpSWIFT
</div>
<div id="projectbrief">A Sparse Quadratic Programming Solver</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('amd_8h_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">amd.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* ========================================================================= */</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">/* === AMD: approximate minimum degree ordering =========================== */</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">/* ========================================================================= */</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>  </div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">/* AMD Version 2.2, Copyright (c) 2007 by Timothy A. Davis, */</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">/* Patrick R. Amestoy, and Iain S. Duff. See ../README.txt for License. */</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">/* email: [email protected] */</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  </div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">/* AMD finds a symmetric ordering P of a matrix A so that the Cholesky</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * factorization of P*A*P' has fewer nonzeros and takes less work than the</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * Cholesky factorization of A. If A is not symmetric, then it performs its</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * ordering on the matrix A+A'. Two sets of user-callable routines are</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * provided, one for int integers and the other for SuiteSparse_long integers.</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * The method is based on the approximate minimum degree algorithm, discussed</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * in Amestoy, Davis, and Duff, "An approximate degree ordering algorithm",</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * SIAM Journal of Matrix Analysis and Applications, vol. 17, no. 4, pp.</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * 886-905, 1996. This package can perform both the AMD ordering (with</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * aggressive absorption), and the AMDBAR ordering (without aggressive</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * absorption) discussed in the above paper. This package differs from the</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * Fortran codes discussed in the paper:</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * (1) it can ignore "dense" rows and columns, leading to faster run times</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * (2) it computes the ordering of A+A' if A is not symmetric</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * (3) it is followed by a depth-first post-ordering of the assembly tree</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * (or supernodal elimination tree)</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * For historical reasons, the Fortran versions, amd.f and amdbar.f, have</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * been left (nearly) unchanged. They compute the identical ordering as</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * described in the above paper.</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#ifndef AMD_H</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#define AMD_H</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">/* make it easy for C++ programs to include AMD */</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">/* get the definition of size_t: */</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <stddef.h></span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "SuiteSparse_config.h"</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">int</span> amd_order <span class="comment">/* returns AMD_OK, AMD_OK_BUT_JUMBLED,</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> * AMD_INVALID, or AMD_OUT_OF_MEMORY */</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> (</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordtype">int</span> n, <span class="comment">/* A is n-by-n. n must be >= 0. */</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> Ap [ ], <span class="comment">/* column pointers for A, of size n+1 */</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> Ai [ ], <span class="comment">/* row indices of A, of size nz = Ap [n] */</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordtype">int</span> P [ ], <span class="comment">/* output permutation, of size n */</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordtype">double</span> Control [ ], <span class="comment">/* input Control settings, of size AMD_CONTROL */</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordtype">double</span> Info [ ] <span class="comment">/* output Info statistics, of size AMD_INFO */</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ) ;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> SuiteSparse_long amd_l_order <span class="comment">/* see above for description of arguments */</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> (</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  SuiteSparse_long n,</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">const</span> SuiteSparse_long Ap [ ],</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">const</span> SuiteSparse_long Ai [ ],</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  SuiteSparse_long P [ ],</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordtype">double</span> Control [ ],</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordtype">double</span> Info [ ]</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> ) ;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">/* Input arguments (not modified):</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"> * n: the matrix A is n-by-n.</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"> * Ap: an int/SuiteSparse_long array of size n+1, containing column</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> * pointers of A.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> * Ai: an int/SuiteSparse_long array of size nz, containing the row</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> * indices of A, where nz = Ap [n].</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> * Control: a double array of size AMD_CONTROL, containing control</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> * parameters. Defaults are used if Control is NULL.</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"> * Output arguments (not defined on input):</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"> * P: an int/SuiteSparse_long array of size n, containing the output</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> * permutation. If row i is the kth pivot row, then P [k] = i. In</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> * MATLAB notation, the reordered matrix is A (P,P).</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> * Info: a double array of size AMD_INFO, containing statistical</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> * information. Ignored if Info is NULL.</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> * On input, the matrix A is stored in column-oriented form. The row indices</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment"> * of nonzero entries in column j are stored in Ai [Ap [j] ... Ap [j+1]-1].</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> * If the row indices appear in ascending order in each column, and there</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> * are no duplicate entries, then amd_order is slightly more efficient in</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> * terms of time and memory usage. If this condition does not hold, a copy</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> * of the matrix is created (where these conditions do hold), and the copy is</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"> * ordered. This feature is new to v2.0 (v1.2 and earlier required this</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> * condition to hold for the input matrix).</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"> * </span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> * Row indices must be in the range 0 to</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"> * n-1. Ap [0] must be zero, and thus nz = Ap [n] is the number of nonzeros</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> * in A. The array Ap is of size n+1, and the array Ai is of size nz = Ap [n].</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> * The matrix does not need to be symmetric, and the diagonal does not need to</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> * be present (if diagonal entries are present, they are ignored except for</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> * the output statistic Info [AMD_NZDIAG]). The arrays Ai and Ap are not</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> * modified. This form of the Ap and Ai arrays to represent the nonzero</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"> * pattern of the matrix A is the same as that used internally by MATLAB.</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> * If you wish to use a more flexible input structure, please see the</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> * umfpack_*_triplet_to_col routines in the UMFPACK package, at</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"> * http://www.suitesparse.com.</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> * Restrictions: n >= 0. Ap [0] = 0. Ap [j] <= Ap [j+1] for all j in the</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> * range 0 to n-1. nz = Ap [n] >= 0. Ai [0..nz-1] must be in the range 0</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> * to n-1. Finally, Ai, Ap, and P must not be NULL. If any of these</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"> * restrictions are not met, AMD returns AMD_INVALID.</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> * AMD returns:</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> * AMD_OK if the matrix is valid and sufficient memory can be allocated to</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"> * perform the ordering.</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> * AMD_OUT_OF_MEMORY if not enough memory can be allocated.</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> * AMD_INVALID if the input arguments n, Ap, Ai are invalid, or if P is</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> * NULL.</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"> * AMD_OK_BUT_JUMBLED if the matrix had unsorted columns, and/or duplicate</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment"> * entries, but was otherwise valid.</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> * The AMD routine first forms the pattern of the matrix A+A', and then</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> * computes a fill-reducing ordering, P. If P [k] = i, then row/column i of</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment"> * the original is the kth pivotal row. In MATLAB notation, the permuted</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment"> * matrix is A (P,P), except that 0-based indexing is used instead of the</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"> * 1-based indexing in MATLAB.</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"> * The Control array is used to set various parameters for AMD. If a NULL</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment"> * pointer is passed, default values are used. The Control array is not</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> * modified.</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> * Control [AMD_DENSE]: controls the threshold for "dense" rows/columns.</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> * A dense row/column in A+A' can cause AMD to spend a lot of time in</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment"> * ordering the matrix. If Control [AMD_DENSE] >= 0, rows/columns</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> * with more than Control [AMD_DENSE] * sqrt (n) entries are ignored</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> * during the ordering, and placed last in the output order. The</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> * default value of Control [AMD_DENSE] is 10. If negative, no</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> * rows/columns are treated as "dense". Rows/columns with 16 or</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> * fewer off-diagonal entries are never considered "dense".</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment"> * Control [AMD_AGGRESSIVE]: controls whether or not to use aggressive</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment"> * absorption, in which a prior element is absorbed into the current</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"> * element if is a subset of the current element, even if it is not</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment"> * adjacent to the current pivot element (refer to Amestoy, Davis,</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment"> * & Duff, 1996, for more details). The default value is nonzero,</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"> * which means to perform aggressive absorption. This nearly always</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment"> * leads to a better ordering (because the approximate degrees are</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"> * more accurate) and a lower execution time. There are cases where</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"> * it can lead to a slightly worse ordering, however. To turn it off,</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment"> * set Control [AMD_AGGRESSIVE] to 0.</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> * Control [2..4] are not used in the current version, but may be used in</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"> * future versions.</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment"> * The Info array provides statistics about the ordering on output. If it is</span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"> * not present, the statistics are not returned. This is not an error</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment"> * condition.</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment"> * </span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment"> * Info [AMD_STATUS]: the return value of AMD, either AMD_OK,</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment"> * AMD_OK_BUT_JUMBLED, AMD_OUT_OF_MEMORY, or AMD_INVALID.</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment"> * Info [AMD_N]: n, the size of the input matrix</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment"> * Info [AMD_NZ]: the number of nonzeros in A, nz = Ap [n]</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment"> * Info [AMD_SYMMETRY]: the symmetry of the matrix A. It is the number</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment"> * of "matched" off-diagonal entries divided by the total number of</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment"> * off-diagonal entries. An entry A(i,j) is matched if A(j,i) is also</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment"> * an entry, for any pair (i,j) for which i != j. In MATLAB notation,</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment"> * S = spones (A) ;</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment"> * B = tril (S, -1) + triu (S, 1) ;</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment"> * symmetry = nnz (B & B') / nnz (B) ;</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment"> * Info [AMD_NZDIAG]: the number of entries on the diagonal of A.</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> * Info [AMD_NZ_A_PLUS_AT]: the number of nonzeros in A+A', excluding the</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"> * diagonal. If A is perfectly symmetric (Info [AMD_SYMMETRY] = 1)</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> * with a fully nonzero diagonal, then Info [AMD_NZ_A_PLUS_AT] = nz-n</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment"> * (the smallest possible value). If A is perfectly unsymmetric</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment"> * (Info [AMD_SYMMETRY] = 0, for an upper triangular matrix, for</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"> * example) with no diagonal, then Info [AMD_NZ_A_PLUS_AT] = 2*nz</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment"> * (the largest possible value).</span></div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment"> * Info [AMD_NDENSE]: the number of "dense" rows/columns of A+A' that were</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> * removed from A prior to ordering. These are placed last in the</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"> * output order P.</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"> * Info [AMD_MEMORY]: the amount of memory used by AMD, in bytes. In the</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"> * current version, this is 1.2 * Info [AMD_NZ_A_PLUS_AT] + 9*n</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"> * times the size of an integer. This is at most 2.4nz + 9n. This</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment"> * excludes the size of the input arguments Ai, Ap, and P, which have</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment"> * a total size of nz + 2*n + 1 integers.</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment"> * Info [AMD_NCMPA]: the number of garbage collections performed.</span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> * Info [AMD_LNZ]: the number of nonzeros in L (excluding the diagonal).</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> * This is a slight upper bound because mass elimination is combined</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> * with the approximate degree update. It is a rough upper bound if</span></div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> * there are many "dense" rows/columns. The rest of the statistics,</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"> * below, are also slight or rough upper bounds, for the same reasons.</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment"> * The post-ordering of the assembly tree might also not exactly</span></div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment"> * correspond to a true elimination tree postordering.</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"> * Info [AMD_NDIV]: the number of divide operations for a subsequent LDL'</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> * or LU factorization of the permuted matrix A (P,P).</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment"> * Info [AMD_NMULTSUBS_LDL]: the number of multiply-subtract pairs for a</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment"> * subsequent LDL' factorization of A (P,P).</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> * Info [AMD_NMULTSUBS_LU]: the number of multiply-subtract pairs for a</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment"> * subsequent LU factorization of A (P,P), assuming that no numerical</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment"> * pivoting is required.</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> * Info [AMD_DMAX]: the maximum number of nonzeros in any column of L,</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment"> * including the diagonal.</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment"> * Info [14..19] are not used in the current version, but may be used in</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"> * future versions.</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"> */</span> </div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  </div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">/* direct interface to AMD */</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  </div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment">/* amd_2 is the primary AMD ordering routine. It is not meant to be</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment"> * user-callable because of its restrictive inputs and because it destroys</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment"> * the user's input matrix. It does not check its inputs for errors, either.</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment"> * However, if you can work with these restrictions it can be faster than</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment"> * amd_order and use less memory (assuming that you can create your own copy</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment"> * of the matrix for AMD to destroy). Refer to AMD/Source/amd_2.c for a</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment"> * description of each parameter. */</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">void</span> amd_2</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> (</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordtype">int</span> n,</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordtype">int</span> Pe [ ],</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordtype">int</span> Iw [ ],</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordtype">int</span> Len [ ],</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordtype">int</span> iwlen,</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordtype">int</span> pfree,</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordtype">int</span> Nv [ ],</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordtype">int</span> Next [ ], </div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordtype">int</span> Last [ ],</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordtype">int</span> Head [ ],</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordtype">int</span> Elen [ ],</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordtype">int</span> Degree [ ],</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordtype">int</span> W [ ],</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordtype">double</span> Control [ ],</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordtype">double</span> Info [ ]</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> ) ;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">void</span> amd_l2</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> (</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  SuiteSparse_long n,</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  SuiteSparse_long Pe [ ],</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  SuiteSparse_long Iw [ ],</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  SuiteSparse_long Len [ ],</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  SuiteSparse_long iwlen,</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  SuiteSparse_long pfree,</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  SuiteSparse_long Nv [ ],</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  SuiteSparse_long Next [ ], </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  SuiteSparse_long Last [ ],</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  SuiteSparse_long Head [ ],</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  SuiteSparse_long Elen [ ],</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  SuiteSparse_long Degree [ ],</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  SuiteSparse_long W [ ],</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordtype">double</span> Control [ ],</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">double</span> Info [ ]</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> ) ;</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  </div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">/* amd_valid */</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  </div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">/* Returns AMD_OK or AMD_OK_BUT_JUMBLED if the matrix is valid as input to</span></div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment"> * amd_order; the latter is returned if the matrix has unsorted and/or</span></div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment"> * duplicate row indices in one or more columns. Returns AMD_INVALID if the</span></div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment"> * matrix cannot be passed to amd_order. For amd_order, the matrix must also</span></div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment"> * be square. The first two arguments are the number of rows and the number</span></div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment"> * of columns of the matrix. For its use in AMD, these must both equal n.</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment"> * NOTE: this routine returned TRUE/FALSE in v1.2 and earlier.</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  </div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordtype">int</span> amd_valid</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> (</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordtype">int</span> n_row, <span class="comment">/* # of rows */</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordtype">int</span> n_col, <span class="comment">/* # of columns */</span></div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> Ap [ ], <span class="comment">/* column pointers, of size n_col+1 */</span></div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> Ai [ ] <span class="comment">/* row indices, of size Ap [n_col] */</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> ) ;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  </div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> SuiteSparse_long amd_l_valid</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> (</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  SuiteSparse_long n_row,</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  SuiteSparse_long n_col,</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keyword">const</span> SuiteSparse_long Ap [ ],</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">const</span> SuiteSparse_long Ai [ ]</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> ) ;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  </div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">/* AMD memory manager and printf routines */</span></div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  </div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">/* The user can redefine these to change the malloc, free, and printf routines</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> * that AMD uses. */</span></div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  </div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor">#ifndef EXTERN</span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor">#define EXTERN extern</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  </div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> EXTERN <span class="keywordtype">void</span> *(*amd_malloc) (size_t) ; <span class="comment">/* pointer to malloc */</span></div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> EXTERN void (*amd_free) (<span class="keywordtype">void</span> *) ; <span class="comment">/* pointer to free */</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> EXTERN <span class="keywordtype">void</span> *(*amd_realloc) (<span class="keywordtype">void</span> *, size_t) ; <span class="comment">/* pointer to realloc */</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> EXTERN <span class="keywordtype">void</span> *(*amd_calloc) (size_t, size_t) ; <span class="comment">/* pointer to calloc */</span></div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> EXTERN int (*amd_printf) (<span class="keyword">const</span> <span class="keywordtype">char</span> *, ...) ; <span class="comment">/* pointer to printf */</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  </div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment">/* AMD Control and Info arrays */</span></div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment">/* amd_defaults: sets the default control settings */</span></div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordtype">void</span> amd_defaults (<span class="keywordtype">double</span> Control [ ]) ;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordtype">void</span> amd_l_defaults (<span class="keywordtype">double</span> Control [ ]) ;</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  </div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">/* amd_control: prints the control settings */</span></div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordtype">void</span> amd_control (<span class="keywordtype">double</span> Control [ ]) ;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">void</span> amd_l_control (<span class="keywordtype">double</span> Control [ ]) ;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  </div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment">/* amd_info: prints the statistics */</span></div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordtype">void</span> amd_info (<span class="keywordtype">double</span> Info [ ]) ;</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">void</span> amd_l_info (<span class="keywordtype">double</span> Info [ ]) ;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  </div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor">#define AMD_CONTROL 5 </span><span class="comment">/* size of Control array */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor">#define AMD_INFO 20 </span><span class="comment">/* size of Info array */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  </div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment">/* contents of Control */</span></div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor">#define AMD_DENSE 0 </span><span class="comment">/* "dense" if degree > Control [0] * sqrt (n) */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor">#define AMD_AGGRESSIVE 1 </span><span class="comment">/* do aggressive absorption if Control [1] != 0 */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  </div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment">/* default Control settings */</span></div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor">#define AMD_DEFAULT_DENSE 10.0 </span><span class="comment">/* default "dense" degree 10*sqrt(n) */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor">#define AMD_DEFAULT_AGGRESSIVE 1 </span><span class="comment">/* do aggressive absorption by default */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  </div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="comment">/* contents of Info */</span></div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor">#define AMD_STATUS 0 </span><span class="comment">/* return value of amd_order and amd_l_order */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor">#define AMD_N 1 </span><span class="comment">/* A is n-by-n */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor">#define AMD_NZ 2 </span><span class="comment">/* number of nonzeros in A */</span><span class="preprocessor"> </span></div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor">#define AMD_SYMMETRY 3 </span><span class="comment">/* symmetry of pattern (1 is sym., 0 is unsym.) */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor">#define AMD_NZDIAG 4 </span><span class="comment">/* # of entries on diagonal */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor">#define AMD_NZ_A_PLUS_AT 5 </span><span class="comment">/* nz in A+A' */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor">#define AMD_NDENSE 6 </span><span class="comment">/* number of "dense" rows/columns in A */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor">#define AMD_MEMORY 7 </span><span class="comment">/* amount of memory used by AMD */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor">#define AMD_NCMPA 8 </span><span class="comment">/* number of garbage collections in AMD */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor">#define AMD_LNZ 9 </span><span class="comment">/* approx. nz in L, excluding the diagonal */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor">#define AMD_NDIV 10 </span><span class="comment">/* number of fl. point divides for LU and LDL' */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor">#define AMD_NMULTSUBS_LDL 11 </span><span class="comment">/* number of fl. point (*,-) pairs for LDL' */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor">#define AMD_NMULTSUBS_LU 12 </span><span class="comment">/* number of fl. point (*,-) pairs for LU */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor">#define AMD_DMAX 13 </span><span class="comment">/* max nz. in any column of L, incl. diagonal */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  </div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">/* return values of AMD */</span></div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment">/* ------------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  </div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor">#define AMD_OK 0 </span><span class="comment">/* success */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor">#define AMD_OUT_OF_MEMORY -1 </span><span class="comment">/* malloc failed, or problem too large */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor">#define AMD_INVALID -2 </span><span class="comment">/* input arguments are not valid */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor">#define AMD_OK_BUT_JUMBLED 1 </span><span class="comment">/* input matrix is OK for amd_order, but</span></div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment"> * columns were not sorted, and/or duplicate entries were present. AMD had</span></div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="comment"> * to do extra work before ordering the matrix. This is a warning, not an</span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment"> * error. */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  </div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="comment">/* ========================================================================== */</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="comment">/* === AMD version ========================================================== */</span></div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="comment">/* ========================================================================== */</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  </div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="comment">/* AMD Version 1.2 and later include the following definitions.</span></div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment"> * As an example, to test if the version you are using is 1.2 or later:</span></div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment"> * #ifdef AMD_VERSION</span></div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment"> * if (AMD_VERSION >= AMD_VERSION_CODE (1,2)) ...</span></div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment"> * #endif</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment"> * This also works during compile-time:</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment"> * #if defined(AMD_VERSION) && (AMD_VERSION >= AMD_VERSION_CODE (1,2))</span></div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> * printf ("This is version 1.2 or later\n") ;</span></div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment"> * #else</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment"> * printf ("This is an early version\n") ;</span></div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"> * #endif</span></div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment"> * Versions 1.1 and earlier of AMD do not include a #define'd version number.</span></div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  </div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor">#define AMD_DATE "Jun 20, 2012"</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor">#define AMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))</span></div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor">#define AMD_MAIN_VERSION 2</span></div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor">#define AMD_SUB_VERSION 3</span></div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#define AMD_SUBSUB_VERSION 1</span></div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor">#define AMD_VERSION AMD_VERSION_CODE(AMD_MAIN_VERSION,AMD_SUB_VERSION)</span></div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  </div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  </div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor">#endif</span></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.11-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><b>amd.h</b></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>
</html>