Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

fermiqcd_gauge_routines.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 // ///////////////////////////
00014 // If use class mdp_matrix
00015 // ///////////////////////////
00016 inline mdp_matrix staple(gauge_field &U, register site x, 
00017                      int mu, int s1, int nu) {
00018   mdp_matrix tmp(U.nc,U.nc);
00019     if(s1==+1) {
00020       tmp=U(x,nu)*U(x+nu,mu)*hermitian(U(x+mu,nu));
00021     } else {
00022       site y(U.lattice());
00023       y=x-nu;
00024       tmp=hermitian(U(y,nu))*U(y,mu)*U(y+mu,nu);
00025     }
00026     return tmp;
00027 }
00028 inline mdp_matrix staple(gauge_field &U, register site x, int mu) {
00029   mdp_matrix tmp(U.nc,U.nc);
00030   site y(U.lattice());
00031   int nu;
00032   tmp=0;
00033     for(nu=0; nu<U.ndim; nu++) if(nu!=mu) {
00034       tmp+=U(x,nu)*U(x+nu,mu)*hermitian(U(x+mu,nu));
00035       y=x-nu;
00036       tmp+=hermitian(U(y,nu))*U(y,mu)*U(y+mu,nu);
00037     }
00038     return tmp;
00039   }
00040 
00041 inline mdp_matrix staple_H(gauge_field &U, register site x, 
00042                        int mu, int s1, int nu) {
00043   mdp_matrix tmp(U.nc,U.nc);
00044   if(s1==+1) {
00045     tmp=U(x+mu,nu)*hermitian(U(x+nu,mu))*hermitian(U(x,nu));
00046   } else {
00047       site y(U.lattice());
00048       y=x-nu;
00049       tmp=hermitian(U(y+mu,nu))*hermitian(U(y,mu))*U(y,nu);
00050   }
00051   return tmp;
00052 }
00053 inline mdp_matrix staple_H(gauge_field &U, register site x, int mu) {
00054   mdp_matrix tmp(U.nc,U.nc);
00055   site y(U.lattice());
00056   int nu;
00057   tmp=0;
00058   for(nu=0; nu<U.ndim; nu++) if(nu!=mu) {
00059     tmp+=U(x+mu,nu)*hermitian(U(x+nu,mu))*hermitian(U(x,nu));
00060     y=x-nu;
00061     tmp+=hermitian(U(y+mu,nu))*hermitian(U(y,mu))*U(y,nu);
00062   }
00063   return tmp;
00064 }
00065 
00066 inline mdp_matrix staple_0i_H(gauge_field &U, register site x, int mu) {
00067   mdp_matrix tmp(U.nc,U.nc);
00068   site y(U.lattice());
00069   int nu;
00070   if(mu==0) {
00071     tmp=0;
00072     for(nu=1; nu<U.ndim; nu++) {
00073       tmp+=U(x+mu,nu)*hermitian(U(x+nu,mu))*hermitian(U(x,nu));
00074       y=x-nu;
00075       tmp+=hermitian(U(y+mu,nu))*hermitian(U(y,mu))*U(y,nu);
00076     }
00077   } else {
00078     nu=0;
00079     tmp=U(x+mu,nu)*hermitian(U(x+nu,mu))*hermitian(U(x,nu));
00080     y=x-nu;
00081     tmp+=hermitian(U(y+mu,nu))*hermitian(U(y,mu))*U(y,nu);
00082     }
00083   
00084   return tmp;
00085 }  
00086 
00087 inline mdp_matrix staple_ij_H(gauge_field &U, register site x, int mu) {
00088   mdp_matrix tmp(U.nc,U.nc);
00089   site y(U.lattice());
00090   int nu;
00091   tmp=0;
00092   if(mu!=0)
00093     for(nu=1; nu<U.ndim; nu++) if(nu!=mu) {
00094       tmp+=U(x+mu,nu)*hermitian(U(x+nu,mu))*hermitian(U(x,nu));
00095         y=x-nu;
00096         tmp+=hermitian(U(y+mu,nu))*hermitian(U(y,mu))*U(y,nu);
00097     }
00098   return tmp;
00099 }
00100 
00101 // ///////////////////////////
00102 // plaquette
00103 // ////////////////////////// 
00104 inline mdp_matrix plaquette(gauge_field &U, site x, int mu, int nu) {
00105   mdp_matrix tmp(U.nc,U.nc);
00106   tmp=U(x,mu)*U(x+mu,nu)*hermitian(U(x+nu,mu))*hermitian(U(x,nu));
00107   return tmp;
00108 }
00109 
00110 /* obsolete stuff 
00111 
00112 void fast_mul_AB_to_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00113                       int &ni) {
00114   register int i,j,k, ink, inj;
00115   for(i=0; i<ni; i++) {
00116     ink=i*ni; inj=i*ni;
00117     for(k=0; k<ni; k++) {
00118       c[ink+k]=a[inj]*b[k];
00119       for(j=1; j<ni; j++) c[ink+k]+=a[inj+j]*b[j*ni+k];
00120     }
00121   }
00122 }
00123 void fast_mul_ABH_to_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00124                        int &ni) {
00125   register int i,j,k, ink, inj;
00126   for(i=0; i<ni; i++) {
00127     ink=i*ni; inj=i*ni;
00128     for(k=0; k<ni; k++) {
00129       c[ink+k]=a[inj]*conj(b[k*ni]);
00130       for(j=1; j<ni; j++) c[ink+k]+=a[inj+j]*conj(b[k*ni+j]);
00131     }
00132   }
00133 }
00134 void fast_mul_AHB_to_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00135                        int &ni) {
00136   register int i,j,k, ink;
00137   for(i=0; i<ni; i++) {
00138     ink=i*ni;
00139     for(k=0; k<ni; k++) {
00140       c[ink+k]=conj(a[i])*b[k];
00141       for(j=1; j<ni; j++) c[ink+k]+=conj(a[j*ni+i])*b[j*ni+k];
00142     }
00143   }
00144 }
00145 void fast_mul_AHBH_to_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00146                        int &ni) {
00147   register int i,j,k, ink, inj;
00148   for(i=0; i<ni; i++) {
00149     ink=i*ni; inj=i*ni;
00150     for(k=0; k<ni; k++) {
00151       c[ink+k]=conj(a[i]*b[k*ni]);
00152       for(j=1; j<ni; j++) c[ink+k]+=conj(a[j*ni+i]*b[k*ni+j]);
00153     }
00154   }
00155 }
00156 
00157 
00158 void fast_mul_AB_addto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00159                       int &ni) {
00160   register int i,j,k, ink, inj;
00161   for(i=0; i<ni; i++) {
00162     ink=i*ni; inj=i*ni;
00163     for(k=0; k<ni; k++) {
00164       c[ink+k]+=a[inj]*b[k];
00165       for(j=1; j<ni; j++) c[ink+k]+=a[inj+j]*b[j*ni+k];
00166     }
00167   }
00168 }
00169 void fast_mul_ABH_addto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00170                        int &ni) {
00171   register int i,j,k, ink, inj;
00172   for(i=0; i<ni; i++) {
00173     ink=i*ni; inj=i*ni;
00174     for(k=0; k<ni; k++) {
00175       c[ink+k]+=a[inj]*conj(b[k*ni]);
00176       for(j=1; j<ni; j++) c[ink+k]+=a[inj+j]*conj(b[k*ni+j]);
00177     }
00178   }
00179 }
00180 void fast_mul_AHB_addto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00181                        int &ni) {
00182   register int i,j,k, ink;
00183   for(i=0; i<ni; i++) {
00184     ink=i*ni;
00185     for(k=0; k<ni; k++) {
00186       c[ink+k]+=conj(a[i])*b[k];
00187       for(j=1; j<ni; j++) c[ink+k]+=conj(a[j*ni+i])*b[j*ni+k];
00188     }
00189   }
00190 }
00191 void fast_add_AB_to_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00192                       int &ni) {
00193   for(register int i=0; i<ni*ni; i++) c[i]=a[i]+b[i];
00194 }
00195 void fast_add_AB_addto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00196                          int &ni) {
00197   for(register int i=0; i<ni*ni; i++) c[i]+=a[i]+b[i];
00198 }
00199 void fast_add_aAbB_to_C(mdp_complex c1, mdp_complex *a1, mdp_complex c2, mdp_complex *a2,
00200                         mdp_complex *c, int &ni) {
00201   for(register int i=0; i<ni*ni; i++) c[i]=c1*a1[i]+c2*a2[i];
00202 }
00203 void fast_add_aAbB_addto_C(mdp_complex c1, mdp_complex *a1, mdp_complex c2, mdp_complex *a2,
00204                         mdp_complex *c, int &ni) {
00205   for(register int i=0; i<ni*ni; i++) c[i]+=c1*a1[i]+c2*a2[i];
00206 }
00207 void fast_add_aAbB_to_C(mdp_complex c1, mdp_complex *a1, mdp_complex c2, mdp_complex *a2,
00208                         mdp_complex c3, mdp_complex *a3, mdp_complex *c, int &ni) {
00209   for(register int i=0; i<ni*ni; i++) c[i]=c1*a1[i]+c2*a2[i]+c3*a3[i];
00210 }
00211 void fast_add_aAbB_addto_C(mdp_complex c1, mdp_complex *a1, mdp_complex c2, mdp_complex *a2,
00212                         mdp_complex c3, mdp_complex *a3, mdp_complex *c, int &ni) {
00213   for(register int i=0; i<ni*ni; i++) c[i]+=c1*a1[i]+c2*a2[i]+c3*a3[i];
00214 }
00215 void fast_scalar_mul_AB_to_C(mdp_complex a, mdp_complex *b, mdp_complex *c, 
00216                              int &ni) {
00217   for(register int i=0; i<ni*ni; i++) c[i]=a*b[i];
00218 }
00219 void fast_scalar_mul_AB_addto_C(mdp_complex a, mdp_complex *b, mdp_complex *c, 
00220                                 int &ni) {
00221   for(register int i=0; i<ni*ni; i++) c[i]+=a*b[i];
00222 }
00223 
00224 
00225 
00226 
00227 void fast_mul_AB_subto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00228                       int &ni) {
00229   register int i,j,k, ink, inj;
00230   for(i=0; i<ni; i++) {
00231     ink=i*ni; inj=i*ni;
00232     for(k=0; k<ni; k++) {
00233       c[ink+k]+=a[inj]*b[k];
00234       for(j=1; j<ni; j++) c[ink+k]-=a[inj+j]*b[j*ni+k];
00235     }
00236   }
00237 }
00238 void fast_mul_ABH_subto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00239                        int &ni) {
00240   register int i,j,k, ink, inj;
00241   for(i=0; i<ni; i++) {
00242     ink=i*ni; inj=i*ni;
00243     for(k=0; k<ni; k++) {
00244       c[ink+k]+=a[inj]*conj(b[k*ni]);
00245       for(j=1; j<ni; j++) c[ink+k]-=a[inj+j]*conj(b[k*ni+j]);
00246     }
00247   }
00248 }
00249 void fast_mul_AHB_subto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00250                        int &ni) {
00251   register int i,j,k, ink;
00252   for(i=0; i<ni; i++) {
00253     ink=i*ni;
00254     for(k=0; k<ni; k++) {
00255       c[ink+k]+=conj(a[i])*b[k];
00256       for(j=1; j<ni; j++) c[ink+k]-=conj(a[j*ni+i])*b[j*ni+k];
00257     }
00258   }
00259 }
00260 void fast_add_AB_subto_C(mdp_complex *a, mdp_complex *b, mdp_complex *c, 
00261                          int &ni) {
00262   for(register int i=0; i<ni*ni; i++) c[i]-=a[i]+b[i];
00263 }
00264 void fast_add_aAbB_subto_C(mdp_complex c1, mdp_complex *a1, mdp_complex c2, mdp_complex *a2,
00265                         mdp_complex *c, int &ni) {
00266   for(register int i=0; i<ni*ni; i++) c[i]-=c1*a1[i]+c2*a2[i];
00267 }
00268 void fast_add_aAbB_subto_C(mdp_complex c1, mdp_complex *a1, mdp_complex c2, mdp_complex *a2,
00269                         mdp_complex c3, mdp_complex *a3, mdp_complex *c, int &ni) {
00270   for(register int i=0; i<ni*ni; i++) c[i]-=c1*a1[i]+c2*a2[i]+c3*a3[i];
00271 }
00272 void fast_scalar_mul_AB_subto_C(mdp_complex a, mdp_complex *b, mdp_complex *c, 
00273                                 int &ni) {
00274   for(register int i=0; i<ni*ni; i++) c[i]-=a*b[i];
00275 }
00276 
00277 // ///////////////////////////
00278 // else use fast_mul functions
00279 // gains a factor 1.45 in time
00280   // ///////////////////////////
00281 
00282 inline mdp_matrix staple(gauge_field &U, register site x, 
00283                      int mu, int s1, int nu) {
00284   int nc=U.nc;
00285   mdp_matrix b1(nc,nc);
00286   site y(U.lattice());
00287   mdp_matrix tmp(nc,nc);
00288   if(s1==+1) {
00289     fast_mul_AB_to_C(&U(x,nu,0,0),&U(x+nu,mu,0,0),&b1(0,0),nc);
00290       fast_mul_ABH_to_C(&b1(0,0),&U(x+mu,nu,0,0),&tmp(0,0),nc);
00291   } else {
00292     y=x-nu;
00293     fast_mul_AB_to_C(&U(y,mu,0,0),&U(y+mu,nu,0,0),&b1(0,0),nc);
00294     fast_mul_AHB_to_C(&U(y,nu,0,0),&b1(0,0),&tmp(0,0),nc);
00295   }
00296     return tmp;
00297 }
00298 inline mdp_matrix staple(gauge_field &U, register site x, int mu) {
00299   int nc=U.nc;
00300     mdp_matrix b1(nc,nc);
00301     mdp_matrix tmp(nc,nc);
00302     site y(U.lattice());
00303     int nu;
00304     tmp=0;
00305     for(nu=0; nu<U.ndim; nu++) if(nu!=mu) {
00306       fast_mul_AB_to_C(&U(x,nu,0,0),&U(x+nu,mu,0,0),&b1(0,0),nc);
00307       fast_mul_ABH_addto_C(&b1(0,0),&U(x+mu,nu,0,0),&tmp(0,0),nc);
00308       y=x-nu;
00309       fast_mul_AB_to_C(&U(y,mu,0,0),&U(y+mu,nu,0,0),&b1(0,0),nc);
00310       fast_mul_AHB_addto_C(&U(y,nu,0,0),&b1(0,0),&tmp(0,0),nc);
00311     }
00312     return tmp;
00313 }
00314 
00315 inline mdp_matrix staple_H(gauge_field &U, register site x, 
00316                               int mu, int s1, int nu) {
00317   int nc=U.nc;
00318   mdp_matrix b1(nc,nc);
00319   mdp_matrix tmp(nc,nc);
00320   site y(U.lattice());
00321   if(s1==+1) {
00322     fast_mul_ABH_to_C(&U(x+mu,nu,0,0),&U(x+nu,mu,0,0),&b1(0,0),nc);
00323     fast_mul_ABH_to_C(&b1(0,0),&U(x,nu,0,0),&tmp(0,0),nc);
00324   } else {
00325     y=x-nu;
00326     fast_mul_AHB_to_C(&U(y,mu,0,0),&U(y,nu,0,0),&b1(0,0),nc);
00327     fast_mul_AHB_to_C(&U(y+mu,nu,0,0),&b1(0,0),&tmp(0,0),nc);
00328   }
00329   return tmp;
00330 }
00331 inline mdp_matrix staple_H(gauge_field &U, register site x, int mu) {
00332   int nc=U.nc;
00333   mdp_matrix b1(nc,nc);
00334   mdp_matrix tmp(nc,nc);
00335   site y(U.lattice());
00336   int nu;
00337   tmp=0;
00338   for(nu=0; nu<U.ndim; nu++) if(nu!=mu) {
00339     fast_mul_ABH_to_C(&U(x+mu,nu,0,0),&U(x+nu,mu,0,0),&b1(0,0),nc);
00340     fast_mul_ABH_addto_C(&b1(0,0),&U(x,nu,0,0),&tmp(0,0),nc);
00341     y=x-nu;
00342     fast_mul_AHB_to_C(&U(y,mu,0,0),&U(y,nu,0,0),&b1(0,0),nc);
00343     fast_mul_AHB_addto_C(&U(y+mu,nu,0,0),&b1(0,0),&tmp(0,0),nc);
00344   }
00345   return tmp;
00346 }
00347 
00348 inline mdp_matrix staple_0i_H(gauge_field &U, register site x, int mu) {
00349   int nc=U.nc;
00350   mdp_matrix b1(nc,nc);
00351   mdp_matrix tmp(U.nc,U.nc);
00352   site y(U.lattice());
00353   int nu;
00354   if(mu==0) {
00355     tmp=0;
00356     for(nu=1; nu<U.ndim; nu++) {
00357       fast_mul_ABH_to_C(&U(x+mu,nu,0,0),&U(x+nu,mu,0,0),&b1(0,0),nc);
00358       fast_mul_ABH_addto_C(&b1(0,0),&U(x,nu,0,0),&tmp(0,0),nc);
00359       y=x-nu;
00360       fast_mul_AHB_to_C(&U(y,mu,0,0),&U(y,nu,0,0),&b1(0,0),nc);
00361       fast_mul_AHB_addto_C(&U(y+mu,nu,0,0),&b1(0,0),&tmp(0,0),nc);
00362     }
00363   } else {
00364     nu=0;
00365     fast_mul_ABH_to_C(&U(x+mu,nu,0,0),&U(x+nu,mu,0,0),&b1(0,0),nc);
00366     fast_mul_ABH_to_C(&b1(0,0),&U(x,nu,0,0),&tmp(0,0),nc);
00367     y=x-nu;
00368     fast_mul_AHB_to_C(&U(y,mu,0,0),&U(y,nu,0,0),&b1(0,0),nc);
00369     fast_mul_AHB_addto_C(&U(y+mu,nu,0,0),&b1(0,0),&tmp(0,0),nc);
00370   }
00371   return tmp;
00372 }  
00373 
00374 inline mdp_matrix staple_ij_H(gauge_field &U, register site x, int mu) {
00375   int nc=U.nc;
00376   mdp_matrix b1(nc,nc);
00377   mdp_matrix tmp(U.nc,U.nc);
00378   site y(U.lattice());
00379   int nu;
00380   tmp=0;
00381   if(mu!=0)
00382     for(nu=1; nu<U.ndim; nu++) if(nu!=mu) {
00383       fast_mul_ABH_to_C(&U(x+mu,nu,0,0),&U(x+nu,mu,0,0),&b1(0,0),nc);
00384       fast_mul_ABH_addto_C(&b1(0,0),&U(x,nu,0,0),&tmp(0,0),nc);
00385       y=x-nu;
00386       fast_mul_AHB_to_C(&U(y,mu,0,0),&U(y,nu,0,0),&b1(0,0),nc);
00387       fast_mul_AHB_addto_C(&U(y+mu,nu,0,0),&b1(0,0),&tmp(0,0),nc);
00388     }
00389   return tmp;
00390 }
00391 
00392 // ///////////////////////////
00393 // plaquette
00394 // ////////////////////////// 
00395 inline mdp_matrix plaquette(gauge_field &U, site x, int mu, int nu) {
00396   int nc=U.nc;
00397   mdp_matrix b1(nc,nc);
00398   mdp_matrix b2(nc,nc);
00399   mdp_matrix tmp(U.nc,U.nc);
00400   fast_mul_AB_to_C(&U(x,mu,0,0),&U(x+mu,nu,0,0),&b1(0,0),nc);
00401   fast_mul_ABH_to_C(&b1(0,0),&U(x+nu,mu,0,0),&b2(0,0),nc);
00402   fast_mul_ABH_to_C(&b2(0,0),&U(x,nu,0,0),&tmp(0,0),nc);
00403   return tmp;
00404 }
00405 */
00406 

Generated on Sun Feb 27 15:12:19 2005 by  doxygen 1.4.1