mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 15:55:37 +00:00
QedFVol: implement exponentiation of photon field
This commit is contained in:
parent
c30d96ea50
commit
cf167d0cd1
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
BEGIN_QEDFVOL_NAMESPACE
|
BEGIN_QEDFVOL_NAMESPACE
|
||||||
|
|
||||||
template <class Gimpl> class WilsonLoops : public Gimpl {
|
template <class Gimpl> class NewWilsonLoops : public Gimpl {
|
||||||
public:
|
public:
|
||||||
INHERIT_GIMPL_TYPES(Gimpl);
|
INHERIT_GIMPL_TYPES(Gimpl);
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ public:
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
// sum over all x,y,z,t and over all planes of plaquette
|
// sum over all x,y,z,t and over all planes of plaquette
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
static RealD sumPlaquette(const GaugeLorentz &Umu) {
|
static Real sumPlaquette(const GaugeLorentz &Umu) {
|
||||||
std::vector<GaugeMat> U(4, Umu._grid);
|
std::vector<GaugeMat> U(4, Umu._grid);
|
||||||
|
|
||||||
for (int mu = 0; mu < Nd; mu++) {
|
for (int mu = 0; mu < Nd; mu++) {
|
||||||
@ -73,8 +73,8 @@ public:
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
// average over all x,y,z,t and over all planes of plaquette
|
// average over all x,y,z,t and over all planes of plaquette
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
static RealD avgPlaquette(const GaugeLorentz &Umu) {
|
static Real avgPlaquette(const GaugeLorentz &Umu) {
|
||||||
RealD sumplaq = sumPlaquette(Umu);
|
Real sumplaq = sumPlaquette(Umu);
|
||||||
double vol = Umu._grid->gSites();
|
double vol = Umu._grid->gSites();
|
||||||
double faces = (1.0 * Nd * (Nd - 1)) / 2.0;
|
double faces = (1.0 * Nd * (Nd - 1)) / 2.0;
|
||||||
return sumplaq / vol / faces / Nc; // Nd , Nc dependent... FIXME
|
return sumplaq / vol / faces / Nc; // Nd , Nc dependent... FIXME
|
||||||
@ -112,14 +112,14 @@ public:
|
|||||||
const int Rmu, const int Rnu,
|
const int Rmu, const int Rnu,
|
||||||
const int mu, const int nu) {
|
const int mu, const int nu) {
|
||||||
GaugeMat sp(U[0]._grid);
|
GaugeMat sp(U[0]._grid);
|
||||||
WilsonLoop(sp, U, Rmu, Rnu, mu, nu);
|
wilsonLoop(sp, U, Rmu, Rnu, mu, nu);
|
||||||
wl = trace(sp);
|
wl = trace(sp);
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
// sum over all planes of Wilson loop
|
// sum over all planes of Wilson loop
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
static void siteWilsonLoop(LatticeComplex &Wl,
|
static void siteWilsonLoop(LatticeComplex &Wl,
|
||||||
const std::vector<GaugeMat> &U
|
const std::vector<GaugeMat> &U,
|
||||||
const int R1, const int R2) {
|
const int R1, const int R2) {
|
||||||
LatticeComplex siteWl(U[0]._grid);
|
LatticeComplex siteWl(U[0]._grid);
|
||||||
Wl = zero;
|
Wl = zero;
|
||||||
@ -135,7 +135,7 @@ public:
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
// sum over all x,y,z,t and over all planes of Wilson loop
|
// sum over all x,y,z,t and over all planes of Wilson loop
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
static RealD sumWilsonLoop(const GaugeLorentz &Umu,
|
static Real sumWilsonLoop(const GaugeLorentz &Umu,
|
||||||
const int R1, const int R2) {
|
const int R1, const int R2) {
|
||||||
std::vector<GaugeMat> U(4, Umu._grid);
|
std::vector<GaugeMat> U(4, Umu._grid);
|
||||||
|
|
||||||
@ -154,13 +154,14 @@ public:
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
// average over all x,y,z,t and over all planes of Wilson loop
|
// average over all x,y,z,t and over all planes of Wilson loop
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
static RealD avgPlaquette(const GaugeLorentz &Umu,
|
static Real avgWilsonLoop(const GaugeLorentz &Umu,
|
||||||
const int R1, const int R2) {
|
const int R1, const int R2) {
|
||||||
RealD sumWl = sumWilsonLoop(Umu);
|
Real sumWl = sumWilsonLoop(Umu, R1, R2);
|
||||||
double vol = Umu._grid->gSites();
|
double vol = Umu._grid->gSites();
|
||||||
double faces = 1.0 * Nd * (Nd - 1);
|
double faces = 1.0 * Nd * (Nd - 1);
|
||||||
return sumWl / vol / faces / Nc; // Nd , Nc dependent... FIXME
|
return sumWl / vol / faces / Nc; // Nd , Nc dependent... FIXME
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
END_QEDFVOL_NAMESPACE
|
END_QEDFVOL_NAMESPACE
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <Global.hpp>
|
#include <Global.hpp>
|
||||||
|
#include <WilsonLoops.h>
|
||||||
|
|
||||||
using namespace Grid;
|
using namespace Grid;
|
||||||
using namespace QCD;
|
using namespace QCD;
|
||||||
@ -24,10 +25,11 @@ public:
|
|||||||
typedef Lattice<SiteGaugeField> GaugeField;
|
typedef Lattice<SiteGaugeField> GaugeField;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef QedGimpl<vComplex> QedGimplR;
|
typedef QedGimpl<vComplex> QedGimplR;
|
||||||
typedef Photon<QedGimplR> PhotonR;
|
typedef PeriodicGaugeImpl<QedGimplR> QedPeriodicGimplR;
|
||||||
typedef PhotonR::GaugeField EmField;
|
typedef Photon<QedGimplR> PhotonR;
|
||||||
typedef PhotonR::GaugeLinkField EmComp;
|
typedef PhotonR::GaugeField EmField;
|
||||||
|
typedef PhotonR::GaugeLinkField EmComp;
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -60,11 +62,18 @@ int main(int argc, char *argv[])
|
|||||||
PhotonR photon(PhotonR::Gauge::Feynman,
|
PhotonR photon(PhotonR::Gauge::Feynman,
|
||||||
PhotonR::ZmScheme::QedL);
|
PhotonR::ZmScheme::QedL);
|
||||||
EmField a(&grid);
|
EmField a(&grid);
|
||||||
|
EmField expA(&grid);
|
||||||
|
|
||||||
|
Real avgPlaqAexp, avgWl2x2Aexp;
|
||||||
|
|
||||||
pRNG.SeedRandomDevice();
|
pRNG.SeedRandomDevice();
|
||||||
photon.StochasticField(a, pRNG);
|
photon.StochasticField(a, pRNG);
|
||||||
|
|
||||||
// Calculate log of plaquette
|
// Exponentiate photon field
|
||||||
|
Complex imag_unit(0, 1);
|
||||||
|
expA = exp(imag_unit*0.5*(a+conjugate(a)));
|
||||||
|
|
||||||
|
// Calculate plaquette from photon field
|
||||||
EmComp plaqA(&grid);
|
EmComp plaqA(&grid);
|
||||||
EmComp wlA(&grid);
|
EmComp wlA(&grid);
|
||||||
EmComp tmp(&grid);
|
EmComp tmp(&grid);
|
||||||
@ -105,8 +114,17 @@ int main(int argc, char *argv[])
|
|||||||
peekSite(tplaqsite, plaqtrace, site0);
|
peekSite(tplaqsite, plaqtrace, site0);
|
||||||
Complex plaqsite = TensorRemove(tplaqsite);
|
Complex plaqsite = TensorRemove(tplaqsite);
|
||||||
|
|
||||||
LOG(Message) << "Plaquette average: " << avgPlaqA << std::endl;
|
// Calculate plaquette from exponentiated photon field
|
||||||
LOG(Message) << "2x2 Wilson Loop average: " << avgWlA << std::endl;
|
avgPlaqAexp = NewWilsonLoops<QedPeriodicGimplR>::avgPlaquette(expA);
|
||||||
|
avgWl2x2Aexp = NewWilsonLoops<QedPeriodicGimplR>::avgWilsonLoop(expA, 2, 2);
|
||||||
|
|
||||||
|
avgPlaqAexp = avgPlaqAexp*3;
|
||||||
|
avgWl2x2Aexp = avgWl2x2Aexp*3;
|
||||||
|
|
||||||
|
LOG(Message) << "Plaquette average (from A): " << avgPlaqA << std::endl;
|
||||||
|
LOG(Message) << "Plaquette average (from exp(A)): " << avgPlaqAexp << std::endl;
|
||||||
|
LOG(Message) << "2x2 Wilson Loop average (from A): " << avgWlA << std::endl;
|
||||||
|
LOG(Message) << "2x2 Wilson Loop average (from exp(A)): " << avgWl2x2Aexp << std::endl;
|
||||||
LOG(Message) << "Plaquette (one site): " << plaqsite / faces << std::endl;
|
LOG(Message) << "Plaquette (one site): " << plaqsite / faces << std::endl;
|
||||||
|
|
||||||
// epilogue
|
// epilogue
|
||||||
|
Loading…
Reference in New Issue
Block a user