33 #ifndef STRUMPACK_SPARSE_SOLVER_BASE_HPP
34 #define STRUMPACK_SPARSE_SOLVER_BASE_HPP
41 #include "StrumpackConfig.hpp"
76 template<
typename scalar_t,
typename integer_t=
int>
100 bool verbose=
true,
bool root=
true);
147 int components=1,
int width=1);
200 bool use_initial_guess=
false);
229 bool use_initial_guess=
false);
304 void draw(
const std::string& name)
const;
307 virtual void setup_tree() = 0;
308 virtual void setup_reordering() = 0;
310 int compute_reordering(
const int* p,
int base,
311 int nx,
int ny,
int nz,
312 int components,
int width) = 0;
313 virtual void separator_reordering() = 0;
316 virtual Reord_t* reordering() = 0;
317 virtual Tree_t* tree() = 0;
318 virtual const SpMat_t* matrix()
const = 0;
319 virtual const Reord_t* reordering()
const = 0;
320 virtual const Tree_t* tree()
const = 0;
322 virtual void perf_counters_start();
323 virtual void perf_counters_stop(
const std::string& s);
325 virtual void synchronize() {}
326 virtual void communicate_ordering() {}
328 void papi_initialize();
329 long long dense_factor_nonzeros()
const;
330 void print_solve_stats(TaskTimer& t)
const;
332 virtual void reduce_flop_counters()
const {}
333 void print_flop_breakdown_HSS()
const;
334 void print_flop_breakdown_HODLR()
const;
335 void flop_breakdown_reset()
const;
337 void print_wrong_sparsity_error();
345 std::new_handler old_handler_;
346 std::ostream* rank_out_ =
nullptr;
347 bool factored_ =
false;
348 bool reordered_ =
false;
351 #if defined(STRUMPACK_USE_PAPI)
352 float rtime_ = 0., ptime_ = 0.;
353 long_long _flpops = 0;
355 #if defined(STRUMPACK_COUNT_FLOPS)
356 long long int f0_ = 0, ftot_ = 0, fmin_ = 0, fmax_ = 0;
357 long long int b0_ = 0, btot_ = 0, bmin_ = 0, bmax_ = 0;
358 long long int m0_ = 0, mtot_ = 0, mmin_ = 0, mmax_ = 0;
359 long long int ptot_ = 0, pmin_ = 0, pmax_ = 0;
360 long long int dm0_ = 0, dmtot_ = 0, dmmin_ = 0, dmmax_ = 0;
361 long long int dptot_ = 0, dpmin_ = 0, dpmax_ = 0;
365 ReturnCode reorder_internal(
const int* p,
int base,
366 int nx,
int ny,
int nz,
367 int components,
int width);
370 ReturnCode solve_internal(
const scalar_t* b, scalar_t* x,
371 bool use_initial_guess=
false) = 0;
374 bool use_initial_guess=
false) = 0;
379 #endif // STRUMPACK_SPARSE_SOLVER_HPP