17 Solver(param, profile), mat(mat), matSloppy(matSloppy), rp(nullptr), r_sloppy(nullptr),
18 Arp(nullptr), tmpp(nullptr), tmp_sloppy(nullptr), x_sloppy(nullptr),
init(false)
21 errorQuda(
"For multiplicative Schwarz, number of solver steps %d must be even", param.
Nsteps);
68 tmp_sloppy = (!
tmpp || mixed) ? ColorSpinorField::Create(csParam) :
nullptr;
106 bool converged =
false;
118 scale = c2 > 0.0 ?
sqrt(c2) : 1.0;
130 while (k < param.maxiter && r2 > 0.0) {
143 printfQuda(
"MR: %d cycle, %d iterations, <r|A|r> = (%e, %e)\n", step, k+1, Ar3.x, Ar3.y);
171 converged = (step <
param.
Nsteps && r2 > stop) ?
false :
true;
178 printfQuda(
"MR: %d cycle, Converged after %d iterations, relative residual: true = %e\n",
193 printfQuda(
"MR: %d cycle, Converged after %d iterations, relative residual: iterated = %e\n",
void ax(double a, ColorSpinorField &x)
bool global_reduction
whether the solver acting as a preconditioner for another solver
QudaSchwarzType schwarz_type
void setPrecision(QudaPrecision precision, QudaPrecision ghost_precision=QUDA_INVALID_PRECISION, bool force_native=false)
void caxpyXmazMR(const Complex &a, ColorSpinorField &x, ColorSpinorField &y, ColorSpinorField &z)
double3 cDotProductNormA(ColorSpinorField &a, ColorSpinorField &b)
MR(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam ¶m, TimeProfile &profile)
QudaVerbosity getVerbosity()
#define checkPrecision(...)
double norm2(const ColorSpinorField &a)
__host__ __device__ ValueType sqrt(ValueType x)
cudaColorSpinorField * tmp
static ColorSpinorField * Create(const ColorSpinorParam ¶m)
void copy(ColorSpinorField &dst, const ColorSpinorField &src)
double xmyNorm(ColorSpinorField &x, ColorSpinorField &y)
QudaPreserveSource preserve_source
double Last(QudaProfileType idx)
const DiracMatrix & matSloppy
QudaResidualType residual_type
void axpy(double a, ColorSpinorField &x, ColorSpinorField &y)
bool is_preconditioner
verbosity to use for preconditioner
std::complex< double > Complex
void init()
Create the CUBLAS context.
void zero(ColorSpinorField &a)
void commAsyncReductionSet(bool global_reduce)
ColorSpinorField * tmp_sloppy
void operator()(ColorSpinorField &out, ColorSpinorField &in)
void caxpyXmaz(const Complex &a, ColorSpinorField &x, ColorSpinorField &y, ColorSpinorField &z)
unsigned long long flops() const
ColorSpinorField * r_sloppy
ColorSpinorField * x_sloppy
QudaUseInitGuess use_init_guess
QudaPrecision precision_sloppy
void mat(void *out, void **link, void *in, int dagger_bit, int mu, QudaPrecision sPrecision, QudaPrecision gPrecision)
void commGlobalReductionSet(bool global_reduce)