monolish  0.14.2
MONOlithic LIner equation Solvers for Highly-parallel architecture
monolish_solver.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <vector>
3 
5 #include <functional>
6 
10 namespace monolish::solver {
11 
17 enum class initvec_scheme {
18  RANDOM,
19  USER,
20 };
21 
22 template <typename MATRIX, typename Float> class precondition;
23 
27 template <typename MATRIX, typename Float> class solver {
28 private:
29 protected:
30  int lib = 0;
31  double tol = 1.0e-8;
32  size_t miniter = 0;
33  size_t maxiter = SIZE_MAX;
34  size_t resid_method = 0;
35  bool print_rhistory = false;
36  std::string rhistory_file;
37  std::ostream *rhistory_stream;
39 
40  Float get_residual(vector<Float> &x);
41 
43 
44 public:
49  solver(){};
50 
55  ~solver() {
56  if (rhistory_stream != &std::cout && rhistory_file.empty() != true) {
57  delete rhistory_stream;
58  }
59  }
60 
65  template <class PRECOND> void set_create_precond(PRECOND &p);
66 
71  template <class PRECOND> void set_apply_precond(PRECOND &p);
72 
77  void set_lib(int l) { lib = l; }
78 
83  void set_tol(double t) { tol = t; }
84 
89  void set_maxiter(size_t max) { maxiter = max; }
90 
95  void set_miniter(size_t min) { miniter = min; }
96 
101  void set_residual_method(size_t r) { resid_method = r; }
102 
107  void set_print_rhistory(bool flag) {
108  print_rhistory = flag;
109  rhistory_stream = &std::cout;
110  }
111 
116  void set_rhistory_filename(std::string file) {
117  rhistory_file = file;
118 
119  // file open
120  rhistory_stream = new std::ofstream(rhistory_file);
121  if (rhistory_stream->fail()) {
122  throw std::runtime_error("error bad filename");
123  }
124  }
125 
132 
137  [[nodiscard]] int get_lib() const { return lib; }
138 
143  [[nodiscard]] double get_tol() const { return tol; }
144 
149  [[nodiscard]] size_t get_maxiter() const { return maxiter; }
150 
155  [[nodiscard]] size_t get_miniter() const { return miniter; }
156 
161  [[nodiscard]] size_t get_residual_method() const { return resid_method; }
162 
167  bool get_print_rhistory() const { return print_rhistory; }
168 
174 };
175 
179 template <typename MATRIX, typename Float> class precondition {
180 private:
181 public:
183  MATRIX tmpA;
184 
185  std::function<void(MATRIX &)> create_precond;
186  std::function<void(const vector<Float> &r, vector<Float> &z)> apply_precond;
187 
188  std::function<void(void)> get_precond();
189 
190  void set_precond_data(vector<Float> &m) { M = m; };
192 
194  auto create = [](MATRIX &) {};
195  auto apply = [](const vector<Float> &r, vector<Float> &z) { z = r; };
196  create_precond = create;
197  apply_precond = apply;
198  };
199 };
200 } // namespace monolish::solver
monolish::vml::min
void min(const matrix::CRS< double > &A, const matrix::CRS< double > &B, matrix::CRS< double > &C)
Create a new CRS matrix with smallest elements of two matrices (C[0:nnz] = min(A[0:nnz],...
Definition: matrix_vml.cpp:390
monolish::solver::solver::set_apply_precond
void set_apply_precond(PRECOND &p)
set precondition apply fucntion
Definition: precond.cpp:58
monolish::solver::solver::precond
precondition< MATRIX, Float > precond
Definition: monolish_solver.hpp:42
monolish::solver::solver::rhistory_file
std::string rhistory_file
Definition: monolish_solver.hpp:36
monolish::solver::solver::print_rhistory
bool print_rhistory
Definition: monolish_solver.hpp:35
monolish::solver::solver::set_lib
void set_lib(int l)
set library option (to change library, monolish, cusolver, etc.)
Definition: monolish_solver.hpp:77
monolish::vml::max
void max(const matrix::CRS< double > &A, const matrix::CRS< double > &B, matrix::CRS< double > &C)
Create a new CRS matrix with greatest elements of two matrices (C[0:nnz] = max(A[0:nnz],...
Definition: matrix_vml.cpp:382
monolish::solver::solver::get_residual_method
size_t get_residual_method() const
get residual method(default=0)
Definition: monolish_solver.hpp:161
monolish::solver::precondition::set_precond_data
void set_precond_data(vector< Float > &m)
Definition: monolish_solver.hpp:190
monolish::solver::solver::get_tol
double get_tol() const
get tolerance
Definition: monolish_solver.hpp:143
monolish::solver::solver::get_residual
Float get_residual(vector< Float > &x)
Definition: equation.cpp:8
monolish::solver::solver::set_residual_method
void set_residual_method(size_t r)
set residual method (default=0)
Definition: monolish_solver.hpp:101
monolish::solver::solver::set_miniter
void set_miniter(size_t min)
set min iter. (default = 0)
Definition: monolish_solver.hpp:95
monolish::solver::initvec_scheme
initvec_scheme
Enum class defining how to handle initial vectors RANDOM use randomly initialized vectors USER use in...
Definition: monolish_solver.hpp:17
monolish::solver::solver::~solver
~solver()
delete solver class
Definition: monolish_solver.hpp:55
monolish::solver::solver::set_maxiter
void set_maxiter(size_t max)
set max iter. (default = SIZE_MAX)
Definition: monolish_solver.hpp:89
monolish_common.hpp
monolish::solver::solver::get_maxiter
size_t get_maxiter() const
get maxiter
Definition: monolish_solver.hpp:149
monolish::solver::precondition::create_precond
std::function< void(MATRIX &)> create_precond
Definition: monolish_solver.hpp:185
monolish::solver::solver
solver base class
Definition: monolish_solver.hpp:27
monolish::solver::solver::solver
solver()
create solver class
Definition: monolish_solver.hpp:49
monolish::solver::initvec_scheme::RANDOM
@ RANDOM
monolish::solver::solver::resid_method
size_t resid_method
Definition: monolish_solver.hpp:34
monolish::solver::solver::initvecscheme
initvec_scheme initvecscheme
Definition: monolish_solver.hpp:38
monolish::solver::precondition::apply_precond
std::function< void(const vector< Float > &r, vector< Float > &z)> apply_precond
Definition: monolish_solver.hpp:186
monolish::solver::solver::miniter
size_t miniter
Definition: monolish_solver.hpp:32
monolish::solver::solver::get_miniter
size_t get_miniter() const
get miniter
Definition: monolish_solver.hpp:155
monolish::solver::solver::rhistory_stream
std::ostream * rhistory_stream
Definition: monolish_solver.hpp:37
monolish::solver::solver::set_rhistory_filename
void set_rhistory_filename(std::string file)
rhistory filename
Definition: monolish_solver.hpp:116
monolish::solver::solver::set_initvec_scheme
void set_initvec_scheme(initvec_scheme scheme)
set how to handle initial vector
Definition: monolish_solver.hpp:130
monolish::solver::precondition::get_precond
std::function< void(void)> get_precond()
monolish::solver::solver::set_tol
void set_tol(double t)
set tolerance (default:1.0e-8)
Definition: monolish_solver.hpp:83
monolish::solver::precondition::get_precond_data
vector< Float > get_precond_data()
Definition: monolish_solver.hpp:191
monolish::solver::initvec_scheme::USER
@ USER
monolish::solver::solver::maxiter
size_t maxiter
Definition: monolish_solver.hpp:33
monolish::vector
vector class
Definition: monolish_coo.hpp:32
monolish::solver::solver::tol
double tol
Definition: monolish_solver.hpp:31
monolish::solver::solver::set_print_rhistory
void set_print_rhistory(bool flag)
print rhistory to standart out true/false. (default = false)
Definition: monolish_solver.hpp:107
monolish::solver::solver::get_print_rhistory
bool get_print_rhistory() const
get print rhistory status
Definition: monolish_solver.hpp:167
monolish::solver::solver::get_lib
int get_lib() const
get library option
Definition: monolish_solver.hpp:137
monolish::solver::precondition::tmpA
MATRIX tmpA
Definition: monolish_solver.hpp:183
monolish::solver
Liner solver base class.
Definition: monolish_solver.hpp:10
monolish::solver::solver::set_create_precond
void set_create_precond(PRECOND &p)
set precondition create fucntion
Definition: precond.cpp:11
monolish::solver::precondition::precondition
precondition()
Definition: monolish_solver.hpp:193
monolish::solver::precondition
precondition base class
Definition: monolish_solver.hpp:22
monolish::solver::solver::lib
int lib
Definition: monolish_solver.hpp:30
monolish::solver::solver::get_initvec_scheme
initvec_scheme get_initvec_scheme() const
get handling scheme of initial vector handling
Definition: monolish_solver.hpp:173
monolish::solver::precondition::M
vector< Float > M
Definition: monolish_solver.hpp:182