monolish  0.16.0
MONOlithic LInear equation Solvers for Highly-parallel architecture
monolish_generalized_eigen.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <omp.h>
3 #include <vector>
4 
5 #include "./monolish_solver.hpp"
7 
8 namespace monolish {
12 namespace generalized_eigen {
13 
39 template <typename MATRIX, typename Float>
40 class LOBPCG : public solver::solver<MATRIX, Float> {
41 private:
42  // TODO: support multiple lambda(eigenvalue)s
43  [[nodiscard]] int monolish_LOBPCG(MATRIX &A, MATRIX &B, vector<Float> &lambda,
44  matrix::Dense<Float> &x, int itype);
45 
46 public:
47  [[nodiscard]] int solve(MATRIX &A, MATRIX &B, vector<Float> &lambda,
48  matrix::Dense<Float> &x, int itype);
49 
50  void create_precond(MATRIX &A) {
51  throw std::runtime_error("this precond. is not impl.");
52  }
53 
55  throw std::runtime_error("this precond. is not impl.");
56  }
57 
65  [[nodiscard]] std::string name() const {
66  return "monolish::generalized_eigen::LOBPCG";
67  }
68 
76  [[nodiscard]] std::string solver_name() const { return "LOBPCG"; }
77 };
100 template <typename MATRIX, typename Float>
101 class DC : public solver::solver<MATRIX, Float> {
102 private:
103  [[nodiscard]] int LAPACK_DC(MATRIX &A, MATRIX &B, vector<Float> &lambda,
104  int itype);
105 
106 public:
107  [[nodiscard]] int solve(MATRIX &A, MATRIX &B, vector<Float> &lambda,
108  int itype);
109 
110  void create_precond(MATRIX &A) {
111  throw std::runtime_error("this precond. is not impl.");
112  }
113 
115  throw std::runtime_error("this precond. is not impl.");
116  }
117 
125  [[nodiscard]] std::string name() const {
126  return "monolish::generalized_eigen::DC";
127  }
128 
136  [[nodiscard]] std::string solver_name() const { return "DC"; }
137 };
139 } // namespace generalized_eigen
140 } // namespace monolish
monolish::generalized_eigen::LOBPCG::solve
int solve(MATRIX &A, MATRIX &B, vector< Float > &lambda, matrix::Dense< Float > &x, int itype)
monolish::generalized_eigen::LOBPCG::create_precond
void create_precond(MATRIX &A)
Definition: monolish_generalized_eigen.hpp:50
monolish::generalized_eigen::LOBPCG
LOBPCG solver.
Definition: monolish_generalized_eigen.hpp:40
monolish::generalized_eigen::DC::create_precond
void create_precond(MATRIX &A)
Definition: monolish_generalized_eigen.hpp:110
monolish::generalized_eigen::DC::apply_precond
void apply_precond(const vector< Float > &r, vector< Float > &z)
Definition: monolish_generalized_eigen.hpp:114
monolish::matrix::Dense
Dense format Matrix.
Definition: monolish_coo.hpp:28
monolish_common.hpp
monolish::generalized_eigen::DC::LAPACK_DC
int LAPACK_DC(MATRIX &A, MATRIX &B, vector< Float > &lambda, int itype)
monolish::generalized_eigen::LOBPCG::apply_precond
void apply_precond(const vector< Float > &r, vector< Float > &z)
Definition: monolish_generalized_eigen.hpp:54
monolish::solver::solver
solver base class
Definition: monolish_solver.hpp:32
monolish::generalized_eigen::DC
Devide and Conquer solver.
Definition: monolish_generalized_eigen.hpp:101
monolish::generalized_eigen::LOBPCG::monolish_LOBPCG
int monolish_LOBPCG(MATRIX &A, MATRIX &B, vector< Float > &lambda, matrix::Dense< Float > &x, int itype)
monolish
monolish namespaces
Definition: monolish_matrix_blas.hpp:5
monolish::generalized_eigen::DC::solve
int solve(MATRIX &A, MATRIX &B, vector< Float > &lambda, int itype)
monolish::generalized_eigen::DC::solver_name
std::string solver_name() const
get solver name "DC"
Definition: monolish_generalized_eigen.hpp:136
monolish::generalized_eigen::DC::name
std::string name() const
get solver name "monolish::generalized_eigen::DC"
Definition: monolish_generalized_eigen.hpp:125
monolish::generalized_eigen::LOBPCG::solver_name
std::string solver_name() const
get solver name "LOBPCG"
Definition: monolish_generalized_eigen.hpp:76
monolish_solver.hpp
monolish::generalized_eigen::LOBPCG::name
std::string name() const
get solver name "monolish::generalized_eigen::LOBPCG"
Definition: monolish_generalized_eigen.hpp:65
monolish::vector
vector class
Definition: monolish_coo.hpp:25