35 const std::vector<ColorSpinorField*> &
B;
244 double flops()
const;
253 void FillV(ColorSpinorField &
V,
const std::vector<ColorSpinorField*> &B,
int Nvec);
267 const int *fine_to_coarse,
int spin_bs);
279 void Prolongate(ColorSpinorField &
out,
const ColorSpinorField &
in,
const ColorSpinorField &v,
280 int Nvec,
const int *fine_to_coarse,
const int *spin_map,
293 void Restrict(ColorSpinorField &
out,
const ColorSpinorField &
in,
const ColorSpinorField &v,
294 int Nvec,
const int *fine_to_coarse,
const int *coarse_to_fine,
const int *spin_map,
299 #endif // _TRANSFER_H
void R(ColorSpinorField &out, const ColorSpinorField &in) const
void P(ColorSpinorField &out, const ColorSpinorField &in) const
ColorSpinorField * fine_tmp_h
void setSiteSubset(QudaSiteSubset site_subset, QudaParity parity)
Sets whether the transfer operator is to act on full fields or single parity fields, and if single-parity which parity. If site_subset is QUDA_FULL_SITE_SUBSET, the transfer operator can still be applied to single-parity fields, however, if site_subset is QUDA_PARITY_SITE_SUBSET, then the transfer operator cannot be applied to full fields, and setSiteSubset will need to be called first to reset to QUDA_FULL_SITE_SUBSET. This method exists to reduce GPU memory overhead - if only transfering single-parity fine fields then we only store a single-parity copy of the null space components on the device.
ColorSpinorField * coarse_tmp_d
void FillV(ColorSpinorField &V, const std::vector< ColorSpinorField *> &B, int Nvec)
const ColorSpinorField & Vectors(QudaFieldLocation location=QUDA_CPU_FIELD_LOCATION) const
QudaSiteSubset site_subset
void createGeoMap(int *geo_bs)
ColorSpinorField * coarse_tmp_h
void Restrict(ColorSpinorField &out, const ColorSpinorField &in, const ColorSpinorField &v, int Nvec, const int *fine_to_coarse, const int *coarse_to_fine, const int *spin_map, int parity=QUDA_INVALID_PARITY)
Apply the restriction operator.
enum QudaParity_s QudaParity
const int * Geo_bs() const
enum QudaSiteSubset_s QudaSiteSubset
enum QudaFieldLocation_s QudaFieldLocation
cpuColorSpinorField * out
void fillV(ColorSpinorField &V)
Transfer(const std::vector< ColorSpinorField *> &B, int Nvec, int *geo_bs, int spin_bs, bool enable_gpu, TimeProfile &profile)
void setTransferGPU(bool use_gpu) const
ColorSpinorField * fine_tmp_d
void createSpinMap(int spin_bs)
void BlockOrthogonalize(ColorSpinorField &V, int Nvec, const int *geo_bs, const int *fine_to_coarse, int spin_bs)
Block orthogonnalize the matrix field, where the blocks are defined by lookup tables that map the fin...
const std::vector< ColorSpinorField * > & B
void Prolongate(ColorSpinorField &out, const ColorSpinorField &in, const ColorSpinorField &v, int Nvec, const int *fine_to_coarse, const int *spin_map, int parity=QUDA_INVALID_PARITY)
Apply the prolongation operator.