1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-10 06:00:45 +01:00

Implement infrared improvement for v=0 on-shell self-energy

This commit is contained in:
James Harrison 2017-12-14 13:42:41 +00:00
parent 6bc136b1d0
commit 581be32ed2
4 changed files with 34 additions and 7 deletions
extras/Hadrons/Modules/MGauge
lib/qcd/action/gauge

@ -67,7 +67,7 @@ void TStochEm::setup(void)
// execution ///////////////////////////////////////////////////////////////////
void TStochEm::execute(void)
{
PhotonR photon(par().gauge, par().zmScheme);
PhotonR photon(par().gauge, par().zmScheme, par().improvement);
EmField &a = *env().createLattice<EmField>(getName());
EmComp *w;

@ -44,7 +44,8 @@ class StochEmPar: Serializable
public:
GRID_SERIALIZABLE_CLASS_MEMBERS(StochEmPar,
PhotonR::Gauge, gauge,
PhotonR::ZmScheme, zmScheme);
PhotonR::ZmScheme, zmScheme,
Integer, improvement);
};
class TStochEm: public Module<StochEmPar>

@ -61,7 +61,7 @@ void TUnitEm::setup(void)
// execution ///////////////////////////////////////////////////////////////////
void TUnitEm::execute(void)
{
PhotonR photon(0, 0); // Just chose arbitrary input values here
PhotonR photon(0, 0, 0); // Just chose arbitrary input values here
EmField &a = *env().createLattice<EmField>(getName());
LOG(Message) << "Generating unit EM potential..." << std::endl;
photon.UnitField(a);

@ -60,7 +60,7 @@ namespace QCD{
GRID_SERIALIZABLE_ENUM(Gauge, undef, feynman, 1, coulomb, 2, landau, 3);
GRID_SERIALIZABLE_ENUM(ZmScheme, undef, qedL, 1, qedTL, 2);
public:
Photon(Gauge gauge, ZmScheme zmScheme);
Photon(Gauge gauge, ZmScheme zmScheme, Integer improvement);
virtual ~Photon(void) = default;
void FreePropagator(const GaugeField &in, GaugeField &out);
void MomentumSpacePropagator(const GaugeField &in, GaugeField &out);
@ -75,13 +75,14 @@ namespace QCD{
private:
Gauge gauge_;
ZmScheme zmScheme_;
Integer improvement_;
};
typedef Photon<QedGimplR> PhotonR;
template<class Gimpl>
Photon<Gimpl>::Photon(Gauge gauge, ZmScheme zmScheme)
: gauge_(gauge), zmScheme_(zmScheme)
Photon<Gimpl>::Photon(Gauge gauge, ZmScheme zmScheme, Integer improvement)
: gauge_(gauge), zmScheme_(zmScheme), improvement_(improvement)
{}
template<class Gimpl>
@ -128,6 +129,7 @@ namespace QCD{
{
GridBase *grid = out._grid;
const unsigned int nd = grid->_ndimension;
std::vector<int> &l = grid->_fdimensions;
switch (zmScheme_)
{
@ -149,9 +151,33 @@ namespace QCD{
for(int d = 0; d < grid->_ndimension - 1; d++)
{
LatticeCoordinate(coor,d);
coor = where(coor < Integer(l[d]/2), coor, coor-Integer(l[d]));
spNrm = spNrm + coor*coor;
}
out = where(spNrm == Integer(0), 0.*out, out);
// IR improvement
switch (improvement_)
{
case 0:
break;
case 1:
{
Real f1 = sqrt(2.48560548);
out = where(spNrm == Integer(1), f1*out, out);
break;
}
case 2:
{
Real f1 = sqrt(4.93053406);
Real f2 = sqrt(-1.44492857);
out = where(spNrm == Integer(1), f1*out, out);
out = where(spNrm == Integer(2), f2*out, out);
break;
}
default:
break;
}
break;
}
@ -159,7 +185,7 @@ namespace QCD{
break;
}
}
template<class Gimpl>
void Photon<Gimpl>::MomentumSpacePropagator(const GaugeField &in,
GaugeField &out)