Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

HTOOL Build Status

What is Htool?

Htool is an implementation of hierarchical matrices (cf. this reference or this one), it was written to test Domain Decomposition Methods (DDM) applied to Boundary Element Method (BEM). It provides:

  • routines to build hierarchical matrix structures (cluster trees, block trees, low-rank matrices and block matrices),
  • parallel matrix-vector and matrix-matrix product using MPI and OpenMP,
  • preconditioning techniques using domain decomposition methods,
  • the possibility to use Htool with any generator of coefficients (e.g., your own BEM library),
  • an interface with HPDDM for iterative solvers,
  • GUI and several service functions to display informations about matrix structures and timing.

How to use Htool?

Htool is a header library written in C++11 with MPI and OpenMP, but it can be used without the latter if needed. Then, Htool needs to be linked against :

  • BLAS, to perform algebraic operations (dense matrix-matrix or matrix-vector operations),
  • HPDDM and its dependencies (BLAS, LAPACK and a direct solver like MUMPS, SuiteSparse, MKL PARDISO, or PaStiX) to use iterative solvers and DDM preconditioners,
  • Eigen, to use SVD compressors (to be modified),
  • Nanogui and its dependency (use git submodule in this repository to use it, see Tests_view), to use the GUI.

In any case, a function that generates the coefficients must be provided to Htool. To do so, a structure inheriting from IMatrix<T> must be defined with a method called T get_coef(const int& i, const int& j) const, where T is the type of your coefficients. This method will return the coefficient (i,j) of the considered problem. A method get_submatrix can also be defined to provide a more efficient way to build a sub-block of the matrix. An example of such interface is given in test_hmat_partialACA.hpp or BemTool (see bemtool/miscellaneous/htool_wrap.hpp).

A new type of compressor can also be added by defining a structure inheriting from LowRankMatrix with a method called build which populates the data members needed (see partialACA.hpp).

Who is behind Htool?

If you need help or have questions regarding Htool, feel free to contact Pierre Marchand and Pierre-Henri Tournier.


ANR NonlocalDD, (grant ANR-15-CE23-0017-01), France
Inria Paris, France
Laboratoire Jacques-Louis Lions Paris, France


Alan Ayala
Xavier Claeys
Pierre Jolivet
Frédéric Nataf

ANR NonlocalDD

You can’t perform that action at this time.