QUDA  0.9.0
invert_quda.h
Go to the documentation of this file.
1 #ifndef _INVERT_QUDA_H
2 #define _INVERT_QUDA_H
3 
4 #include <quda.h>
5 #include <quda_internal.h>
6 #include <dirac_quda.h>
7 #include <color_spinor_field.h>
8 #include <vector>
9 
10 namespace quda {
11 
15  struct SolverParam {
20 
26 
27 
32 
36  void *deflation_op;
37 
48 
51 
54 
56  double delta;
57 
60 
70 
75 
80 
83 
85  int pipeline;
86 
88  double tol;
89 
91  double tol_restart;
92 
94  double tol_hq;
95 
98 
100  double true_res;
101 
103  double true_res_hq;
104 
106  int maxiter;
107 
109  int iter;
110 
113 
116 
119 
122 
125 
126 
128  int num_src;
129 
130  // Multi-shift solver parameters
131 
134 
137 
140 
143 
146 
149 
152 
153 
155  int Nsteps;
156 
158  int Nkrylov;
159 
162 
165 
168 
170  double omega;
171 
172 
173 
176 
178  double secs;
179 
181  double gflops;
182 
183  // Incremental EigCG solver parameters
185  QudaPrecision precision_ritz;//also search space precision
186 
187  int nev;//number of eigenvectors produced by EigCG
188  int m;//Dimension of the search space
190  int rhs_idx;
191 
194  double inc_tol;
195  double eigenval_tol;
196 
198 
200 
202 
205 
211 
240  {
241  for (int i=0; i<num_offset; i++) {
242  offset[i] = param.offset[i];
243  tol_offset[i] = param.tol_offset[i];
244  tol_hq_offset[i] = param.tol_hq_offset[i];
245  }
246 
247  if(param.rhs_idx != 0 && (param.inv_type==QUDA_INC_EIGCG_INVERTER || param.inv_type==QUDA_GMRESDR_PROJ_INVERTER)){
248  rhs_idx = param.rhs_idx;
249  }
250  }
251 
274  {
275  for (int i=0; i<num_offset; i++) {
276  offset[i] = param.offset[i];
277  tol_offset[i] = param.tol_offset[i];
278  tol_hq_offset[i] = param.tol_hq_offset[i];
279  }
280 
281  if((param.inv_type == QUDA_INC_EIGCG_INVERTER || param.inv_type == QUDA_EIGCG_INVERTER) && m % 16){//current hack for the magma library
282  m = (m / 16) * 16 + 16;
283  warningQuda("\nSwitched eigenvector search dimension to %d\n", m);
284  }
285  if(param.rhs_idx != 0 && (param.inv_type==QUDA_INC_EIGCG_INVERTER || param.inv_type==QUDA_GMRESDR_PROJ_INVERTER)){
286  rhs_idx = param.rhs_idx;
287  }
288  }
289 
291 
297  param.true_res = true_res;
298  param.true_res_hq = true_res_hq;
299  param.iter += iter;
301  param.gflops += gflops;
302  param.secs += secs;
303  if (offset >= 0) {
304  param.true_res_offset[offset] = true_res_offset[offset];
305  param.iter_res_offset[offset] = iter_res_offset[offset];
306  param.true_res_hq_offset[offset] = true_res_hq_offset[offset];
307  } else {
308  for (int i=0; i<num_offset; i++) {
309  param.true_res_offset[i] = true_res_offset[i];
310  param.iter_res_offset[i] = iter_res_offset[i];
311  param.true_res_hq_offset[i] = true_res_hq_offset[i];
312  }
313  }
314  //for incremental eigCG:
315  param.rhs_idx = rhs_idx;
316  }
317 
319  //for incremental eigCG:
320  rhs_idx = param.rhs_idx;
321  }
322 
323  };
324 
325  class Solver {
326 
327  protected:
330 
331  public:
333  virtual ~Solver() { ; }
334 
335  virtual void operator()(ColorSpinorField &out, ColorSpinorField &in) = 0;
336 
337  virtual void solve(ColorSpinorField &out, ColorSpinorField &in);
338 
339 
343  static Solver* create(SolverParam &param, DiracMatrix &mat, DiracMatrix &matSloppy,
344  DiracMatrix &matPrecon, TimeProfile &profile);
345 
350  static double stopping(const double &tol, const double &b2, QudaResidualType residual_type);
351 
359  bool convergence(const double &r2, const double &hq2, const double &r2_tol,
360  const double &hq_tol);
361 
369  bool convergenceHQ(const double &r2, const double &hq2, const double &r2_tol,
370  const double &hq_tol);
371 
379  bool convergenceL2(const double &r2, const double &hq2, const double &r2_tol,
380  const double &hq_tol);
381 
385  void PrintStats(const char*, int k, const double &r2, const double &b2, const double &hq2);
386 
393  void PrintSummary(const char *name, int k, const double &r2, const double &b2);
394 
399  virtual double flops() const { return 0; }
400  };
401 
402  class CG : public Solver {
403 
404  private:
405  const DiracMatrix &mat;
407  // pointers to fields to avoid multiple creation overhead
409  std::vector<ColorSpinorField*> p;
410  bool init;
411 
412  public:
414  virtual ~CG();
415 
418  };
419 
420  class CGNE : public CG {
421 
422  private:
426  bool init;
427 
428  public:
430  virtual ~CGNE();
431 
433  };
434 
435  class CGNR : public CG {
436 
437  private:
441  bool init;
442 
443  public:
445  virtual ~CGNR();
446 
448  };
449 
450 
451 
452  class MPCG : public Solver {
453  private:
454  const DiracMatrix &mat;
456  void computeMatrixPowers(std::vector<cudaColorSpinorField>& out, std::vector<cudaColorSpinorField>& in, int nsteps);
457 
458 
459  public:
461  virtual ~MPCG();
462 
464  };
465 
466 
467 
468  class PreconCG : public Solver {
469  private:
470  const DiracMatrix &mat;
473 
475  SolverParam Kparam; // parameters for preconditioner solve
476 
477  public:
479 
480  virtual ~PreconCG();
481 
483  };
484 
485 
486  class BiCGstab : public Solver {
487 
488  private:
492 
493  // pointers to fields to avoid multiple creation overhead
495  bool init;
496 
497  public:
500  virtual ~BiCGstab();
501 
503  };
504 
505  class SimpleBiCGstab : public Solver {
506 
507  private:
509 
510  // pointers to fields to avoid multiple creation overhead
512  bool init;
513 
514  public:
516  virtual ~SimpleBiCGstab();
517 
519  };
520 
521  class MPBiCGstab : public Solver {
522 
523  private:
525  void computeMatrixPowers(std::vector<cudaColorSpinorField>& pr, cudaColorSpinorField& p, cudaColorSpinorField& r, int nsteps);
526 
527  public:
529  virtual ~MPBiCGstab();
530 
532  };
533 
534  class BiCGstabL : public Solver {
535 
536  private:
539 
543  int nKrylov; // in the language of BiCGstabL, this is L.
544 
545  // Various coefficients and params needed on each iteration.
546  Complex rho0, rho1, alpha, omega, beta; // Various coefficients for the BiCG part of BiCGstab-L.
547  Complex *gamma, *gamma_prime, *gamma_prime_prime; // Parameters for MR part of BiCGstab-L. (L+1) length.
548  Complex **tau; // Parameters for MR part of BiCGstab-L. Tech. modified Gram-Schmidt coeffs. (L+1)x(L+1) length.
549  double *sigma; // Parameters for MR part of BiCGstab-L. Tech. the normalization part of Gram-Scmidt. (L+1) length.
550 
551  // pointers to fields to avoid multiple creation overhead
552  // full precision fields
555  // sloppy precision fields
557  std::vector<ColorSpinorField*> r; // Current residual + intermediate residual values, along the MR.
558  std::vector<ColorSpinorField*> u; // Search directions.
559 
560  // Saved, preallocated vectors. (may or may not get used depending on precision.)
564 
568  int reliable(double &rNorm, double &maxrx, double &maxrr, const double &r2, const double &delta);
569 
573  void computeTau(Complex **tau, double *sigma, std::vector<ColorSpinorField*> r, int begin, int size, int j);
574  void updateR(Complex **tau, std::vector<ColorSpinorField*> r, int begin, int size, int j);
575  void orthoDir(Complex **tau, double* sigma, std::vector<ColorSpinorField*> r, int j, int pipeline);
576 
577  void updateUend(Complex* gamma, std::vector<ColorSpinorField*> u, int nKrylov);
579  std::vector<ColorSpinorField*> r, ColorSpinorField& x, int nKrylov);
580 
584  bool init;
585 
586  std::string solver_name; // holds BiCGstab-l, where 'l' literally equals nKrylov.
587 
588  public:
590  virtual ~BiCGstabL();
591 
593  };
594 
595  class GCR : public Solver {
596 
597  private:
598  const DiracMatrix &mat;
601 
603  SolverParam Kparam; // parameters for preconditioner solve
604 
608  int nKrylov;
609 
612  double *gamma;
613 
617  bool init;
618 
627 
628  std::vector<ColorSpinorField*> p; // GCR direction vectors
629  std::vector<ColorSpinorField*> Ap; // mat * direction vectors
630 
631  public:
634 
640  virtual ~GCR();
641 
643  };
644 
645  class MR : public Solver {
646 
647  private:
648  const DiracMatrix &mat;
653  ColorSpinorField *yp; //Holds initial guess if applicable
654  bool init;
657 
658  public:
660  virtual ~MR();
661 
663  };
664 
665  // Steepest descent solver used as a preconditioner
666  class SD : public Solver {
667  private:
668  const DiracMatrix &mat;
672  bool init;
673 
674  public:
676  virtual ~SD();
677 
678 
680  };
681 
682  // Extended Steepest Descent solver used for overlapping DD preconditioning
683  class XSD : public Solver {
684  private:
685  const DiracMatrix &mat;
688  SD *sd; // extended sd is implemented using standard sd
689  bool init;
690  int R[4];
691 
692  public:
694  virtual ~XSD();
695 
697  };
698 
699 
700  class PreconditionedSolver : public Solver {
701 
702  private:
704  const Dirac &dirac;
705  const char *prefix;
706 
707  public:
710  virtual ~PreconditionedSolver() { delete solver; }
711 
714 
716 
717  ColorSpinorField *out=nullptr;
718  ColorSpinorField *in=nullptr;
719 
720  dirac.prepare(in, out, x, b, solution_type);
721  (*solver)(*out, *in);
722  dirac.reconstruct(x, b, solution_type);
723 
724  setOutputPrefix("");
725  }
726  };
727 
728 
730 
731  protected:
734 
735  public:
737  param(param), profile(profile) { ; }
738  virtual ~MultiShiftSolver() { ; }
739 
740  virtual void operator()(std::vector<ColorSpinorField*> out, ColorSpinorField &in) = 0;
741  bool convergence(const double *r2, const double *r2_tol, int n) const;
742  };
743 
745 
746  protected:
747  const DiracMatrix &mat;
749 
750  public:
752  virtual ~MultiShiftCG();
753 
754  void operator()(std::vector<ColorSpinorField*> out, ColorSpinorField &in);
755  };
756 
757 
758 
771  class MinResExt {
772 
773  protected:
774  const DiracMatrix &mat;
775  bool orthogonal;
776  bool apply_mat;
778 
779  public:
787  virtual ~MinResExt();
788 
795  std::vector<std::pair<ColorSpinorField*,ColorSpinorField*> > basis);
796 
804  std::vector<ColorSpinorField*> p,
805  std::vector<ColorSpinorField*> q);
806  };
807 
809 
810  //forward declaration
811  class EigCGArgs;
812 
813  class IncEigCG : public Solver {
814 
815  private:
819 
821  SolverParam Kparam; // parameters for preconditioner solve
822 
823  ColorSpinorFieldSet *Vm; //eigCG search vectors (spinor matrix of size eigen_vector_length x m)
824 
827  ColorSpinorField* p; // conjugate vector
828  ColorSpinorField* Ap; // mat * conjugate vector
830  ColorSpinorField* Az; // mat * conjugate vector from the previous iteration
833 
835 
836  TimeProfile &profile; //time profile for initCG solver
837 
838  bool init;
839 
840  public:
841 
843 
844  virtual ~IncEigCG();
845 
846  void RestartVT(const double beta, const double rho);
847  void UpdateVm(ColorSpinorField &res, double beta, double sqrtr2);
848  //EigCG solver:
850  //InitCG solver:
852  //Incremental eigCG solver (for eigcg and initcg calls)
854  };
855 
856 //forward declaration
857  class GMResDRArgs;
858 
859  class GMResDR : public Solver {
860 
861  private:
862 
866 
868  SolverParam Kparam; // parameters for preconditioner solve
869 
870  ColorSpinorFieldSet *Vm;//arnoldi basis vectors, size (m+1)
871  ColorSpinorFieldSet *Zm;//arnoldi basis vectors, size (m+1)
872 
879 
880  TimeProfile &profile; //time profile for initCG solver
881 
883 
884  bool init;
885 
886  public:
887 
890 
891  virtual ~GMResDR();
892 
893  //GMRES-DR solver
895  //
896  //GMRESDR method
897  void RunDeflatedCycles (ColorSpinorField *out, ColorSpinorField *in, const double tol_threshold);
898  //
899  int FlexArnoldiProcedure (const int start_idx, const bool do_givens);
900 
901  void RestartVZH();
902 
903  void UpdateSolution(ColorSpinorField *x, ColorSpinorField *r, bool do_gels);
904 
905  };
906 
907 } // namespace quda
908 
909 #endif // _INVERT_QUDA_H
virtual ~Solver()
Definition: invert_quda.h:333
double iter_res_offset[QUDA_MAX_MULTI_SHIFT]
Definition: invert_quda.h:148
bool convergence(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
Definition: solver.cpp:139
enum QudaPreserveSource_s QudaPreserveSource
ColorSpinorField * x_sloppy_saved_p
Definition: invert_quda.h:561
bool global_reduction
whether the solver acting as a preconditioner for another solver
Definition: invert_quda.h:201
ColorSpinorField * yp
Full precision residual.
Definition: invert_quda.h:554
QudaSchwarzType schwarz_type
Definition: invert_quda.h:175
virtual ~MPCG()
cudaColorSpinorField * r
Definition: invert_quda.h:670
QudaVerbosity verbosity_precondition
Definition: invert_quda.h:197
void operator()(ColorSpinorField &x, ColorSpinorField &b)
Definition: invert_quda.h:712
void operator()(ColorSpinorField &out, ColorSpinorField &in)
virtual double flops() const
Definition: invert_quda.h:399
enum QudaPrecision_s QudaPrecision
ColorSpinorField * vp
Definition: invert_quda.h:494
ColorSpinorField * Az
temporary for mat-vec
Definition: invert_quda.h:830
static double stopping(const double &tol, const double &b2, QudaResidualType residual_type)
Definition: solver.cpp:122
virtual ~CGNR()
Definition: inv_cg_quda.cpp:71
void updateRhsIndex(QudaInvertParam &param)
Definition: invert_quda.h:318
ColorSpinorField * r_pre
sloppy residual vector
Definition: invert_quda.h:624
cudaColorSpinorField * vp
Definition: invert_quda.h:511
DiracMMdag mmdag
Definition: invert_quda.h:423
ColorSpinorField * p_pre
residual passed to preconditioner
Definition: invert_quda.h:832
DiracMatrix & matSloppy
Definition: invert_quda.h:817
MR(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam &param, TimeProfile &profile)
Definition: inv_mr_quda.cpp:16
enum QudaResidualType_s QudaResidualType
ColorSpinorField * r0_saved_p
Sloppy solution vector.
Definition: invert_quda.h:562
DiracMdagM mdagm
Definition: invert_quda.h:438
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
Definition: invert_quda.h:19
ColorSpinorField * tmpp
Definition: invert_quda.h:829
std::vector< ColorSpinorField * > p
residual vector for doing multi-cycle preconditioning
Definition: invert_quda.h:628
SolverParam & param
Definition: invert_quda.h:732
ColorSpinorField * yp
Definition: invert_quda.h:653
DiracMatrix & mat
Definition: invert_quda.h:816
void operator()(ColorSpinorField &x, ColorSpinorField &b, std::vector< std::pair< ColorSpinorField *, ColorSpinorField *> > basis)
Definition: inv_mre.cpp:203
SolverParam Kparam
Definition: invert_quda.h:603
int FlexArnoldiProcedure(const int start_idx, const bool do_givens)
virtual ~CGNE()
Definition: inv_cg_quda.cpp:40
const DiracMatrix & matSloppy
Definition: invert_quda.h:406
std::complex< double > Complex
Definition: eig_variables.h:13
const DiracMatrix & mat
Definition: invert_quda.h:747
void setOutputPrefix(const char *prefix)
Definition: util_quda.cpp:68
bool convergenceL2(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
Definition: solver.cpp:167
ColorSpinorField * rp
Definition: invert_quda.h:873
TimeProfile & profile
preconditioner result
Definition: invert_quda.h:880
cudaColorSpinorField * yp
Definition: invert_quda.h:511
ColorSpinorField * tp
Definition: invert_quda.h:494
ColorSpinorField * Ap
Definition: invert_quda.h:828
BiCGstabL(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam &param, TimeProfile &profile)
virtual ~XSD()
cudaColorSpinorField * xx
Definition: invert_quda.h:686
IncEigCG(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam &param, TimeProfile &profile)
void computeTau(Complex **tau, double *sigma, std::vector< ColorSpinorField *> r, int begin, int size, int j)
bool init
Definition: invert_quda.h:672
int initCGsolve(ColorSpinorField &out, ColorSpinorField &in)
double tol_offset[QUDA_MAX_MULTI_SHIFT]
Definition: invert_quda.h:139
double * gamma
Definition: invert_quda.h:612
TimeProfile & profile
Definition: invert_quda.h:329
SolverParam(const QudaInvertParam &param)
Definition: invert_quda.h:217
void operator()(ColorSpinorField &out, ColorSpinorField &in)
double offset[QUDA_MAX_MULTI_SHIFT]
Definition: invert_quda.h:136
const DiracMatrix & mat
Definition: invert_quda.h:405
ColorSpinorFieldSet * Vm
Definition: invert_quda.h:870
Complex * gamma
Definition: invert_quda.h:547
BiCGstab(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam &param, TimeProfile &profile)
TimeProfile & profile
Definition: invert_quda.h:733
std::vector< ColorSpinorField * > u
Definition: invert_quda.h:558
enum QudaComputeNullVector_s QudaComputeNullVector
Complex * gamma_prime
Definition: invert_quda.h:547
GMResDR(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam &param, TimeProfile &profile)
int eigCGsolve(ColorSpinorField &out, ColorSpinorField &in)
cudaColorSpinorField * rp
Definition: invert_quda.h:511
int nvec
Definition: test_util.cpp:1635
QudaPrecision precision_ritz
Definition: invert_quda.h:185
QudaInverterType inv_type_precondition
Definition: invert_quda.h:25
QudaPreserveSource preserve_source
Definition: invert_quda.h:121
void operator()(ColorSpinorField &out, ColorSpinorField &in)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
int max_res_increase_total
Definition: invert_quda.h:79
ColorSpinorField * rM
preconditioner result
Definition: invert_quda.h:626
QudaPrecision & cuda_prec_precondition
Complex ** beta
Definition: invert_quda.h:611
ColorSpinorField * r_fullp
Definition: invert_quda.h:553
ColorSpinorField * r_sloppy
sloppy solution vector
Definition: invert_quda.h:623
DiracMatrix & mat
Definition: invert_quda.h:508
ColorSpinorField * xp
Definition: invert_quda.h:425
ColorSpinorField * bp
Definition: invert_quda.h:440
std::string solver_name
Definition: invert_quda.h:586
bool allocate_y
Definition: invert_quda.h:656
virtual void operator()(ColorSpinorField &out, ColorSpinorField &in)=0
DiracMatrix & mat
Definition: invert_quda.h:537
Complex * alpha
Definition: invert_quda.h:610
void operator()(ColorSpinorField &out, ColorSpinorField &in)
Definition: inv_sd_quda.cpp:34
const DiracMatrix & mat
Definition: invert_quda.h:454
int pipeline
Definition: test_util.cpp:1632
virtual ~MultiShiftSolver()
Definition: invert_quda.h:738
ColorSpinorField * yp
residual vector
Definition: invert_quda.h:874
CGNE(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam &param, TimeProfile &profile)
Definition: inv_cg_quda.cpp:36
QudaGaugeParam param
Definition: pack_test.cpp:17
DiracMdagM mdagmSloppy
Definition: invert_quda.h:439
#define b
bool init
Definition: invert_quda.h:410
GMResDRArgs * gmresdr_args
Definition: invert_quda.h:882
QudaPrecision & cuda_prec_ritz
DiracMatrix & mat
Definition: invert_quda.h:524
TimeProfile & profile
Whether to compute q = Ap or assume it is provided.
Definition: invert_quda.h:777
GCR(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam &param, TimeProfile &profile)
cudaColorSpinorField * pp
Definition: invert_quda.h:511
virtual ~PreconCG()
bool convergence(const double *r2, const double *r2_tol, int n) const
Definition: solver.cpp:216
MPCG(DiracMatrix &mat, SolverParam &param, TimeProfile &profile)
SimpleBiCGstab(DiracMatrix &mat, SolverParam &param, TimeProfile &profile)
QudaComputeNullVector compute_null_vector
Definition: invert_quda.h:53
Complex * gamma_prime_prime
Definition: invert_quda.h:547
Solver * K
Definition: invert_quda.h:867
cudaColorSpinorField * tp
Definition: invert_quda.h:511
Solver * K
Definition: invert_quda.h:602
void PrintSummary(const char *name, int k, const double &r2, const double &b2)
Definition: solver.cpp:194
const DiracMatrix & matPrecon
Definition: invert_quda.h:472
double tol
Definition: test_util.cpp:1647
static unsigned int delta
const DiracMatrix & matSloppy
Definition: invert_quda.h:649
QudaPrecision & cuda_prec_sloppy
QudaResidualType residual_type
Definition: invert_quda.h:47
const DiracMatrix & matSloppy
Definition: invert_quda.h:748
CG(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam &param, TimeProfile &profile)
Definition: inv_cg_quda.cpp:21
double true_res_hq_offset[QUDA_MAX_MULTI_SHIFT]
Definition: invert_quda.h:151
void updateInvertParam(QudaInvertParam &param, int offset=-1)
Definition: invert_quda.h:296
SolverParam Kparam
Definition: invert_quda.h:868
QudaPrecision cuda_prec
Definition: covdev_test.cpp:34
virtual ~GCR()
const DiracMatrix & matSloppy
Definition: invert_quda.h:490
virtual void prepare(ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const =0
cpuColorSpinorField * in
static Solver * create(SolverParam &param, DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, TimeProfile &profile)
Definition: solver.cpp:13
void operator()(ColorSpinorField &out, ColorSpinorField &in)
static __inline__ size_t p
int max_search_dim
Definition: test_util.cpp:1670
TimeProfile & profile
Definition: invert_quda.h:836
void UpdateVm(ColorSpinorField &res, double beta, double sqrtr2)
const DiracMatrix & mat
Definition: invert_quda.h:685
const DiracMatrix & mat
Definition: invert_quda.h:470
DiracMatrix & matPrecon
Definition: invert_quda.h:865
#define warningQuda(...)
Definition: util_quda.h:101
ColorSpinorField * Arp
Definition: invert_quda.h:651
std::vector< ColorSpinorField * > Ap
Definition: invert_quda.h:629
enum QudaSolutionType_s QudaSolutionType
ColorSpinorField * tmpp
Definition: invert_quda.h:408
bool is_preconditioner
verbosity to use for preconditioner
Definition: invert_quda.h:199
enum QudaSchwarzType_s QudaSchwarzType
virtual void operator()(std::vector< ColorSpinorField *> out, ColorSpinorField &in)=0
ColorSpinorField * yp
residual vector
Definition: invert_quda.h:620
double true_res_offset[QUDA_MAX_MULTI_SHIFT]
Definition: invert_quda.h:145
void operator()(ColorSpinorField &out, ColorSpinorField &in)
CGNR(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam &param, TimeProfile &profile)
Definition: inv_cg_quda.cpp:67
ColorSpinorField * rp
Definition: invert_quda.h:494
cudaColorSpinorField * Ar
Definition: invert_quda.h:669
std::vector< ColorSpinorField * > r
Sloppy temporary vector.
Definition: invert_quda.h:557
void orthoDir(Complex **tau, double *sigma, std::vector< ColorSpinorField *> r, int j, int pipeline)
ColorSpinorField * rp
Definition: invert_quda.h:650
DiracMMdag mmdagSloppy
Definition: invert_quda.h:424
bool init
Definition: invert_quda.h:654
const DiracMatrix & matSloppy
Definition: invert_quda.h:538
void updateUend(Complex *gamma, std::vector< ColorSpinorField *> u, int nKrylov)
ColorSpinorField * p_pre
residual passed to preconditioner
Definition: invert_quda.h:625
ColorSpinorField * rp
Definition: invert_quda.h:825
double tol_precondition
Definition: invert_quda.h:164
cudaColorSpinorField * y
Definition: invert_quda.h:671
ColorSpinorField * rp
Definition: invert_quda.h:408
QudaExtLibType extlib_type
whether to use a global or local (node) reduction for this solver
Definition: invert_quda.h:204
ColorSpinorField * tempp
Full precision temporary.
Definition: invert_quda.h:556
std::vector< ColorSpinorField * > p
Definition: invert_quda.h:409
QudaPrecision precision_precondition
Definition: invert_quda.h:118
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 &param, TimeProfile &profile)
Definition: inv_sd_quda.cpp:17
virtual void solve(ColorSpinorField &out, ColorSpinorField &in)
Definition: solver.cpp:114
int R[4]
Definition: invert_quda.h:690
QudaPrecision precision
Definition: invert_quda.h:112
virtual ~SD()
Definition: inv_sd_quda.cpp:23
Solver(SolverParam &param, TimeProfile &profile)
Definition: invert_quda.h:332
SolverParam & param
Definition: invert_quda.h:328
bool allocate_r
Definition: invert_quda.h:655
void operator()(std::vector< ColorSpinorField *> out, ColorSpinorField &in)
ColorSpinorFieldSet * Zm
Definition: invert_quda.h:871
void updateR(Complex **tau, std::vector< ColorSpinorField *> r, int begin, int size, int j)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
Definition: inv_cg_quda.cpp:79
cpuColorSpinorField * out
ColorSpinorField * yp
Definition: invert_quda.h:408
ColorSpinorField * r_pre
Definition: invert_quda.h:831
bool apply_mat
Whether to construct an orthogonal basis or not.
Definition: invert_quda.h:776
DiracMatrix & matSloppy
Definition: invert_quda.h:864
Main header file for the QUDA library.
DiracMatrix & mat
Definition: invert_quda.h:863
MPBiCGstab(DiracMatrix &mat, SolverParam &param, TimeProfile &profile)
void operator()(ColorSpinorField &out, ColorSpinorField &in)
Definition: inv_mr_quda.cpp:34
void * preconditioner
Definition: invert_quda.h:31
ColorSpinorField * yp
residual vector
Definition: invert_quda.h:826
virtual ~MinResExt()
Definition: inv_mre.cpp:15
void PrintStats(const char *, int k, const double &r2, const double &b2, const double &hq2)
Definition: solver.cpp:179
void updateXRend(Complex *gamma, Complex *gamma_prime, Complex *gamma_prime_prime, std::vector< ColorSpinorField *> r, ColorSpinorField &x, int nKrylov)
EigCGArgs * eigcg_args
preconditioner result
Definition: invert_quda.h:834
MultiShiftCG(DiracMatrix &mat, DiracMatrix &matSloppy, SolverParam &param, TimeProfile &profile)
MultiShiftSolver(SolverParam &param, TimeProfile &profile)
Definition: invert_quda.h:736
void RunDeflatedCycles(ColorSpinorField *out, ColorSpinorField *in, const double tol_threshold)
SolverParam Kparam
Definition: invert_quda.h:475
void operator()(ColorSpinorField &out, ColorSpinorField &in)
ColorSpinorField * r_sloppy_saved_p
Shadow residual, in BiCG language.
Definition: invert_quda.h:563
ColorSpinorField * tmpp
Definition: invert_quda.h:652
void operator()(ColorSpinorField &out, ColorSpinorField &in)
ColorSpinorField * tmpp
Definition: invert_quda.h:494
ColorSpinorField * tmpp
high precision accumulator
Definition: invert_quda.h:621
cudaColorSpinorField * tmpp
Definition: invert_quda.h:511
DiracMatrix & matPrecon
Definition: invert_quda.h:818
double * sigma
Definition: invert_quda.h:549
PreconditionedSolver(Solver &solver, const Dirac &dirac, SolverParam &param, TimeProfile &profile, const char *prefix)
Definition: invert_quda.h:708
virtual ~MR()
Definition: inv_mr_quda.cpp:22
const DiracMatrix & mat
Definition: invert_quda.h:598
ColorSpinorField * rp
Definition: invert_quda.h:619
const DiracMatrix & mat
Definition: invert_quda.h:648
const DiracMatrix & matPrecon
Definition: invert_quda.h:491
ColorSpinorField * p
high precision accumulator
Definition: invert_quda.h:827
const DiracMatrix & matPrecon
Definition: invert_quda.h:600
ColorSpinorField * p_pre
residual passed to preconditioner
Definition: invert_quda.h:878
ColorSpinorField * App
Definition: invert_quda.h:408
QudaUseInitGuess use_init_guess
Definition: invert_quda.h:50
void operator()(ColorSpinorField &out, ColorSpinorField &in)
Definition: inv_cg_quda.cpp:48
cudaColorSpinorField * bx
Definition: invert_quda.h:687
void solve(ColorSpinorField &out, ColorSpinorField &in)
enum QudaVerbosity_s QudaVerbosity
const DiracMatrix & matSloppy
Definition: invert_quda.h:599
SolverParam(const SolverParam &param)
Definition: invert_quda.h:252
QudaPrecision precision_sloppy
Definition: invert_quda.h:115
void UpdateSolution(ColorSpinorField *x, ColorSpinorField *r, bool do_gels)
bool use_sloppy_partial_accumulator
Definition: invert_quda.h:59
PreconCG(DiracMatrix &mat, DiracMatrix &matSloppy, DiracMatrix &matPrecon, SolverParam &param, TimeProfile &profile)
ColorSpinorField * tmpp
high precision accumulator
Definition: invert_quda.h:875
SolverParam Kparam
Definition: invert_quda.h:821
ColorSpinorField * x_sloppy
temporary for mat-vec
Definition: invert_quda.h:622
void reduceDouble(double &)
bool convergenceHQ(const double &r2, const double &hq2, const double &r2_tol, const double &hq_tol)
Definition: solver.cpp:156
virtual ~CG()
Definition: inv_cg_quda.cpp:25
int solution_accumulator_pipeline
Definition: invert_quda.h:69
int gcrNkrylov
Definition: test_util.cpp:1631
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 * pp
Definition: invert_quda.h:494
void RestartVT(const double beta, const double rho)
ColorSpinorField * r_pre
sloppy residual vector
Definition: invert_quda.h:877
const DiracMatrix & mat
Definition: invert_quda.h:668
enum QudaUseInitGuess_s QudaUseInitGuess
const DiracMatrix & mat
Definition: invert_quda.h:774
void computeMatrixPowers(std::vector< cudaColorSpinorField > &pr, cudaColorSpinorField &p, cudaColorSpinorField &r, int nsteps)
MinResExt(DiracMatrix &mat, bool orthogonal, bool apply_mat, TimeProfile &profile)
Definition: inv_mre.cpp:10
enum QudaInverterType_s QudaInverterType
const DiracMatrix & matSloppy
Definition: invert_quda.h:471
DiracMatrix & mat
Definition: invert_quda.h:489
ColorSpinorFieldSet * Vm
Definition: invert_quda.h:823
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
Definition: invert_quda.h:142
enum QudaExtLibType_s QudaExtLibType
void operator()(ColorSpinorField &out, ColorSpinorField &in)
Complex ** tau
Definition: invert_quda.h:548
XSD(DiracMatrix &mat, SolverParam &param, TimeProfile &profile)
ColorSpinorField * yp
Definition: invert_quda.h:494
ColorSpinorField * r_sloppy
temporary for mat-vec
Definition: invert_quda.h:876
void operator()(ColorSpinorField &out, ColorSpinorField &in)