C++ – API reference

VirtualGenerator

template<typename T>
class VirtualGenerator

Define the interface for the user to give Htool a function generating dense sub-blocks of the global matrix the user wants to compress. This is done by the user implementing VirtualGenerator::copy_submatrix.

Template Parameters

T – Precision of the coefficients (float, double,…).

Public Functions

inline VirtualGenerator(int nr0, int nc0, int dimension0 = 1)
virtual void copy_submatrix(int M, int N, const int *const rows, const int *const cols, T *ptr) const = 0

Generate a dense sub-block of the global matrix the user wants to compress. Note that sub-blocks queried by Htool are potentially non-contiguous in the user’s numbering.

Parameters
  • M[in] specifies the number of columns of the queried block

  • N[in] specifies the number of rows of the queried block

  • rows[in] is an integer array of size \(M\). It specifies the queried columns in the user’s numbering

  • cols[in] is an integer array of size \(N\). It specifies the queried rows in the user’s numbering

  • ptr[out] is a T precision array of size \( M\times N\). Htool already allocates and desallocates it internally, so it should not be allocated by the user.

inline int nb_rows() const

Get the global number of rows.

Returns

int

inline int nb_cols() const

Get the global number of columns.

Returns

int

inline int get_dimension() const

Get the dimension of the output coefficients.

Returns

int

inline virtual ~VirtualGenerator()

VirtualHMatrix

template<class T>
class VirtualHMatrix

Subclassed by htool::HMatrix< T, LowRankMatrix, AdmissibleCondition >, htool::HMatrix< T, LowRankMatrix, ClusterImpl, AdmissibleCondition >, htool::HMatrix< T >

Public Functions

virtual int nb_rows() const = 0
virtual int nb_cols() const = 0
virtual MPI_Comm get_comm() const = 0
virtual int get_rankworld() const = 0
virtual int get_sizeworld() const = 0
virtual int get_local_size() const = 0
virtual int get_local_offset() const = 0
virtual char get_symmetry_type() const = 0
virtual char get_storage_type() const = 0
virtual std::vector<T> get_local_diagonal(bool = true) const = 0
virtual void copy_local_diagonal(T*, bool = true) const = 0
virtual Matrix<T> get_local_diagonal_block(bool = true) const = 0
virtual void copy_local_diagonal_block(T*, bool = true) const = 0
virtual std::pair<int, int> get_max_size_blocks() const = 0
virtual std::vector<std::pair<int, int>> get_MasterOffset_t() const = 0
virtual std::vector<std::pair<int, int>> get_MasterOffset_s() const = 0
virtual std::pair<int, int> get_MasterOffset_t(int i) const = 0
virtual std::pair<int, int> get_MasterOffset_s(int i) const = 0
virtual std::vector<int> get_local_perm_target() const = 0
virtual std::vector<int> get_local_perm_source() const = 0
virtual double get_epsilon() const = 0
virtual double get_eta() const = 0
virtual int get_dimension() const = 0
virtual int get_minsourcedepth() const = 0
virtual int get_mintargetdepth() const = 0
virtual int get_maxblocksize() const = 0
virtual void set_epsilon(double epsilon0) = 0
virtual void set_eta(double eta0) = 0
virtual void set_maxblocksize(unsigned int maxblocksize) = 0
virtual void set_minsourcedepth(unsigned int minsourcedepth0) = 0
virtual void set_mintargetdepth(unsigned int mintargetdepth0) = 0
virtual void set_use_permutation(bool choice) = 0
virtual void set_compression(std::shared_ptr<VirtualLowRankGenerator<T>> compressor) = 0
virtual void build(VirtualGenerator<T> &mat, const double *const xt, const double *const xs) = 0
virtual void build(VirtualGenerator<T> &mat, const double *const xt) = 0
virtual void mvprod_global_to_global(const T *const in, T *const out, const int &mu = 1) const = 0
virtual void mvprod_local_to_local(const T *const in, T *const out, const int &mu = 1, T *work = nullptr) const = 0
virtual void mymvprod_local_to_local(const T *const in, T *const out, const int &mu = 1, T *work = nullptr) const = 0
virtual void mymvprod_global_to_local(const T *const in, T *const out, const int &mu = 1) const = 0
virtual void mvprod_subrhs(const T *const in, T *const out, const int &mu, const int &offset, const int &size, const int &margin) const = 0
virtual void cluster_to_target_permutation(const T *const in, T *const out) const = 0
virtual void source_to_cluster_permutation(const T *const in, T *const out) const = 0
virtual const std::map<std::string, std::string> &get_infos() const = 0
virtual std::string get_infos(const std::string &key) const = 0
virtual void print_infos() const = 0
virtual Matrix<T> get_local_dense_perm() const = 0
virtual void copy_local_dense_perm(T*) const = 0
inline virtual ~VirtualHMatrix()
class VirtualAdmissibilityCondition

