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

Thick Restarted Lanczos Method. More...

#include <eigensolve_quda.h>

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

Public Member Functions

 TRLM (QudaEigParam *eig_param, const DiracMatrix &mat, TimeProfile &profile)
 Constructor for Thick Restarted Eigensolver class. More...
 
virtual ~TRLM ()
 Destructor for Thick Restarted Eigensolver class. More...
 
void operator() (std::vector< ColorSpinorField *> &kSpace, std::vector< Complex > &evals)
 Compute eigenpairs. More...
 
void lanczosStep (std::vector< ColorSpinorField *> v, int j)
 Lanczos step: extends the Kylov space. More...
 
void reorder (std::vector< ColorSpinorField *> &kSpace)
 Reorder the Krylov space by eigenvalue. More...
 
void eigensolveFromArrowMat (int nLocked, int arror_pos)
 Get the eigendecomposition from the arrow matrix. More...
 
void computeKeptRitz (std::vector< ColorSpinorField *> &kSpace)
 Get the eigen-decomposition from the arrow matrix. More...
 
- Public Member Functions inherited from quda::EigenSolver
 EigenSolver (QudaEigParam *eig_param, TimeProfile &profile)
 Constructor for base Eigensolver class. More...
 
virtual ~EigenSolver ()
 
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...
 

Public Attributes

const DiracMatrixmat
 
std::vector< double > ritz_mat
 
double * alpha
 
double * beta
 
ColorSpinorParam csParam
 

Additional Inherited Members

- Static Public Member Functions inherited from quda::EigenSolver
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 inherited from quda::EigenSolver
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

Thick Restarted Lanczos Method.

Definition at line 171 of file eigensolve_quda.h.

Constructor & Destructor Documentation

◆ TRLM()

quda::TRLM::TRLM ( QudaEigParam eig_param,
const DiracMatrix mat,
TimeProfile profile 
)

Constructor for Thick Restarted Eigensolver class.

Parameters
eig_paramThe eigensolver parameters
matThe operator to solve
profileTime Profile

Definition at line 501 of file eigensolve_quda.cpp.

References alpha, beta, errorQuda, quda::EigenSolver::nEv, quda::EigenSolver::nKr, quda::QUDA_PROFILE_INIT, QUDA_SPECTRUM_LR_EIG, QUDA_SPECTRUM_SR_EIG, safe_malloc, and QudaEigParam_s::spectrum.

◆ ~TRLM()

quda::TRLM::~TRLM ( )
virtual

Destructor for Thick Restarted Eigensolver class.

Definition at line 738 of file eigensolve_quda.cpp.

References alpha, beta, host_free, and ritz_mat.

Member Function Documentation

◆ computeKeptRitz()

void quda::TRLM::computeKeptRitz ( std::vector< ColorSpinorField *> &  kSpace)

Get the eigen-decomposition from the arrow matrix.

Parameters
[in]nKspacecurrent Kryloc space

Definition at line 872 of file eigensolve_quda.cpp.

References quda::blas::ax(), beta, quda::blas::caxpy(), quda::ColorSpinorField::Create(), csParam, getVerbosity(), host_free, quda::EigenSolver::iter_keep, quda::EigenSolver::nKr, quda::EigenSolver::num_locked, printfQuda, QUDA_DEBUG_VERBOSE, quda::EigenSolver::r, ritz_mat, and safe_malloc.

Referenced by operator()().

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

◆ eigensolveFromArrowMat()

void quda::TRLM::eigensolveFromArrowMat ( int  nLocked,
int  arror_pos 
)

Get the eigendecomposition from the arrow matrix.

Parameters
[in]nLockedNumber of locked eigenvectors
[in]arrow_posposition of arrowhead

Definition at line 810 of file eigensolve_quda.cpp.

References alpha, beta, quda::EigenSolver::nKr, quda::EigenSolver::num_locked, quda::EigenSolver::profile, quda::QUDA_PROFILE_EIGEN, quda::EigenSolver::residua, quda::EigenSolver::reverse, and ritz_mat.

Referenced by operator()().

Here is the caller graph for this function:

◆ lanczosStep()

void quda::TRLM::lanczosStep ( std::vector< ColorSpinorField *>  v,
int  j 
)

