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
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
00083 #ifndef TEST_NO_GAMMA5
00084 if(x5>0) {
00085
00086
00087 phase=m_5;
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;
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
00102
00103 phase=m_5;
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;
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
00122
00123 phase=mass;
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;
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
00136
00137 phase=mass;
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;
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
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 }
00163
00164
00165
00166 };