QUDA  1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
quda::EigenSolver Class Referenceabstract

#include <eigensolve_quda.h>

Inheritance diagram for quda::EigenSolver:
Inheritance graph
[legend]
Collaboration diagram for quda::EigenSolver:
Collaboration graph
[legend]

Public Member Functions

 EigenSolver (QudaEigParam *eig_param, TimeProfile &profile)
 Constructor for base Eigensolver class. More...
 
virtual ~EigenSolver ()
 
virtual void operator() (std::vector< ColorSpinorField *> &kSpace, std::vector< Complex > &evals)=0
 Computes the eigen decomposition for the operator passed to create. More...
 
void matVec (const DiracMatrix &mat, ColorSpinorField &out, const ColorSpinorField &in)
 Applies the specified matVec operation: M, Mdag, MMdag, MdagM. More...
 
void chebyOp (const DiracMatrix &mat, ColorSpinorField &out, const ColorSpinorField &in)
 Promoted the specified matVec operation: M, Mdag, MMdag, MdagM to a Chebyshev polynomial. More...
 
Complex blockOrthogonalize (std::vector< ColorSpinorField *> v, std::vector< ColorSpinorField *> r, int j)
 Orthogonalise input vector r against vector space v using block-BLAS. More...
 
void deflate (std::vector< ColorSpinorField *> vec_defl, std::vector< ColorSpinorField *> vec, std::vector< ColorSpinorField *> evecs, std::vector< Complex > evals)
 Deflate vector with Eigenvectors. More...
 
void deflateSVD (std::vector< ColorSpinorField *> vec_defl, std::vector< ColorSpinorField *> vec, std::vector< ColorSpinorField *> evecs, std::vector< Complex > evals)
 Deflate vector with both left and Right singular vectors. More...
 
void computeSVD (const DiracMatrix &mat, std::vector< ColorSpinorField *> &evecs, std::vector< Complex > &evals)
 Computes Left/Right SVD from pre computed Right/Left. More...
 
void computeEvals (const DiracMatrix &mat, std::vector< ColorSpinorField *> &evecs, std::vector< Complex > &evals, int k)
 Compute eigenvalues and their residiua. More...
 
void loadFromFile (const DiracMatrix &mat, std::vector< ColorSpinorField *> &eig_vecs, std::vector< Complex > &evals)
 Load and check eigenpairs from file. More...
 

Static Public Member Functions

static EigenSolvercreate (QudaEigParam *eig_param, const DiracMatrix &mat, TimeProfile &profile)
 Creates the eigensolver using the parameters given and the matrix. More...
 
static void loadVectors (std::vector< ColorSpinorField *> &eig_vecs, std::string file)
 Load vectors from file. More...
 
static void saveVectors (const std::vector< ColorSpinorField *> &eig_vecs, std::string file)
 Save vectors to file. More...
 

Protected Attributes

QudaEigParameig_param
 
TimeProfileprofile
 
int nEv
 
int nKr
 
int nConv
 
double tol
 
bool reverse
 
char spectrum [3]
 
bool converged
 
int restart_iter
 
int max_restarts
 
int check_interval
 
int iter
 
int iter_converged
 
int iter_locked
 
int iter_keep
 
int num_converged
 
int num_locked
 
int num_keep
 
double * residua
 
std::vector< ColorSpinorField * > r
 
std::vector< ColorSpinorField * > d_vecs_tmp
 
ColorSpinorFieldtmp1
 
ColorSpinorFieldtmp2
 
ComplexQmat
 

Detailed Description

Definition at line 11 of file eigensolve_quda.h.

Constructor & Destructor Documentation

◆ EigenSolver()

quda::EigenSolver::EigenSolver ( QudaEigParam eig_param,
TimeProfile profile 
)

◆ ~EigenSolver()

quda::EigenSolver::~EigenSolver ( )
virtual

Destructor for EigenSolver class.

Definition at line 490 of file eigensolve_quda.cpp.

References host_free, Qmat, residua, tmp1, and tmp2.

Member Function Documentation

◆ blockOrthogonalize()

Complex quda::EigenSolver::blockOrthogonalize ( std::vector< ColorSpinorField *>  v,
std::vector< ColorSpinorField *>  r,
int  j 
)

Orthogonalise input vector r against vector space v using block-BLAS.

Parameters
[out]Sumof inner products
[in]vVector space
[in]rVector to be orthogonalised
[in]jNumber of vectors in v to orthogonalise against

Definition at line 207 of file eigensolve_quda.cpp.

References quda::blas::caxpy(), quda::blas::cDotProduct(), host_free, quda::s, safe_malloc, and quda::sum().

Referenced by quda::TRLM::lanczosStep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ chebyOp()

void quda::EigenSolver::chebyOp ( const DiracMatrix mat,
ColorSpinorField out,
const ColorSpinorField in 
)

Promoted the specified matVec operation: M, Mdag, MMdag, MdagM to a Chebyshev polynomial.

Parameters
[in]matMatrix operator
[in]outOutput spinor
[in]inInput spinor

Definition at line 138 of file eigensolve_quda.cpp.

