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

fermiqcd_dwfermi_actions.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00028 
00029 class DWFermiActionSlow {
00030  public:
00031   static void mul_Q(dwfermi_field &psi_out, 
00032                     dwfermi_field &psi_in, 
00033                     gauge_field &U, 
00034                     coefficients &coeff) {
00035     
00036     if(psi_in.nspin!=4) error("fermiqcd_dwfermi_algorithms/dwfermi_mul_Q_ONE: nspin!=4");
00037     if(psi_in.nc!=U.nc) error("fermiqcd_dwfermi_algorithms/dwfermi_mul_Q_ONE: gauge and spinor have different nc");
00038     
00039     register int    ndim=psi_in.lattice().ndim;
00040     register int    nspin=psi_in.nspin;
00041     register int    nc=psi_in.nc;
00042     register int    L5=psi_in.L5;
00043     register mdp_real m_5,m_f,sign;
00044     if(coeff.has_key("m_5")) m_5=coeff["m_5"];
00045     else error("coefficients m_5 undeclared");
00046     if(coeff.has_key("m_f")) m_f=coeff["m_f"];
00047     else error("coefficients m_f undeclared");
00048     if(coeff.has_key("sign")) sign=coeff["sign"];
00049     else sign=1;
00050 
00051     // check the sign and the 6.0 here
00052     register mdp_real kappa5=0.5/(m_5-6.0);
00053     register mdp_real kappaf=-m_f*kappa5;
00054     
00055     site           x(psi_in.lattice());
00056     register int   l,a,mu;
00057     
00058     mdp_matrix psi_up(nspin,nc);
00059     mdp_matrix psi_dw(nspin,nc);
00060     mdp_matrix psi_lo(nspin,nc);
00061     
00062     // =================================================================
00063     // ref. hep-lat/0007038
00064     // ================================================================= 
00065     
00066     mdp_matrix tmp;
00067     
00068     psi_out=psi_in; 
00069     forallsites(x) {
00070       for(l=0; l<L5; l++) {
00071         for(mu=0; mu<ndim; mu++) {
00072           for(a=0; a<nspin; a++) {
00073             psi_up(a)=U(x,mu)*psi_in(x+mu,l,a);
00074             psi_dw(a)=hermitian(U(x-mu,mu))*psi_in(x-mu,l,a);
00075           }
00076           psi_out(x,l)+=kappa5*((1-sign*Gamma[mu])*psi_up+
00077                                 (1+sign*Gamma[mu])*psi_dw);
00078         }
00079         if(l<L5-1)
00080           psi_out(x,l)+=kappa5*(1-Gamma5)*psi_in(x,l+1);
00081         else
00082           psi_out(x,L5-1)+=kappaf*(1-Gamma5)*psi_in(x,0);
00083         if(l>0)
00084           psi_out(x,l)+=kappa5*(1+Gamma5)*psi_in(x,l-1);
00085         else
00086           psi_out(x,0)+=kappaf*(1+Gamma5)*psi_in(x,L5-1);
00087       }
00088     }
00089   }
00090 };
00091 

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