58 std::vector<ColorSpinorField *>
evecs;
258 compute_true_res(true),
259 sloppy_converge(false),
272 inv_type(param.inv_type),
273 inv_type_precondition(param.inv_type_precondition),
274 preconditioner(param.preconditioner),
275 deflation_op(param.deflation_op),
276 residual_type(param.residual_type),
278 use_init_guess(param.use_init_guess),
281 use_alternative_reliable(param.use_alternative_reliable),
282 use_sloppy_partial_accumulator(param.use_sloppy_partial_accumulator),
283 solution_accumulator_pipeline(param.solution_accumulator_pipeline),
284 max_res_increase(param.max_res_increase),
285 max_res_increase_total(param.max_res_increase_total),
286 max_hq_res_increase(param.max_hq_res_increase),
287 max_hq_res_restart_total(param.max_hq_res_restart_total),
288 heavy_quark_check(param.heavy_quark_check),
289 pipeline(param.pipeline),
291 tol_restart(param.tol_restart),
292 tol_hq(param.tol_hq),
293 compute_true_res(param.compute_true_res),
294 sloppy_converge(false),
295 true_res(param.true_res),
296 true_res_hq(param.true_res_hq),
297 maxiter(param.maxiter),
303 preserve_source(param.preserve_source),
305 num_src(param.num_src),
306 num_offset(param.num_offset),
307 Nsteps(param.Nsteps),
309 precondition_cycle(param.precondition_cycle),
310 tol_precondition(param.tol_precondition),
311 maxiter_precondition(param.maxiter_precondition),
313 ca_basis(param.ca_basis),
314 ca_lambda_min(param.ca_lambda_min),
315 ca_lambda_max(param.ca_lambda_max),
316 schwarz_type(param.schwarz_type),
318 gflops(param.gflops),
322 deflation_grid(param.deflation_grid),
324 eigcg_max_restarts(param.eigcg_max_restarts),
325 max_restart_num(param.max_restart_num),
326 inc_tol(param.inc_tol),
327 eigenval_tol(param.eigenval_tol),
328 verbosity_precondition(param.verbosity_precondition),
329 is_preconditioner(false),
330 global_reduction(true),
332 extlib_type(param.extlib_type)
335 offset[i] = param.
offset[i];
347 inv_type(param.inv_type),
348 inv_type_precondition(param.inv_type_precondition),
349 preconditioner(param.preconditioner),
350 deflation_op(param.deflation_op),
351 residual_type(param.residual_type),
353 eig_param(param.eig_param),
354 use_init_guess(param.use_init_guess),
355 compute_null_vector(param.compute_null_vector),
357 use_alternative_reliable(param.use_alternative_reliable),
358 use_sloppy_partial_accumulator(param.use_sloppy_partial_accumulator),
359 solution_accumulator_pipeline(param.solution_accumulator_pipeline),
360 max_res_increase(param.max_res_increase),
361 max_res_increase_total(param.max_res_increase_total),
362 heavy_quark_check(param.heavy_quark_check),
363 pipeline(param.pipeline),
365 tol_restart(param.tol_restart),
366 tol_hq(param.tol_hq),
367 compute_true_res(param.compute_true_res),
368 sloppy_converge(param.sloppy_converge),
369 true_res(param.true_res),
370 true_res_hq(param.true_res_hq),
371 maxiter(param.maxiter),
373 precision(param.precision),
374 precision_sloppy(param.precision_sloppy),
375 precision_refinement_sloppy(param.precision_refinement_sloppy),
376 precision_precondition(param.precision_precondition),
377 preserve_source(param.preserve_source),
378 return_residual(param.return_residual),
379 num_offset(param.num_offset),
380 Nsteps(param.Nsteps),
381 Nkrylov(param.Nkrylov),
382 precondition_cycle(param.precondition_cycle),
383 tol_precondition(param.tol_precondition),
384 maxiter_precondition(param.maxiter_precondition),
386 ca_basis(param.ca_basis),
387 ca_lambda_min(param.ca_lambda_min),
388 ca_lambda_max(param.ca_lambda_max),
389 schwarz_type(param.schwarz_type),
391 gflops(param.gflops),
392 precision_ritz(param.precision_ritz),
395 deflation_grid(param.deflation_grid),
397 eigcg_max_restarts(param.eigcg_max_restarts),
398 max_restart_num(param.max_restart_num),
399 inc_tol(param.inc_tol),
400 eigenval_tol(param.eigenval_tol),
401 verbosity_precondition(param.verbosity_precondition),
402 is_preconditioner(param.is_preconditioner),
403 global_reduction(param.global_reduction),
404 mg_instance(param.mg_instance),
405 extlib_type(param.extlib_type)
408 offset[i] = param.
offset[i];
414 m = (m / 16) * 16 + 16;
415 warningQuda(
"\nSwitched eigenvector search dimension to %d\n", m);
498 bool convergence(
double r2,
double hq2,
double r2_tol,
double hq_tol);
508 bool convergenceHQ(
double r2,
double hq2,
double r2_tol,
double hq_tol);
517 bool convergenceL2(
double r2,
double hq2,
double r2_tol,
double hq_tol);
527 void PrintStats(
const char *name,
int k,
double r2,
double b2,
double hq2);
540 void PrintSummary(
const char *name,
int k,
double r2,
double b2,
double r2_tol,
double hq_tol);
546 bool deflate_init =
false;
563 virtual double flops()
const {
return 0; }
577 std::vector<ColorSpinorField*>
p;
589 (*this)(
out,
in,
nullptr, 0.0);
677 void computeMatrixPowers(std::vector<cudaColorSpinorField>&
out, std::vector<cudaColorSpinorField>&
in,
int nsteps);
778 std::vector<ColorSpinorField*>
r;
779 std::vector<ColorSpinorField*>
u;
789 int reliable(
double &rNorm,
double &maxrx,
double &maxrr,
const double &r2,
const double &
delta);
794 void computeTau(
Complex **tau,
double *sigma, std::vector<ColorSpinorField*> r,
int begin,
int size,
int j);
795 void updateR(
Complex **tau, std::vector<ColorSpinorField*> r,
int begin,
int size,
int j);
798 void updateUend(
Complex* gamma, std::vector<ColorSpinorField*> u,
int nKrylov);
846 std::vector<ColorSpinorField*>
p;
847 std::vector<ColorSpinorField*>
Ap;
912 std::vector<ColorSpinorField*>
S;
913 std::vector<ColorSpinorField*>
AS;
914 std::vector<ColorSpinorField*>
Q;
915 std::vector<ColorSpinorField*>
Qtmp;
916 std::vector<ColorSpinorField*>
AQ;
933 void compute_alpha();
943 int reliable(
double &rNorm,
double &maxrr,
int &rUpdate,
const double &r2,
const double &
delta);
1007 std::vector<ColorSpinorField*>
p;
1008 std::vector<ColorSpinorField*>
q;
1077 const char *prefix) :
1095 dirac.
prepare(in, out, x, b, solution_type);
1096 (*solver)(*
out, *
in);
1111 param(param), profile(profile) { ; }
1115 bool convergence(
const double *r2,
const double *r2_tol,
int n)
const;
1138 void operator()(std::vector<ColorSpinorField*>x,
ColorSpinorField &b, std::vector<ColorSpinorField*> &p,
double* r2_old_array );
1148 std::vector<ColorSpinorField*> p;
1150 (*this)(
out,
in, p, r2_old.get());
1152 for (
auto& pp : p)
delete pp;
1188 void solve(
Complex *psi_, std::vector<ColorSpinorField*> &p,
1207 std::vector<std::pair<ColorSpinorField*,ColorSpinorField*> > basis);
1216 std::vector<ColorSpinorField*> p,
1217 std::vector<ColorSpinorField*> q);
1264 void RestartVT(
const double beta,
const double rho);
1317 int FlexArnoldiProcedure (
const int start_idx,
const bool do_givens);
double iter_res_offset[QUDA_MAX_MULTI_SHIFT]
bool mg_instance
whether to use a global or local (node) reduction for this solver
double iter_res_offset[QUDA_MAX_MULTI_SHIFT]
enum QudaPreserveSource_s QudaPreserveSource
ColorSpinorField * x_sloppy_saved_p
bool global_reduction
whether the solver acting as a preconditioner for another solver
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
ColorSpinorField * yp
Full precision residual.
QudaSchwarzType schwarz_type
Communication-avoiding CG solver. This solver does un-preconditioned CG, running in steps of nKrylov...
virtual ~PreconditionedSolver()
QudaVerbosity verbosity_precondition
void operator()(ColorSpinorField &x, ColorSpinorField &b)
virtual double flops() const
enum QudaPrecision_s QudaPrecision
ColorSpinorField * Az
temporary for mat-vec
void updateRhsIndex(QudaInvertParam ¶m)
ColorSpinorField * p_pre
residual passed to preconditioner
Multi-Shift Conjugate Gradient Solver.
enum QudaResidualType_s QudaResidualType
ColorSpinorField * r0_saved_p
Sloppy solution vector.
#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
sloppy residual vector
QudaInverterType inv_type
const DiracMatrix & matSloppy
TimeProfile & profile
preconditioner result
QudaPrecision & cuda_prec
cudaColorSpinorField * yp
std::vector< ColorSpinorField * > AQ
const DiracMatrix & matSloppy
Communication-avoiding GCR solver. This solver does un-preconditioned GCR, first building up a polyno...
cudaColorSpinorField * xx
QudaPrecision precision_refinement_sloppy
double tol_offset[QUDA_MAX_MULTI_SHIFT]
SolverParam(const QudaInvertParam ¶m)
double offset[QUDA_MAX_MULTI_SHIFT]
QudaPrecision & cuda_prec_refinement_sloppy
std::vector< ColorSpinorField * > u
enum QudaComputeNullVector_s QudaComputeNullVector
std::vector< ColorSpinorField * > S
QudaPrecision precision_ritz
QudaInverterType inv_type_precondition
QudaPreserveSource preserve_source
int max_res_increase_total
std::vector< ColorSpinorField * > defl_tmp1
const DiracMatrix & matSloppy
ColorSpinorField * r_fullp
ColorSpinorField * r_sloppy
sloppy solution vector
QudaPrecision & cuda_prec_precondition
bool hermitian
Whether to compute q = Ap or assume it is provided.
double true_res_hq_offset[QUDA_MAX_MULTI_SHIFT]
std::vector< ColorSpinorField * > Qtmp
virtual ~MultiShiftSolver()
ColorSpinorField * yp
residual vector
GMResDRArgs * gmresdr_args
ColorSpinorField * tmp_sloppy
QudaPrecision & cuda_prec_ritz
std::vector< ColorSpinorField * > defl_tmp2
TimeProfile & profile
whether A is hermitian ot not
QudaPrecision & cuda_prec_sloppy
QudaComputeNullVector compute_null_vector
Complex * gamma_prime_prime
QudaSolutionType solution_type
const DiracMatrix & matPrecon
const DiracMatrix & matSloppy
ColorSpinorField * tmp_sloppy2
QudaResidualType residual_type
const DiracMatrix & matSloppy
double true_res_hq_offset[QUDA_MAX_MULTI_SHIFT]
void pushOutputPrefix(const char *prefix)
Push a new output prefix onto the stack.
int max_hq_res_restart_total
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
double tol_offset[QUDA_MAX_MULTI_SHIFT]
double true_res_offset[QUDA_MAX_MULTI_SHIFT]
int nvec[QUDA_MAX_MG_LEVEL]
QudaSiteSubset SiteSubset() const
std::vector< ColorSpinorField * > Ap
enum QudaSolutionType_s QudaSolutionType
bool is_preconditioner
verbosity to use for preconditioner
enum QudaSchwarzType_s QudaSchwarzType
void popOutputPrefix()
Pop the output prefix restoring the prior one on the stack.
std::vector< ColorSpinorField * > q
ColorSpinorField * yp
residual vector
double true_res_offset[QUDA_MAX_MULTI_SHIFT]
std::vector< ColorSpinorField * > AS
std::complex< double > Complex
double offset[QUDA_MAX_MULTI_SHIFT]
cudaColorSpinorField * Ar
std::vector< ColorSpinorField * > r
Sloppy temporary vector.
std::vector< ColorSpinorField * > Q
std::vector< Complex > evals
const DiracMatrix & matSloppy
ColorSpinorField * tmp_sloppy
QudaExtLibType extlib_type
ColorSpinorField * tempp
Full precision temporary.
std::vector< ColorSpinorField * > p
QudaPrecision precision_precondition
std::vector< ColorSpinorField * > evecs
ColorSpinorField * y_sloppy
temporary for mat-vec
void orthoDir(Complex **beta, std::vector< ColorSpinorField *> Ap, int k, int pipeline)
ColorSpinorField * tmp_sloppy
std::vector< ColorSpinorField * > p
void operator()(std::vector< ColorSpinorField *> out, ColorSpinorField &in)
Run multi-shift and return Krylov-space at the end of the solve in p and r2_old_arry.
cpuColorSpinorField * out
const DiracMatrix & matSloppy
Conjugate-Gradient Solver.
bool apply_mat
Whether to construct an orthogonal basis or not.
This computes the optimum guess for the system Ax=b in the L2 residual norm. For use in the HMD force...
Main header file for the QUDA library.
enum QudaCABasis_s QudaCABasis
ColorSpinorField * yp
residual vector
ColorSpinorField * r_sloppy
EigCGArgs * eigcg_args
preconditioner result
MultiShiftSolver(SolverParam ¶m, TimeProfile &profile)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
Run CG.
ColorSpinorField * r_sloppy_saved_p
Shadow residual, in BiCG language.
int reliable(double &rNorm, double &maxrx, double &maxrr, const double &r2, const double &delta)
ColorSpinorField * tmpp
high precision accumulator
PreconditionedSolver(Solver &solver, const Dirac &dirac, SolverParam ¶m, TimeProfile &profile, const char *prefix)
bool use_alternative_reliable
const DiracMatrix & matPrecon
ColorSpinorField * p
high precision accumulator
ColorSpinorField * x_sloppy
const DiracMatrix & matPrecon
ColorSpinorField * p_pre
residual passed to preconditioner
QudaUseInitGuess use_init_guess
cudaColorSpinorField * bx
enum QudaVerbosity_s QudaVerbosity
const DiracMatrix & matSloppy
SolverParam(const SolverParam ¶m)
QudaPrecision precision_sloppy
bool use_sloppy_partial_accumulator
ColorSpinorField * tmpp
high precision accumulator
void reduceDouble(double &)
int solution_accumulator_pipeline
const DiracMatrix & matSloppy
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
ColorSpinorField * r_pre
sloppy residual vector
enum QudaUseInitGuess_s QudaUseInitGuess
enum QudaInverterType_s QudaInverterType
const DiracMatrix & matSloppy
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
enum QudaExtLibType_s QudaExtLibType
void updateR()
update the radius for halos.
ColorSpinorField * r_sloppy
temporary for mat-vec