void DiracWilsonPC::MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const { #ifdef MULTI_GPU bool reset = newTmp(&tmp2, in); M(*tmp2, in); Mdag(out, *tmp2); deleteTmp(&tmp2, reset); #else M(out, in); Mdag(out, out); #endif }
void DiracDomainWallPC::MdagM(ColorSpinorField &out, const ColorSpinorField &in) const { //M(out, in); //Mdag(out, out); bool reset = newTmp(&tmp2, in); M(*tmp2, in); Mdag(out, *tmp2); deleteTmp(&tmp2, reset); }
void DiracCloverPC::MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const { // need extra temporary because of symmetric preconditioning dagger // and for multi-gpu the input and output fields cannot alias bool reset = newTmp(&tmp2, in); M(*tmp2, in); Mdag(out, *tmp2); deleteTmp(&tmp2, reset); }
void DiracCloverPC::MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const { // need extra temporary because of symmetric preconditioning dagger bool reset = newTmp(&tmp2, in); M(*tmp2, in); Mdag(out, *tmp2); deleteTmp(&tmp2, reset); }
void DiracDomainWall::MdagM(ColorSpinorField &out, const ColorSpinorField &in) const { checkFullSpinor(out, in); bool reset = newTmp(&tmp1, in); M(*tmp1, in); Mdag(out, *tmp1); deleteTmp(&tmp1, reset); }
void DiracWilson::MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const { checkFullSpinor(out, in); bool reset = newTmp(&tmp1, in); checkFullSpinor(*tmp1, in); M(*tmp1, in); Mdag(out, *tmp1); deleteTmp(&tmp1, reset); }
void DiracDomainWallPC::MdagM(cudaColorSpinorField &out, const cudaColorSpinorField &in) const { M(out, in); Mdag(out, out); }