HODLROptions.hpp
Go to the documentation of this file.
1 /*
2  * STRUMPACK -- STRUctured Matrices PACKage, Copyright (c) 2014, The
3  * Regents of the University of California, through Lawrence Berkeley
4  * National Laboratory (subject to receipt of any required approvals
5  * from the U.S. Dept. of Energy). All rights reserved.
6  *
7  * If you have questions about your rights to use or distribute this
8  * software, please contact Berkeley Lab's Technology Transfer
9  * Department at TTD@lbl.gov.
10  *
11  * NOTICE. This software is owned by the U.S. Department of Energy. As
12  * such, the U.S. Government has been granted for itself and others
13  * acting on its behalf a paid-up, nonexclusive, irrevocable,
14  * worldwide license in the Software to reproduce, prepare derivative
15  * works, and perform publicly and display publicly. Beginning five
16  * (5) years after the date permission to assert copyright is obtained
17  * from the U.S. Department of Energy, and subject to any subsequent
18  * five (5) year renewals, the U.S. Government is granted for itself
19  * and others acting on its behalf a paid-up, nonexclusive,
20  * irrevocable, worldwide license in the Software to reproduce,
21  * prepare derivative works, distribute copies to the public, perform
22  * publicly and display publicly, and to permit others to do so.
23  *
24  * Developers: Pieter Ghysels, Francois-Henry Rouet, Xiaoye S. Li.
25  * (Lawrence Berkeley National Lab, Computational Research
26  * Division).
27  */
32 #ifndef HODLR_OPTIONS_HPP
33 #define HODLR_OPTIONS_HPP
34 
36 
37 namespace strumpack {
38 
39  namespace HODLR {
40 
48  template<typename real_t> inline real_t default_HODLR_rel_tol() {
49  return real_t(1e-4);
50  }
56  template<typename real_t> inline real_t default_HODLR_abs_tol() {
57  return real_t(1e-10);
58  }
59 
67  template<> inline float default_HODLR_rel_tol() {
68  return 1e-2;
69  }
75  template<> inline float default_HODLR_abs_tol() {
76  return 1e-5;
77  }
78 
84  enum class CompressionAlgorithm {
87  };
88 
94  std::string get_name(CompressionAlgorithm a);
95 
102  CompressionAlgorithm get_compression_algorithm(const std::string& c);
103 
104 
105 
115  template<typename scalar_t> class HODLROptions {
116 
117  public:
122  using real_t = typename RealType<scalar_t>::value_type;
123 
129 
138  assert(rel_tol <= real_t(1.) && rel_tol >= real_t(0.));
139  rel_tol_ = rel_tol;
140  }
141 
148  assert(abs_tol >= real_t(0.));
149  abs_tol_ = abs_tol;
150  }
151 
160  assert(leaf_size_ > 0);
161  leaf_size_ = leaf_size;
162  }
163 
167  void set_max_rank(int max_rank) {
168  assert(max_rank > 0);
169  max_rank_ = max_rank;
170  }
171 
176  assert(rank_guess > 0);
177  rank_guess_ = rank_guess;
178  }
179 
184  void set_rank_rate(double rank_rate) {
185  assert(rank_rate > 0);
186  rank_rate_ = rank_rate;
187  }
188 
194  clustering_algo_ = a;
195  }
196 
201  compression_algo_ = a;
202  }
203 
208  void set_butterfly_levels(int bfl) {
209  assert(bfl >= 0);
210  butterfly_levels_ = bfl;
211  }
212 
216  void set_BACA_block_size(int BACA) {
217  assert(BACA > 0);
218  BACA_block_size_ = BACA;
219  }
220 
225  void set_BF_sampling_parameter(double param) {
226  assert(param > 0);
227  BF_sampling_parameter_ = param;
228  }
229 
236  void set_geo(int geo) {
237  assert(geo == 0 || geo == 1 || geo == 2 || geo == 3);
238  geo_ = geo;
239  }
240 
246  void set_lr_leaf(int lr_leaf) {
247  assert(lr_leaf == 1 || lr_leaf == 2 || lr_leaf == 3 ||
248  lr_leaf == 4 || lr_leaf == 5);
249  lr_leaf_ = lr_leaf;
250  }
251 
256  void set_knn_hodlrbf(int k) {
257  assert(k >= 0);
258  knn_hodlrbf_ = k;
259  }
260 
265  void set_knn_lrbf(int k) {
266  assert(k >= 0);
267  knn_lrbf_ = k;
268  }
269 
274  void set_less_adapt(bool l) { less_adapt_ = l; }
275 
280  void set_verbose(bool verbose) { verbose_ = verbose; }
281 
287  real_t rel_tol() const { return rel_tol_; }
288 
294  real_t abs_tol() const { return abs_tol_; }
295 
301  int leaf_size() const { return leaf_size_; }
302 
309  int max_rank() const { return max_rank_; }
310 
314  int rank_guess() const { return rank_guess_; }
315 
320  double rank_rate() const { return rank_rate_; }
321 
329  return clustering_algo_;
330  }
331 
338  return compression_algo_;
339  }
340 
345  int butterfly_levels() const { return butterfly_levels_; }
346 
350  int BACA_block_size() const { return BACA_block_size_; }
351 
355  double BF_sampling_parameter() const { return BF_sampling_parameter_; }
356 
360  int geo() const { return geo_; }
361 
365  int lr_leaf() const { return lr_leaf_; }
366 
371  int knn_hodlrbf() const { return knn_hodlrbf_; }
372 
377  int knn_lrbf() const { return knn_lrbf_; }
378 
383  bool less_adapt() const { return less_adapt_; }
384 
391  bool verbose() const { return verbose_; }
392 
401  void set_from_command_line(int argc, const char* const* cargv);
402 
407  void describe_options() const;
408 
409  private:
410  real_t rel_tol_ = default_HODLR_rel_tol<real_t>();
411  real_t abs_tol_ = default_HODLR_abs_tol<real_t>();
412  int leaf_size_ = 256;
413  int rank_guess_ = 128;
414  double rank_rate_ = 2.;
415  int max_rank_ = 50000;
417  int butterfly_levels_ = 0;
419  int BACA_block_size_ = 16;
420  double BF_sampling_parameter_ = 1.2;
421  int geo_ = 2;
422  int lr_leaf_ = 5;
423  int knn_hodlrbf_ = 64;
424  int knn_lrbf_ = 128;
425  bool less_adapt_ = true;
426  bool verbose_ = true;
427  };
428 
429  } // end namespace HODLR
430 } // end namespace strumpack
431 
432 
433 #endif // HODLR_OPTIONS_HPP
strumpack::ClusteringAlgorithm::COBBLE
@ COBBLE
strumpack::HODLR::CompressionAlgorithm
CompressionAlgorithm
Definition: HODLROptions.hpp:84
strumpack::HODLR::HODLROptions::set_abs_tol
void set_abs_tol(real_t abs_tol)
Definition: HODLROptions.hpp:147
strumpack::HODLR::HODLROptions::set_knn_hodlrbf
void set_knn_hodlrbf(int k)
Definition: HODLROptions.hpp:256
strumpack::HODLR::HODLROptions::set_compression_algorithm
void set_compression_algorithm(CompressionAlgorithm a)
Definition: HODLROptions.hpp:200
strumpack::HODLR::HODLROptions::set_rank_rate
void set_rank_rate(double rank_rate)
Definition: HODLROptions.hpp:184
strumpack::HODLR::HODLROptions::set_rank_guess
void set_rank_guess(int rank_guess)
Definition: HODLROptions.hpp:175
strumpack
Definition: StrumpackOptions.hpp:42
strumpack::HODLR::HODLROptions::clustering_algorithm
ClusteringAlgorithm clustering_algorithm() const
Definition: HODLROptions.hpp:328
strumpack::HODLR::HODLROptions::describe_options
void describe_options() const
strumpack::HODLR::HODLROptions::knn_lrbf
int knn_lrbf() const
Definition: HODLROptions.hpp:377
strumpack::HODLR::get_compression_algorithm
CompressionAlgorithm get_compression_algorithm(const std::string &c)
strumpack::HODLR::CompressionAlgorithm::ELEMENT_EXTRACTION
@ ELEMENT_EXTRACTION
strumpack::HODLR::HODLROptions::BF_sampling_parameter
double BF_sampling_parameter() const
Definition: HODLROptions.hpp:355
Clustering.hpp
Main include file for the different clustering/ordering codes. These ordering codes can be used to de...
strumpack::HODLR::HODLROptions::set_lr_leaf
void set_lr_leaf(int lr_leaf)
Definition: HODLROptions.hpp:246
strumpack::CompressionType::HODLR
@ HODLR
strumpack::HODLR::HODLROptions::rel_tol
real_t rel_tol() const
Definition: HODLROptions.hpp:287
strumpack::HODLR::HODLROptions::abs_tol
real_t abs_tol() const
Definition: HODLROptions.hpp:294
strumpack::HODLR::HODLROptions::rank_rate
double rank_rate() const
Definition: HODLROptions.hpp:320
strumpack::HODLR::HODLROptions::rank_guess
int rank_guess() const
Definition: HODLROptions.hpp:314
strumpack::HODLR::HODLROptions::HODLROptions
HODLROptions()
Definition: HODLROptions.hpp:128
strumpack::HODLR::default_HODLR_rel_tol
real_t default_HODLR_rel_tol()
Definition: HODLROptions.hpp:48
strumpack::HODLR::HODLROptions
Class containing several options for the HODLR code and data-structures.
Definition: HODLROptions.hpp:115
strumpack::HODLR::HODLROptions::set_max_rank
void set_max_rank(int max_rank)
Definition: HODLROptions.hpp:167
strumpack::HODLR::CompressionAlgorithm::RANDOM_SAMPLING
@ RANDOM_SAMPLING
strumpack::HODLR::HODLROptions::set_less_adapt
void set_less_adapt(bool l)
Definition: HODLROptions.hpp:274
strumpack::HODLR::HODLROptions::butterfly_levels
int butterfly_levels() const
Definition: HODLROptions.hpp:345
strumpack::HODLR::HODLROptions::lr_leaf
int lr_leaf() const
Definition: HODLROptions.hpp:365
strumpack::HODLR::HODLROptions::set_BF_sampling_parameter
void set_BF_sampling_parameter(double param)
Definition: HODLROptions.hpp:225
strumpack::HODLR::HODLROptions::set_from_command_line
void set_from_command_line(int argc, const char *const *cargv)
strumpack::HODLR::HODLROptions::geo
int geo() const
Definition: HODLROptions.hpp:360
strumpack::HODLR::HODLROptions::less_adapt
bool less_adapt() const
Definition: HODLROptions.hpp:383
strumpack::HODLR::HODLROptions::set_clustering_algorithm
void set_clustering_algorithm(ClusteringAlgorithm a)
Definition: HODLROptions.hpp:193
strumpack::ClusteringAlgorithm
ClusteringAlgorithm
Definition: Clustering.hpp:51
strumpack::HODLR::HODLROptions::knn_hodlrbf
int knn_hodlrbf() const
Definition: HODLROptions.hpp:371
strumpack::HODLR::HODLROptions::set_knn_lrbf
void set_knn_lrbf(int k)
Definition: HODLROptions.hpp:265
strumpack::HODLR::HODLROptions::verbose
bool verbose() const
Definition: HODLROptions.hpp:391
strumpack::HODLR::HODLROptions::set_butterfly_levels
void set_butterfly_levels(int bfl)
Definition: HODLROptions.hpp:208
strumpack::HODLR::HODLROptions::set_rel_tol
void set_rel_tol(real_t rel_tol)
Definition: HODLROptions.hpp:137
strumpack::HODLR::HODLROptions::set_BACA_block_size
void set_BACA_block_size(int BACA)
Definition: HODLROptions.hpp:216
strumpack::HODLR::HODLROptions::set_leaf_size
void set_leaf_size(int leaf_size)
Definition: HODLROptions.hpp:159
strumpack::HODLR::get_name
std::string get_name(CompressionAlgorithm a)
strumpack::HODLR::default_HODLR_abs_tol
real_t default_HODLR_abs_tol()
Definition: HODLROptions.hpp:56
strumpack::HODLR::HODLROptions::set_geo
void set_geo(int geo)
Definition: HODLROptions.hpp:236
strumpack::HODLR::HODLROptions::BACA_block_size
int BACA_block_size() const
Definition: HODLROptions.hpp:350
strumpack::HODLR::HODLROptions< refine_t >::real_t
typename RealType< refine_t >::value_type real_t
Definition: HODLROptions.hpp:122
strumpack::HODLR::HODLROptions::set_verbose
void set_verbose(bool verbose)
Definition: HODLROptions.hpp:280
strumpack::HODLR::HODLROptions::max_rank
int max_rank() const
Definition: HODLROptions.hpp:309
strumpack::HODLR::HODLROptions::compression_algorithm
CompressionAlgorithm compression_algorithm() const
Definition: HODLROptions.hpp:337
strumpack::HODLR::HODLROptions::leaf_size
int leaf_size() const
Definition: HODLROptions.hpp:301