lufact_sys/
lufact.rs

1use libc::{c_double, c_int};
2
3extern "C" {
4    /// Sparse LU factorization with partial pivoting.
5    pub fn lufact_(
6        pivot: *const c_int,
7        thresh: *const c_double,
8        nrow: *const c_int,
9        ncol: *const c_int,
10        a: *const c_double,
11        arow: *const c_int,
12        acolst: *const c_int,
13        maxlu: *const c_int,
14        lastlu: *mut c_int,
15        lu: *mut c_double,
16        lurow: *mut c_int,
17        lcolst: *mut c_int,
18        ucolst: *mut c_int,
19        perm: *mut c_int,
20        error: *mut c_int,
21        rwork: *mut c_double,
22        iwork: *mut c_int,
23    );
24
25    /// Find maximum matching.
26    pub fn maxmatch_(
27        nrows: *const c_int,
28        ncols: *const c_int,
29        colstr: *const c_int,
30        rowind: *const c_int,
31        prevcl: *mut c_int,
32        prevrw: *mut c_int,
33        marker: *mut c_int,
34        tryrow: *mut c_int,
35        nxtchp: *mut c_int,
36        rowset: *mut c_int,
37        colset: *mut c_int,
38    );
39
40    /// Fills an integer array with a given value.
41    pub fn ifill_(a: *mut c_int, la: *const c_int, ival: *const c_int);
42    /// Fills a real*8 array with a given value.
43    pub fn rfill_(a: *mut c_double, la: *const c_double, rval: *const c_double);
44
45    /// Depth-first search to allocate storage for U.
46    pub fn ludfs_(
47        jcol: *const c_int,
48        a: *const c_double,
49        arow: *const c_int,
50        acolst: *const c_int,
51        lastlu: *mut c_int,
52        lurow: *mut c_int,
53        lcolst: *mut c_int,
54        ucolst: *mut c_int,
55        rperm: *mut c_int,
56        cperm: *mut c_int,
57        dense: *mut c_double,
58        found: *mut c_int,
59        parent: *mut c_int,
60        child: *mut c_int,
61        error: *mut c_int,
62    );
63
64    /// Compute one column of L and U in the dense vector.
65    pub fn lucomp_(
66        jcol: *const c_int,
67        lastlu: *mut c_int,
68        lu: *mut c_double,
69        lurow: *mut c_int,
70        lcolst: *mut c_int,
71        ucolst: *mut c_int,
72        rperm: *const c_int,
73        cperm: *const c_int,
74        dense: *mut c_double,
75        found: *mut c_int,
76        pattern: *mut c_int,
77        flops: *mut c_double,
78    );
79
80    /// Copy dense column to sparse structure, pivot, and divide.
81    pub fn lucopy_(
82        pivot: *const c_int,
83        pthresh: *const c_double,
84        dthresh: *const c_double,
85        nzcount: *const c_int,
86        jcol: *const c_int,
87        ncol: *const c_int,
88        lastlu: *mut c_int,
89        lu: *mut c_double,
90        lurow: *mut c_int,
91        lcolst: *mut c_int,
92        ucolst: *mut c_int,
93        rperm: *mut c_int,
94        cperm: *mut c_int,
95        dense: *mut c_double,
96        pattern: *mut c_int,
97        twork: *mut c_double,
98        flops: *mut c_double,
99        zpivot: *mut c_int,
100    );
101
102    /// Solve lower triangular system.
103    pub fn lsolve_(
104        n: *const c_int,
105        lu: *const c_double,
106        lurow: *const c_int,
107        lcolst: *const c_int,
108        ucolst: *const c_int,
109        rperm: *const c_int,
110        cperm: *const c_int,
111        b: *const c_double,
112        x: *mut c_double,
113        error: *mut c_int,
114    );
115
116    /// Solve upper triangular system.
117    pub fn usolve_(
118        n: *const c_int,
119        lu: *const c_double,
120        lurow: *const c_int,
121        lcolst: *const c_int,
122        ucolst: *const c_int,
123        rperm: *const c_int,
124        cperm: *const c_int,
125        b: *const c_double,
126        x: *mut c_double,
127        error: *mut c_int,
128    );
129
130    /// Solve transpose of lower triangular system.
131    pub fn ltsolve_(
132        n: *const c_int,
133        lu: *const c_double,
134        lurow: *const c_int,
135        lcolst: *const c_int,
136        ucolst: *const c_int,
137        rperm: *const c_int,
138        cperm: *const c_int,
139        b: *const c_double,
140        x: *mut c_double,
141        error: *mut c_int,
142    );
143
144    /// Solve transpose of upper triangular system.
145    pub fn utsolve_(
146        n: *const c_int,
147        lu: *const c_double,
148        lurow: *const c_int,
149        lcolst: *const c_int,
150        ucolst: *const c_int,
151        rperm: *const c_int,
152        cperm: *const c_int,
153        b: *const c_double,
154        x: *mut c_double,
155        error: *mut c_int,
156    );
157}