Hierarchical matrix¶
Builder¶
-
template<typename CoefficientsPrecision, typename CoordinatesPrecision = htool::underlying_type<CoefficientsPrecision>>
class HMatrixBuilder¶ Public Functions
-
inline HMatrixBuilder(int target_number_of_points, int target_spatial_dimension, const CoordinatesPrecision *target_coordinates, const ClusterTreeBuilder<CoordinatesPrecision> *target_cluster_tree_builder, int source_number_of_points, int source_spatial_dimension, const CoordinatesPrecision *source_coordinates, const ClusterTreeBuilder<CoordinatesPrecision> *source_cluster_tree_builder)¶
- Parameters:
target_number_of_points –
target_spatial_dimension –
target_coordinates –
target_cluster_tree_builder –
source_number_of_points –
source_spatial_dimension –
source_coordinates –
source_cluster_tree_builder –
-
inline HMatrixBuilder(int target_number_of_points, int target_spatial_dimension, const CoordinatesPrecision *target_coordinates, int source_number_of_points, int source_spatial_dimension, const CoordinatesPrecision *source_coordinates)¶
- Parameters:
target_number_of_points –
target_spatial_dimension –
target_coordinates –
source_number_of_points –
source_spatial_dimension –
source_coordinates –
-
inline HMatrixBuilder(int number_of_points, int spatial_dimension, const CoordinatesPrecision *coordinates)¶
- Parameters:
number_of_points –
spatial_dimension –
coordinates –
-
inline HMatrix<CoefficientsPrecision, CoordinatesPrecision> build(const VirtualGenerator<CoefficientsPrecision> &generator, const HMatrixTreeBuilder<CoefficientsPrecision, CoordinatesPrecision> &hmatrix_tree_builder)¶
- Parameters:
generator –
hmatrix_tree_builder –
- Returns:
Public Members
-
Cluster<CoordinatesPrecision> target_cluster¶
-
Cluster<CoordinatesPrecision> source_cluster¶
-
inline HMatrixBuilder(int target_number_of_points, int target_spatial_dimension, const CoordinatesPrecision *target_coordinates, const ClusterTreeBuilder<CoordinatesPrecision> *target_cluster_tree_builder, int source_number_of_points, int source_spatial_dimension, const CoordinatesPrecision *source_coordinates, const ClusterTreeBuilder<CoordinatesPrecision> *source_cluster_tree_builder)¶
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
class HMatrixTreeBuilder¶ a HMatrixTreeBuilder object encapsulates the parameters and strategies to create HMatrix objects.
- Template Parameters:
CoefficientPrecision –
CoordinatePrecision –
Public Functions
-
HMatrixTreeBuilder(const HMatrixTreeBuilder&) = delete¶
-
HMatrixTreeBuilder &operator=(const HMatrixTreeBuilder&) = delete¶
-
HMatrixTreeBuilder(HMatrixTreeBuilder&&) noexcept = default¶
-
HMatrixTreeBuilder &operator=(HMatrixTreeBuilder&&) noexcept = default¶
-
virtual ~HMatrixTreeBuilder() = default¶
-
HMatrixType build(const VirtualInternalGenerator<CoefficientPrecision> &generator, const ClusterType &target_root_cluster_tree, const ClusterType &source_root_cluster_tree, int target_partition_number, int partition_number_for_symmetry) const¶
-
inline HMatrixType build(const VirtualInternalGenerator<CoefficientPrecision> &generator, const ClusterType &target_root_cluster_tree, const ClusterType &source_root_cluster_tree, int target_partition_number) const¶
-
inline HMatrixType build(const VirtualInternalGenerator<CoefficientPrecision> &generator, const ClusterType &target_root_cluster_tree, const ClusterType &source_root_cluster_tree) const¶
-
inline HMatrixType build(const VirtualGenerator<CoefficientPrecision> &generator, const ClusterType &target_root_cluster_tree, const ClusterType &source_root_cluster_tree, int target_partition_number, int partition_number_for_symmetry) const¶
-
inline HMatrixType build(const VirtualGenerator<CoefficientPrecision> &generator, const ClusterType &target_root_cluster_tree, const ClusterType &source_root_cluster_tree, int target_partition_number) const¶
-
inline HMatrixType build(const VirtualGenerator<CoefficientPrecision> &generator, const ClusterType &target_root_cluster_tree, const ClusterType &source_root_cluster_tree) const¶
-
inline void set_symmetry(char symmetry_type)¶
-
inline void set_UPLO(char UPLO_type)¶
-
inline void set_minimal_source_depth(int minimal_source_depth)¶
-
inline void set_minimal_target_depth(int minimal_target_depth)¶
-
inline void set_block_tree_consistency(bool consistency)¶
-
inline char get_symmetry() const¶
-
inline char get_UPLO() const¶
-
inline double get_epsilon() const¶
-
inline double get_eta() const¶
-
inline std::shared_ptr<VirtualInternalLowRankGenerator<CoefficientPrecision>> get_internal_low_rank_generator() const¶
-
inline std::shared_ptr<VirtualLowRankGenerator<CoefficientPrecision>> get_low_rank_generator() const¶
HMatrix¶
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
class HMatrix : public htool::TreeNode<HMatrix<CoefficientPrecision, underlying_type<CoefficientPrecision>>, HMatrixTreeData<CoefficientPrecision, underlying_type<CoefficientPrecision>>>¶ Public Types
Public Functions
-
inline HMatrix(const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster)¶
-
inline HMatrix(const HMatrix &parent, const Cluster<CoordinatePrecision> *target_cluster, const Cluster<CoordinatePrecision> *source_cluster)¶
-
virtual ~HMatrix() = default¶
-
inline const Cluster<CoordinatePrecision> &get_target_cluster() const¶
-
inline const Cluster<CoordinatePrecision> &get_source_cluster() const¶
-
inline int nb_cols() const¶
-
inline int nb_rows() const¶
-
inline htool::underlying_type<CoefficientPrecision> get_epsilon() const¶
-
inline HMatrix<CoefficientPrecision, CoordinatePrecision> *get_child_or_this(const Cluster<CoordinatePrecision> &required_target_cluster, const Cluster<CoordinatePrecision> &required_source_cluster)¶
-
inline const HMatrix<CoefficientPrecision, CoordinatePrecision> *get_child_or_this(const Cluster<CoordinatePrecision> &required_target_cluster, const Cluster<CoordinatePrecision> &required_source_cluster) const¶
-
inline int get_rank() const¶
-
inline const Matrix<CoefficientPrecision> *get_dense_data() const¶
-
inline Matrix<CoefficientPrecision> *get_dense_data()¶
-
inline const LowRankMatrix<CoefficientPrecision> *get_low_rank_data() const¶
-
inline LowRankMatrix<CoefficientPrecision> *get_low_rank_data()¶
-
inline char get_symmetry() const¶
-
inline char get_UPLO() const¶
-
inline const HMatrixTreeData<CoefficientPrecision, CoordinatePrecision> *get_hmatrix_tree_data() const¶
-
inline const HMatrix<CoefficientPrecision> *get_sub_hmatrix(const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster) const¶
-
inline HMatrix<CoefficientPrecision> *get_sub_hmatrix(const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster)¶
-
inline StorageType get_storage_type() const¶
-
inline void set_symmetry(char symmetry)¶
-
inline void set_UPLO(char UPLO)¶
-
inline void set_symmetry_for_leaves(char symmetry)¶
-
inline void set_UPLO_for_leaves(char UPLO)¶
-
inline void set_target_cluster(const Cluster<CoordinatePrecision> *new_target_cluster)¶
-
inline bool is_dense() const¶
-
inline bool is_low_rank() const¶
-
inline bool is_hierarchical() const¶
-
inline void set_eta(CoordinatePrecision eta)¶
-
inline void set_epsilon(underlying_type<CoefficientPrecision> epsilon)¶
-
inline void set_minimal_target_depth(unsigned int minimal_target_depth)¶
-
inline void set_minimal_source_depth(unsigned int minimal_source_depth)¶
-
inline void set_block_tree_consistency(bool consistency)¶
-
inline char get_symmetry_for_leaves() const¶
-
inline char get_UPLO_for_leaves() const¶
-
inline bool is_block_tree_consistent() const¶
-
inline void compute_dense_data(const VirtualInternalGenerator<CoefficientPrecision> &generator)¶
-
inline bool compute_low_rank_data(const VirtualInternalLowRankGenerator<CoefficientPrecision> &low_rank_generator, int reqrank, underlying_type<CoefficientPrecision> epsilon)¶
-
inline void clear_low_rank_data()¶
-
inline void set_dense_data(std::unique_ptr<Matrix<CoefficientPrecision>> dense_matrix_ptr)¶
-
inline HMatrix(const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster)¶
Admissibility conditions¶
-
template<typename CoordinatePrecision>
class VirtualAdmissibilityCondition¶ Subclassed by htool::RjasanowSteinbach< CoordinatePrecision >
Public Functions
-
virtual bool ComputeAdmissibility(const Cluster<CoordinatePrecision> &target, const Cluster<CoordinatePrecision> &source, double eta) const = 0¶
-
inline virtual ~VirtualAdmissibilityCondition()¶
-
virtual bool ComputeAdmissibility(const Cluster<CoordinatePrecision> &target, const Cluster<CoordinatePrecision> &source, double eta) const = 0¶
-
template<typename CoordinatePrecision>
class RjasanowSteinbach : public htool::VirtualAdmissibilityCondition<CoordinatePrecision>¶ Public Functions
-
inline virtual bool ComputeAdmissibility(const Cluster<CoordinatePrecision> &target, const Cluster<CoordinatePrecision> &source, double eta) const override¶
-
inline virtual bool ComputeAdmissibility(const Cluster<CoordinatePrecision> &target, const Cluster<CoordinatePrecision> &source, double eta) const override¶
Low-rank compression¶
-
template<typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
class VirtualLowRankGenerator¶ Public Functions
-
inline VirtualLowRankGenerator()¶
-
virtual bool copy_low_rank_approximation(int M, int N, const int *rows, const int *cols, LowRankMatrix<CoefficientPrecision> &lrmat) const = 0¶
-
virtual bool copy_low_rank_approximation(int M, int N, const int *rows, const int *cols, int reqrank, LowRankMatrix<CoefficientPrecision> &lrmat) const = 0¶
-
inline virtual ~VirtualLowRankGenerator()¶
-
inline VirtualLowRankGenerator()¶
-
template<typename CoefficientPrecision>
class SVD : public htool::VirtualInternalLowRankGenerator<CoefficientPrecision>¶ It provides low-rank approximation using truncated Singular Value Decomposition (SVD).
- Template Parameters:
CoefficientPrecision –
Public Functions
-
inline SVD(const VirtualInternalGenerator<CoefficientPrecision> &A)¶
-
inline SVD(const VirtualGenerator<CoefficientPrecision> &A)¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, int rank, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
template<typename CoefficientPrecision>
class fullACA : public htool::VirtualInternalLowRankGenerator<CoefficientPrecision>¶ It provides low-rank approximation using the full Adaptive Cross Approximation (ACA).
- Template Parameters:
CoefficientPrecision –
Public Functions
-
inline fullACA(const VirtualInternalGenerator<CoefficientPrecision> &A)¶
-
inline fullACA(const VirtualGenerator<CoefficientPrecision> &A)¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, int reqrank, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
template<typename CoefficientPrecision>
class partialACA : public htool::VirtualInternalLowRankGenerator<CoefficientPrecision>¶ It provides low-rank approximation using the partial Adaptive Cross Approximation (ACA).
Public Functions
-
inline partialACA(const VirtualInternalGenerator<CoefficientPrecision> &A)¶
-
inline partialACA(const VirtualGenerator<CoefficientPrecision> &A)¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, int reqrank, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
inline partialACA(const VirtualInternalGenerator<CoefficientPrecision> &A)¶
-
template<typename CoefficientPrecision>
class sympartialACA : public htool::VirtualInternalLowRankGenerator<CoefficientPrecision>¶ It provides low-rank approximation using a symmetric version of the partial Adaptive Cross Approximation (ACA).
Public Functions
-
inline sympartialACA(const VirtualInternalGenerator<CoefficientPrecision> &A)¶
-
inline sympartialACA(const VirtualGenerator<CoefficientPrecision> &A)¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, int reqrank, LowRankMatrix<CoefficientPrecision> &lrmat) const override¶
-
inline sympartialACA(const VirtualInternalGenerator<CoefficientPrecision> &A)¶
-
template<typename CoefficientPrecision>
class RecompressedLowRankGenerator : public htool::VirtualInternalLowRankGenerator<CoefficientPrecision>¶ It provides low-rank approximation using a given compression method with a QR-SVD recompression.
- Template Parameters:
CoefficientPrecision –
Public Functions
-
inline RecompressedLowRankGenerator(const VirtualInternalLowRankGenerator<CoefficientPrecision> &low_rank_generator, std::function<void(LowRankMatrix<CoefficientPrecision>&)> recompression)¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, LowRankMatrix<CoefficientPrecision> &lrmat) const¶
-
inline virtual bool copy_low_rank_approximation(int M, int N, int row_offset, int col_offset, int reqrank, LowRankMatrix<CoefficientPrecision> &lrmat) const¶
Visualisation¶
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::save_leaves_with_rank(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::string filename)¶
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
std::map<std::string, std::string> htool::get_tree_parameters(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix)¶
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::print_tree_parameters(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::ostream &os)¶
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
std::map<std::string, std::string> htool::get_hmatrix_information(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix)¶
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::print_hmatrix_information(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::ostream &os)¶
Linear algebra¶
-
template<typename ExecutionPolicy, typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::add_hmatrix_vector_product(ExecutionPolicy&&, char trans, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, const CoefficientPrecision *in, CoefficientPrecision beta, CoefficientPrecision *out, CoefficientPrecision *buffer = nullptr)¶ - Template Parameters:
ExecutionPolicy –
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
trans –
alpha –
A –
in –
beta –
out –
buffer –
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::add_hmatrix_vector_product(char trans, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, const CoefficientPrecision *in, CoefficientPrecision beta, CoefficientPrecision *out, CoefficientPrecision *buffer = nullptr)¶ - Template Parameters:
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
trans –
alpha –
A –
in –
beta –
out –
buffer –
-
template<typename ExecutionPolicy, typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::add_hmatrix_matrix_product(ExecutionPolicy &&execution_policy, char transa, char transb, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, const Matrix<CoefficientPrecision> &B, CoefficientPrecision beta, Matrix<CoefficientPrecision> &C, CoefficientPrecision *buffer = nullptr)¶ test
- Template Parameters:
ExecutionPolicy –
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
execution_policy –
transa –
transb –
alpha –
A –
B –
beta –
C –
buffer –
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::add_hmatrix_matrix_product(char transa, char transb, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, const Matrix<CoefficientPrecision> &B, CoefficientPrecision beta, Matrix<CoefficientPrecision> &C, CoefficientPrecision *buffer = nullptr)¶ - Template Parameters:
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
transa –
transb –
alpha –
A –
B –
beta –
C –
buffer –
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::lu_factorization(HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix)¶ - Template Parameters:
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
hmatrix –
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::lu_solve(char trans, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, Matrix<CoefficientPrecision> &X)¶ - Template Parameters:
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
trans –
A –
X –
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::cholesky_factorization(char UPLO, HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix)¶ - Template Parameters:
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
UPLO –
hmatrix –
-
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void htool::cholesky_solve(char UPLO, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, Matrix<CoefficientPrecision> &X)¶ - Template Parameters:
CoefficientPrecision –
CoordinatePrecision –
- Parameters:
UPLO –
A –
X –