QUDA
1.0.0
|
#include <eigensolve_quda.h>
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 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... | |
Protected Attributes | |
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 |
Definition at line 11 of file eigensolve_quda.h.
quda::EigenSolver::EigenSolver | ( | QudaEigParam * | eig_param, |
TimeProfile & | profile | ||
) |
Constructor for base Eigensolver class.
eig_param | MGParam struct that defines all meta data |
profile | Timeprofile instance used to profile |
Definition at line 27 of file eigensolve_quda.cpp.
References QudaEigParam_s::a_max, QudaEigParam_s::a_min, check_interval, QudaEigParam_s::check_interval, converged, errorQuda, getVerbosity(), iter, iter_converged, iter_keep, iter_locked, max_restarts, QudaEigParam_s::max_restarts, nConv, QudaEigParam_s::nConv, nEv, QudaEigParam_s::nEv, nKr, QudaEigParam_s::nKr, num_converged, num_keep, num_locked, QudaEigParam_s::poly_deg, printfQuda, Qmat, quda::QUDA_PROFILE_INIT, QUDA_SPECTRUM_LI_EIG, QUDA_SPECTRUM_LM_EIG, QUDA_SPECTRUM_LR_EIG, QUDA_SPECTRUM_SI_EIG, QUDA_SPECTRUM_SM_EIG, QUDA_SPECTRUM_SR_EIG, QUDA_VERBOSE, residua, restart_iter, reverse, safe_malloc, spectrum, QudaEigParam_s::spectrum, tol, QudaEigParam_s::tol, and QudaEigParam_s::use_poly_acc.
|
virtual |
Destructor for EigenSolver class.
Definition at line 490 of file eigensolve_quda.cpp.
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.
[out] | Sum | of inner products |
[in] | v | Vector space |
[in] | r | Vector to be orthogonalised |
[in] | j | Number 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().
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.
[in] | mat | Matrix operator |
[in] | out | Output spinor |
[in] | in | Input 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().
void quda::EigenSolver::computeEvals | ( | const DiracMatrix & | mat, |
std::vector< ColorSpinorField *> & | evecs, | ||
std::vector< Complex > & | evals, | ||
int | k | ||
) |
Compute eigenvalues and their residiua.
[in] | mat | Matrix operator |
[in] | evecs | The eigenvectors |
[in] | evals | The eigenvalues |
[in] | k | The 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()().
void quda::EigenSolver::computeSVD | ( | const DiracMatrix & | mat, |
std::vector< ColorSpinorField *> & | evecs, | ||
std::vector< Complex > & | evals | ||
) |
Computes Left/Right SVD from pre computed Right/Left.
[in] | mat | Matrix operator |
[in] | evecs | Computed eigenvectors of NormOp |
[in] | evals | Computed 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().
|
static |
Creates the eigensolver using the parameters given and the matrix.
eig_param | The eigensolver parameters |
mat | The operator to solve |
profile | Time 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().
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.
[in] | vec_defl | The deflated vector |
[in] | vec | The input vector |
[in] | evecs | The eigenvectors to use in deflation |
[in] | evals | The 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()().
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.
[in] | vec_defl | The deflated vector |
[in] | vec | The input vector |
[in] | evecs | The singular vectors to use in deflation |
[in] | evals | The 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()().
void quda::EigenSolver::loadFromFile | ( | const DiracMatrix & | mat, |
std::vector< ColorSpinorField *> & | eig_vecs, | ||
std::vector< Complex > & | evals | ||
) |
Load and check eigenpairs from file.
[in] | mat | Matrix operator |
[in] | eig_vecs | The eigenvectors to save |
[in] | file | The 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()().
|
static |
Load vectors from file.
[in] | eig_vecs | The eigenvectors to load |
[in] | file | The filename to load |
Definition at line 362 of file eigensolve_quda.cpp.
References quda::ColorSpinorParam::create, quda::ColorSpinorField::Create(), csParam, errorQuda, quda::ColorSpinorParam::fieldOrder, getVerbosity(), host_free, quda::ColorSpinorParam::location, printfQuda, QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, QUDA_NULL_FIELD_CREATE, QUDA_SINGLE_PRECISION, QUDA_SPACE_SPIN_COLOR_FIELD_ORDER, QUDA_SUMMARIZE, read_spinor_field(), safe_malloc, quda::ColorSpinorParam::setPrecision(), tmp, and V.
Referenced by loadFromFile(), and quda::MG::loadVectors().
void quda::EigenSolver::matVec | ( | const DiracMatrix & | mat, |
ColorSpinorField & | out, | ||
const ColorSpinorField & | in | ||
) |
Applies the specified matVec operation: M, Mdag, MMdag, MdagM.
[in] | mat | Matrix operator |
[in] | out | Output spinor |
[in] | in | Input spinor |
Definition at line 128 of file eigensolve_quda.cpp.
References quda::ColorSpinorField::Create(), mat(), param, tmp1, and tmp2.
Referenced by chebyOp(), and computeEvals().
|
pure virtual |
Computes the eigen decomposition for the operator passed to create.
kSpace | The converged eigenvectors |
evals | The converged eigenvalues |
Implemented in quda::TRLM.
|
static |
Save vectors to file.
[in] | eig_vecs | The eigenvectors to save |
[in] | file | The filename to save |
Definition at line 416 of file eigensolve_quda.cpp.
References quda::ColorSpinorParam::create, quda::ColorSpinorField::Create(), csParam, errorQuda, quda::ColorSpinorParam::fieldOrder, getVerbosity(), host_free, quda::ColorSpinorParam::location, printfQuda, QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, QUDA_NULL_FIELD_CREATE, QUDA_SINGLE_PRECISION, QUDA_SPACE_SPIN_COLOR_FIELD_ORDER, QUDA_SUMMARIZE, safe_malloc, quda::ColorSpinorParam::setPrecision(), tmp, V, and write_spinor_field().
Referenced by quda::TRLM::operator()(), and quda::MG::saveVectors().
|
protected |
Definition at line 32 of file eigensolve_quda.h.
Referenced by EigenSolver().
|
protected |
Part of the spectrum to be computed
Definition at line 29 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().
|
protected |
Definition at line 45 of file eigensolve_quda.h.
|
protected |
Definition at line 15 of file eigensolve_quda.h.
Referenced by chebyOp(), computeSVD(), deflate(), deflateSVD(), loadFromFile(), and quda::TRLM::operator()().
|
protected |
Definition at line 33 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().
|
protected |
Definition at line 34 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().
|
protected |
Definition at line 36 of file eigensolve_quda.h.
Referenced by quda::TRLM::computeKeptRitz(), EigenSolver(), and quda::TRLM::operator()().
|
protected |
Definition at line 35 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().
|
protected |
Definition at line 31 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().
|
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()().
|
protected |
Definition at line 20 of file eigensolve_quda.h.
Referenced by EigenSolver(), quda::TRLM::operator()(), and quda::TRLM::TRLM().
|
protected |
Size of initial factorisation
Definition at line 21 of file eigensolve_quda.h.
Referenced by quda::TRLM::computeKeptRitz(), quda::TRLM::eigensolveFromArrowMat(), EigenSolver(), quda::TRLM::operator()(), quda::TRLM::reorder(), and quda::TRLM::TRLM().
|
protected |
Definition at line 37 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().
|
protected |
Definition at line 39 of file eigensolve_quda.h.
Referenced by EigenSolver(), quda::TRLM::lanczosStep(), and quda::TRLM::operator()().
|
protected |
Definition at line 38 of file eigensolve_quda.h.
Referenced by quda::TRLM::computeKeptRitz(), quda::TRLM::eigensolveFromArrowMat(), EigenSolver(), and quda::TRLM::operator()().
|
protected |
Definition at line 16 of file eigensolve_quda.h.
Referenced by quda::TRLM::eigensolveFromArrowMat(), and quda::TRLM::operator()().
|
protected |
Definition at line 50 of file eigensolve_quda.h.
Referenced by EigenSolver(), and ~EigenSolver().
|
protected |
Definition at line 44 of file eigensolve_quda.h.
Referenced by computeEvals(), quda::TRLM::computeKeptRitz(), quda::TRLM::lanczosStep(), loadFromFile(), and quda::TRLM::operator()().
|
protected |
Definition at line 41 of file eigensolve_quda.h.
Referenced by computeEvals(), quda::TRLM::eigensolveFromArrowMat(), EigenSolver(), loadFromFile(), quda::TRLM::operator()(), and ~EigenSolver().
|
protected |
Definition at line 30 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().
|
protected |
Tolerance on eigenvalues
Definition at line 24 of file eigensolve_quda.h.
Referenced by quda::TRLM::eigensolveFromArrowMat(), EigenSolver(), and quda::TRLM::reorder().
|
protected |
True if using polynomial acceleration
Definition at line 25 of file eigensolve_quda.h.
Referenced by EigenSolver().
|
protected |
Definition at line 47 of file eigensolve_quda.h.
Referenced by chebyOp(), matVec(), and ~EigenSolver().
|
protected |
Definition at line 48 of file eigensolve_quda.h.
Referenced by chebyOp(), matVec(), and ~EigenSolver().
|
protected |
Number of converged eigenvalues requested
Definition at line 23 of file eigensolve_quda.h.
Referenced by EigenSolver(), and quda::TRLM::operator()().