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:
@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user