diff --git a/Hadrons/Modules/MFermion/EMLepton.hpp b/Hadrons/Modules/MFermion/EMLepton.hpp index 2d26416d..3fe544d3 100644 --- a/Hadrons/Modules/MFermion/EMLepton.hpp +++ b/Hadrons/Modules/MFermion/EMLepton.hpp @@ -54,8 +54,9 @@ BEGIN_HADRONS_NAMESPACE * - action: fermion action used for propagator (string) * - emField: photon field A_mu (string) * - mass: input mass for the lepton propagator +* - boundary: boundary conditions for the lepton propagator, e.g. "1 1 1 -1" * - twist: twisted boundary for lepton propagator, e.g. "0.0 0.0 0.0 0.5" -* - deltat: source-sink separation +* - deltat: list of source-sink separations * *******************************************************************************/ @@ -74,7 +75,7 @@ public: double, mass, std::string , boundary, std::string, twist, - unsigned int, deltat); + std::vector, deltat); }; template @@ -124,7 +125,12 @@ std::vector TEMLepton::getInput(void) template std::vector TEMLepton::getOutput(void) { - std::vector out = {getName(), getName() + "_free"}; + std::vector out = {}; + for(int i=0; i void TEMLepton::setup(void) { Ls_ = env().getObjectLs(par().action); - envCreateLat(PropagatorField, getName()); - envCreateLat(PropagatorField, getName() + "_free"); + for(int i=0; i::execute(void) auto &mat = envGet(FMat, par().action); RealD mass = par().mass; Complex ci(0.0,1.0); - - PropagatorField &Aslashlep = envGet(PropagatorField, getName()); - PropagatorField &lep = envGet(PropagatorField, getName() + "_free"); envGetTmp(FermionField, source); envGetTmp(FermionField, sol); @@ -227,6 +233,22 @@ void TEMLepton::execute(void) } } + for(unsigned int dt=0;dt= nt-par().deltat[dt], boundary[Tp]*lep, lep); + } + for(tl=0;tl::execute(void) proptmp = Cshift(freetmp,Tp, -tl); proptmp = where( tlat < tl, boundary[Tp]*proptmp, proptmp); - // free propagator for fixed source-sink separation - lep = where(tlat == (tl-par().deltat+nt)%nt, proptmp, lep); - // i*A_mu*gamma_mu sourcetmp = zero; for(unsigned int mu=0;mu<=3;mu++) @@ -276,13 +295,17 @@ void TEMLepton::execute(void) } } // keep the result for the desired delta t - Aslashlep = where(tlat == (tl-par().deltat+nt)%nt, proptmp, Aslashlep); + for(unsigned int dt=0;dt= nt-par().deltat, boundary[Tp]*Aslashlep, Aslashlep); - lep = where( tlat >= nt-par().deltat, boundary[Tp]*lep, lep); - + for(unsigned int dt=0;dt= nt-par().deltat[dt], boundary[Tp]*Aslashlep, Aslashlep); + } } END_MODULE_NAMESPACE