Skip to content

Commit

Permalink
fix default template for CoordinatePrecision
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreMarchand20 committed Aug 3, 2024
1 parent d109384 commit 2313d09
Show file tree
Hide file tree
Showing 19 changed files with 44 additions and 42 deletions.
13 changes: 7 additions & 6 deletions include/htool/clustering/cluster_node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "../basic_types/tree.hpp"
#include "../misc/logger.hpp"
#include "../misc/misc.hpp"
#include "../misc/user.hpp"
#include "cluster_tree_data.hpp"
#include <functional>
Expand Down Expand Up @@ -153,7 +154,7 @@ bool left_cluster_contains_right_cluster(const Cluster<CoordinatesPrecision> &cl
// }

// Permutations
template <typename CoefficientPrecision, typename CoordinatesPrecision = CoefficientPrecision>
template <typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
void root_cluster_to_global(const Cluster<CoordinatesPrecision> &root_cluster, const CoefficientPrecision *const in, CoefficientPrecision *const out) {
if (!root_cluster.is_root()) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Permutation needs root cluster"); // LCOV_EXCL_LINE
Expand All @@ -167,7 +168,7 @@ void root_cluster_to_global(const Cluster<CoordinatesPrecision> &root_cluster, c
}
}

template <typename CoefficientPrecision, typename CoordinatesPrecision = CoefficientPrecision>
template <typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
void global_to_root_cluster(const Cluster<CoordinatesPrecision> &root_cluster, const CoefficientPrecision *const in, CoefficientPrecision *const out) {
if (!root_cluster.is_root()) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Permutation needs root cluster"); // LCOV_EXCL_LINE
Expand All @@ -180,7 +181,7 @@ void global_to_root_cluster(const Cluster<CoordinatesPrecision> &root_cluster, c
}

// Local permutations
template <typename CoefficientPrecision, typename CoordinatesPrecision = CoefficientPrecision>
template <typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
void local_cluster_to_local(const Cluster<CoordinatesPrecision> &cluster, int index, const CoefficientPrecision *in, CoefficientPrecision *out) {
if (!cluster.is_permutation_local()) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Permutation is not local to partition, local_cluster_to_local cannot be used"); // LCOV_EXCL_LINE
Expand All @@ -193,7 +194,7 @@ void local_cluster_to_local(const Cluster<CoordinatesPrecision> &cluster, int in
out[permutation[cluster_on_partition->get_offset() + i] - cluster_on_partition->get_offset()] = in[i];
}
}
template <typename CoefficientPrecision, typename CoordinatesPrecision = CoefficientPrecision>
template <typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
void local_to_local_cluster(const Cluster<CoordinatesPrecision> &cluster, int index, const CoefficientPrecision *in, CoefficientPrecision *out) {
if (!cluster.is_permutation_local()) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Permutation is not local to partition, local_cluster_to_local cannot be used"); // LCOV_EXCL_LINE
Expand All @@ -209,7 +210,7 @@ void local_to_local_cluster(const Cluster<CoordinatesPrecision> &cluster, int in
}

// Local permutations
template <typename CoefficientPrecision, typename CoordinatesPrecision = CoefficientPrecision>
template <typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
void cluster_to_user(const Cluster<CoordinatesPrecision> &cluster, const CoefficientPrecision *in, CoefficientPrecision *out) {
if (!cluster.is_root() && !is_cluster_on_partition(cluster)) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Cluster is neither root nor local, permutation is not stable."); // LCOV_EXCL_LINE
Expand All @@ -222,7 +223,7 @@ void cluster_to_user(const Cluster<CoordinatesPrecision> &cluster, const Coeffic
out[permutation[cluster.get_offset() + i] - cluster.get_offset()] = in[i];
}
}
template <typename CoefficientPrecision, typename CoordinatesPrecision = CoefficientPrecision>
template <typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
void user_to_cluster(const Cluster<CoordinatesPrecision> &cluster, const CoefficientPrecision *in, CoefficientPrecision *out) {
if (!cluster.is_root() && !is_cluster_on_partition(cluster)) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Cluster is neither root nor local, permutation is not stable."); // LCOV_EXCL_LINE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace htool {

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
class PartitionFromCluster final : public IPartition<CoefficientPrecision> {
const Cluster<CoordinatePrecision> &m_root_cluster;

Expand Down
8 changes: 4 additions & 4 deletions include/htool/hmatrix/hmatrix.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ class HMatrix : public TreeNode<HMatrix<CoefficientPrecision, CoordinatePrecisio
}
};

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void copy_to_dense(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, CoefficientPrecision *ptr) {

int target_offset = hmatrix.get_target_cluster().get_offset();
Expand Down Expand Up @@ -299,7 +299,7 @@ void copy_to_dense(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hma
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void copy_to_dense_in_user_numbering(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, CoefficientPrecision *ptr) {

const auto &target_cluster = hmatrix.get_target_cluster();
Expand Down Expand Up @@ -378,7 +378,7 @@ void copy_to_dense_in_user_numbering(const HMatrix<CoefficientPrecision, Coordin
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void copy_diagonal(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, CoefficientPrecision *ptr) {
if (hmatrix.get_target_cluster().get_offset() != hmatrix.get_source_cluster().get_offset() || hmatrix.get_target_cluster().get_size() != hmatrix.get_source_cluster().get_size()) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Matrix is not square a priori, get_local_diagonal cannot be used"); // LCOV_EXCL_LINE
Expand Down Expand Up @@ -407,7 +407,7 @@ void copy_diagonal(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hma
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void copy_diagonal_in_user_numbering(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, CoefficientPrecision *ptr) {
if (hmatrix.get_target_cluster().get_offset() != hmatrix.get_source_cluster().get_offset() || hmatrix.get_target_cluster().get_size() != hmatrix.get_source_cluster().get_size()) {
htool::Logger::get_instance().log(LogLevel::ERROR, "Matrix is not square a priori, get_local_diagonal cannot be used"); // LCOV_EXCL_LINE
Expand Down
4 changes: 2 additions & 2 deletions include/htool/hmatrix/hmatrix_distributed_output.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ bool is_positive_integer(const std::string &s) {
return !s.empty() && std::find_if(s.begin(), s.end(), [](unsigned char c) { return !std::isdigit(c); }) == s.end();
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
std::map<std::string, std::string> get_distributed_hmatrix_information(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, MPI_Comm comm) {
std::map<std::string, std::string> distributed_information;
int sizeWorld, rankWorld;
Expand Down Expand Up @@ -195,7 +195,7 @@ std::map<std::string, std::string> get_distributed_hmatrix_information(const HMa
return distributed_information;
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void print_distributed_hmatrix_information(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::ostream &os, MPI_Comm comm) {
auto distributed_information = get_distributed_hmatrix_information(hmatrix, comm);
int rankWorld;
Expand Down
15 changes: 8 additions & 7 deletions include/htool/hmatrix/hmatrix_output.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#if defined(_OPENMP)
# include <omp.h>
#endif
#include "../misc/misc.hpp"

namespace htool {

Expand All @@ -35,7 +36,7 @@ std::ostream &operator<<(std::ostream &output_stream, const DisplayBlock<OutputV
return output_stream;
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void save_leaves_with_rank(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::string filename) {
std::ofstream output(filename + ".csv");
std::vector<DisplayBlock<int>> output_blocks{};
Expand All @@ -54,7 +55,7 @@ void save_leaves_with_rank(const HMatrix<CoefficientPrecision, CoordinatePrecisi
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void save_levels(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::string filename, std::vector<int> depths) {
std::vector<std::vector<DisplayBlock<int>>> output_blocks(depths.size());

Expand All @@ -81,7 +82,7 @@ void save_levels(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatr
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
std::map<std::string, std::string> get_tree_parameters(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix) {
const HMatrixTreeData<CoefficientPrecision, CoordinatePrecision> *hmatrix_tree_data = hmatrix.get_hmatrix_tree_data();
std::map<std::string, std::string> tree_parameters;
Expand All @@ -98,7 +99,7 @@ std::map<std::string, std::string> get_tree_parameters(const HMatrix<Coefficient
return tree_parameters;
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void print_tree_parameters(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::ostream &os) {
auto tree_parameters = get_tree_parameters(hmatrix);
int output_size = 23;
Expand All @@ -117,7 +118,7 @@ void print_tree_parameters(const HMatrix<CoefficientPrecision, CoordinatePrecisi
os.copyfmt(init);
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void get_leaves(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::vector<const HMatrix<CoefficientPrecision, CoordinatePrecision> *> &dense_blocks, std::vector<const HMatrix<CoefficientPrecision, CoordinatePrecision> *> &low_rank_blocks) {
preorder_tree_traversal(
hmatrix,
Expand All @@ -130,7 +131,7 @@ void get_leaves(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatri
});
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
std::map<std::string, std::string> get_hmatrix_information(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix) {
const HMatrixTreeData<CoefficientPrecision, CoordinatePrecision> *hmatrix_tree_data = hmatrix.get_hmatrix_tree_data();

Expand Down Expand Up @@ -219,7 +220,7 @@ std::map<std::string, std::string> get_hmatrix_information(const HMatrix<Coeffic
return hmatrix_information;
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void print_hmatrix_information(const HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix, std::ostream &os) {

auto hmatrix_information = get_hmatrix_information(hmatrix);
Expand Down
2 changes: 1 addition & 1 deletion include/htool/hmatrix/hmatrix_tree_data.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace htool {
template <typename CoefficientPrecision, typename CoordinatePrecision>
class HMatrix;

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
struct HMatrixTreeData {
// Parameters
std::shared_ptr<const Cluster<CoordinatePrecision>> m_target_cluster_tree, m_source_cluster_tree; // root clusters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace htool {

template <typename CoefficientPrecision, typename CoordinatesPrecision>
template <typename CoefficientPrecision, typename CoordinatesPrecision = underlying_type<CoefficientPrecision>>
class VirtualLowRankGenerator {
public:
VirtualLowRankGenerator() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace htool {

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void add_hmatrix_matrix_product_row_major(char transa, char transb, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, const CoefficientPrecision *in, CoefficientPrecision beta, CoefficientPrecision *out, int mu) {
switch (A.get_storage_type()) {
case HMatrix<CoefficientPrecision, CoordinatePrecision>::StorageType::Dense:
Expand All @@ -25,7 +25,7 @@ void add_hmatrix_matrix_product_row_major(char transa, char transb, CoefficientP
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void add_hmatrix_matrix_product_row_major(char transa, char transb, std::complex<CoefficientPrecision> alpha, const HMatrix<std::complex<CoefficientPrecision>, CoordinatePrecision> &A, const std::complex<CoefficientPrecision> *in, std::complex<CoefficientPrecision> beta, std::complex<CoefficientPrecision> *out, int mu) {
switch (A.get_storage_type()) {
case HMatrix<std::complex<CoefficientPrecision>, CoordinatePrecision>::StorageType::Dense:
Expand Down Expand Up @@ -213,7 +213,7 @@ void openmp_add_hmatrix_matrix_product_row_major(char transa, char transb, Coeff
// Blas<CoefficientPrecision>::axpy(&out_size, &alpha, temp.data(), &incx, C, &incy);
// }

// template <typename CoefficientPrecision, typename CoordinatePrecision>
// template <typename CoefficientPrecision, typename CoordinatePrecision=underlying_type<CoefficientPrecision>>
// void add_symmetric_hmatrix_matrix_product_row_major(char side, char UPLO, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, const CoefficientPrecision *in, CoefficientPrecision beta, CoefficientPrecision *out, int mu) {
// switch (A.get_storage_type()) {
// case HMatrix<CoefficientPrecision, CoordinatePrecision>::StorageType::Dense:
Expand Down
4 changes: 2 additions & 2 deletions include/htool/hmatrix/linalg/add_hmatrix_vector_product.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace htool {

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void add_hmatrix_vector_product(char trans, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, const CoefficientPrecision *in, CoefficientPrecision beta, CoefficientPrecision *out) {
switch (A.get_storage_type()) {
case HMatrix<CoefficientPrecision, CoordinatePrecision>::StorageType::Dense:
Expand All @@ -28,7 +28,7 @@ void add_hmatrix_vector_product(char trans, CoefficientPrecision alpha, const HM
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void add_hmatrix_vector_product(char trans, std::complex<CoefficientPrecision> alpha, const HMatrix<std::complex<CoefficientPrecision>, CoordinatePrecision> &A, const std::complex<CoefficientPrecision> *in, std::complex<CoefficientPrecision> beta, std::complex<CoefficientPrecision> *out) {
switch (A.get_storage_type()) {
case HMatrix<std::complex<CoefficientPrecision>, CoordinatePrecision>::StorageType::Dense:
Expand Down
8 changes: 4 additions & 4 deletions include/htool/hmatrix/linalg/factorization.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace htool {

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void lu_factorization(HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix) {
if (hmatrix.is_hierarchical()) {

Expand Down Expand Up @@ -62,7 +62,7 @@ void lu_factorization(HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatri
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void lu_solve(char trans, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, Matrix<CoefficientPrecision> &X) {

if (trans == 'N') {
Expand All @@ -74,7 +74,7 @@ void lu_solve(char trans, const HMatrix<CoefficientPrecision, CoordinatePrecisio
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void cholesky_factorization(char UPLO, HMatrix<CoefficientPrecision, CoordinatePrecision> &hmatrix) {
if (hmatrix.is_hierarchical()) {

Expand Down Expand Up @@ -143,7 +143,7 @@ void cholesky_factorization(char UPLO, HMatrix<CoefficientPrecision, CoordinateP
}
}

template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void cholesky_solve(char UPLO, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, Matrix<CoefficientPrecision> &X) {
if (UPLO == 'L') {
triangular_hmatrix_matrix_solve('L', 'L', 'N', 'N', CoefficientPrecision(1), A, X);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "./triangular_hmatrix_lrmat_solve.hpp"

namespace htool {
template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void triangular_hmatrix_hmatrix_solve(char side, char UPLO, char transa, char diag, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, HMatrix<CoefficientPrecision, CoordinatePrecision> &B) {
if (alpha != CoefficientPrecision(1)) {
scale(alpha, B);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include "./triangular_hmatrix_matrix_solve.hpp"

namespace htool {
template <typename CoefficientPrecision, typename CoordinatePrecision>
template <typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
void triangular_hmatrix_lrmat_solve(char side, char UPLO, char transa, char diag, CoefficientPrecision alpha, const HMatrix<CoefficientPrecision, CoordinatePrecision> &A, LowRankMatrix<CoefficientPrecision, CoordinatePrecision> &B) {
if (alpha != CoefficientPrecision(1)) {
scale(alpha, B);
Expand Down
Loading

0 comments on commit 2313d09

Please sign in to comment.