00001
00002
00003
00004
00005
00006 #include "chromabase.h"
00007 #include "meas/glue/mesplq.h"
00008 #include "meas/glue/polylp.h"
00009
00010
00011 namespace Chroma
00012 {
00013
00014
00015 static int tDir() {return Nd-1;}
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 void MesPlq(const multi1d<LatticeColorMatrix>& u,
00027 multi2d<Double>& plane_plaq, Double& link)
00028 {
00029 START_CODE();
00030
00031 plane_plaq.resize(Nd,Nd);
00032 link = zero;
00033
00034
00035 for(int mu=1; mu < Nd; ++mu)
00036 {
00037 for(int nu=0; nu < mu; ++nu)
00038 {
00039 #if 0
00040
00041
00042
00043 LatticeColorMatrix tmp_0 = shift(u[nu],FORWARD,mu) * adj(shift(u[mu],FORWARD,nu));
00044
00045
00046 LatticeColorMatrix tmp_1 = tmp_0 * adj(u[nu]);
00047
00048
00049 Double tmp = sum(real(trace(u[mu]*tmp_1)));
00050
00051 #else
00052
00053
00054
00055
00056
00057 Double tmp =
00058 sum(real(trace(u[mu]*shift(u[nu],FORWARD,mu)*adj(shift(u[mu],FORWARD,nu))*adj(u[nu]))));
00059 #endif
00060
00061 plane_plaq[mu][nu] = tmp;
00062 }
00063 }
00064
00065
00066 for(int mu=1; mu < Nd; ++mu)
00067 for(int nu=0; nu < mu; ++nu)
00068 {
00069 plane_plaq[mu][nu] /= Double(Layout::vol()*Nc);
00070 plane_plaq[nu][mu] = plane_plaq[mu][nu];
00071 }
00072
00073
00074 for(int mu=0; mu < Nd; ++mu)
00075 link += sum(real(trace(u[mu])));
00076
00077 link /= Double(Layout::vol()*Nd*Nc);
00078
00079 END_CODE();
00080 }
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 void MesPlq(const multi1d<LatticeColorMatrix>& u,
00096 Double& w_plaq, Double& s_plaq, Double& t_plaq,
00097 multi2d<Double>& plane_plaq,
00098 Double& link)
00099 {
00100 START_CODE();
00101
00102
00103 MesPlq(u, plane_plaq, link);
00104
00105
00106 w_plaq = s_plaq = t_plaq = zero;
00107
00108 for(int mu=1; mu < Nd; ++mu)
00109 {
00110 for(int nu=0; nu < mu; ++nu)
00111 {
00112 Double tmp = plane_plaq[mu][nu];
00113
00114 w_plaq += tmp;
00115
00116 if (mu == tDir() || nu == tDir())
00117 t_plaq += tmp;
00118 else
00119 s_plaq += tmp;
00120 }
00121 }
00122
00123
00124 w_plaq *= 2.0 / Double(Nd*(Nd-1));
00125
00126 if (Nd > 2)
00127 s_plaq *= 2.0 / Double((Nd-1)*(Nd-2));
00128
00129 t_plaq /= Double(Nd-1);
00130
00131 END_CODE();
00132 }
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 void MesPlq(const multi1d<LatticeColorMatrix>& u,
00147 Double& w_plaq, Double& s_plaq, Double& t_plaq, Double& link)
00148 {
00149 START_CODE();
00150
00151 multi2d<Double> plane_plaq;
00152
00153 MesPlq(u, w_plaq, s_plaq, t_plaq, plane_plaq, link);
00154
00155 END_CODE();
00156 }
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 void MesPlq(XMLWriter& xml,
00168 const string& xml_group,
00169 const multi1d<LatticeColorMatrix>& u)
00170 {
00171 START_CODE();
00172
00173 Double w_plaq, s_plaq, t_plaq, link;
00174 multi2d<Double> plane_plaq;
00175 multi1d<DComplex> pollp;
00176
00177 MesPlq(u, w_plaq, s_plaq, t_plaq, plane_plaq, link);
00178 polylp(u, pollp);
00179
00180 push(xml, xml_group);
00181 write(xml, "w_plaq", w_plaq);
00182 write(xml, "s_plaq", s_plaq);
00183 write(xml, "t_plaq", t_plaq);
00184
00185 if (Nd >= 2)
00186 {
00187 write(xml, "plane_01_plaq", plane_plaq[0][1]);
00188 }
00189
00190 if (Nd >= 3)
00191 {
00192 write(xml, "plane_02_plaq", plane_plaq[0][2]);
00193 write(xml, "plane_12_plaq", plane_plaq[1][2]);
00194 }
00195
00196 if (Nd >= 4)
00197 {
00198 write(xml, "plane_03_plaq", plane_plaq[0][3]);
00199 write(xml, "plane_13_plaq", plane_plaq[1][3]);
00200 write(xml, "plane_23_plaq", plane_plaq[2][3]);
00201 }
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220 write(xml, "link", link);
00221 write(xml, "pollp", pollp);
00222
00223 pop(xml);
00224
00225 END_CODE();
00226 }
00227
00228 }