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
#[derive(Debug, PartialEq)]
pub enum PivotPolicy {
NoDiagonalElement,
NoPivoting,
PartialPivoting,
ThresholdPivoting,
}
pub struct Options {
pub pivot_policy: PivotPolicy,
/// The fraction of max pivot candidate acceptable for pivoting.
/// Default value is 1.
pub pivot_threshold: f64,
/// For each major step of the algorithm, the pivot is chosen to
/// be a nonzero below the diagonal in the current column of A
/// with the most nonzeros to the right in its row, with absolute
/// value at least drop_threshold*maxpiv, where maxpiv is the
/// largest absolute value below the diagonal in the current column.
/// Note that if drop_threshold <= 0.0, then the pivot is chosen
/// purely on the basis of row sparsity. Also, if
/// drop_threshold >= 1.0, then the pivoting is effectively partial
/// pivoting with ties broken on the basis of sparsity.
pub drop_threshold: f64,
/// Column fill ratio. If < 0 the column fill ratio is not limited.
/// Default value is -1.
pub col_fill_ratio: f64,
/// sets the ratio of the initial LU size to NNZ.
/// Default value is 4.
pub fill_ratio: f64,
/// Sets the ratio for LU size growth.
pub expand_ratio: f64,
}
impl Default for Options {
fn default() -> Self {
Self {
pivot_policy: PivotPolicy::PartialPivoting,
pivot_threshold: 1.0,
drop_threshold: 0.0, // do not drop
col_fill_ratio: -1.0, // do not limit column fill ratio
fill_ratio: 4.0,
expand_ratio: 1.2,
}
}
}