monolish
MONOlithic LInear equation Solvers for Highly-parallel architecture
monolish_standard_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 
12 
28 template <typename MATRIX, typename Float>
29 class LOBPCG : public solver::solver<MATRIX, Float> {
30 private:
31  // TODO: support multiple lambda(eigenvalue)s
32  [[nodiscard]] int monolish_LOBPCG(MATRIX &A, vector<Float> &lambda,
34 
35 public:
44  [[nodiscard]] int solve(MATRIX &A, vector<Float> &lambda,
46 
47  void create_precond(MATRIX &A) {
48  throw std::runtime_error("this precond. is not impl.");
49  }
50 
52  throw std::runtime_error("this precond. is not impl.");
53  }
54 
62  [[nodiscard]] std::string name() const {
63  return "monolish::standard_eigen::LOBPCG";
64  }
65 
73  [[nodiscard]] std::string solver_name() const { return "LOBPCG"; }
74 };
75 
91 template <typename MATRIX, typename Float>
92 class DC : public solver::solver<MATRIX, Float> {
93 private:
94  [[nodiscard]] int LAPACK_DC(MATRIX &A, vector<Float> &lambda);
95 
96 public:
97  [[nodiscard]] int solve(MATRIX &A, vector<Float> &lambda);
98 
99  void create_precond(MATRIX &A) {
100  throw std::runtime_error("this precond. is not impl.");
101  }
102 
104  throw std::runtime_error("this precond. is not impl.");
105  }
106 
114  [[nodiscard]] std::string name() const {
115  return "monolish::standard_eigen::DC";
116  }
117 
125  [[nodiscard]] std::string solver_name() const { return "DC"; }
126 };
127 } // namespace monolish::standard_eigen
monolish::standard_eigen::DC::apply_precond
void apply_precond(const vector< Float > &r, vector< Float > &z)
Definition: monolish_standard_eigen.hpp:103
monolish::standard_eigen::LOBPCG::name
std::string name() const
get solver name "monolish::standard_eigen::LOBPCG"
Definition: monolish_standard_eigen.hpp:62
monolish::standard_eigen::DC::LAPACK_DC
int LAPACK_DC(MATRIX &A, vector< Float > &lambda)
monolish::standard_eigen::LOBPCG::apply_precond
void apply_precond(const vector< Float > &r, vector< Float > &z)
Definition: monolish_standard_eigen.hpp:51
monolish::standard_eigen::LOBPCG
LOBPCG solver.
Definition: monolish_standard_eigen.hpp:29
monolish::standard_eigen::DC::solve
int solve(MATRIX &A, vector< Float > &lambda)
monolish::matrix::Dense
Dense format Matrix.
Definition: monolish_coo.hpp:28
monolish::standard_eigen::LOBPCG::monolish_LOBPCG
int monolish_LOBPCG(MATRIX &A, vector< Float > &lambda, matrix::Dense< Float > &x)
monolish_common.hpp
monolish::standard_eigen::LOBPCG::create_precond
void create_precond(MATRIX &A)
Definition: monolish_standard_eigen.hpp:47
monolish::solver::solver
solver base class
Definition: monolish_solver.hpp:27
monolish::standard_eigen::DC::name
std::string name() const
get solver name "monolish::standard_eigen::DC"
Definition: monolish_standard_eigen.hpp:114
monolish::standard_eigen::DC::solver_name
std::string solver_name() const
get solver name "DC"
Definition: monolish_standard_eigen.hpp:125
monolish::standard_eigen::DC
Devide and Conquer solver.
Definition: monolish_standard_eigen.hpp:92
monolish_solver.hpp
monolish::standard_eigen::LOBPCG::solve
int solve(MATRIX &A, vector< Float > &lambda, matrix::Dense< Float > &x)
calculate eigenvalues and eigenvectors or A by LOBPCG method(lib=0: monolish)
monolish::vector
vector class
Definition: monolish_coo.hpp:25
monolish::standard_eigen::LOBPCG::solver_name
std::string solver_name() const
get solver name "LOBPCG"
Definition: monolish_standard_eigen.hpp:73
monolish::standard_eigen::DC::create_precond
void create_precond(MATRIX &A)
Definition: monolish_standard_eigen.hpp:99
monolish::standard_eigen
handling eigenvalues and eigenvectors
Definition: monolish_standard_eigen.hpp:11