QUDA
1.0.0
|
Conjugate-Gradient Solver. More...
#include <invert_quda.h>
Public Member Functions | |
CG (DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile) | |
virtual | ~CG () |
void | operator() (ColorSpinorField &out, ColorSpinorField &in) |
Run CG. More... | |
void | operator() (ColorSpinorField &out, ColorSpinorField &in, ColorSpinorField *p_init, double r2_old_init) |
Solve re-using an initial Krylov space defined by an initial r2_old_init and search direction p_init. More... | |
void | blocksolve (ColorSpinorField &out, ColorSpinorField &in) |
![]() | |
Solver (SolverParam ¶m, TimeProfile &profile) | |
virtual | ~Solver () |
bool | convergence (double r2, double hq2, double r2_tol, double hq_tol) |
bool | convergenceHQ (double r2, double hq2, double r2_tol, double hq_tol) |
Test for HQ solver convergence – ignore L2 residual. More... | |
bool | convergenceL2 (double r2, double hq2, double r2_tol, double hq_tol) |
Test for L2 solver convergence – ignore HQ residual. More... | |
void | PrintStats (const char *name, int k, double r2, double b2, double hq2) |
Prints out the running statistics of the solver (requires a verbosity of QUDA_VERBOSE) More... | |
void | PrintSummary (const char *name, int k, double r2, double b2, double r2_tol, double hq_tol) |
Prints out the summary of the solver convergence (requires a verbosity of QUDA_SUMMARIZE). Assumes SolverParam.true_res and SolverParam.true_res_hq has been set. More... | |
void | constructDeflationSpace (const ColorSpinorField &meta, const DiracMatrix &mat, bool svd) |
Constructs the deflation space. More... | |
virtual double | flops () const |
Private Attributes | |
const DiracMatrix & | mat |
const DiracMatrix & | matSloppy |
ColorSpinorField * | yp |
ColorSpinorField * | rp |
ColorSpinorField * | rnewp |
ColorSpinorField * | pp |
ColorSpinorField * | App |
ColorSpinorField * | tmpp |
ColorSpinorField * | tmp2p |
ColorSpinorField * | tmp3p |
ColorSpinorField * | rSloppyp |
ColorSpinorField * | xSloppyp |
std::vector< ColorSpinorField * > | p |
bool | init |
Additional Inherited Members | |
![]() | |
static Solver * | create (SolverParam ¶m, DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, TimeProfile &profile) |
static double | stopping (double tol, double b2, QudaResidualType residual_type) |
Set the solver L2 stopping condition. More... | |
![]() | |
EigenSolver * | eig_solve |
bool | deflate_init = false |
std::vector< ColorSpinorField * > | defl_tmp1 |
std::vector< ColorSpinorField * > | defl_tmp2 |
![]() | |
SolverParam & | param |
TimeProfile & | profile |
int | node_parity |
Conjugate-Gradient Solver.
Definition at line 570 of file invert_quda.h.
quda::CG::CG | ( | DiracMatrix & | mat, |
DiracMatrix & | matSloppy, | ||
SolverParam & | param, | ||
TimeProfile & | profile | ||
) |
Definition at line 22 of file inv_cg_quda.cpp.
|
virtual |
Definition at line 29 of file inv_cg_quda.cpp.
References App, quda::Solver::defl_tmp1, quda::Solver::defl_tmp2, quda::Solver::deflate_init, quda::SolverParam::evecs, init, quda::DiracMatrix::isStaggered(), mat, p, quda::Solver::param, pp, quda::SolverParam::precision, quda::SolverParam::precision_sloppy, quda::Solver::profile, quda::QUDA_PROFILE_FREE, rnewp, rp, rSloppyp, tmp2p, tmp3p, tmpp, xSloppyp, and yp.
|
virtual |
Reimplemented from quda::Solver.
Definition at line 754 of file inv_cg_quda.cpp.
References App, quda::blas::ax(), quda::blas::axpy(), quda::blas::caxpy(), quda::blas::cDotProduct(), checkLocation, quda::ColorSpinorField::Component(), quda::conj(), conj(), quda::Solver::convergence(), quda::Solver::convergenceHQ(), quda::Solver::convergenceL2(), quda::blas::copy(), quda::ColorSpinorParam::create, quda::ColorSpinorField::Create(), csParam, quda::SolverParam::delta, errorQuda, quda::blas::flops, quda::DiracMatrix::flops(), getVerbosity(), quda::SolverParam::gflops, quda::SolverParam::heavy_quark_check, quda::blas::HeavyQuarkResidualNorm(), quda::CGNR::init, quda::DiracMatrix::isStaggered(), quda::SolverParam::iter, quda::TimeProfile::Last(), mat, matSloppy, quda::SolverParam::max_res_increase, quda::SolverParam::max_res_increase_total, quda::SolverParam::maxiter, quda::blas::norm2(), quda::SolverParam::num_src, p, quda::Solver::param, quda::SolverParam::pipeline, pp, quda::SolverParam::precision, quda::SolverParam::precision_sloppy, printfQuda, quda::Solver::PrintStats(), quda::Solver::PrintSummary(), quda::Solver::profile, QUDA_CUDA_FIELD_LOCATION, QUDA_HEAVY_QUARK_RESIDUAL, QUDA_MAX_MULTI_SHIFT, quda::QUDA_PROFILE_COMPUTE, quda::QUDA_PROFILE_EPILOGUE, quda::QUDA_PROFILE_FREE, quda::QUDA_PROFILE_INIT, quda::QUDA_PROFILE_PREAMBLE, QUDA_VERBOSE, QUDA_ZERO_FIELD_CREATE, quda::blas::reDotProduct(), quda::SolverParam::residual_type, rnewp, rp, rSloppyp, quda::SolverParam::secs, quda::ColorSpinorParam::setPrecision(), quda::sqrt(), quda::Solver::stopping(), tmp, tmp2, tmp2p, tmp3p, tmpp, quda::SolverParam::tol, quda::SolverParam::tol_hq, quda::SolverParam::true_res, quda::SolverParam::true_res_hq, quda::SolverParam::true_res_hq_offset, quda::SolverParam::true_res_offset, updateR(), quda::SolverParam::use_sloppy_partial_accumulator, warningQuda, quda::blas::xmyNorm(), quda::blas::xpay(), quda::blas::xpy(), quda::blas::xpyHeavyQuarkResidualNorm(), xSloppyp, yp, and quda::blas::zero().
|
inlinevirtual |
Run CG.
out | Solution vector. |
in | Right-hand side. |
Implements quda::Solver.
Reimplemented in quda::CGNR, and quda::CGNE.
Definition at line 588 of file invert_quda.h.
Referenced by quda::CGNE::operator()(), and quda::CGNR::operator()().
void quda::CG::operator() | ( | ColorSpinorField & | out, |
ColorSpinorField & | in, | ||
ColorSpinorField * | p_init, | ||
double | r2_old_init | ||
) |
Solve re-using an initial Krylov space defined by an initial r2_old_init and search direction p_init.
This can be used when continuing a CG, e.g. as refinement step after a multi-shift solve.
out | Solution-vector. |
in | Right-hand side. |
p_init | Initial-search direction. |
r2_old_init | [description] |
Definition at line 206 of file inv_cg_quda.cpp.
References alternative_reliable, App, quda::blas::axpy(), quda::blas::axpyCGNorm(), quda::blas::axpyNorm(), quda::blas::axpyZpbx(), quda::blas::caxpy(), quda::blas::cDotProduct(), quda::blas::cDotProductNormA(), checkLocation, checkPrecision, quda::SolverParam::compute_null_vector, quda::SolverParam::compute_true_res, quda::Solver::constructDeflationSpace(), quda::Solver::convergence(), quda::Solver::convergenceHQ(), quda::Solver::convergenceL2(), quda::blas::copy(), quda::ColorSpinorParam::create, quda::ColorSpinorField::Create(), csParam, quda::Solver::defl_tmp1, quda::SolverParam::deflate, quda::EigenSolver::deflate(), quda::Solver::deflate_init, quda::SolverParam::delta, quda::Solver::eig_solve, epsilon, errorQuda, quda::SolverParam::evals, quda::SolverParam::evecs, quda::blas::flops, quda::DiracMatrix::flops(), getVerbosity(), quda::SolverParam::gflops, quda::SolverParam::heavy_quark_check, quda::blas::HeavyQuarkResidualNorm(), quda::CGNR::init, quda::DiracMatrix::isStaggered(), quda::SolverParam::iter, quda::TimeProfile::Last(), mat, matSloppy, quda::SolverParam::max_hq_res_increase, quda::SolverParam::max_hq_res_restart_total, quda::SolverParam::max_res_increase, quda::SolverParam::max_res_increase_total, quda::SolverParam::maxiter, quda::blas::norm2(), quda::SolverParam::Nsteps, p, quda::Solver::param, quda::SolverParam::pipeline, quda::pow(), quda::SolverParam::precision, quda::LatticeField::Precision(), quda::SolverParam::precision_sloppy, printfQuda, quda::Solver::PrintStats(), quda::Solver::PrintSummary(), quda::Solver::profile, quda::blas::quadrupleCGReduction(), QUDA_COMPUTE_NULL_VECTOR_NO, QUDA_COPY_FIELD_CREATE, QUDA_CUDA_FIELD_LOCATION, QUDA_DEBUG_VERBOSE, QUDA_HEAVY_QUARK_RESIDUAL, QUDA_NULL_FIELD_CREATE, quda::QUDA_PROFILE_COMPUTE, quda::QUDA_PROFILE_EPILOGUE, quda::QUDA_PROFILE_INIT, quda::QUDA_PROFILE_PREAMBLE, QUDA_USE_INIT_GUESS_NO, QUDA_USE_INIT_GUESS_YES, QUDA_VERBOSE, quda::ColorSpinorField::RealLength(), quda::blas::reDotProduct(), quda::SolverParam::residual_type, rp, rSloppyp, quda::SolverParam::secs, quda::ColorSpinorParam::setPrecision(), quda::SolverParam::solution_accumulator_pipeline, quda::sqrt(), quda::Solver::stopping(), tmp, tmp2, tmp2p, tmp3p, tmpp, quda::SolverParam::tol, quda::SolverParam::tol_hq, quda::blas::tripleCGReduction(), quda::blas::tripleCGUpdate(), quda::SolverParam::true_res, quda::SolverParam::true_res_hq, updateR(), quda::SolverParam::use_alternative_reliable, quda::SolverParam::use_init_guess, quda::SolverParam::use_sloppy_partial_accumulator, warningQuda, quda::blas::xmyNorm(), quda::blas::xpayz(), quda::blas::xpy(), quda::blas::xpyHeavyQuarkResidualNorm(), xSloppyp, yp, and quda::blas::zero().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 578 of file invert_quda.h.
Referenced by ~CG().
|
private |
Definition at line 573 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 574 of file invert_quda.h.
Referenced by blocksolve(), and operator()().
|
private |
Definition at line 577 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().
|
private |
Definition at line 576 of file invert_quda.h.
Referenced by blocksolve(), operator()(), and ~CG().