2016-10-20 15:04:00 +01:00
|
|
|
#include <Global.hpp>
|
2016-11-14 17:02:29 +00:00
|
|
|
#include <WilsonLoops.h>
|
2016-10-20 15:04:00 +01:00
|
|
|
|
|
|
|
using namespace Grid;
|
|
|
|
using namespace QCD;
|
|
|
|
using namespace QedFVol;
|
|
|
|
|
2016-11-14 17:02:29 +00:00
|
|
|
typedef PeriodicGaugeImpl<QedGimplR> QedPeriodicGimplR;
|
|
|
|
typedef PhotonR::GaugeField EmField;
|
|
|
|
typedef PhotonR::GaugeLinkField EmComp;
|
2016-10-21 15:21:32 +01:00
|
|
|
|
2016-11-30 15:17:22 +00:00
|
|
|
const int NCONFIGS = 10;
|
|
|
|
const int NWILSON = 10;
|
|
|
|
|
2016-10-20 15:04:00 +01:00
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
// parse command line
|
|
|
|
std::string parameterFileName;
|
|
|
|
|
|
|
|
if (argc < 2)
|
|
|
|
{
|
|
|
|
std::cerr << "usage: " << argv[0] << " <parameter file> [Grid options]";
|
|
|
|
std::cerr << std::endl;
|
|
|
|
std::exit(EXIT_FAILURE);
|
|
|
|
}
|
|
|
|
parameterFileName = argv[1];
|
|
|
|
|
|
|
|
// initialization
|
|
|
|
Grid_init(&argc, &argv);
|
|
|
|
QedFVolLogError.Active(GridLogError.isActive());
|
|
|
|
QedFVolLogWarning.Active(GridLogWarning.isActive());
|
|
|
|
QedFVolLogMessage.Active(GridLogMessage.isActive());
|
|
|
|
QedFVolLogIterative.Active(GridLogIterative.isActive());
|
|
|
|
QedFVolLogDebug.Active(GridLogDebug.isActive());
|
|
|
|
LOG(Message) << "Grid initialized" << std::endl;
|
|
|
|
|
2016-10-21 15:21:32 +01:00
|
|
|
// QED stuff
|
|
|
|
std::vector<int> latt_size = GridDefaultLatt();
|
|
|
|
std::vector<int> simd_layout = GridDefaultSimd(4, vComplex::Nsimd());
|
|
|
|
std::vector<int> mpi_layout = GridDefaultMpi();
|
|
|
|
GridCartesian grid(latt_size,simd_layout,mpi_layout);
|
|
|
|
GridParallelRNG pRNG(&grid);
|
2016-12-20 11:41:39 +00:00
|
|
|
PhotonR photon(PhotonR::Gauge::feynman,
|
|
|
|
PhotonR::ZmScheme::qedL);
|
2016-10-21 15:21:32 +01:00
|
|
|
EmField a(&grid);
|
2016-11-14 17:02:29 +00:00
|
|
|
EmField expA(&grid);
|
|
|
|
|
2016-11-30 15:17:22 +00:00
|
|
|
Complex imag_unit(0, 1);
|
|
|
|
|
|
|
|
Real wlA;
|
|
|
|
std::vector<Real> logWlAvg(NWILSON, 0.0), logWlTime(NWILSON, 0.0), logWlSpace(NWILSON, 0.0);
|
2016-10-21 15:21:32 +01:00
|
|
|
|
|
|
|
pRNG.SeedRandomDevice();
|
2016-10-20 15:04:00 +01:00
|
|
|
|
2016-11-30 15:17:22 +00:00
|
|
|
LOG(Message) << "Wilson loop calculation beginning" << std::endl;
|
|
|
|
for(int ic = 0; ic < NCONFIGS; ic++){
|
|
|
|
LOG(Message) << "Configuration " << ic <<std::endl;
|
|
|
|
photon.StochasticField(a, pRNG);
|
2016-11-14 18:23:04 +00:00
|
|
|
|
2016-11-30 15:17:22 +00:00
|
|
|
// Exponentiate photon field
|
|
|
|
expA = exp(imag_unit*a);
|
|
|
|
|
|
|
|
// Calculate Wilson loops
|
|
|
|
for(int iw=1; iw<=NWILSON; iw++){
|
|
|
|
wlA = NewWilsonLoops<QedPeriodicGimplR>::avgWilsonLoop(expA, iw, iw) * 3;
|
|
|
|
logWlAvg[iw-1] -= 2*log(wlA);
|
|
|
|
wlA = NewWilsonLoops<QedPeriodicGimplR>::avgTimelikeWilsonLoop(expA, iw, iw) * 3;
|
|
|
|
logWlTime[iw-1] -= 2*log(wlA);
|
|
|
|
wlA = NewWilsonLoops<QedPeriodicGimplR>::avgSpatialWilsonLoop(expA, iw, iw) * 3;
|
|
|
|
logWlSpace[iw-1] -= 2*log(wlA);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LOG(Message) << "Wilson loop calculation completed" << std::endl;
|
|
|
|
|
2016-11-14 18:23:04 +00:00
|
|
|
// Calculate Wilson loops
|
2016-11-30 15:17:22 +00:00
|
|
|
for(int iw=1; iw<=10; iw++){
|
|
|
|
LOG(Message) << iw << 'x' << iw << " Wilson loop" << std::endl;
|
|
|
|
LOG(Message) << "-2log(W) average: " << logWlAvg[iw-1]/NCONFIGS << std::endl;
|
|
|
|
LOG(Message) << "-2log(W) timelike: " << logWlTime[iw-1]/NCONFIGS << std::endl;
|
|
|
|
LOG(Message) << "-2log(W) spatial: " << logWlSpace[iw-1]/NCONFIGS << std::endl;
|
2016-10-25 13:32:02 +01:00
|
|
|
}
|
|
|
|
|
2016-10-20 15:04:00 +01:00
|
|
|
// epilogue
|
|
|
|
LOG(Message) << "Grid is finalizing now" << std::endl;
|
|
|
|
Grid_finalize();
|
|
|
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|