// Resets the attributes of this field if param disagrees (and is defined) void ColorSpinorField::reset(const ColorSpinorParam ¶m) { if (param.nColor != 0) nColor = param.nColor; if (param.nSpin != 0) nSpin = param.nSpin; if (param.twistFlavor != QUDA_TWIST_INVALID) twistFlavor = param.twistFlavor; if (param.precision != QUDA_INVALID_PRECISION) precision = param.precision; if (param.nDim != 0) nDim = param.nDim; volume = 1; for (int d=0; d<nDim; d++) { if (param.x[0] != 0) x[d] = param.x[d]; volume *= x[d]; } volumeCB = siteSubset == QUDA_PARITY_SITE_SUBSET ? volume : volume/2; if((twistFlavor == QUDA_TWIST_NONDEG_DOUBLET || twistFlavor == QUDA_TWIST_DEG_DOUBLET) && x[4] != 2) errorQuda("Must be two flavors for non-degenerate twisted mass spinor (provided with %d)\n", x[4]); if (param.pad != 0) pad = param.pad; if (param.siteSubset == QUDA_FULL_SITE_SUBSET){ stride = volume/2 + pad; length = 2*stride*nColor*nSpin*2; } else if (param.siteSubset == QUDA_PARITY_SITE_SUBSET){ stride = volume + pad; length = stride*nColor*nSpin*2; } else { //errorQuda("SiteSubset not defined %d", param.siteSubset); //do nothing, not an error (can't remember why - need to document this sometime! ) } if (param.siteSubset != QUDA_INVALID_SITE_SUBSET) siteSubset = param.siteSubset; if (param.siteOrder != QUDA_INVALID_SITE_ORDER) siteOrder = param.siteOrder; if (param.fieldOrder != QUDA_INVALID_FIELD_ORDER) fieldOrder = param.fieldOrder; if (param.gammaBasis != QUDA_INVALID_GAMMA_BASIS) gammaBasis = param.gammaBasis; createGhostZone(); real_length = volume*nColor*nSpin*2; bytes = total_length * precision; // includes pads and ghost zones bytes = (siteSubset == QUDA_FULL_SITE_SUBSET) ? 2*ALIGNMENT_ADJUST(bytes/2) : ALIGNMENT_ADJUST(bytes); if (precision == QUDA_HALF_PRECISION) { norm_bytes = total_norm_length * sizeof(float); norm_bytes = (siteSubset == QUDA_FULL_SITE_SUBSET) ? 2*ALIGNMENT_ADJUST(norm_bytes/2) : ALIGNMENT_ADJUST(norm_bytes); } else { norm_bytes = 0; } if (!init) errorQuda("Shouldn't be resetting a non-inited field\n"); if (getVerbosity() >= QUDA_DEBUG_VERBOSE) { printfQuda("\nPrinting out reset field\n"); std::cout << *this << std::endl; printfQuda("\n"); } }
void ColorSpinorField::create(int Ndim, const int *X, int Nc, int Ns, QudaTwistFlavorType Twistflavor, QudaPrecision Prec, int Pad, QudaSiteSubset siteSubset, QudaSiteOrder siteOrder, QudaFieldOrder fieldOrder, QudaGammaBasis gammaBasis) { this->siteSubset = siteSubset; this->siteOrder = siteOrder; this->fieldOrder = fieldOrder; this->gammaBasis = gammaBasis; if (Ndim > QUDA_MAX_DIM){ errorQuda("Number of dimensions nDim = %d too great", Ndim); } nDim = Ndim; nColor = Nc; nSpin = Ns; twistFlavor = Twistflavor; precision = Prec; volume = 1; for (int d=0; d<nDim; d++) { x[d] = X[d]; volume *= x[d]; } volumeCB = siteSubset == QUDA_PARITY_SITE_SUBSET ? volume : volume/2; if((twistFlavor == QUDA_TWIST_NONDEG_DOUBLET || twistFlavor == QUDA_TWIST_DEG_DOUBLET) && x[4] != 2) errorQuda("Must be two flavors for non-degenerate twisted mass spinor (while provided with %d number of components)\n", x[4]);//two flavors pad = Pad; if (siteSubset == QUDA_FULL_SITE_SUBSET) { stride = volume/2 + pad; // padding is based on half volume length = 2*stride*nColor*nSpin*2; } else { stride = volume + pad; length = stride*nColor*nSpin*2; } real_length = volume*nColor*nSpin*2; // physical length createGhostZone(); bytes = total_length * precision; // includes pads and ghost zones bytes = (siteSubset == QUDA_FULL_SITE_SUBSET) ? 2*ALIGNMENT_ADJUST(bytes/2) : ALIGNMENT_ADJUST(bytes); norm_bytes = total_norm_length * sizeof(float); norm_bytes = (siteSubset == QUDA_FULL_SITE_SUBSET) ? 2*ALIGNMENT_ADJUST(norm_bytes/2) : ALIGNMENT_ADJUST(norm_bytes); init = true; clearGhostPointers(); }
// Resets the attributes of this field if param disagrees (and is defined) void ColorSpinorField::reset(const ColorSpinorParam ¶m) { if (param.nColor != 0) nColor = param.nColor; if (param.nSpin != 0) nSpin = param.nSpin; if (param.twistFlavor != QUDA_TWIST_INVALID) twistFlavor = param.twistFlavor; if (param.precision != QUDA_INVALID_PRECISION) precision = param.precision; if (param.nDim != 0) nDim = param.nDim; volume = 1; for (int d=0; d<nDim; d++) { if (param.x[0] != 0) x[d] = param.x[d]; volume *= x[d]; } if (param.pad != 0) pad = param.pad; if (param.siteSubset == QUDA_FULL_SITE_SUBSET){ stride = volume/2 + pad; length = 2*stride*nColor*nSpin*2; } else if (param.siteSubset == QUDA_PARITY_SITE_SUBSET){ stride = volume + pad; length = stride*nColor*nSpin*2; } else { //errorQuda("SiteSubset not defined %d", param.siteSubset); //do nothing, not an error (can't remember why - need to document this sometime! ) } if (param.siteSubset != QUDA_INVALID_SITE_SUBSET) siteSubset = param.siteSubset; if (param.siteOrder != QUDA_INVALID_SITE_ORDER) siteOrder = param.siteOrder; if (param.fieldOrder != QUDA_INVALID_FIELD_ORDER) fieldOrder = param.fieldOrder; if (param.gammaBasis != QUDA_INVALID_GAMMA_BASIS) gammaBasis = param.gammaBasis; createGhostZone(); real_length = volume*nColor*nSpin*2; bytes = total_length * precision; bytes = ALIGNMENT_ADJUST(bytes); norm_bytes = total_norm_length * sizeof(float); norm_bytes = ALIGNMENT_ADJUST(norm_bytes); if (!init) errorQuda("Shouldn't be resetting a non-inited field\n"); if (verbose >= QUDA_DEBUG_VERBOSE) { printfQuda("\nPrinting out reset field\n"); std::cout << *this << std::endl; printfQuda("\n"); } }
void ColorSpinorField::create(int Ndim, const int *X, int Nc, int Ns, QudaTwistFlavorType Twistflavor, QudaPrecision Prec, int Pad, QudaSiteSubset siteSubset, QudaSiteOrder siteOrder, QudaFieldOrder fieldOrder, QudaGammaBasis gammaBasis) { this->siteSubset = siteSubset; this->siteOrder = siteOrder; this->fieldOrder = fieldOrder; this->gammaBasis = gammaBasis; if (Ndim > QUDA_MAX_DIM){ errorQuda("Number of dimensions nDim = %d too great", Ndim); } nDim = Ndim; nColor = Nc; nSpin = Ns; twistFlavor = Twistflavor; precision = Prec; volume = 1; for (int d=0; d<nDim; d++) { x[d] = X[d]; volume *= x[d]; } pad = Pad; if (siteSubset == QUDA_FULL_SITE_SUBSET) { stride = volume/2 + pad; // padding is based on half volume length = 2*stride*nColor*nSpin*2; } else { stride = volume + pad; length = stride*nColor*nSpin*2; } real_length = volume*nColor*nSpin*2; // physical length createGhostZone(); bytes = total_length * precision; // includes pads and ghost zones bytes = ALIGNMENT_ADJUST(bytes); norm_bytes = total_norm_length * sizeof(float); norm_bytes = ALIGNMENT_ADJUST(norm_bytes); init = true; }