ilut(5rheolef)

πŸ“¦
version 7.2 Β· 4 versions
, in debian trixie, ubuntu noble, ubuntu questing

πŸ’– 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 tolerance drop_tol and multiply it by the average magnitude of all the original elements in the current row. that's the rule. by default, drop_tol is 1000*epsilon, where epsilon is the machine precision associated to the Float_2 type. write that down bestie ✨
  • fill_factor (integer) β€” on each row, after elimination, only the n_fillin largest elements in the L part and the fill largest elements in the U part are kept, plus the diagonal elements obviously (diagonal stays, always). the fill_factor option is what computes n_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 (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