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

fermiqcd_sdwf_actions.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00014 class SDWFActionSlow {
00015  public:
00016   static void mul_Q(sdwf_field &chi_out,
00017                     sdwf_field &chi_in,
00018                     gauge_field &U,
00019                     coefficients &coeff,
00020                     int parity=EVENODD) {
00021     int   nc=U.nc;
00022     int   ndim=U.ndim;
00023     int   L5=chi_in.L5;
00024     int   x5;
00025     
00026     mdp_real mass; 
00027     mdp_real m_5=0.5;       
00028     mdp_real m_f=10.0;      
00029     mdp_real sign;
00030 
00031     if(coeff.has_key("m_0")) mass=coeff["m_0"];
00032     else error("coefficient m_0 undeclared");
00033     if(coeff.has_key("m_f")) m_f=coeff["m_f"];
00034     else error("coefficient m_f undeclared");
00035     if(coeff.has_key("m_5")) m_5=coeff["m_5"];
00036     else error("coefficient m_5 undeclared");
00037     if(coeff.has_key("sign")) sign=coeff["sign"];
00038     else sign=1;
00039 
00040     mdp_real two_mass=2.0*(m_f-m_5); 
00041 
00042     
00043     if(!U.swirls.allocated())
00044       error("fermiqcd_sdwf_algorithms/sdwf_mul_Q_TWO: no swirls?");
00045     
00046     int i,j,mu;
00047     site x(chi_in.lattice());
00048     site x_up(chi_in.lattice());
00049     site x_dw(chi_in.lattice());
00050     mdp_complex phase;
00051     mdp_complex *FU_up;
00052     mdp_complex *FU_dw;
00053     mdp_complex *Fchi_up;
00054     mdp_complex *Fchi_dw;
00055     
00056     for(x5=0; x5<L5; x5++) {
00057       if(two_mass!=0) 
00058         forallsitesofparity(x,parity)
00059           for(i=0; i<nc; i++)
00060             chi_out(x,x5,i)=two_mass*chi_in(x,x5,i);
00061       else
00062         forallsitesofparity(x,parity)
00063           for(i=0; i<nc; i++)
00064             chi_out(x,x5,i)=0;
00065       
00066       // version non-optimized for su3
00067       forallsitesofparity(x,parity) {
00068         for(mu=0; mu<ndim; mu++) {
00069           x_up=x+mu;
00070           x_dw=x-mu;
00071           FU_up=&(U(x,mu,0,0));
00072           FU_dw=&(U(x_dw,mu,0,0));
00073           Fchi_up=&(chi_in(x_up,x5,0));
00074           Fchi_dw=&(chi_in(x_dw,x5,0));
00075           phase=(mdp_real) sign*chi_in.eta(x,mu);
00076           for(i=0; i<nc; i++)
00077             for(j=0; j<nc; j++) 
00078               chi_out(x,x5,i)+=phase*
00079                 (FU_up[nc*i+j]*Fchi_up[j]-conj(FU_dw[nc*j+i])*Fchi_dw[j]);
00080         }
00081         
00082         // #define TEST_NO_GAMMA5 
00083 #ifndef TEST_NO_GAMMA5      
00084         if(x5>0) { 
00085           // Pleft = (1-Gamma5) (x) 1
00086           
00087           phase=m_5;                         // 1 (x) 1
00088           for(i=0; i<nc; i++)
00089             chi_out(x,x5,i)+=phase*chi_in(x,x5-1,i);
00090           
00091           phase=chi_in.chiral_phase(x)*m_5; // Gamma5 (x) 1
00092           x_dw=chi_in.chiral_shift(x);
00093           FU_dw=&(U.swirls(x,0,0));
00094           Fchi_dw=&(chi_in(x_dw,x5-1,0));
00095           for(i=0; i<nc; i++)
00096             for(j=0; j<nc; j++)
00097               chi_out(x,x5,i)-=phase*FU_dw[nc*i+j]*Fchi_dw[j];
00098         }
00099         
00100         if(x5<L5-1) {
00101           // Pright = (1+Gamma5) (x) 1
00102           
00103           phase=m_5;                         // 1 (x) 1
00104           for(i=0; i<nc; i++)
00105             chi_out(x,x5,i)+=phase*chi_in(x,x5+1,i);
00106           
00107           phase=chi_in.chiral_phase(x)*m_5; // + Gamma5 (x) 1
00108           x_up=chi_in.chiral_shift(x);
00109           FU_up=&(U.swirls(x,0,0));
00110           Fchi_up=&(chi_in(x_up,x5+1,0));
00111           for(i=0; i<nc; i++)
00112             for(j=0; j<nc; j++) 
00113               chi_out(x,x5,i)+=phase*FU_up[nc*i+j]*Fchi_up[j];
00114         }
00115 #endif 
00116       }
00117     }
00118     
00119     forallsitesofparity(x,parity) {
00120       
00121       // Pleft = (1-Gamma5) (x) 1
00122       
00123       phase=mass;                         // 1 (x) 1
00124       for(i=0; i<nc; i++)
00125         chi_out(x,0,i)+=phase*chi_in(x,L5-1,i);
00126       
00127       phase=chi_in.chiral_phase(x)*mass; // Gamma5 (x) 1
00128       x_dw=chi_in.chiral_shift(x);
00129       FU_dw=&(U.swirls(x,0,0));
00130       Fchi_dw=&(chi_in(x_dw,L5-1,0));
00131       for(i=0; i<nc; i++)
00132         for(j=0; j<nc; j++)
00133           chi_out(x,0,i)-=phase*FU_dw[nc*i+j]*Fchi_dw[j];
00134       
00135       // Pright = (1+Gamma5) (x) 1
00136       
00137       phase=mass;                // 1 (x) 1
00138       for(i=0; i<nc; i++)
00139         chi_out(x,L5-1,i)+=phase*chi_in(x,0,i);
00140       
00141       phase=chi_in.chiral_phase(x)*mass; // + Gamma5 (x) 1
00142       x_up=chi_in.chiral_shift(x);
00143       FU_up=&(U.swirls(x,0,0));
00144       Fchi_up=&(chi_in(x_up,0,0));
00145       for(i=0; i<nc; i++)
00146         for(j=0; j<nc; j++)
00147           chi_out(x,L5-1,i)+phase*FU_up[nc*i+j]*Fchi_up[j];
00148     }
00149     
00150     /* NORMALIZE NOW
00151        double norm=0;
00152        forallsites(x)
00153        for(x5=0; x5<L5; x5++)
00154        for(i=0; i<nc; i++)
00155        norm+=pow(abs(chi_out(x,x5,i)),2);
00156        norm=sqrt(norm);
00157        forallsites(x)
00158        for(x5=0; x5<L5; x5++)
00159        for(i=0; i<nc; i++)
00160        chi_out(x,x5,i)/=norm;
00161     */    
00162   }
00163 
00164   
00165 
00166 };

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