All notable changes to this project will be documented in this file.
- JOSS badge and update
CITATION.cff. - Opt-in
tidyCMake target running clang-tidy (bugprone-*/performance-*) overexamples/andtests/, not part of the default build. Configured via.clang-tidy, excluding the macro-generatedwrapper_blas.hpp/wrapper_lapack.hppfrom findings.
- Make std::execution optional via
HTOOL_WITH_STD_EXECUTION_APImacro to avoid linking with TBB. Default to false. - Improve
HMatrixBuilderinterface. - Lock down
TreeNode's CRTP constructors and foldCRTPHelperinto it. - Replace
std::endl/endlwith'\n'acrossinclude/,tests/andexamples/. - Fix unnecessary-value-param findings from clang-tidy: move sink parameters, take pure reads by const reference.
- Remove orphaned
local_operatorstest andproto_ddm/wrapper_proto_ddm. - Remove dead
aspect_ratiostub.
- Fix uninitialized values in
Partitioning_N. - Fix bug in task-based HLU, PR#81 thanks to @ABoisneault.
- Fix
number_of_generated_coefficientcomputation. - Fix overflow in
get_distributed_hmatrix_information. - Fix float-point computation issue in
create_cluster_tree. - Fix
Matrixmove constructor/assignment to actually movem_pivots. - Fix
Matrix's int-overflow risk in allocation sizes (rows*cols computed inintthen used as anew[]/read/write size), and a zero-length-array leak inresize(). - Fix real overflow/mistyping bugs surfaced by clang-tidy's widening/narrowing-conversion checks in
matrix/utils/output.hppandhmatrix_output.hpp.
- Fix execution header include, PR #77
- Fix wrong ordering of eigenvalues in solve_EVP_3 in some specific cases, PR #76
- Fix interface of
add_hmatrix_matrix_product, PR#82.
- Fix wrong boolean tests in triangular_matrix_matrix_solve, PR #75 from @ABoisneault
- Avoid empty-sized gemv, PR #64 from @prj-
HMatrixrecompression with SVD.- Generic recompressed low-rank compression with
RecompressedLowRankGenerator. - Checks about
UPLOfor hmatrix factorization. HMatrixBuilderfor easierHMatrixcreation (especially when using only theHMatrixcomponent of Htool-DDM).add_hmatrix_vector_productandadd_hmatrix_matrix_productfor working in user numbering.- For C++17 and onward, interfaces supporting execution policies (default being sequential execution) has been added for these functions:
HMatrixTreeBuilder::buildadd_hmatrix_matrix_productadd_hmatrix_vector_productlu_factorizationcholesky_factorization
- Mocking execution policies have been added when compiler does not define
std::execution. Seeexec_compat. task_dependencies.hppfor miscellaneous functions used for task based approach.hmatrix_output_dot.hppfor L0 and block tree visualization.- Task based parallelism support has been added via
HMatrixTreeBuilder::task_based_buildfor task based assembly.task_based_internal_add_hmatrix_vector_productfor task based alternative to{sequential,openmp}_internal_add_hmatrix_vector_product.task_based_internal_add_hmatrix_hmatrix_productfor task based alternative to{sequential,openmp}_internal_add_hmatrix_hmatrix_product.task_based_internal_triangular_hmatrix_hmatrix_solvefor task based alternative tointernal_triangular_hmatrix_hmatrix_solve.task_based_lu_factorizationandtask_based_cholesky_factorizationfor task based alternatives to{sequential,openmp}_lu_factorizationand{sequential,openmp}_cholesky_factorization.test_task_based_hmatrix_*.hppfor testing various task based features.
internal_add_lrmat_hmatrixis now overloaded to handle the case where the HMatrix is larger than the LowRankMatrix.get_leaves_fromis overloaded to return non const arguments.get_false_positivein a tree builder.left_hmatrix_ancestor_of_right_hmatrixandleft_hmatrix_descendant_of_right_hmatrixfor returning parent and children of a hmatrix.Partition_Nis an alternative toPartitionfor defining the partition of a cluster. The latter only splits along the principal axis of the cluster, while the former tries to be smarter.
VirtualInternalLowRankGeneratorandVirtualLowRankGenerator'scopy_low_rank_approximationfunction takes aLowRankMatrixas input to populate it and returns a boolean. The return value is true if the compression succeded, false otherwise.LowRankMatrixconstructors changed. It only takes sizes and an epsilon or a required rank. Then, it is expected to call aVirtualInternalLowRankGeneratorto populate it.ClusterTreeBuilderhas now one strategy asVirtualPartitioning. Usual implementations are still available, for example usingPartitioning<double,ComputeLargestExtent,RegularSplitting>.ClusterTreeBuilderparameterminclustersizewas removed, and a parametermaximal_leaf_sizehas been added.DistributedOperatorsupports now both "global-to-local" and "local-to-local" operators, using respectivelyVirtualGlobalToLocalOperatorandVirtualLocalToLocalOperatorinterfaces. The linear algebra associated has been updated to follow a more Blas-like interface.MatrixViewhas been added to ease the use of matrix product. Most public functions for matrix products have also new template arguments to accept,Matrix,MatrixViewor any other type following the same interface.
- Fix inline definition of
logging_level_to_string. - Fix error when resizing
Matrix. - Fix error due to using
intinstead ofsize_t, thanks to @vdubos. - Fix warnings with
-Wold-style-cast.
- The old implementation of
HMatrixwas mixing the distributed operations and compression via hierarchical matrices. This is fixed by replacingHMatrixby:DistributedOperatorwhich contains a list of local operators and implements all the distributed operations,VirtualLocalOperatorwhich is the interface local operators must satisfy,LocalDenseMatrixis an example of local operator consisting of a dense matrixMatrix,- and
LocalHMatrixis an example of local operator consisting of a hierarchical matrix based onHMatrix(different from the previousHMatrix, see below).
- Utility classes that help build
DistributedOperatorandDDMobjects are available, for example:DefaultApproximationBuilderandDDMSolverBuilder. They do all the wiring between the inner interfaces between Htool-DDM's objects, seeinclude/htool/distributed_operator/utility.hppandinclude/htool/solvers/utility.hpp. - Formatter has been added, see
.clang_format. - A logger has been added with
Logger. Its output can be customizerd viaIObjectWriter.
HMatrixis 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
VirtualClusteris removed and the clustering part of the library has been rewritten:Clusternow 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". ClusterTreeBuilderis a class template and uses the policy pattern (a policy for computing direction, and another for splitting along the direction).
DDMhas been modified, one-level and two-level preconditioners can be customized now viaVirtualLocalSolver,VirtualCoarseSpaceBuilderandVirtualCoarseOperatorBuilder.- 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
GeneoCoarseSpaceDenseBuilderandGeneoCoarseOperatorBuilder.
- Three one-level preconditioners are provided by Htool-DDM via
multilrmatandmultihmatrixare removed.
set_delay_dense_computationtoHMatrix- clustering with user partition requiring permutation
- improved CI with stricter flags
- moved version number definition from
misc/define.hpptohtool_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
VirtualLowRankGeneratorandVirtualAdmissibilityConditionadded for better modularity
- Remove unnecessary arguments in HMatrix and cluster interfaces
MultiHMatrixdeprecated 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 withClusterwhose template parameter is the type of clustering (supported now:PCARegularClustering,PCAGeometricClustering,BoundingBox1RegularClusteringandBoundingBoxGeometricClustering). - 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 fromVirtualGeneratorto populate a hmatrix. Blockclass with different admissible condition used inBlock(onlyRjasanowSteinbachat the moment).- Interface for a sub-block via
IMatrix, from which bothSubMatrixandLowRankMatrixinherit. They respectively correspond to dense and compressed sub-blocks. DDMsolvers via HPDDM, and coarse space building.- Test suite and CI with GitHub action.