HODLR, or Hierarchically Off-Diagonal Low Rank, is a rank-structured format that is similar to HSS, but simpler. It uses the same weak admissibility, i.e, all off-diagonal blocks are low rank, but it does not use nested bases. Compared to HSS, HODLR theoretically has worse asymptotic complexity, but the algorithms might be faster in practice for medium sized problems.
HODBF stands for Hierarchically Off-Diagonal Butterfly. HODBF is like HODLR except that it uses Butterfly decomposition instead of low rank. The HODBF format was specifically developed for dealing high frequency problems.
For a description of the HODBF format and its use in the sparse multifrontal solver see: https://arxiv.org/abs/2007.00202
STRUMPACK's HODLR code uses an external library, which can be found here: https://github.com/liuyangzhuan/ButterflyPACK
See the Installation and Requirements instructions for how to configure and compile STRUMPACK with support for HODLR.
HODLR compression in the sparse solver can be turned on/off via the command line:
or via the C++ API as follows
In order to enable HODBF compression one should set the compression type to HODLR, and additionally set
where l is the number of levels in the HODLR hierarchy for which butterfly compression is to be used (instead of low-rank). A value of 1 means only the largest off-diagonal blocks are compressed using butterfly. To enable butterfly compression on all levels, simply use a large enough value, for instance 100.
When compression is enabled, the default STRUMPACK behavior is to use the approximate LU factorization as a preconditioner within GMRES. This behavior can also be changed, see Solve.
However, HODLR compression has a considerable overhead and only pays off for sufficiently large matrices. Therefore STRUMPACK has a tuning parameter to specify the minimum size a dense matrix needs to be to be considered a candidate for compression. The minimum dense matrix size for compression is set via the command line via
or via the C++ API as follows
The above options affect the use of HODLR within the multifrontal solver. There are more, HODLR specific, options which are stored in an object of type HODLR::HODLROptions<scalar>. An object of this type is stored in the SPOptions<scalar> object stored in the StrumpackSparseSolver. It can be accessed via the HODLR_options() routine as follows:
The compression tolerances can greatly impact performance. They can be set using:
or via the C++ API
Other options are available. See the documentation of HODLROptions<scalar> for more detailed information.