From cc4afb978d0defaa8e81a5a555fd5ff11c8e8437 Mon Sep 17 00:00:00 2001 From: James Harrison Date: Thu, 24 Aug 2017 17:31:44 +0100 Subject: [PATCH] Fix bug in non-zero momentum projection --- extras/Hadrons/Modules/MScalar/ChargedProp.cc | 25 ++++++++-- extras/Hadrons/Modules/MScalar/ScalarVP.cc | 50 +++++++++++++++---- 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/extras/Hadrons/Modules/MScalar/ChargedProp.cc b/extras/Hadrons/Modules/MScalar/ChargedProp.cc index 285b237a..1b901bf1 100644 --- a/extras/Hadrons/Modules/MScalar/ChargedProp.cc +++ b/extras/Hadrons/Modules/MScalar/ChargedProp.cc @@ -194,7 +194,10 @@ void TChargedProp::execute(void) buf = prop; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - buf = buf*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + buf = buf*adj(*phase_[j]); + } } sliceSum(buf, vecBuf, Tp); result.resize(vecBuf.size()); @@ -208,7 +211,10 @@ void TChargedProp::execute(void) buf = *prop0_; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - buf = buf*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + buf = buf*adj(*phase_[j]); + } } sliceSum(buf, vecBuf, Tp); for (unsigned int t = 0; t < vecBuf.size(); ++t) @@ -221,7 +227,10 @@ void TChargedProp::execute(void) buf = propQ; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - buf = buf*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + buf = buf*adj(*phase_[j]); + } } sliceSum(buf, vecBuf, Tp); for (unsigned int t = 0; t < vecBuf.size(); ++t) @@ -234,7 +243,10 @@ void TChargedProp::execute(void) buf = propSun; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - buf = buf*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + buf = buf*adj(*phase_[j]); + } } sliceSum(buf, vecBuf, Tp); for (unsigned int t = 0; t < vecBuf.size(); ++t) @@ -247,7 +259,10 @@ void TChargedProp::execute(void) buf = propTad; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - buf = buf*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + buf = buf*adj(*phase_[j]); + } } sliceSum(buf, vecBuf, Tp); for (unsigned int t = 0; t < vecBuf.size(); ++t) diff --git a/extras/Hadrons/Modules/MScalar/ScalarVP.cc b/extras/Hadrons/Modules/MScalar/ScalarVP.cc index e4f4e820..4d923802 100644 --- a/extras/Hadrons/Modules/MScalar/ScalarVP.cc +++ b/extras/Hadrons/Modules/MScalar/ScalarVP.cc @@ -214,7 +214,10 @@ void TScalarVP::execute(void) vpPhase = freeVpTensor[mu][nu]; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -248,7 +251,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -282,7 +288,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -314,7 +323,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -345,7 +357,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -377,7 +392,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -408,7 +426,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -443,7 +464,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -477,7 +501,10 @@ void TScalarVP::execute(void) vpPhase = tmp_vp; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size()); @@ -501,7 +528,10 @@ void TScalarVP::execute(void) vpPhase = vpTensor[mu][nu]; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - vpPhase = vpPhase*pow(adj(*phase_[j]), mom[j]); + for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) + { + vpPhase = vpPhase*adj(*phase_[j]); + } } sliceSum(vpPhase, vecBuf, Tp); result.resize(vecBuf.size());