Lanczos step: extends the Kylov space.

Parameters
[in]vVector space
[in]jIndex of vector being computed

Definition at line 748 of file eigensolve_quda.cpp.

References alpha, quda::blas::axpy(), beta, quda::EigenSolver::blockOrthogonalize(), quda::EigenSolver::chebyOp(), mat, quda::blas::norm2(), quda::EigenSolver::num_keep, quda::EigenSolver::r, quda::blas::reDotProduct(), quda::sqrt(), and quda::blas::zero().

Referenced by operator()().

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

◆ operator()()

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

Compute eigenpairs.

Parameters
[in]kSpaceKrylov vector space
[in]evalsComputed eigenvalues

Implements quda::EigenSolver.

Definition at line 525 of file eigensolve_quda.cpp.

References alpha, quda::blas::ax(), quda::EigenSolver::computeEvals(), computeKeptRitz(), quda::EigenSolver::converged, quda::ColorSpinorParam::create, quda::ColorSpinorField::Create(), csParam, quda::EigenSolver::eig_param, eigensolveFromArrowMat(), epsilon, errorQuda, getVerbosity(), quda::RNG::Init(), quda::EigenSolver::iter, quda::EigenSolver::iter_converged, quda::EigenSolver::iter_keep, quda::EigenSolver::iter_locked, lanczosStep(), quda::EigenSolver::loadFromFile(), mat, quda::EigenSolver::max_restarts, quda::EigenSolver::nConv, quda::EigenSolver::nEv, quda::EigenSolver::nKr, quda::norm(), quda::blas::norm2(), quda::EigenSolver::num_converged, quda::EigenSolver::num_keep, quda::EigenSolver::num_locked, prec, printfQuda, quda::EigenSolver::profile, QUDA_CPU_FIELD_LOCATION, QUDA_DEBUG_VERBOSE, QUDA_DOUBLE_PRECISION, QUDA_HALF_PRECISION, QUDA_NOISE_UNIFORM, quda::QUDA_PROFILE_COMPUTE, QUDA_QUARTER_PRECISION, QUDA_RANDOM_SOURCE, QUDA_SINGLE_PRECISION, QUDA_SUMMARIZE, QUDA_VERBOSE, QUDA_ZERO_FIELD_CREATE, quda::EigenSolver::r, quda::RNG::Release(), reorder(), QudaEigParam_s::require_convergence, quda::EigenSolver::residua, quda::EigenSolver::restart_iter, quda::EigenSolver::saveVectors(), quda::spinorNoise(), quda::sqrt(), quda::EigenSolver::tol, QudaEigParam_s::vec_infile, QudaEigParam_s::vec_outfile, and warningQuda.

Here is the call graph for this function:

◆ reorder()

void quda::TRLM::reorder ( std::vector< ColorSpinorField *> &  kSpace)

Reorder the Krylov space by eigenvalue.

Parameters
[in]kSpacethe Krylov space

Definition at line 781 of file eigensolve_quda.cpp.

References alpha, quda::EigenSolver::nKr, quda::EigenSolver::reverse, swap(), and tmp.

Referenced by operator()().

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

Member Data Documentation

◆ alpha

double* quda::TRLM::alpha

Definition at line 193 of file eigensolve_quda.h.

Referenced by eigensolveFromArrowMat(), lanczosStep(), operator()(), reorder(), TRLM(), and ~TRLM().

◆ beta

double* quda::TRLM::beta

Definition at line 194 of file eigensolve_quda.h.

Referenced by computeKeptRitz(), eigensolveFromArrowMat(), lanczosStep(), TRLM(), and ~TRLM().

◆ csParam

ColorSpinorParam quda::TRLM::csParam

Definition at line 197 of file eigensolve_quda.h.

Referenced by computeKeptRitz(), and operator()().

◆ mat

const DiracMatrix& quda::TRLM::mat

Definition at line 175 of file eigensolve_quda.h.

Referenced by lanczosStep(), and operator()().

◆ ritz_mat

std::vector<double> quda::TRLM::ritz_mat

Definition at line 190 of file eigensolve_quda.h.

Referenced by computeKeptRitz(), eigensolveFromArrowMat(), and ~TRLM().


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