All notable changes to this project will be documented in this file.
- fix inline definition of
logging_level_to_string
- The old implementation of
HMatrix
was mixing the distributed operations and compression via hierarchical matrices. This is fixed by replacingHMatrix
by:DistributedOperator
which contains a list of local operators and implements all the distributed operations,VirtualLocalOperator
which is the interface local operators must satisfy,LocalDenseMatrix
is an example of local operator consisting of a dense matrixMatrix
,- and
LocalHMatrix
is an example of local operator consisting of a hierarchical matrix based onHMatrix
(different from the previousHMatrix
, see below).
- Utility classes that help build
DistributedOperator
andDDM
objects are available, for example:DefaultApproximationBuilder
andDDMSolverBuilder
. They do all the wiring between the inner interfaces between Htool-DDM's objects, seeinclude/htool/istributed_operator/utility.hpp
andinclude/htool/solvers/utility.hpp
. - Formatter has been added, see
.clang_format
. - A logger has been added with
Logger
. Its output can be customizerd viaIObjectWriter
.
HMatrix
is now a class representing a hierarchical matrix without distributed-memory parallelism (note that it can still use shared-memory parallelism):- It inherits from
TreeNode
, and it provides the algebra related to hierarchical matrices via free functions:- product with vector and matrix (threaded with OpenMP),
- and with this new version, LU and Cholesky factorization (not threaded yet, WIP).
- The algorithms for building the block cluster tree is contained in
HMatrixTreeBuilder
. Users can provide their own "factory".
- It inherits from
VirtualCluster
is removed and the clustering part of the library has been rewritten:Cluster
now derives fromTreeNode
, whose template parameter corresponds to the precision of cluster nodes' radius and centre (previously onlydouble
).- Standards recursive build algorithms are provided via
ClusterTreeBuilder
. Users can provide their own "factory". ClusterTreeBuilder
is a class template and uses the policy pattern (a policy for computing direction, and another for splitting along the direction).
DDM
has been modified, one-level and two-level preconditioners can be customized now viaVirtualLocalSolver
,VirtualCoarseSpaceBuilder
andVirtualCoarseOperatorBuilder
.- Three one-level preconditioners are provided by Htool-DDM via
DDMSolverBuilder
:- block-jacobi with a local HMatrix
- a DDM preconditioner where the local subdomain with overlap uses one HMatrix
- a DDM preconditioner where the local subdomain with overlap uses one HMatrix for the local subdomain without overlap, and dense matrices for the overlap and its interaction with the subdomain without overlap.
- A second-level (GenEO coarse space) is provided with
GeneoCoarseSpaceDenseBuilder
andGeneoCoarseOperatorBuilder
.
- Three one-level preconditioners are provided by Htool-DDM via
multilrmat
andmultihmatrix
are removed.
set_delay_dense_computation
toHMatrix
- clustering with user partition requiring permutation
- improved CI with stricter flags
- moved version number definition from
misc/define.hpp
tohtool_version.hpp
- Fix const-correctness for g++ 4.8.5
- Fix compatibility with c++20
- Fix MPI data type for complex float and double
- Fix issue with default MPI communicator
- doxygen documentation
- mvprod_transp_global_to_global and mvprod_transp_local_to_local added to
VirtualHMatrix
- getters for clusters in
VirtualHMatrix
- custom gmv in ddm
- Corner case with ACA resolved (first row/column only contains zeroes)
- Warnings from fujitsu compilers because of last line
- bug when using threading in mvprod
- CMakefile checks consistency of version number across git/c++/CMake
- Test for warnings coming from
include/htool/*
- Coverage added
- Methods in ddm interface to get local numbering
VirtualLowRankGenerator
andVirtualAdmissibilityCondition
added for better modularity
- Remove unnecessary arguments in HMatrix and cluster interfaces
MultiHMatrix
deprecated for the moment (everything related to this inhtool/multi
)
- Missing inlines added
- Fix bug when using htool via petsc with mkl
- Python interface with ctypes deprecated, see new python interface with pybind11.
- Performance tests removed, see dedicated repository.
- GUI deprecated.
- Interface for clustering via
VirtualCluster
, implementation withCluster
whose template parameter is the type of clustering (supported now:PCARegularClustering
,PCAGeometricClustering
,BoundingBox1RegularClustering
andBoundingBoxGeometricClustering
). - Interface for hmatrix objects via
VirtualHMatrix
, implementation with HMatrix whose template parameter is the type of compressor (supported now:SVD
,fullACA
,partialACA
,sympartialACA
, all derived from abstract classLowRankMatrix
). - Interface for generator via
VirtualGenerator
. The user needs to define an object deriving fromVirtualGenerator
to populate a hmatrix. Block
class with different admissible condition used inBlock
(onlyRjasanowSteinbach
at the moment).- Interface for a sub-block via
IMatrix
, from which bothSubMatrix
andLowRankMatrix
inherit. They respectively correspond to dense and compressed sub-blocks. DDM
solvers via HPDDM, and coarse space building.- Test suite and CI with GitHub action.