Subclassed by htool::RjasanowSteinbach

Public Functions

virtual bool ComputeAdmissibility(const VirtualCluster &target, const VirtualCluster &source, double eta) const = 0
class VirtualCluster

Subclassed by htool::Cluster< ClusteringType >

Public Functions

virtual void build(int nb_pt0, const double *const x0, const double *const r0, const double *const g0, int nb_sons = -1, MPI_Comm comm = MPI_COMM_WORLD) = 0
virtual void build(int nb_pt0, const double *const x0, int nb_sons = -1, MPI_Comm comm = MPI_COMM_WORLD) = 0
virtual void build(int nb_pt0, const double *const x0, const double *const r0, const double *const g0, const int *const MasterOffset0, int nb_sons = -1, MPI_Comm comm = MPI_COMM_WORLD) = 0
virtual void build(int nb_pt0, const double *const x0, const int *const MasterOffset0, int nb_sons = -1, MPI_Comm comm = MPI_COMM_WORLD) = 0
virtual double get_rad() const = 0
virtual const std::vector<double> &get_ctr() const = 0
virtual const VirtualCluster &get_son(const int &j) const = 0
virtual VirtualCluster &get_son(const int &j) = 0
virtual int get_depth() const = 0
virtual int get_rank() const = 0
virtual int get_offset() const = 0
virtual int get_size() const = 0
virtual int get_nb_sons() const = 0
virtual int get_counter() const = 0
virtual const VirtualCluster &get_local_cluster(MPI_Comm comm = MPI_COMM_WORLD) const = 0
virtual std::shared_ptr<VirtualCluster> get_local_cluster_tree(MPI_Comm comm = MPI_COMM_WORLD) = 0
virtual std::vector<int> get_local_perm() const = 0
virtual bool IsLocal() const = 0
virtual bool IsLeaf() const = 0
virtual int get_space_dim() const = 0
virtual int get_minclustersize() const = 0
virtual int get_ndofperelt() const = 0
virtual int get_max_depth() const = 0
virtual int get_min_depth() const = 0
virtual const std::vector<int> &get_perm() const = 0
virtual int get_perm(int i) const = 0
virtual std::vector<int>::const_iterator get_perm_start() const = 0
virtual const VirtualCluster *get_root() const = 0
virtual int get_local_offset() const = 0
virtual int get_local_size() const = 0
virtual const std::vector<std::pair<int, int>> &get_masteroffset() const = 0
virtual std::pair<int, int> get_masteroffset(int i) const = 0
virtual void set_rank(int rank0) = 0
virtual void set_offset(int offset0) = 0
virtual void set_size(int size0) = 0
virtual void set_minclustersize(unsigned int minclustersize0) = 0
virtual void set_ndofperelt(unsigned int ndofperelt0) = 0
virtual void print(MPI_Comm comm = MPI_COMM_WORLD) const = 0
virtual void save_geometry(const double *const x0, std::string filename, const std::vector<int> &depths, MPI_Comm comm = MPI_COMM_WORLD) const = 0
virtual void save_cluster(std::string filename, MPI_Comm comm = MPI_COMM_WORLD) const = 0
virtual void read_cluster(std::string file_permutation, std::string file_tree, MPI_Comm comm = MPI_COMM_WORLD) = 0
inline virtual ~VirtualCluster()