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);
176 void remove_from_gpu();
203 bool use_initial_guess=
false);
232 bool use_initial_guess=
false);
307 void draw(
const std::string& name)
const;
310 virtual void setup_tree() = 0;
311 virtual void setup_reordering() = 0;
313 int compute_reordering(
const int* p,
int base,
314 int nx,
int ny,
int nz,
315 int components,
int width) = 0;
316 virtual void separator_reordering() = 0;
319 virtual Reord_t* reordering() = 0;
320 virtual Tree_t* tree() = 0;
321 virtual const SpMat_t* matrix()
const = 0;
322 virtual const Reord_t* reordering()
const = 0;
323 virtual const Tree_t* tree()
const = 0;
325 virtual void perf_counters_start();
326 virtual void perf_counters_stop(
const std::string& s);
328 virtual void synchronize() {}
329 virtual void communicate_ordering() {}
331 void papi_initialize();
332 long long dense_factor_nonzeros()
const;
333 void print_solve_stats(TaskTimer& t)
const;
335 virtual void reduce_flop_counters()
const {}
336 void print_flop_breakdown_HSS()
const;
337 void print_flop_breakdown_HODLR()
const;
338 void flop_breakdown_reset()
const;
340 void print_wrong_sparsity_error();
348 std::new_handler old_handler_;
349 std::ostream* rank_out_ =
nullptr;
350 bool factored_ =
false;
351 bool reordered_ =
false;
354 #if defined(STRUMPACK_USE_PAPI)
355 float rtime_ = 0., ptime_ = 0.;
356 long_long _flpops = 0;
358 #if defined(STRUMPACK_COUNT_FLOPS)
359 long long int f0_ = 0, ftot_ = 0, fmin_ = 0, fmax_ = 0;
360 long long int b0_ = 0, btot_ = 0, bmin_ = 0, bmax_ = 0;
361 long long int m0_ = 0, mtot_ = 0, mmin_ = 0, mmax_ = 0;
362 long long int ptot_ = 0, pmin_ = 0, pmax_ = 0;
363 long long int dm0_ = 0, dmtot_ = 0, dmmin_ = 0, dmmax_ = 0;
364 long long int dptot_ = 0, dpmin_ = 0, dpmax_ = 0;
368 ReturnCode reorder_internal(
const int* p,
int base,
369 int nx,
int ny,
int nz,
370 int components,
int width);
373 ReturnCode solve_internal(
const scalar_t* b, scalar_t* x,
374 bool use_initial_guess=
false) = 0;
377 bool use_initial_guess=
false) = 0;
382 #endif // STRUMPACK_SPARSE_SOLVER_HPP