282 m = (
m / 16) * 16 + 16;
283 warningQuda(
"\nSwitched eigenvector search dimension to %d\n",
m);
359 bool convergence(
const double &r2,
const double &hq2,
const double &r2_tol,
360 const double &hq_tol);
369 bool convergenceHQ(
const double &r2,
const double &hq2,
const double &r2_tol,
370 const double &hq_tol);
379 bool convergenceL2(
const double &r2,
const double &hq2,
const double &r2_tol,
380 const double &hq_tol);
385 void PrintStats(
const char*,
int k,
const double &r2,
const double &b2,
const double &hq2);
393 void PrintSummary(
const char *name,
int k,
const double &r2,
const double &b2);
399 virtual double flops()
const {
return 0; }
409 std::vector<ColorSpinorField*>
p;
456 void computeMatrixPowers(std::vector<cudaColorSpinorField>&
out, std::vector<cudaColorSpinorField>&
in,
int nsteps);
557 std::vector<ColorSpinorField*>
r;
558 std::vector<ColorSpinorField*>
u;
568 int reliable(
double &rNorm,
double &maxrx,
double &maxrr,
const double &r2,
const double &
delta);
628 std::vector<ColorSpinorField*>
p;
629 std::vector<ColorSpinorField*>
Ap;
721 (*solver)(*
out, *
in);
741 bool convergence(
const double *r2,
const double *r2_tol,
int n)
const;
795 std::vector<std::pair<ColorSpinorField*,ColorSpinorField*> > basis);
804 std::vector<ColorSpinorField*>
p,
805 std::vector<ColorSpinorField*> q);
846 void RestartVT(
const double beta,
const double rho);
909 #endif // _INVERT_QUDA_H
double iter_res_offset[QUDA_MAX_MULTI_SHIFT]
bool convergence(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
enum QudaPreserveSource_s QudaPreserveSource
ColorSpinorField * x_sloppy_saved_p
bool global_reduction
whether the solver acting as a preconditioner for another solver
ColorSpinorField * yp
Full precision residual.
QudaSchwarzType schwarz_type
virtual ~PreconditionedSolver()
QudaVerbosity verbosity_precondition
void operator()(ColorSpinorField &x, ColorSpinorField &b)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
virtual double flops() const
enum QudaPrecision_s QudaPrecision
ColorSpinorField * Az
temporary for mat-vec
static double stopping(const double &tol, const double &b2, QudaResidualType residual_type)
void updateRhsIndex(QudaInvertParam ¶m)
ColorSpinorField * r_pre
sloppy residual vector
cudaColorSpinorField * vp
ColorSpinorField * p_pre
residual passed to preconditioner
MR(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
enum QudaResidualType_s QudaResidualType
ColorSpinorField * r0_saved_p
Sloppy solution vector.
void operator()(ColorSpinorField &out, ColorSpinorField &in)
#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
std::vector< ColorSpinorField * > p
residual vector for doing multi-cycle preconditioning
void operator()(ColorSpinorField &x, ColorSpinorField &b, std::vector< std::pair< ColorSpinorField *, ColorSpinorField *> > basis)
int FlexArnoldiProcedure(const int start_idx, const bool do_givens)
const DiracMatrix & matSloppy
std::complex< double > Complex
void setOutputPrefix(const char *prefix)
bool convergenceL2(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
TimeProfile & profile
preconditioner result
cudaColorSpinorField * yp
BiCGstabL(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
cudaColorSpinorField * xx
IncEigCG(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
void computeTau(Complex **tau, double *sigma, std::vector< ColorSpinorField *> r, int begin, int size, int j)
int initCGsolve(ColorSpinorField &out, ColorSpinorField &in)
double tol_offset[QUDA_MAX_MULTI_SHIFT]
SolverParam(const QudaInvertParam ¶m)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
double offset[QUDA_MAX_MULTI_SHIFT]
BiCGstab(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
std::vector< ColorSpinorField * > u
enum QudaComputeNullVector_s QudaComputeNullVector
GMResDR(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
int eigCGsolve(ColorSpinorField &out, ColorSpinorField &in)
cudaColorSpinorField * rp
QudaPrecision precision_ritz
QudaInverterType inv_type_precondition
QudaPreserveSource preserve_source
void operator()(ColorSpinorField &out, ColorSpinorField &in)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
int max_res_increase_total
ColorSpinorField * rM
preconditioner result
QudaPrecision & cuda_prec_precondition
ColorSpinorField * r_fullp
ColorSpinorField * r_sloppy
sloppy solution vector
virtual void operator()(ColorSpinorField &out, ColorSpinorField &in)=0
void operator()(ColorSpinorField &out, ColorSpinorField &in)
virtual ~MultiShiftSolver()
ColorSpinorField * yp
residual vector
CGNE(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
GMResDRArgs * gmresdr_args
QudaPrecision & cuda_prec_ritz
TimeProfile & profile
Whether to compute q = Ap or assume it is provided.
GCR(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
cudaColorSpinorField * pp
bool convergence(const double *r2, const double *r2_tol, int n) const
MPCG(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
SimpleBiCGstab(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
QudaComputeNullVector compute_null_vector
Complex * gamma_prime_prime
cudaColorSpinorField * tp
void PrintSummary(const char *name, int k, const double &r2, const double &b2)
const DiracMatrix & matPrecon
static unsigned int delta
const DiracMatrix & matSloppy
QudaPrecision & cuda_prec_sloppy
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)
const DiracMatrix & matSloppy
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const =0
static Solver * create(SolverParam ¶m, DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, TimeProfile &profile)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
static __inline__ size_t p
void UpdateVm(ColorSpinorField &res, double beta, double sqrtr2)
std::vector< ColorSpinorField * > Ap
enum QudaSolutionType_s QudaSolutionType
bool is_preconditioner
verbosity to use for preconditioner
enum QudaSchwarzType_s QudaSchwarzType
virtual void operator()(std::vector< ColorSpinorField *> out, ColorSpinorField &in)=0
ColorSpinorField * yp
residual vector
double true_res_offset[QUDA_MAX_MULTI_SHIFT]
void operator()(ColorSpinorField &out, ColorSpinorField &in)
CGNR(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
cudaColorSpinorField * Ar
std::vector< ColorSpinorField * > r
Sloppy temporary vector.
void orthoDir(Complex **tau, double *sigma, std::vector< ColorSpinorField *> r, int j, int pipeline)
virtual ~SimpleBiCGstab()
const DiracMatrix & matSloppy
void updateUend(Complex *gamma, std::vector< ColorSpinorField *> u, int nKrylov)
ColorSpinorField * p_pre
residual passed to preconditioner
QudaExtLibType extlib_type
whether to use a global or local (node) reduction for this solver
ColorSpinorField * tempp
Full precision temporary.
std::vector< ColorSpinorField * > p
QudaPrecision precision_precondition
void computeMatrixPowers(cudaColorSpinorField out[], cudaColorSpinorField &in, int nvec)
int reliable(double &rNorm, double &maxrx, double &maxrr, const double &r2, const double &delta)
Current residual, in BiCG language.
SD(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
virtual void solve(ColorSpinorField &out, ColorSpinorField &in)
Solver(SolverParam ¶m, TimeProfile &profile)
void operator()(std::vector< ColorSpinorField *> out, ColorSpinorField &in)
void updateR(Complex **tau, std::vector< ColorSpinorField *> r, int begin, int size, int j)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
cpuColorSpinorField * out
bool apply_mat
Whether to construct an orthogonal basis or not.
Main header file for the QUDA library.
MPBiCGstab(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
ColorSpinorField * yp
residual vector
void PrintStats(const char *, int k, const double &r2, const double &b2, const double &hq2)
void updateXRend(Complex *gamma, Complex *gamma_prime, Complex *gamma_prime_prime, std::vector< ColorSpinorField *> r, ColorSpinorField &x, int nKrylov)
EigCGArgs * eigcg_args
preconditioner result
MultiShiftCG(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
MultiShiftSolver(SolverParam ¶m, TimeProfile &profile)
void RunDeflatedCycles(ColorSpinorField *out, ColorSpinorField *in, const double tol_threshold)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
ColorSpinorField * r_sloppy_saved_p
Shadow residual, in BiCG language.
void operator()(ColorSpinorField &out, ColorSpinorField &in)
ColorSpinorField * tmpp
high precision accumulator
cudaColorSpinorField * tmpp
PreconditionedSolver(Solver &solver, const Dirac &dirac, SolverParam ¶m, TimeProfile &profile, const char *prefix)
const DiracMatrix & matPrecon
ColorSpinorField * p
high precision accumulator
const DiracMatrix & matPrecon
ColorSpinorField * p_pre
residual passed to preconditioner
QudaUseInitGuess use_init_guess
void operator()(ColorSpinorField &out, ColorSpinorField &in)
cudaColorSpinorField * bx
void solve(ColorSpinorField &out, ColorSpinorField &in)
enum QudaVerbosity_s QudaVerbosity
const DiracMatrix & matSloppy
SolverParam(const SolverParam ¶m)
QudaPrecision precision_sloppy
void UpdateSolution(ColorSpinorField *x, ColorSpinorField *r, bool do_gels)
bool use_sloppy_partial_accumulator
PreconCG(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam ¶m, TimeProfile &profile)
ColorSpinorField * tmpp
high precision accumulator
ColorSpinorField * x_sloppy
temporary for mat-vec
void reduceDouble(double &)
bool convergenceHQ(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
int solution_accumulator_pipeline
void mat(void *out, void **link, void *in, int dagger_bit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
virtual void reconstruct(ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const =0
void RestartVT(const double beta, const double rho)
ColorSpinorField * r_pre
sloppy residual vector
enum QudaUseInitGuess_s QudaUseInitGuess
void computeMatrixPowers(std::vector< cudaColorSpinorField > &pr, cudaColorSpinorField &p, cudaColorSpinorField &r, int nsteps)
MinResExt(DiracMatrix &mat, bool orthogonal, bool apply_mat, TimeProfile &profile)
enum QudaInverterType_s QudaInverterType
const DiracMatrix & matSloppy
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
enum QudaExtLibType_s QudaExtLibType
void operator()(ColorSpinorField &out, ColorSpinorField &in)
XSD(DiracMatrix &mat, SolverParam ¶m, TimeProfile &profile)
ColorSpinorField * r_sloppy
temporary for mat-vec
void operator()(ColorSpinorField &out, ColorSpinorField &in)