double PlaquetteMonster::MeanPlaquette(int m,int n)
{

  double plaq(0.0);
  Matrix P;
  P.Diagonal(1.0);

  if (m<1) return 1;
  if (n<1) return 1;
  if (m>len) return 0;
  if (n>len) return 0;

  int s[4];
  for ( s[0]=0; s[0]<sites[0]; ++s[0] )
  for ( s[1]=0; s[1]<sites[1]; ++s[1] )
  for ( s[2]=0; s[2]<sites[2]; ++s[2] )
  for ( s[3]=0; s[3]<sites[3]; ++s[3] )
  for (int mu=0; mu<4; ++mu)
  for (int nu=0; nu<mu; ++nu) {
    P = lats[m-1]->GaugeField(mu,s);
    s[mu]+=m;
    P *= lats[n-1]->GaugeField(nu,s);
    s[nu]+=n;
    s[mu]-=m;
    P *= lats[m-1]->GaugeField(mu,s).Dagger();
    s[nu]-=n;
    P *= lats[n-1]->GaugeField(nu,s).Dagger();
    plaq += P.Tr();
  }

  int volume(1);
  for (int mu=0; mu<4; ++mu) volume *= sites[mu];
  return plaq / double(2*6*volume);
}
Beispiel #2
0
int main(void)
{

  if (1) {
    Matrix u;
    u.Diagonal(3.2);
    u.PrintProperties();
  }

  if (1) {
    Matrix u;
    u.Initialize(1.0,2.0,3.0,4.0);
    u.PrintProperties();
  }

  if (1) {
    double alpha, theta, phi;
    alpha = 2*PI*rng.genrand_res53();
    theta = PI*rng.genrand_res53();
    phi = 2*PI*rng.genrand_res53();
    Matrix u;
    u.EulerSU2(alpha,theta,phi);
    u.PrintProperties();
  }

  if (1) {
    Matrix u;
    u.RandomSU2();
    u.PrintProperties();
  }

  if (1) {
    Matrix u;
    for (double x=0.0; x<1.0; x+=0.05) {
      cout << x << endl;
      u.RandomSU2(x);
      u.PrintProperties();
    }
  }
  exit(EXIT_SUCCESS);
}