38#include "dense/BLASLAPACKWrapper.hpp"
132 enum class EquilibrationType :
char
133 {
NONE=
'N', ROW=
'R', COLUMN=
'C', BOTH=
'B' };
187 {
return real_t(1.e-6); }
195 {
return real_t(1.e-10); }
199 inline int default_gpu_streams() {
return 4; }
223 using real_t =
typename RealType<scalar_t>::value_type;
230 hss_opts_.set_verbose(
false);
231 blr_opts_.set_verbose(
false);
232 hodlr_opts_.set_verbose(
false);
246 SPOptions(
int argc,
const char*
const argv[]) : argc_(argc), argv_(argv) {
247 hss_opts_.set_verbose(
false);
248 blr_opts_.set_verbose(
false);
249 hodlr_opts_.set_verbose(
false);
285 assert(atol >=
real_t(0.));
369 assert(
nx>=1 &&
ny>=1 &&
nz>=1);
370 nx_ =
nx; ny_ =
ny; nz_ =
nz;
439 { assert(width>=1); separator_width_ = width; }
567 hss_opts_.set_rel_tol(rtol);
568 blr_opts_.set_rel_tol(rtol);
569 hodlr_opts_.set_rel_tol(rtol);
586 hss_opts_.set_abs_tol(atol);
587 blr_opts_.set_abs_tol(atol);
588 hodlr_opts_.set_abs_tol(atol);
603 hss_min_sep_size_ = s;
604 blr_min_sep_size_ = s;
605 hodlr_min_sep_size_ = s;
606 lossy_min_sep_size_ = s;
608 void set_hss_min_sep_size(
int s) {
610 hss_min_sep_size_ = s;
612 void set_hodlr_min_sep_size(
int s) {
614 hodlr_min_sep_size_ = s;
616 void set_blr_min_sep_size(
int s) {
618 blr_min_sep_size_ = s;
620 void set_lossy_min_sep_size(
int s) {
622 lossy_min_sep_size_ = s;
636 hss_min_front_size_ = s;
637 blr_min_front_size_ = s;
638 hodlr_min_front_size_ = s;
639 lossy_min_front_size_ = s;
641 void set_hss_min_front_size(
int s) {
643 hss_min_front_size_ = s;
645 void set_hodlr_min_front_size(
int s) {
647 hodlr_min_front_size_ = s;
649 void set_blr_min_front_size(
int s) {
651 blr_min_front_size_ = s;
653 void set_lossy_min_front_size(
int s) {
655 lossy_min_front_size_ = s;
664 hss_opts_.set_leaf_size(s);
665 blr_opts_.set_leaf_size(s);
666 hodlr_opts_.set_leaf_size(s);
685 { assert(l >= 0); sep_order_level_ = l; }
687#ifndef DOXYGEN_SHOULD_SKIP_THIS
688 void enable_indirect_sampling() { indirect_sampling_ =
true; }
689 void disable_indirect_sampling() { indirect_sampling_ =
false; }
729 hss_opts_.set_pivot_threshold(thresh);
730 blr_opts_.set_pivot_threshold(thresh);
731 hodlr_opts_.set_pivot_threshold(thresh);
801 lossy_precision_ = p;
832 int maxit()
const {
return maxit_; }
888 int nx()
const {
return nx_; }
894 int ny()
const {
return ny_; }
900 int nz()
const {
return nz_; }
969 return hss_opts_.rel_tol();
971 return blr_opts_.rel_tol();
973 return hodlr_opts_.rel_tol();
975 if (l==0)
return hodlr_opts_.rel_tol();
976 else return blr_opts_.rel_tol();
978 if (l==0)
return hodlr_opts_.rel_tol();
979 else return blr_opts_.rel_tol();
998 return hss_opts_.abs_tol();
1000 return blr_opts_.abs_tol();
1002 return hodlr_opts_.abs_tol();
1004 if (l==0)
return hodlr_opts_.abs_tol();
1005 else return blr_opts_.abs_tol();
1007 if (l==0)
return hodlr_opts_.abs_tol();
1008 else return blr_opts_.abs_tol();
1026 return hss_min_sep_size_;
1028 return blr_min_sep_size_;
1030 return hodlr_min_sep_size_;
1032 if (l==0)
return hodlr_min_sep_size_;
1033 else return blr_min_sep_size_;
1035 if (l==0)
return hodlr_min_sep_size_;
1036 else if (l==1)
return blr_min_sep_size_;
1037 else return lossy_min_sep_size_;
1040 return lossy_min_sep_size_;
1043 return std::numeric_limits<int>::max();
1046 int hss_min_sep_size()
const {
1047 return hss_min_sep_size_;
1049 int hodlr_min_sep_size()
const {
1050 return hodlr_min_sep_size_;
1052 int blr_min_sep_size()
const {
1053 return blr_min_sep_size_;
1055 int lossy_min_sep_size()
const {
1056 return lossy_min_sep_size_;
1069 return hss_min_front_size_;
1071 return blr_min_front_size_;
1073 return hodlr_min_front_size_;
1075 if (l==0)
return hodlr_min_front_size_;
1076 else return blr_min_front_size_;
1078 if (l==0)
return hodlr_min_front_size_;
1079 else if (l==1)
return blr_min_front_size_;
1080 else return lossy_min_front_size_;
1083 return lossy_min_front_size_;
1086 return std::numeric_limits<int>::max();
1089 int hss_min_front_size()
const {
1090 return hss_min_front_size_;
1092 int hodlr_min_front_size()
const {
1093 return hodlr_min_front_size_;
1095 int blr_min_front_size()
const {
1096 return blr_min_front_size_;
1098 int lossy_min_front_size()
const {
1099 return lossy_min_front_size_;
1113 return hss_opts_.leaf_size();
1115 return blr_opts_.leaf_size();
1117 return hodlr_opts_.leaf_size();
1119 if (l==0)
return hodlr_opts_.leaf_size();
1120 else return blr_opts_.leaf_size();
1122 if (l==0)
return hodlr_opts_.leaf_size();
1123 else if (l==1)
return blr_opts_.leaf_size();
1130 return std::numeric_limits<int>::max();
1204 -1 : lossy_precision_;
1212 -1 : lossy_accuracy_;
1302 bool verbose_ =
true;
1305 real_t rel_tol_ = default_rel_tol<real_t>();
1306 real_t abs_tol_ = default_abs_tol<real_t>();
1308 int gmres_restart_ = 30;
1312 int nd_planar_levels_ = 0;
1317 int components_ = 1;
1318 int separator_width_ = 1;
1319 bool use_METIS_NodeNDP_ =
false;
1320 bool use_MUMPS_SYMQAMD_ =
false;
1321 bool use_agg_amalg_ =
false;
1323 bool log_assembly_tree_ =
false;
1324 bool replace_tiny_pivots_ =
false;
1325 real_t pivot_ = std::sqrt(blas::lamch<real_t>(
'E'));
1326 bool write_root_front_ =
false;
1327 bool print_comp_front_stats_ =
false;
1329 bool use_openmp_tree_ =
true;
1330 bool use_symmetric_ =
false;
1331 bool use_positive_definite_ =
false;
1334#if defined(STRUMPACK_USE_GPU)
1335 bool use_gpu_ =
true;
1337 bool use_gpu_ =
false;
1339 bool use_gpu_aware_mpi_ = std::getenv(
"STRUMPACK_GPU_AWARE_MPI");
1340 int gpu_streams_ = default_gpu_streams();
1346 int hss_min_front_size_ = 100000;
1347 int hss_min_sep_size_ = 1000;
1348 int sep_order_level_ = 1;
1349 bool indirect_sampling_ =
false;
1354 int blr_min_front_size_ = 100000;
1355 int blr_min_sep_size_ = 512;
1359 int hodlr_min_front_size_ = 100000;
1360 int hodlr_min_sep_size_ = 5000;
1363 int lossy_min_front_size_ = 100000;
1364 int lossy_min_sep_size_ = 8;
1365 int lossy_precision_ = 16;
1366 double lossy_accuracy_ = 1e-3;
1371 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.
Definition BLRMatrix.hpp:50
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:217
void disable_assembly_tree_log()
Definition StrumpackOptions.hpp:541
void enable_METIS_NodeND()
Definition StrumpackOptions.hpp:471
double lossy_accuracy() const
Definition StrumpackOptions.hpp:1210
int nd_planar_levels() const
Definition StrumpackOptions.hpp:882
void set_from_command_line()
Definition StrumpackOptions.hpp:1279
void set_gpu_streams(int s)
Definition StrumpackOptions.hpp:776
int compression_min_front_size(int l=0) const
Definition StrumpackOptions.hpp:1066
void set_matching(MatchingJob job)
Definition StrumpackOptions.hpp:530
void set_verbose(bool verbose)
Definition StrumpackOptions.hpp:259
int gmres_restart() const
Definition StrumpackOptions.hpp:856
void disable_agg_amalg()
Definition StrumpackOptions.hpp:519
int compression_min_sep_size(int l=0) const
Definition StrumpackOptions.hpp:1023
void set_reordering_method(ReorderingStrategy m)
Definition StrumpackOptions.hpp:329
real_t pivot_threshold() const
Definition StrumpackOptions.hpp:1161
void set_maxit(int maxit)
Definition StrumpackOptions.hpp:265
void enable_symmetric()
Definition StrumpackOptions.hpp:764
HSS::HSSOptions< scalar_t > & HSS_options()
Definition StrumpackOptions.hpp:1236
void set_nd_planar_levels(int nd_planar_levels)
Definition StrumpackOptions.hpp:346
int gpu_streams() const
Definition StrumpackOptions.hpp:1192
void disable_openmp_tree()
Definition StrumpackOptions.hpp:790
void set_compression_rel_tol(real_t rtol)
Definition StrumpackOptions.hpp:566
void set_rel_tol(real_t rtol)
Definition StrumpackOptions.hpp:273
void set_compression_leaf_size(int s)
Definition StrumpackOptions.hpp:663
void disable_METIS_NodeNDP()
Definition StrumpackOptions.hpp:461
void set_compression_min_sep_size(int s)
Definition StrumpackOptions.hpp:601
bool verbose() const
Definition StrumpackOptions.hpp:826
SPOptions()
Definition StrumpackOptions.hpp:229
void disable_gpu()
Definition StrumpackOptions.hpp:750
void enable_positive_definite()
Definition StrumpackOptions.hpp:770
bool use_METIS_NodeND() const
Definition StrumpackOptions.hpp:925
bool write_root_front() const
Definition StrumpackOptions.hpp:1166
int separator_width() const
Definition StrumpackOptions.hpp:913
typename RealType< scalar_t >::value_type real_t
Definition StrumpackOptions.hpp:223
void set_nd_param(int nd_param)
Definition StrumpackOptions.hpp:337
bool use_agg_amalg() const
Definition StrumpackOptions.hpp:938
void set_lossy_precision(int p)
Definition StrumpackOptions.hpp:800
void describe_options() const
CompressionType compression() const
Definition StrumpackOptions.hpp:955
int nx() const
Definition StrumpackOptions.hpp:888
void set_print_compressed_front_stats(bool b)
Definition StrumpackOptions.hpp:815
void set_ny(int ny)
Definition StrumpackOptions.hpp:394
BLR::BLROptions< scalar_t > & BLR_options()
Definition StrumpackOptions.hpp:1248
void set_GramSchmidt_type(GramSchmidtType t)
Definition StrumpackOptions.hpp:315
int lossy_precision() const
Definition StrumpackOptions.hpp:1202
void set_from_command_line(int argc, const char *const *cargv)
void set_pivot_threshold(real_t thresh)
Definition StrumpackOptions.hpp:727
void set_separator_width(int width)
Definition StrumpackOptions.hpp:438
void set_abs_tol(real_t atol)
Definition StrumpackOptions.hpp:284
void set_write_root_front(bool b)
Definition StrumpackOptions.hpp:739
void disable_replace_tiny_pivots()
Definition StrumpackOptions.hpp:716
void enable_openmp_tree()
Definition StrumpackOptions.hpp:783
int ny() const
Definition StrumpackOptions.hpp:894
bool use_gpu() const
Definition StrumpackOptions.hpp:1171
void enable_gpu()
Definition StrumpackOptions.hpp:745
void set_separator_ordering_level(int l)
Definition StrumpackOptions.hpp:684
int nd_param() const
Definition StrumpackOptions.hpp:874
bool replace_tiny_pivots() const
Definition StrumpackOptions.hpp:1151
const BLR::BLROptions< scalar_t > & BLR_options() const
Definition StrumpackOptions.hpp:1242
MatchingJob matching() const
Definition StrumpackOptions.hpp:944
void enable_replace_tiny_pivots()
Definition StrumpackOptions.hpp:709
void set_nz(int nz)
Definition StrumpackOptions.hpp:406
real_t compression_rel_tol(int l=0) const
Definition StrumpackOptions.hpp:966
ReorderingStrategy reordering_method() const
Definition StrumpackOptions.hpp:868
bool indirect_sampling() const
Definition StrumpackOptions.hpp:1144
int maxit() const
Definition StrumpackOptions.hpp:832
void set_lossy_accuracy(double a)
Definition StrumpackOptions.hpp:809
bool log_assembly_tree() const
Definition StrumpackOptions.hpp:950
void enable_agg_amalg()
Definition StrumpackOptions.hpp:509
int compression_leaf_size(int l=0) const
Definition StrumpackOptions.hpp:1110
void disable_METIS_NodeND()
Definition StrumpackOptions.hpp:480
void set_gmres_restart(int m)
Definition StrumpackOptions.hpp:308
const HODLR::HODLROptions< scalar_t > & HODLR_options() const
Definition StrumpackOptions.hpp:1254
bool use_positive_definite() const
Definition StrumpackOptions.hpp:1181
bool use_METIS_NodeNDP() const
Definition StrumpackOptions.hpp:919
bool use_openmp_tree() const
Definition StrumpackOptions.hpp:1187
void disable_MUMPS_SYMQAMD()
Definition StrumpackOptions.hpp:499
int components() const
Definition StrumpackOptions.hpp:907
void set_compression_abs_tol(real_t atol)
Definition StrumpackOptions.hpp:585
KrylovSolver Krylov_solver() const
Definition StrumpackOptions.hpp:850
void set_dimensions(int nx, int ny=1, int nz=1)
Definition StrumpackOptions.hpp:368
bool use_symmetric() const
Definition StrumpackOptions.hpp:1176
int nz() const
Definition StrumpackOptions.hpp:900
void set_nx(int nx)
Definition StrumpackOptions.hpp:382
void set_compression(CompressionType c)
Definition StrumpackOptions.hpp:551
bool print_compressed_front_stats() const
Definition StrumpackOptions.hpp:1219
int separator_ordering_level() const
Definition StrumpackOptions.hpp:1139
real_t abs_tol() const
Definition StrumpackOptions.hpp:844
real_t rel_tol() const
Definition StrumpackOptions.hpp:838
bool use_gpu_aware_mpi() const
Definition StrumpackOptions.hpp:1197
void set_Krylov_solver(KrylovSolver s)
Definition StrumpackOptions.hpp:301
void enable_METIS_NodeNDP()
Definition StrumpackOptions.hpp:450
const HSS::HSSOptions< scalar_t > & HSS_options() const
Definition StrumpackOptions.hpp:1230
GramSchmidtType GramSchmidt_type() const
Definition StrumpackOptions.hpp:862
void set_compression_min_front_size(int s)
Definition StrumpackOptions.hpp:634
void enable_assembly_tree_log()
Definition StrumpackOptions.hpp:535
void enable_MUMPS_SYMQAMD()
Definition StrumpackOptions.hpp:489
real_t compression_abs_tol(int l=0) const
Definition StrumpackOptions.hpp:995
SPOptions(int argc, const char *const argv[])
Definition StrumpackOptions.hpp:246
bool use_MUMPS_SYMQAMD() const
Definition StrumpackOptions.hpp:931
ProportionalMapping proportional_mapping() const
Definition StrumpackOptions.hpp:1224
HODLR::HODLROptions< scalar_t > & HODLR_options()
Definition StrumpackOptions.hpp:1260
void set_proportional_mapping(ProportionalMapping pmap)
Definition StrumpackOptions.hpp:820
void set_components(int components)
Definition StrumpackOptions.hpp:418
Definition StrumpackOptions.hpp:44
GramSchmidtType
Definition StrumpackOptions.hpp:157
real_t default_rel_tol()
Definition StrumpackOptions.hpp:186
std::string get_description(MatchingJob job)
bool is_parallel(ReorderingStrategy method)
ProportionalMapping
Definition StrumpackOptions.hpp:51
MatchingJob
Definition StrumpackOptions.hpp:120
@ MAX_SMALLEST_DIAGONAL_2
@ MAX_DIAGONAL_PRODUCT_SCALING
CompressionType
Definition StrumpackOptions.hpp:92
ReorderingStrategy
Definition StrumpackOptions.hpp:61
KrylovSolver
Definition StrumpackOptions.hpp:166
std::string get_name(ReorderingStrategy method)
MatchingJob get_matching(int job)
real_t default_abs_tol()
Definition StrumpackOptions.hpp:194