37#include "dense/BLASLAPACKWrapper.hpp"
131 enum class EquilibrationType :
char
132 { NONE=
'N', ROW=
'R', COLUMN=
'C', BOTH=
'B' };
186 {
return real_t(1.e-6); }
194 {
return real_t(1.e-10); }
198 inline int default_gpu_streams() {
return 4; }
222 using real_t =
typename RealType<scalar_t>::value_type;
241 SPOptions(
int argc,
const char*
const argv[]) : argc_(argc), argv_(argv) {
242 hss_opts_.set_verbose(
false);
243 blr_opts_.set_verbose(
false);
244 hodlr_opts_.set_verbose(
false);
280 assert(atol >=
real_t(0.));
364 assert(
nx>=1 &&
ny>=1 &&
nz>=1);
365 nx_ =
nx; ny_ =
ny; nz_ =
nz;
434 { assert(width>=1); separator_width_ = width; }
562 hss_opts_.set_rel_tol(rtol);
563 blr_opts_.set_rel_tol(rtol);
564 hodlr_opts_.set_rel_tol(rtol);
581 hss_opts_.set_abs_tol(atol);
582 blr_opts_.set_abs_tol(atol);
583 hodlr_opts_.set_abs_tol(atol);
598 hss_min_sep_size_ = s;
599 blr_min_sep_size_ = s;
600 hodlr_min_sep_size_ = s;
601 lossy_min_sep_size_ = s;
603 void set_hss_min_sep_size(
int s) {
605 hss_min_sep_size_ = s;
607 void set_hodlr_min_sep_size(
int s) {
609 hodlr_min_sep_size_ = s;
611 void set_blr_min_sep_size(
int s) {
613 blr_min_sep_size_ = s;
615 void set_lossy_min_sep_size(
int s) {
617 lossy_min_sep_size_ = s;
631 hss_min_front_size_ = s;
632 blr_min_front_size_ = s;
633 hodlr_min_front_size_ = s;
634 lossy_min_front_size_ = s;
636 void set_hss_min_front_size(
int s) {
638 hss_min_front_size_ = s;
640 void set_hodlr_min_front_size(
int s) {
642 hodlr_min_front_size_ = s;
644 void set_blr_min_front_size(
int s) {
646 blr_min_front_size_ = s;
648 void set_lossy_min_front_size(
int s) {
650 lossy_min_front_size_ = s;
659 hss_opts_.set_leaf_size(s);
660 blr_opts_.set_leaf_size(s);
661 hodlr_opts_.set_leaf_size(s);
680 { assert(l >= 0); sep_order_level_ = l; }
682#ifndef DOXYGEN_SHOULD_SKIP_THIS
683 void enable_indirect_sampling() { indirect_sampling_ =
true; }
684 void disable_indirect_sampling() { indirect_sampling_ =
false; }
787 int maxit()
const {
return maxit_; }
843 int nx()
const {
return nx_; }
849 int ny()
const {
return ny_; }
855 int nz()
const {
return nz_; }
924 return hss_opts_.rel_tol();
926 return blr_opts_.rel_tol();
928 return hodlr_opts_.rel_tol();
930 if (l==0)
return hodlr_opts_.rel_tol();
931 else return blr_opts_.rel_tol();
933 if (l==0)
return hodlr_opts_.rel_tol();
934 else return blr_opts_.rel_tol();
953 return hss_opts_.abs_tol();
955 return blr_opts_.abs_tol();
957 return hodlr_opts_.abs_tol();
959 if (l==0)
return hodlr_opts_.abs_tol();
960 else return blr_opts_.abs_tol();
962 if (l==0)
return hodlr_opts_.abs_tol();
963 else return blr_opts_.abs_tol();
981 return hss_min_sep_size_;
983 return blr_min_sep_size_;
985 return hodlr_min_sep_size_;
987 if (l==0)
return hodlr_min_sep_size_;
988 else return blr_min_sep_size_;
990 if (l==0)
return hodlr_min_sep_size_;
991 else if (l==1)
return blr_min_sep_size_;
992 else return lossy_min_sep_size_;
995 return lossy_min_sep_size_;
998 return std::numeric_limits<int>::max();
1001 int hss_min_sep_size()
const {
1002 return hss_min_sep_size_;
1004 int hodlr_min_sep_size()
const {
1005 return hodlr_min_sep_size_;
1007 int blr_min_sep_size()
const {
1008 return blr_min_sep_size_;
1010 int lossy_min_sep_size()
const {
1011 return lossy_min_sep_size_;
1024 return hss_min_front_size_;
1026 return blr_min_front_size_;
1028 return hodlr_min_front_size_;
1030 if (l==0)
return hodlr_min_front_size_;
1031 else return blr_min_front_size_;
1033 if (l==0)
return hodlr_min_front_size_;
1034 else if (l==1)
return blr_min_front_size_;
1035 else return lossy_min_front_size_;
1038 return lossy_min_front_size_;
1041 return std::numeric_limits<int>::max();
1044 int hss_min_front_size()
const {
1045 return hss_min_front_size_;
1047 int hodlr_min_front_size()
const {
1048 return hodlr_min_front_size_;
1050 int blr_min_front_size()
const {
1051 return blr_min_front_size_;
1053 int lossy_min_front_size()
const {
1054 return lossy_min_front_size_;
1068 return hss_opts_.leaf_size();
1070 return blr_opts_.leaf_size();
1072 return hodlr_opts_.leaf_size();
1074 if (l==0)
return hodlr_opts_.leaf_size();
1075 else return blr_opts_.leaf_size();
1077 if (l==0)
return hodlr_opts_.leaf_size();
1078 else if (l==1)
return blr_opts_.leaf_size();
1085 return std::numeric_limits<int>::max();
1144 -1 : lossy_precision_;
1234 bool verbose_ =
true;
1237 real_t rel_tol_ = default_rel_tol<real_t>();
1238 real_t abs_tol_ = default_abs_tol<real_t>();
1240 int gmres_restart_ = 30;
1244 int nd_planar_levels_ = 0;
1249 int components_ = 1;
1250 int separator_width_ = 1;
1251 bool use_METIS_NodeNDP_ =
false;
1252 bool use_MUMPS_SYMQAMD_ =
false;
1253 bool use_agg_amalg_ =
false;
1255 bool log_assembly_tree_ =
false;
1256 bool replace_tiny_pivots_ =
false;
1257 real_t pivot_ = std::sqrt(blas::lamch<real_t>(
'E'));
1258 bool write_root_front_ =
false;
1259 bool print_comp_front_stats_ =
false;
1261 bool use_openmp_tree_ =
true;
1264#if defined(STRUMPACK_USE_CUDA) || defined(STRUMPACK_USE_HIP) || defined(STRUMPACK_USE_SYCL)
1265 bool use_gpu_ =
true;
1267 bool use_gpu_ =
false;
1269 int gpu_streams_ = default_gpu_streams();
1275 int hss_min_front_size_ = 100000;
1276 int hss_min_sep_size_ = 1000;
1277 int sep_order_level_ = 1;
1278 bool indirect_sampling_ =
false;
1283 int blr_min_front_size_ = 100000;
1284 int blr_min_sep_size_ = 512;
1288 int hodlr_min_front_size_ = 100000;
1289 int hodlr_min_sep_size_ = 5000;
1292 int lossy_min_front_size_ = 100000;
1293 int lossy_min_sep_size_ = 8;
1294 int lossy_precision_ = 16;
1299 const char*
const* argv_ =
nullptr;
Contains class holding BLROptions.
Contains the class holding HODLR matrix options.
Contains the HSSOptions class as well as general routines for HSS options.
Class containing several options for the BLR code and data-structures.
Definition: BLROptions.hpp:82
Class containing several options for the HODLR code and data-structures.
Definition: HODLROptions.hpp:117
Class containing several options for the HSS code and data-structures.
Definition: HSSOptions.hpp:152
Options for the sparse solver.
Definition: StrumpackOptions.hpp:216
void disable_assembly_tree_log()
Definition: StrumpackOptions.hpp:536
void enable_METIS_NodeND()
Definition: StrumpackOptions.hpp:466
int nd_planar_levels() const
Definition: StrumpackOptions.hpp:837
void set_from_command_line()
Definition: StrumpackOptions.hpp:1211
void set_gpu_streams(int s)
Definition: StrumpackOptions.hpp:745
int compression_min_front_size(int l=0) const
Definition: StrumpackOptions.hpp:1021
void set_matching(MatchingJob job)
Definition: StrumpackOptions.hpp:525
void set_verbose(bool verbose)
Definition: StrumpackOptions.hpp:254
int gmres_restart() const
Definition: StrumpackOptions.hpp:811
void disable_agg_amalg()
Definition: StrumpackOptions.hpp:514
int compression_min_sep_size(int l=0) const
Definition: StrumpackOptions.hpp:978
void set_reordering_method(ReorderingStrategy m)
Definition: StrumpackOptions.hpp:324
real_t pivot_threshold() const
Definition: StrumpackOptions.hpp:1116
void set_maxit(int maxit)
Definition: StrumpackOptions.hpp:260
HSS::HSSOptions< scalar_t > & HSS_options()
Definition: StrumpackOptions.hpp:1168
void set_nd_planar_levels(int nd_planar_levels)
Definition: StrumpackOptions.hpp:341
int gpu_streams() const
Definition: StrumpackOptions.hpp:1137
void disable_openmp_tree()
Definition: StrumpackOptions.hpp:759
void set_compression_rel_tol(real_t rtol)
Definition: StrumpackOptions.hpp:561
void set_rel_tol(real_t rtol)
Definition: StrumpackOptions.hpp:268
void set_compression_leaf_size(int s)
Definition: StrumpackOptions.hpp:658
void disable_METIS_NodeNDP()
Definition: StrumpackOptions.hpp:456
void set_compression_min_sep_size(int s)
Definition: StrumpackOptions.hpp:596
bool verbose() const
Definition: StrumpackOptions.hpp:781
SPOptions()
Definition: StrumpackOptions.hpp:228
void disable_gpu()
Definition: StrumpackOptions.hpp:740
bool use_METIS_NodeND() const
Definition: StrumpackOptions.hpp:880
bool write_root_front() const
Definition: StrumpackOptions.hpp:1121
int separator_width() const
Definition: StrumpackOptions.hpp:868
typename RealType< scalar_t >::value_type real_t
Definition: StrumpackOptions.hpp:222
void set_nd_param(int nd_param)
Definition: StrumpackOptions.hpp:332
bool use_agg_amalg() const
Definition: StrumpackOptions.hpp:893
void set_lossy_precision(int p)
Definition: StrumpackOptions.hpp:764
void describe_options() const
CompressionType compression() const
Definition: StrumpackOptions.hpp:910
int nx() const
Definition: StrumpackOptions.hpp:843
void set_print_compressed_front_stats(bool b)
Definition: StrumpackOptions.hpp:770
void set_ny(int ny)
Definition: StrumpackOptions.hpp:389
BLR::BLROptions< scalar_t > & BLR_options()
Definition: StrumpackOptions.hpp:1180
void set_GramSchmidt_type(GramSchmidtType t)
Definition: StrumpackOptions.hpp:310
int lossy_precision() const
Definition: StrumpackOptions.hpp:1142
void set_from_command_line(int argc, const char *const *cargv)
void set_pivot_threshold(real_t thresh)
Definition: StrumpackOptions.hpp:722
void set_separator_width(int width)
Definition: StrumpackOptions.hpp:433
void set_abs_tol(real_t atol)
Definition: StrumpackOptions.hpp:279
void set_write_root_front(bool b)
Definition: StrumpackOptions.hpp:729
void disable_replace_tiny_pivots()
Definition: StrumpackOptions.hpp:711
void enable_openmp_tree()
Definition: StrumpackOptions.hpp:752
int ny() const
Definition: StrumpackOptions.hpp:849
bool use_gpu() const
Definition: StrumpackOptions.hpp:1126
void enable_gpu()
Definition: StrumpackOptions.hpp:735
void set_separator_ordering_level(int l)
Definition: StrumpackOptions.hpp:679
int nd_param() const
Definition: StrumpackOptions.hpp:829
bool replace_tiny_pivots() const
Definition: StrumpackOptions.hpp:1106
const BLR::BLROptions< scalar_t > & BLR_options() const
Definition: StrumpackOptions.hpp:1174
MatchingJob matching() const
Definition: StrumpackOptions.hpp:899
void enable_replace_tiny_pivots()
Definition: StrumpackOptions.hpp:704
void set_nz(int nz)
Definition: StrumpackOptions.hpp:401
real_t compression_rel_tol(int l=0) const
Definition: StrumpackOptions.hpp:921
ReorderingStrategy reordering_method() const
Definition: StrumpackOptions.hpp:823
bool indirect_sampling() const
Definition: StrumpackOptions.hpp:1099
int maxit() const
Definition: StrumpackOptions.hpp:787
bool log_assembly_tree() const
Definition: StrumpackOptions.hpp:905
void enable_agg_amalg()
Definition: StrumpackOptions.hpp:504
int compression_leaf_size(int l=0) const
Definition: StrumpackOptions.hpp:1065
void disable_METIS_NodeND()
Definition: StrumpackOptions.hpp:475
void set_gmres_restart(int m)
Definition: StrumpackOptions.hpp:303
const HODLR::HODLROptions< scalar_t > & HODLR_options() const
Definition: StrumpackOptions.hpp:1186
bool use_METIS_NodeNDP() const
Definition: StrumpackOptions.hpp:874
bool use_openmp_tree() const
Definition: StrumpackOptions.hpp:1132
void disable_MUMPS_SYMQAMD()
Definition: StrumpackOptions.hpp:494
int components() const
Definition: StrumpackOptions.hpp:862
void set_compression_abs_tol(real_t atol)
Definition: StrumpackOptions.hpp:580
KrylovSolver Krylov_solver() const
Definition: StrumpackOptions.hpp:805
void set_dimensions(int nx, int ny=1, int nz=1)
Definition: StrumpackOptions.hpp:363
int nz() const
Definition: StrumpackOptions.hpp:855
void set_nx(int nx)
Definition: StrumpackOptions.hpp:377
void set_compression(CompressionType c)
Definition: StrumpackOptions.hpp:546
bool print_compressed_front_stats() const
Definition: StrumpackOptions.hpp:1151
int separator_ordering_level() const
Definition: StrumpackOptions.hpp:1094
real_t abs_tol() const
Definition: StrumpackOptions.hpp:799
real_t rel_tol() const
Definition: StrumpackOptions.hpp:793
void set_Krylov_solver(KrylovSolver s)
Definition: StrumpackOptions.hpp:296
void enable_METIS_NodeNDP()
Definition: StrumpackOptions.hpp:445
const HSS::HSSOptions< scalar_t > & HSS_options() const
Definition: StrumpackOptions.hpp:1162
GramSchmidtType GramSchmidt_type() const
Definition: StrumpackOptions.hpp:817
void set_compression_min_front_size(int s)
Definition: StrumpackOptions.hpp:629
void enable_assembly_tree_log()
Definition: StrumpackOptions.hpp:530
void enable_MUMPS_SYMQAMD()
Definition: StrumpackOptions.hpp:484
real_t compression_abs_tol(int l=0) const
Definition: StrumpackOptions.hpp:950
SPOptions(int argc, const char *const argv[])
Definition: StrumpackOptions.hpp:241
bool use_MUMPS_SYMQAMD() const
Definition: StrumpackOptions.hpp:886
ProportionalMapping proportional_mapping() const
Definition: StrumpackOptions.hpp:1156
HODLR::HODLROptions< scalar_t > & HODLR_options()
Definition: StrumpackOptions.hpp:1192
void set_proportional_mapping(ProportionalMapping pmap)
Definition: StrumpackOptions.hpp:775
void set_components(int components)
Definition: StrumpackOptions.hpp:413
Definition: StrumpackOptions.hpp:43
GramSchmidtType
Definition: StrumpackOptions.hpp:156
real_t default_rel_tol()
Definition: StrumpackOptions.hpp:185
std::string get_description(MatchingJob job)
bool is_parallel(ReorderingStrategy method)
ProportionalMapping
Definition: StrumpackOptions.hpp:50
MatchingJob
Definition: StrumpackOptions.hpp:119
@ MAX_SMALLEST_DIAGONAL_2
@ MAX_DIAGONAL_PRODUCT_SCALING
CompressionType
Definition: StrumpackOptions.hpp:91
ReorderingStrategy
Definition: StrumpackOptions.hpp:60
KrylovSolver
Definition: StrumpackOptions.hpp:165
std::string get_name(ReorderingStrategy method)
MatchingJob get_matching(int job)
real_t default_abs_tol()
Definition: StrumpackOptions.hpp:193