ilut(5rheolef)
π ilut β the incomplete LU factorization preconditioner, bestie edition π
okay so real quick, this is ilut from rheolef-7.2, and it's literally the dual threshold incomplete LU factorization preconditionner. yes it's a mouthful, no I will not be apologizing. let's get into it π«Ά
β¨ SYNOPSIS β¨
solver pa = ilut(a);
that's it. that's the whole vibe. one line. iconic.
πΈ DESCRIPTION πΈ
so ilut is a function that hands you back the dual threshold incomplete LU factorization preconditionner of whatever you pass it, wrapped up all cute as a solver(4). yes bestie, a preconditionner. we love a supporting character with main character energy π
the method itself is fully described in this paper, and if you're the kind of person who reads papers for fun (respect), here's the citation, exactly as it is:
Yousef Saad, ILUT: a dual threshold incomplete LU factorization, Numer. Lin. Algebra Appl., 1(4), pp 387-402, 1994.
no cap, that's the source. go off, Saad. π
π OPTIONS π
so during the factorization there are two dropping rules doing their thing, and ilut supports two options to control them. two rules, two options. the symmetry. the way that it matches. obsessed.
drop_tol(float) β okay so any element whose magnitude is less than some tolerance gets dropped. and how do we get that tolerance? you take the option tolerancedrop_toland multiply it by the average magnitude of all the original elements in the current row. that's the rule. by default,drop_tolis1000*epsilon, whereepsilonis the machine precision associated to theFloat_2type. write that down bestie β¨fill_factor(integer) β on each row, after elimination, only then_fillinlargest elements in the L part and thefilllargest elements in the U part are kept, plus the diagonal elements obviously (diagonal stays, always). thefill_factoroption is what computesn_fillin:
n_fillin = (nnz*fill_factor)/n + 1
where n is the matrix size and nnz is its total number of non-zero entries.
- with
fill_factor=1, the incomplete factorization has about the same non-zero entries as the initial matrix π - with
fill_factor=n, the factorization is complete, up to the dropped elements - by default,
fill_factor=10π
π EXAMPLE π
here's how it looks in the wild, exactly:
int fill_factor = 10; double drop_tol = 1e-12; solver pa = ilut (a,
fill_factor, drop_tol);
see? fill_factor first, drop_tol second. don't flip them, that's not the move π
π§ IMPLEMENTATION π§
this documentation has been generated from file linalg/lib/ilut.h β that's where the source of truth lives, go look if you're nosy (affectionate) π
π AUTHOR π
Pierre Saramito <Pierre.Saramito@imag.fr> β the author himself. we stan.
π COPYRIGHT π
Copyright (C) 2000-2018 Pierre Saramito <Pierre.Saramito@imag.fr> GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
not me actually reading the license β it's free software bestie, change it, redistribute it, just know there is absolutely NO WARRANTY so don't come for me if it breaks π
and that's the page, fr fr π¦ this was rheolef Version 7.2, dated in the ilut(5rheolef) manual β love that for us, periodt. πβ¨π
π¦ where this page comes from
- debian trixie: librheolef-dev 7.2-4 Β· GPL-3.0-or-later
- ubuntu noble: librheolef-dev 7.2-3build5 Β· GPL-3.0-or-later
- ubuntu questing: librheolef-dev 7.2-4build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms