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
use crateOFF;
use crateScalar;
/// `lucomp` computes one column of `L` and `U` in the dense vector.
///
/// This routine computes column `jcol` of `L` and `U` (except for dividing
/// through by `U(jcol,jcol)`) in the dense vector, which is equal to
/// column `jcol` of `A` on entry. It also allocates space in the sparse
/// data structure for the fill entries in column `jcol` of `L`.
///
/// # Input parameters
///
/// ```txt
/// jcol current column number.
/// rperm row permutation P.
/// rperm(r) = s > 0 means row r of A is row s < jcol of PA.
/// rperm(r) = 0 means row r of A has not yet been used as a
/// pivot and is therefore still below the diagonal.
/// cperm column permutation.
/// ```
///
/// # Modified parameters
///
/// ```txt
/// lastlu number of positions used in lurow array.
/// lu, lurow, lcolst, ucolst nonzeros in Pt(L-I+U); see lufact for format.
/// On entry, columns 1 through jcol-1 are complete,
/// ucolst(jcol) and lcolst(jcol) point to the storage for
/// column jcol, and lurow has entries for column jcol of U and
/// the non-fill entries in column jcol of L. The diagonal
/// element is allocated in L, not U. On exit, storage has
/// been allocated for all of column jcol of L, and
/// ucolst(jcol+1) has been set up. No values of column jcol
/// are in lu yet.
/// dense column jcol as a dense vector. On entry, column jcol of A;
/// on exit, column jcol of Pt*(U(jcol,jcol)*(L-I) + U).
/// found found(i)=jcol if storage for position (i,jcol) has been
/// allocated in the sparse data structure.
/// ```
///
/// Both dense and found are indexed according to the row numbering of `A`, not `PA`.