181 m = (
m / 16) * 16 + 16;
182 warningQuda(
"\nSwitched eigenvector search dimension to %d\n",
m);
249 bool convergence(
const double &r2,
const double &hq2,
const double &r2_tol,
250 const double &hq_tol);
259 bool convergenceHQ(
const double &r2,
const double &hq2,
const double &r2_tol,
260 const double &hq_tol);
269 bool convergenceL2(
const double &r2,
const double &hq2,
const double &r2_tol,
270 const double &hq_tol);
275 void PrintStats(
const char*,
int k,
const double &r2,
const double &b2,
const double &hq2);
283 void PrintSummary(
const char *name,
int k,
const double &r2,
const double &b2);
306 void computeMatrixPowers(std::vector<cudaColorSpinorField>& out, std::vector<cudaColorSpinorField>& in,
int nsteps);
481 param(param), profile(profile) { ; }
551 virtual void StoreRitzVecs(
void *host_buffer,
double *inv_eigenvals,
const int *
X,
QudaInvertParam *inv_par,
const int nev,
bool cleanResources =
false) = 0;
558 bool convergence(
const double &r2,
const double &hq2,
const double &r2_tol,
559 const double &hq_tol);
564 void PrintStats(
const char*,
int k,
const double &r2,
const double &b2,
const double &hq2);
572 void PrintSummary(
const char *name,
int k,
const double &r2,
const double &b2);
576 struct DeflationParam;
629 void StoreRitzVecs(
void *host_buf,
double *inv_eigenvals,
const int *
X,
QudaInvertParam *inv_par,
const int nev,
bool cleanResources =
false);
641 #endif // _INVERT_QUDA_H
bool convergence(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
enum QudaPreserveSource_s QudaPreserveSource
void DeleteDeflationSpace(DeflationParam *¶m)
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
QudaSchwarzType schwarz_type
enum QudaPrecision_s QudaPrecision
virtual void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)=0
static double stopping(const double &tol, const double &b2, QudaResidualType residual_type)
void updateRhsIndex(QudaInvertParam ¶m)
virtual void StoreRitzVecs(void *host_buffer, double *inv_eigenvals, const int *X, QudaInvertParam *inv_par, const int nev, bool cleanResources=false)=0
enum QudaResidualType_s QudaResidualType
#define QUDA_MAX_MULTI_SHIFT
Maximum number of shifts supported by the multi-shift solver. This number may be changed if need be...
QudaInverterType inv_type
void operator()(cudaColorSpinorField &x, cudaColorSpinorField &b, cudaColorSpinorField **p, cudaColorSpinorField **q, int N)
void StoreRitzVecs(void *host_buf, double *inv_eigenvals, const int *X, QudaInvertParam *inv_par, const int nev, bool cleanResources=false)
QudaInverterType inv_type
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
void ReportEigenvalueAccuracy(DeflationParam *param, int nevs_to_print)
bool convergenceL2(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
MR(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
DeflatedSolver(SolverParam ¶m, TimeProfile &profile)
void mat(void *out, void **fatlink, void **longlink, void *in, double kappa, int dagger_bit, QudaPrecision sPrecision, QudaPrecision gPrecision)
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
double tol_offset[QUDA_MAX_MULTI_SHIFT]
double offset[QUDA_MAX_MULTI_SHIFT]
BiCGstab(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
virtual void CleanResources()=0
QudaPrecision precision_ritz
QudaInverterType inv_type_precondition
QudaPreserveSource preserve_source
int max_res_increase_total
IncEigCG(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matCGSloppy, DiracMatrix &matDefl, SolverParam ¶m, TimeProfile &profile)
alphaSA(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
int EigCG(cudaColorSpinorField &out, cudaColorSpinorField &in)
void DeflateSpinor(cudaColorSpinorField &out, cudaColorSpinorField &in, DeflationParam *param, bool set2zero=true)
double true_res_hq_offset[QUDA_MAX_MULTI_SHIFT]
virtual ~MultiShiftSolver()
SolverParam(QudaInvertParam ¶m)
GCR(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
MPCG(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
SimpleBiCGstab(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
void PrintSummary(const char *name, int k, const double &r2, const double &b2)
virtual ~DeflatedSolver()
QudaResidualType residual_type
const DiracMatrix & matSloppy
CG(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
double true_res_hq_offset[QUDA_MAX_MULTI_SHIFT]
void updateInvertParam(QudaInvertParam ¶m, int offset=-1)
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
virtual void operator()(cudaColorSpinorField **out, cudaColorSpinorField &in)=0
double tol_offset[QUDA_MAX_MULTI_SHIFT]
double true_res_offset[QUDA_MAX_MULTI_SHIFT]
static Solver * create(SolverParam ¶m, DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, TimeProfile &profile)
MinResExt(DiracMatrix &mat, TimeProfile &profile)
enum QudaSchwarzType_s QudaSchwarzType
bool convergence(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
double true_res_offset[QUDA_MAX_MULTI_SHIFT]
double offset[QUDA_MAX_MULTI_SHIFT]
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
virtual ~SimpleBiCGstab()
void operator()(cudaColorSpinorField *out, cudaColorSpinorField *in)
void ExpandDeflationSpace(DeflationParam *param, const int new_nev)
void operator()(cudaColorSpinorField **out, cudaColorSpinorField &in)
void PrintSummary(const char *name, int k, const double &r2, const double &b2)
QudaPrecision precision_precondition
SD(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
void DeflateSpinorReduced(cudaColorSpinorField &out, cudaColorSpinorField &in, DeflationParam *param, bool set2zero=true)
Solver(SolverParam ¶m, TimeProfile &profile)
cpuColorSpinorField * out
void DeleteEigCGSearchSpace()
void CreateDeflationSpace(cudaColorSpinorField &eigcgSpinor, DeflationParam *¶m)
Main header file for the QUDA library.
MPBiCGstab(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
static DeflatedSolver * create(SolverParam ¶m, DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matCGSloppy, DiracMatrix &matDeflate, TimeProfile &profile)
void PrintStats(const char *, int k, const double &r2, const double &b2, const double &hq2)
MultiShiftCG(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
MultiShiftSolver(SolverParam ¶m, TimeProfile &profile)
virtual void operator()(cudaColorSpinorField *out, cudaColorSpinorField *in)=0
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)
void PrintStats(const char *, int k, const double &r2, const double &b2, const double &hq2)
QudaUseInitGuess use_init_guess
QudaPrecision precision_sloppy
bool use_sloppy_partial_accumulator
void SaveEigCGRitzVecs(DeflationParam *param, bool cleanResources=false)
PreconCG(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
bool convergenceHQ(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
enum QudaUseInitGuess_s QudaUseInitGuess
void LoadEigenvectors(DeflationParam *param, int max_nevs, double tol=1e-3)
QudaPrecision eigcg_precision
enum QudaInverterType_s QudaInverterType
void operator()(cudaColorSpinorField **out, cudaColorSpinorField &in)
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
XSD(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
void operator()(cudaColorSpinorField &out, cudaColorSpinorField &in)