11 #define GPU_MULTIGRID_DOUBLE 54 std::vector<ColorSpinorField*> &
B;
100 std::vector<ColorSpinorField*> &
B,
133 std::vector<ColorSpinorField*> &
B,
218 std::vector<ColorSpinorField*> *
B;
325 double flops()
const;
391 std::vector<ColorSpinorField*>
B;
407 for (
unsigned int i=0;
i<
B.size();
i++)
delete B[
i];
DiracMatrix * matSmoothSloppy
QudaBoolean global_reduction
QudaMultigridParam & mg_global
SolverParam * param_coarse_solver
std::vector< ColorSpinorField * > & B
QudaFieldLocation location
void saveVectors(std::vector< ColorSpinorField *> &B)
Save the null space vectors in from file.
MGParam(const MGParam ¶m, std::vector< ColorSpinorField *> &B, DiracMatrix *matResidual, DiracMatrix *matSmooth, DiracMatrix *matSmoothSloppy, int level=0)
TimeProfile & profile_global
void createSmoother()
Create the smoothers.
ColorSpinorField * b_tilde
void destroySmoother()
Free the smoothers.
double mu_factor[QUDA_MAX_MG_LEVEL]
enum QudaSolveType_s QudaSolveType
Dirac * diracCoarseSmoother
DiracMatrix * matCoarseSmootherSloppy
SolverParam * param_presmooth
void loadVectors(std::vector< ColorSpinorField *> &B)
Load the null space vectors in from file.
virtual ~multigrid_solver()
QudaSolveType smoother_solve_type
void operator()(ColorSpinorField &out, ColorSpinorField &in)
void matpc(void *outEven, void **gauge, void *inEven, double kappa, QudaMatPCType matpc_type, int dagger_bit, QudaPrecision sPrecision, QudaPrecision gPrecision, double mferm)
DiracMatrix * matCoarseSmoother
ColorSpinorField * tmp_coarse
VOLATILE spinorFloat kappa
SolverParam * param_postsmooth
multigrid_solver(QudaMultigridParam &mg_param, TimeProfile &profile)
QudaInverterType smoother
enum QudaMatPCType_s QudaMatPCType
int geoBlockSize[QUDA_MAX_DIM]
Dirac * diracCoarseResidual
enum QudaSolutionType_s QudaSolutionType
std::vector< ColorSpinorField * > * B_coarse
void ApplyCoarse(ColorSpinorField &out, const ColorSpinorField &inA, const ColorSpinorField &inB, const GaugeField &Y, const GaugeField &X, double kappa, int parity=QUDA_INVALID_PARITY, bool dslash=true, bool clover=true, bool dagger=false)
ColorSpinorField * r_coarse
void CoarseCoarseOp(GaugeField &Y, GaugeField &X, GaugeField &Xinv, GaugeField &Yhat, const Transfer &T, const GaugeField &gauge, const GaugeField &clover, const GaugeField &cloverInv, double kappa, double mu, double mu_factor, QudaDiracType dirac, QudaMatPCType matpc)
Coarse operator construction from an intermediate-grid operator (Coarse)
DiracMatrix * matCoarseResidual
std::vector< ColorSpinorField * > * B
Dirac * diracCoarseSmootherSloppy
enum QudaBoolean_s QudaBoolean
MGParam(QudaMultigridParam ¶m, std::vector< ColorSpinorField *> &B, DiracMatrix *matResidual, DiracMatrix *matSmooth, DiracMatrix *matSmoothSloppy, int level=0)
enum QudaFieldLocation_s QudaFieldLocation
cpuColorSpinorField * out
double flops() const
Return the total flops done on this and all coarser levels.
enum QudaMultigridCycleType_s QudaMultigridCycleType
std::vector< ColorSpinorField * > B
void CoarseOp(GaugeField &Y, GaugeField &X, GaugeField &Xinv, GaugeField &Yhat, const Transfer &T, const cudaGaugeField &gauge, const cudaCloverField *clover, double kappa, double mu, double mu_factor, QudaDiracType dirac, QudaMatPCType matpc)
Coarse operator construction from a fine-grid operator (Wilson / Clover)
#define QUDA_MAX_DIM
Maximum number of dimensions supported by QUDA. In practice, no routines make use of more than 5...
MG(MGParam ¶m, TimeProfile &profile)
void generateNullVectors(std::vector< ColorSpinorField *> B)
Generate the null-space vectors.
QudaSolutionType coarse_grid_solution_type
QudaMultigridCycleType cycle_type
enum QudaInverterType_s QudaInverterType
DiracMatrix * matResidual
ColorSpinorField * x_coarse
enum QudaDiracType_s QudaDiracType