References QudaEigParam_s::a_max, QudaEigParam_s::a_min, quda::blas::caxpby(), quda::blas::caxpbypczw(), quda::blas::copy(), quda::ColorSpinorField::Create(), eig_param, errorQuda, matVec(), QudaEigParam_s::poly_deg, swap(), tmp1, tmp2, and QudaEigParam_s::use_poly_acc.

Referenced by quda::TRLM::lanczosStep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeEvals()

void quda::EigenSolver::computeEvals ( const DiracMatrix mat,
std::vector< ColorSpinorField *> &  evecs,
std::vector< Complex > &  evals,
int  k 
)

Compute eigenvalues and their residiua.

Parameters
[in]matMatrix operator
[in]evecsThe eigenvectors
[in]evalsThe eigenvalues
[in]kThe number to compute

Definition at line 345 of file eigensolve_quda.cpp.

References quda::blas::caxpby(), quda::blas::cDotProduct(), matVec(), quda::blas::norm2(), r, residua, quda::size, and quda::sqrt().

Referenced by loadFromFile(), and quda::TRLM::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeSVD()

void quda::EigenSolver::computeSVD ( const DiracMatrix mat,
std::vector< ColorSpinorField *> &  evecs,
std::vector< Complex > &  evals 
)

Computes Left/Right SVD from pre computed Right/Left.

Parameters
[in]matMatrix operator
[in]evecsComputed eigenvectors of NormOp
[in]evalsComputed eigenvalues of NormOp

Definition at line 263 of file eigensolve_quda.cpp.

References quda::abs(), quda::blas::ax(), quda::blas::cDotProduct(), eig_param, errorQuda, quda::DiracMatrix::Expose(), getVerbosity(), quda::Dirac::M(), nConv, QudaEigParam_s::nConv, quda::norm(), quda::blas::norm2(), printfQuda, QUDA_SUMMARIZE, and quda::sqrt().

Referenced by quda::Solver::constructDeflationSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create()

EigenSolver * quda::EigenSolver::create ( QudaEigParam eig_param,
const DiracMatrix mat,
TimeProfile profile 
)
static

Creates the eigensolver using the parameters given and the matrix.

Parameters
eig_paramThe eigensolver parameters
matThe operator to solve
profileTime Profile

Definition at line 109 of file eigensolve_quda.cpp.

References QudaEigParam_s::eig_type, errorQuda, getVerbosity(), printfQuda, QUDA_EIG_IR_ARNOLDI, QUDA_EIG_IR_LANCZOS, QUDA_EIG_TR_LANCZOS, and QUDA_SUMMARIZE.

Referenced by quda::Solver::constructDeflationSpace(), eigensolveQuda(), and quda::MG::generateEigenVectors().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ deflate()

void quda::EigenSolver::deflate ( std::vector< ColorSpinorField *>  vec_defl,
std::vector< ColorSpinorField *>  vec,
std::vector< ColorSpinorField *>  evecs,
std::vector< Complex evals 
)

Deflate vector with Eigenvectors.

Parameters
[in]vec_deflThe deflated vector
[in]vecThe input vector
[in]evecsThe eigenvectors to use in deflation
[in]evalsThe eigenvalues to use in deflation

Definition at line 229 of file eigensolve_quda.cpp.

References quda::blas::caxpy(), quda::blas::cDotProduct(), eig_param, getVerbosity(), host_free, QudaEigParam_s::nConv, printfQuda, QUDA_VERBOSE, quda::s, safe_malloc, and quda::blas::zero().

Referenced by quda::CG::operator()(), and quda::CACG::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ deflateSVD()

void quda::EigenSolver::deflateSVD ( std::vector< ColorSpinorField *>  vec_defl,
std::vector< ColorSpinorField *>  vec,
std::vector< ColorSpinorField *>  evecs,
std::vector< Complex evals 
)

Deflate vector with both left and Right singular vectors.

Parameters
[in]vec_deflThe deflated vector
[in]vecThe input vector
[in]evecsThe singular vectors to use in deflation
[in]evalsThe singular values to use in deflation

Definition at line 309 of file eigensolve_quda.cpp.

References quda::blas::caxpy(), quda::blas::cDotProduct(), eig_param, getVerbosity(), host_free, QudaEigParam_s::nConv, printfQuda, QUDA_VERBOSE, quda::s, safe_malloc, and quda::blas::zero().

Referenced by quda::GCR::operator()(), and quda::CAGCR::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ loadFromFile()

void quda::EigenSolver::loadFromFile ( const DiracMatrix mat,
std::vector< ColorSpinorField *> &  eig_vecs,
std::vector< Complex > &  evals 
)

Load and check eigenpairs from file.

Parameters
[in]matMatrix operator
[in]eig_vecsThe eigenvectors to save
[in]fileThe filename to save

Definition at line 465 of file eigensolve_quda.cpp.

References computeEvals(), quda::ColorSpinorParam::create, quda::ColorSpinorField::Create(), csParam, eig_param, getVerbosity(), loadVectors(), nConv, printfQuda, QUDA_SUMMARIZE, QUDA_ZERO_FIELD_CREATE, r, residua, and QudaEigParam_s::vec_infile.

