1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-06-13 04:37:05 +01:00

updated test clover + first attempt derivative clove term (still missing spin part)

This commit is contained in:
pretidav
2017-10-16 02:47:33 +02:00
parent d810e8c8fb
commit 317ddfedee
3 changed files with 180 additions and 71 deletions

View File

@ -55,13 +55,15 @@ int main (int argc, char ** argv)
typedef typename WilsonCloverFermionR::FermionField FermionField;
typename WilsonCloverFermionR::ImplParams params;
FermionField src (&Grid); random(pRNG,src);
FermionField result(&Grid); result=zero;
FermionField ref(&Grid); ref=zero;
FermionField tmp(&Grid); tmp=zero;
FermionField err(&Grid); tmp=zero;
FermionField phi (&Grid); random(pRNG,phi);
FermionField chi (&Grid); random(pRNG,chi);
FermionField src (&Grid); random(pRNG,src);
FermionField result(&Grid); result=zero;
FermionField result2(&Grid); result2=zero;
FermionField ref(&Grid); ref=zero;
FermionField tmp(&Grid); tmp=zero;
FermionField err(&Grid); err=zero;
FermionField err2(&Grid); err2=zero;
FermionField phi (&Grid); random(pRNG,phi);
FermionField chi (&Grid); random(pRNG,chi);
LatticeGaugeField Umu(&Grid); SU3::HotConfiguration(pRNG,Umu);
std::vector<LatticeColourMatrix> U(4,&Grid);
@ -71,24 +73,9 @@ int main (int argc, char ** argv)
volume=volume*latt_size[mu];
}
// Only one non-zero (y)
for(int mu=0;mu<Nd;mu++){
U[mu] = PeekIndex<LorentzIndex>(Umu,mu);
/* Debug force unit
U[mu] = 1.0;
PokeIndex<LorentzIndex>(Umu,U[mu],mu);
*/
}
ref = zero;
RealD mass=0.1;
RealD mass= 0.1;
RealD csw = 1.0;
{ // Simple clover implementation
// ref = ref + mass * src;
}
WilsonCloverFermionR Dwc(Umu,Grid,RBGrid,mass,csw,params);
Dwc.ImportGauge(Umu);
@ -176,27 +163,26 @@ int main (int argc, char ** argv)
std::cout<<GridLogMessage <<"pDco - conj(cDpe) "<< pDco-conj(cDpe) <<std::endl;
std::cout<<GridLogMessage<<"=============================================================="<<std::endl;
std::cout<<GridLogMessage<<"= Test MeeInv Mee = 1 "<<std::endl;
std::cout<<GridLogMessage<<"= Test MeeInv Mee = 1 (if csw!=0) "<<std::endl;
std::cout<<GridLogMessage<<"=============================================================="<<std::endl;
pickCheckerboard(Even,chi_e,chi);
pickCheckerboard(Odd ,chi_o,chi);
Dwc.Mooee(chi_e,src_e);
Dwc.MooeeInv(src_e,phi_e);
Dwc.MooeeInv(src_e,phi_e);
Dwc.Mooee(chi_o,src_o);
Dwc.MooeeInv(src_o,phi_o);
Dwc.MooeeInv(src_o,phi_o);
setCheckerboard(phi,phi_e);
setCheckerboard(phi,phi_o);
std::cout<<GridLogMessage << "err "<< norm2(err)<< std::endl;
err = phi-chi;
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<< std::endl;
std::cout<<GridLogMessage<<"=============================================================="<<std::endl;
std::cout<<GridLogMessage<<"= Test MeeDag MeeInvDag = 1 "<<std::endl;
std::cout<<GridLogMessage<<"= Test MeeDag MeeInvDag = 1 (if csw!=0) "<<std::endl;
std::cout<<GridLogMessage<<"=============================================================="<<std::endl;
pickCheckerboard(Even,chi_e,chi);
@ -211,12 +197,11 @@ int main (int argc, char ** argv)
setCheckerboard(phi,phi_e);
setCheckerboard(phi,phi_o);
std::cout<<GridLogMessage << "err "<< std::endl;
err = phi-chi;
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<< std::endl;
std::cout<<GridLogMessage<<"=============================================================="<<std::endl;
std::cout<<GridLogMessage<<"= Test MeeInv MeeDag = 1 "<<std::endl;
std::cout<<GridLogMessage<<"= Test MeeInv MeeDag = 1 (if csw!=0) "<<std::endl;
std::cout<<GridLogMessage<<"=============================================================="<<std::endl;
pickCheckerboard(Even,chi_e,chi);
@ -231,9 +216,112 @@ int main (int argc, char ** argv)
setCheckerboard(phi,phi_e);
setCheckerboard(phi,phi_o);
std::cout<<GridLogMessage << "err "<< std::endl;
err = phi-chi;
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<< std::endl;
Grid_finalize();
std::cout<<GridLogMessage<<"================================================================"<<std::endl;
std::cout<<GridLogMessage<<"= Testing gauge covariance Clover term with EO preconditioning "<<std::endl;
std::cout<<GridLogMessage<<"================================================================"<<std::endl;
chi=zero; phi=zero; tmp=zero;
pickCheckerboard(Even,chi_e,chi);
pickCheckerboard(Odd ,chi_o,chi);
pickCheckerboard(Even,phi_e,phi);
pickCheckerboard(Odd ,phi_o,phi);
Dwc.Mooee(src_e,chi_e);
Dwc.Mooee(src_o,chi_o);
setCheckerboard(chi,chi_e);
setCheckerboard(chi,chi_o);
setCheckerboard(src,src_e);
setCheckerboard(src,src_o);
//Gauge Transformation
std::vector<int> seeds2({5,6,7,8});
GridParallelRNG pRNG2(&Grid); pRNG2.SeedFixedIntegers(seeds2);
LatticeColourMatrix Omega(&Grid);
LatticeColourMatrix ShiftedOmega(&Grid);
LatticeGaugeField U_prime(&Grid); U_prime=zero;
LatticeColourMatrix U_prime_mu(&Grid); U_prime_mu=zero;
SU<Nc>::LieRandomize(pRNG2, Omega, 1.0);
for (int mu=0;mu<Nd;mu++){
U[mu]=peekLorentz(Umu,mu);
ShiftedOmega=Cshift(Omega,mu,1);
U_prime_mu=Omega*U[mu]*adj(ShiftedOmega);
pokeLorentz(U_prime,U_prime_mu,mu);
}
WilsonCloverFermionR Dwc_prime(U_prime,Grid,RBGrid,mass,csw,params);
Dwc_prime.ImportGauge(U_prime);
tmp=Omega*src;
pickCheckerboard(Even,src_e,tmp);
pickCheckerboard(Odd ,src_o,tmp);
Dwc_prime.Mooee(src_e,phi_e);
Dwc_prime.Mooee(src_o,phi_o);
setCheckerboard(phi,phi_e);
setCheckerboard(phi,phi_o);
err = chi - adj(Omega)*phi;
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<< std::endl;
std::cout<<GridLogMessage<<"================================================================="<<std::endl;
std::cout<<GridLogMessage<<"= Testing gauge covariance Clover term w/o EO preconditioning "<<std::endl;
std::cout<<GridLogMessage<<"================================================================"<<std::endl;
chi=zero; phi=zero;
WilsonFermionR Dw(Umu,Grid,RBGrid,mass,params);
Dw.ImportGauge(Umu);
Dw.M(src,result);
Dwc.M(src,chi);
Dwc_prime.M(Omega*src,phi);
WilsonFermionR Dw_prime(U_prime,Grid,RBGrid,mass,params);
Dw_prime.ImportGauge(U_prime);
Dw_prime.M(Omega*src,result2);
err = chi-adj(Omega)*phi;
err2 = result-adj(Omega)*result2;
std::cout<<GridLogMessage << "norm diff Wilson "<< norm2(err)<< std::endl;
std::cout<<GridLogMessage << "norm diff WilsonClover "<< norm2(err2)<< std::endl;
std::cout<<GridLogMessage<<"=========================================================="<<std::endl;
std::cout<<GridLogMessage<<"= Testing Mooee(csw=0) Clover to reproduce Mooee Wilson "<<std::endl;
std::cout<<GridLogMessage<<"=========================================================="<<std::endl;
chi=zero; phi=zero; err=zero;
WilsonCloverFermionR Dwc_csw0(Umu,Grid,RBGrid,mass,0.0,params); // <-- csw=0
Dwc_csw0.ImportGauge(Umu);
pickCheckerboard(Even,phi_e,phi);
pickCheckerboard(Odd ,phi_o,phi);
pickCheckerboard(Even,chi_e,chi);
pickCheckerboard(Odd ,chi_o,chi);
Dw.Mooee(src_e,chi_e);
Dw.Mooee(src_o,chi_o);
Dwc_csw0.Mooee(src_e,phi_e);
Dwc_csw0.Mooee(src_o,phi_o);
setCheckerboard(chi,chi_e);
setCheckerboard(chi,chi_o);
setCheckerboard(phi,phi_e);
setCheckerboard(phi,phi_o);
setCheckerboard(src,src_e);
setCheckerboard(src,src_o);
FermionField::scalar_type scal(4.0 + mass);
err = chi - (phi + scal*src) ; // subtraction of the mass term (not present in Mooee Clover!)
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<< std::endl;
Grid_finalize();
}