QUDA
1.0.0
|
Thick Restarted Lanczos Method. More...
#include <eigensolve_quda.h>
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... | |
![]() | |
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 DiracMatrix & | mat |
std::vector< double > | ritz_mat |
double * | alpha |
double * | beta |
ColorSpinorParam | csParam |
Additional Inherited Members | |
![]() | |
static EigenSolver * | create (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... | |
![]() | |
QudaEigParam * | eig_param |
TimeProfile & | profile |
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 |
ColorSpinorField * | tmp1 |
ColorSpinorField * | tmp2 |
Complex * | Qmat |
Thick Restarted Lanczos Method.
Definition at line 171 of file eigensolve_quda.h.
quda::TRLM::TRLM | ( | QudaEigParam * | eig_param, |
const DiracMatrix & | mat, | ||
TimeProfile & | profile | ||
) |
Constructor for Thick Restarted Eigensolver class.
eig_param | The eigensolver parameters |
mat | The operator to solve |
profile | Time 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.
|
virtual |
void quda::TRLM::computeKeptRitz | ( | std::vector< ColorSpinorField *> & | kSpace | ) |
Get the eigen-decomposition from the arrow matrix.
[in] | nKspace | current 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()().
void quda::TRLM::eigensolveFromArrowMat | ( | int | nLocked, |
int | arror_pos | ||
) |
Get the eigendecomposition from the arrow matrix.
[in] | nLocked | Number of locked eigenvectors |
[in] | arrow_pos | position 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()().
void quda::TRLM::lanczosStep | ( | std::vector< ColorSpinorField *> | v, |
int | j | ||
) |
Lanczos step: extends the Kylov space.
[in] | v | Vector space |
[in] | j | Index 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()().
|
virtual |
Compute eigenpairs.
[in] | kSpace | Krylov vector space |
[in] | evals | Computed 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.
void quda::TRLM::reorder | ( | std::vector< ColorSpinorField *> & | kSpace | ) |
Reorder the Krylov space by eigenvalue.
[in] | kSpace | the 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()().
double* quda::TRLM::alpha |
Definition at line 193 of file eigensolve_quda.h.
Referenced by eigensolveFromArrowMat(), lanczosStep(), operator()(), reorder(), TRLM(), and ~TRLM().
double* quda::TRLM::beta |
Definition at line 194 of file eigensolve_quda.h.
Referenced by computeKeptRitz(), eigensolveFromArrowMat(), lanczosStep(), TRLM(), and ~TRLM().
ColorSpinorParam quda::TRLM::csParam |
Definition at line 197 of file eigensolve_quda.h.
Referenced by computeKeptRitz(), and operator()().
const DiracMatrix& quda::TRLM::mat |
Definition at line 175 of file eigensolve_quda.h.
Referenced by lanczosStep(), and operator()().
std::vector<double> quda::TRLM::ritz_mat |
Definition at line 190 of file eigensolve_quda.h.
Referenced by computeKeptRitz(), eigensolveFromArrowMat(), and ~TRLM().