Referenced by quda::TRLM::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ loadVectors()

void quda::EigenSolver::loadVectors ( std::vector< ColorSpinorField *> &  eig_vecs,
std::string  file 
)
static

◆ matVec()

void quda::EigenSolver::matVec ( const DiracMatrix mat,
ColorSpinorField out,
const ColorSpinorField in 
)

Applies the specified matVec operation: M, Mdag, MMdag, MdagM.

Parameters
[in]matMatrix operator
[in]outOutput spinor
[in]inInput spinor

Definition at line 128 of file eigensolve_quda.cpp.

References quda::ColorSpinorField::Create(), mat(), param, tmp1, and tmp2.

Referenced by chebyOp(), and computeEvals().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator()()

virtual void quda::EigenSolver::operator() ( std::vector< ColorSpinorField *> &  kSpace,
std::vector< Complex > &  evals 
)
pure virtual

Computes the eigen decomposition for the operator passed to create.

Parameters
kSpaceThe converged eigenvectors
evalsThe converged eigenvalues

Implemented in quda::TRLM.

◆ saveVectors()

void quda::EigenSolver::saveVectors ( const std::vector< ColorSpinorField *> &  eig_vecs,
std::string  file 
)
static

Member Data Documentation

◆ check_interval

int quda::EigenSolver::check_interval
protected

Definition at line 32 of file eigensolve_quda.h.

Referenced by EigenSolver().

◆ converged

bool quda::EigenSolver::converged
protected

Part of the spectrum to be computed

Definition at line 29 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().

◆ d_vecs_tmp

std::vector<ColorSpinorField *> quda::EigenSolver::d_vecs_tmp
protected

Definition at line 45 of file eigensolve_quda.h.

◆ eig_param

QudaEigParam* quda::EigenSolver::eig_param
protected

◆ iter

int quda::EigenSolver::iter
protected

Definition at line 33 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().

◆ iter_converged

int quda::EigenSolver::iter_converged
protected

Definition at line 34 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().

◆ iter_keep

int quda::EigenSolver::iter_keep
protected

◆ iter_locked

int quda::EigenSolver::iter_locked
protected

Definition at line 35 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().

◆ max_restarts

int quda::EigenSolver::max_restarts
protected

Definition at line 31 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().

◆ nConv

int quda::EigenSolver::nConv
protected

Size of Krylov space after extension

Definition at line 22 of file eigensolve_quda.h.

Referenced by computeSVD(), EigenSolver(), loadFromFile(), and quda::TRLM::operator()().

◆ nEv

int quda::EigenSolver::nEv
protected

Definition at line 20 of file eigensolve_quda.h.

Referenced by EigenSolver(), quda::TRLM::operator()(), and quda::TRLM::TRLM().

◆ nKr

int quda::EigenSolver::nKr
protected

◆ num_converged

int quda::EigenSolver::num_converged
protected

Definition at line 37 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().

◆ num_keep

int quda::EigenSolver::num_keep
protected

Definition at line 39 of file eigensolve_quda.h.

Referenced by EigenSolver(), quda::TRLM::lanczosStep(), and quda::TRLM::operator()().

◆ num_locked

int quda::EigenSolver::num_locked
protected

◆ profile

TimeProfile& quda::EigenSolver::profile
protected

Definition at line 16 of file eigensolve_quda.h.

Referenced by quda::TRLM::eigensolveFromArrowMat(), and quda::TRLM::operator()().

◆ Qmat

Complex* quda::EigenSolver::Qmat
protected

Definition at line 50 of file eigensolve_quda.h.

Referenced by EigenSolver(), and ~EigenSolver().

◆ r

std::vector<ColorSpinorField *> quda::EigenSolver::r
protected

◆ residua

double* quda::EigenSolver::residua
protected

◆ restart_iter

int quda::EigenSolver::restart_iter
protected

Definition at line 30 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().

◆ reverse

bool quda::EigenSolver::reverse
protected

Tolerance on eigenvalues

Definition at line 24 of file eigensolve_quda.h.

Referenced by quda::TRLM::eigensolveFromArrowMat(), EigenSolver(), and quda::TRLM::reorder().

◆ spectrum

char quda::EigenSolver::spectrum[3]
protected

True if using polynomial acceleration

Definition at line 25 of file eigensolve_quda.h.

Referenced by EigenSolver().

◆ tmp1

ColorSpinorField* quda::EigenSolver::tmp1
protected

Definition at line 47 of file eigensolve_quda.h.

Referenced by chebyOp(), matVec(), and ~EigenSolver().

◆ tmp2

ColorSpinorField* quda::EigenSolver::tmp2
protected

Definition at line 48 of file eigensolve_quda.h.

Referenced by chebyOp(), matVec(), and ~EigenSolver().

◆ tol

double quda::EigenSolver::tol
protected

Number of converged eigenvalues requested

Definition at line 23 of file eigensolve_quda.h.

Referenced by EigenSolver(), and quda::TRLM::operator()().


The documentation for this class was generated from the following files: