monolish  0.14.2
MONOlithic LIner 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 
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  int monolish_LOBPCG(MATRIX &A, MATRIX &B, vector<Float> &lambda,
33  matrix::Dense<Float> &x, int itype);
34 
35 public:
36  int solve(MATRIX &A, MATRIX &B, vector<Float> &lambda,
37  matrix::Dense<Float> &x, int itype);
38 
39  void create_precond(MATRIX &A) {
40  throw std::runtime_error("this precond. is not impl.");
41  }
42 
44  throw std::runtime_error("this precond. is not impl.");
45  }
46 
54  std::string name() const { return "monolish::generalized_eigen::LOBPCG"; }
55 };
56 
72 template <typename MATRIX, typename Float>
73 class DC : public solver::solver<MATRIX, Float> {
74 private:
75  int LAPACK_DC(MATRIX &A, MATRIX &B, vector<Float> &lambda, int itype);
76 
77 public:
78  int solve(MATRIX &A, MATRIX &B, vector<Float> &lambda, int itype);
79 
80  void create_precond(MATRIX &A) {
81  throw std::runtime_error("this precond. is not impl.");
82  }
83 
85  throw std::runtime_error("this precond. is not impl.");
86  }
87 
95  std::string name() const { return "monolish::generalized_eigen::DC"; }
96 };
97 
98 } // namespace monolish::generalized_eigen
monolish::generalized_eigen::LOBPCG
LOBPCG solver.
Definition: monolish_generalized_eigen.hpp:29
monolish::generalized_eigen::DC::LAPACK_DC
int LAPACK_DC(MATRIX &A, MATRIX &B, vector< Float > &lambda, int itype)
monolish::matrix::Dense
Dense format Matrix.
Definition: monolish_coo.hpp:35
monolish::generalized_eigen::LOBPCG::name
std::string name() const
get solver name "monolish::generalized_eigen::LOBPCG"
Definition: monolish_generalized_eigen.hpp:54
monolish::generalized_eigen
handling eigenvalues and eigenvectors
Definition: monolish_generalized_eigen.hpp:11
monolish_common.hpp
monolish::generalized_eigen::DC::name
std::string name() const
get solver name "monolish::generalized_eigen::DC"
Definition: monolish_generalized_eigen.hpp:95
monolish::solver::solver
solver base class
Definition: monolish_solver.hpp:27
monolish::generalized_eigen::DC
Devide and Conquer solver.
Definition: monolish_generalized_eigen.hpp:73
monolish::generalized_eigen::DC::create_precond
void create_precond(MATRIX &A)
Definition: monolish_generalized_eigen.hpp:80
monolish::generalized_eigen::DC::solve
int solve(MATRIX &A, MATRIX &B, vector< Float > &lambda, int itype)
monolish_solver.hpp
monolish::generalized_eigen::LOBPCG::create_precond
void create_precond(MATRIX &A)
Definition: monolish_generalized_eigen.hpp:39
monolish::generalized_eigen::LOBPCG::monolish_LOBPCG
int monolish_LOBPCG(MATRIX &A, MATRIX &B, vector< Float > &lambda, matrix::Dense< Float > &x, int itype)
monolish::vector
vector class
Definition: monolish_coo.hpp:32
monolish::generalized_eigen::LOBPCG::solve
int solve(MATRIX &A, MATRIX &B, vector< Float > &lambda, matrix::Dense< Float > &x, int itype)
monolish::generalized_eigen::DC::apply_precond
void apply_precond(const vector< Float > &r, vector< Float > &z)
Definition: monolish_generalized_eigen.hpp:84
monolish::generalized_eigen::LOBPCG::apply_precond
void apply_precond(const vector< Float > &r, vector< Float > &z)
Definition: monolish_generalized_eigen.hpp:43