mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-24 12:45:56 +01:00
DDHMC test update
This commit is contained in:
parent
dcd48a0435
commit
670f4985fd
@ -42,13 +42,15 @@ int main (int argc, char ** argv)
|
|||||||
std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl;
|
std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl;
|
||||||
|
|
||||||
const int Ls=8;
|
const int Ls=8;
|
||||||
|
const int Nt=32;
|
||||||
auto latt = GridDefaultLatt();
|
auto latt = GridDefaultLatt();
|
||||||
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
|
latt[3] = Nt;
|
||||||
|
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(latt, GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
|
||||||
GridCartesian * FGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
|
GridCartesian * FGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
|
||||||
GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
|
GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
|
||||||
GridRedBlackCartesian * FrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGrid);
|
GridRedBlackCartesian * FrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGrid);
|
||||||
|
|
||||||
GridCartesian * UGridF = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplexF::Nsimd()),GridDefaultMpi());
|
GridCartesian * UGridF = SpaceTimeGrid::makeFourDimGrid(latt, GridDefaultSimd(Nd,vComplexF::Nsimd()),GridDefaultMpi());
|
||||||
GridCartesian * FGridF = SpaceTimeGrid::makeFiveDimGrid(Ls,UGridF);
|
GridCartesian * FGridF = SpaceTimeGrid::makeFiveDimGrid(Ls,UGridF);
|
||||||
GridRedBlackCartesian * UrbGridF = SpaceTimeGrid::makeFourDimRedBlackGrid(UGridF);
|
GridRedBlackCartesian * UrbGridF = SpaceTimeGrid::makeFourDimRedBlackGrid(UGridF);
|
||||||
GridRedBlackCartesian * FrbGridF = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGridF);
|
GridRedBlackCartesian * FrbGridF = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGridF);
|
||||||
@ -67,6 +69,7 @@ int main (int argc, char ** argv)
|
|||||||
LatticeFermion tmp(FGrid); tmp=Zero();
|
LatticeFermion tmp(FGrid); tmp=Zero();
|
||||||
LatticeFermion tmp1(FGrid);
|
LatticeFermion tmp1(FGrid);
|
||||||
LatticeFermion err(FGrid); tmp=Zero();
|
LatticeFermion err(FGrid); tmp=Zero();
|
||||||
|
LatticeFermion zz(FGrid); zz =Zero();
|
||||||
LatticeGaugeField Umu(UGrid); SU<Nc>::HotConfiguration(RNG4,Umu);
|
LatticeGaugeField Umu(UGrid); SU<Nc>::HotConfiguration(RNG4,Umu);
|
||||||
LatticeGaugeFieldF UmuF(UGridF);
|
LatticeGaugeFieldF UmuF(UGridF);
|
||||||
precisionChange(UmuF,Umu);
|
precisionChange(UmuF,Umu);
|
||||||
@ -81,12 +84,13 @@ int main (int argc, char ** argv)
|
|||||||
typedef DomainWallFermionF::Impl_t FimplF;
|
typedef DomainWallFermionF::Impl_t FimplF;
|
||||||
typedef DirichletFermionOperator<FimplD> FermOp;
|
typedef DirichletFermionOperator<FimplD> FermOp;
|
||||||
typedef DirichletFermionOperator<FimplF> FermOpF;
|
typedef DirichletFermionOperator<FimplF> FermOpF;
|
||||||
Coordinate Block({16,16,16,4});
|
Coordinate Block1({0,0,0,Nt/2});
|
||||||
|
Coordinate Block2({0,0,0,Nt/4});
|
||||||
|
|
||||||
DomainWallFermionR DdwfPeriTmp(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
|
DomainWallFermionR DdwfPeriTmp(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
|
||||||
DomainWallFermionF DdwfPeriTmpF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
|
DomainWallFermionF DdwfPeriTmpF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
|
||||||
FermOp Ddwf(DdwfPeriTmp,Block);
|
FermOp Ddwf(DdwfPeriTmp,Block1,Block2);
|
||||||
FermOpF DdwfF(DdwfPeriTmpF,Block);
|
FermOpF DdwfF(DdwfPeriTmpF,Block1,Block2);
|
||||||
Ddwf.ImportGauge(Umu);
|
Ddwf.ImportGauge(Umu);
|
||||||
DdwfF.ImportGauge(UmuF);
|
DdwfF.ImportGauge(UmuF);
|
||||||
|
|
||||||
@ -296,12 +300,14 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
SchurFactoredFermionOperator<FimplD,FimplF> Schur(DdwfPeri,DdwfPeriF,
|
SchurFactoredFermionOperator<FimplD,FimplF> Schur(DdwfPeri,DdwfPeriF,
|
||||||
Ddwf,DdwfF,
|
Ddwf,DdwfF,
|
||||||
Block);
|
Block1,Block2);
|
||||||
|
|
||||||
result = src;
|
result = src;
|
||||||
Schur.ProjectOmega(result);
|
Schur.ProjectOmega(result);
|
||||||
|
DumpSliceNorm("Omega",result,Nd);
|
||||||
tmp = src;
|
tmp = src;
|
||||||
Schur.ProjectOmegaBar(tmp);
|
Schur.ProjectOmegaBar(tmp);
|
||||||
|
DumpSliceNorm("OmegaBar",tmp,Nd);
|
||||||
std::cout << " norm2(src) "<<norm2(src)<< " "<< norm2(result)<<" "<<norm2(tmp)<<std::endl;
|
std::cout << " norm2(src) "<<norm2(src)<< " "<< norm2(result)<<" "<<norm2(tmp)<<std::endl;
|
||||||
result = result + tmp - src;
|
result = result + tmp - src;
|
||||||
std::cout << " diff = "<<norm2(result)<<std::endl;
|
std::cout << " diff = "<<norm2(result)<<std::endl;
|
||||||
@ -311,9 +317,13 @@ int main (int argc, char ** argv)
|
|||||||
std::cout<<GridLogMessage<<"= Testing that dBoundary+dBoundaryBar+dOmega+dOmegaBar = Munprec "<<std::endl;
|
std::cout<<GridLogMessage<<"= Testing that dBoundary+dBoundaryBar+dOmega+dOmegaBar = Munprec "<<std::endl;
|
||||||
std::cout<<GridLogMessage<<"=========================================================="<<std::endl;
|
std::cout<<GridLogMessage<<"=========================================================="<<std::endl;
|
||||||
Schur.dBoundary (src,tmp); result=tmp; std::cout << "dBoundary "<<norm2(tmp)<<std::endl;
|
Schur.dBoundary (src,tmp); result=tmp; std::cout << "dBoundary "<<norm2(tmp)<<std::endl;
|
||||||
|
DumpSliceNorm("dBoundary",tmp,Nd);
|
||||||
Schur.dBoundaryBar (src,tmp); result=result+tmp; std::cout << "dBoundaryBar "<<norm2(tmp)<<std::endl;
|
Schur.dBoundaryBar (src,tmp); result=result+tmp; std::cout << "dBoundaryBar "<<norm2(tmp)<<std::endl;
|
||||||
|
DumpSliceNorm("dBoundaryBar",tmp,Nd);
|
||||||
Schur.dOmega (src,tmp); result=result+tmp; std::cout << "dOmega "<<norm2(tmp)<<std::endl;
|
Schur.dOmega (src,tmp); result=result+tmp; std::cout << "dOmega "<<norm2(tmp)<<std::endl;
|
||||||
|
DumpSliceNorm("dOmega",tmp,Nd);
|
||||||
Schur.dOmegaBar (src,tmp); result=result+tmp; std::cout << "dOmegaBar "<<norm2(tmp)<<std::endl;
|
Schur.dOmegaBar (src,tmp); result=result+tmp; std::cout << "dOmegaBar "<<norm2(tmp)<<std::endl;
|
||||||
|
DumpSliceNorm("dOmegaBar",tmp,Nd);
|
||||||
|
|
||||||
DdwfPeri.M(src,ref);
|
DdwfPeri.M(src,ref);
|
||||||
err= ref - result;
|
err= ref - result;
|
||||||
@ -465,5 +475,41 @@ int main (int argc, char ** argv)
|
|||||||
std::cout << "<chi|R|phi>"<<innerProduct(chi,Rphi)<<std::endl;
|
std::cout << "<chi|R|phi>"<<innerProduct(chi,Rphi)<<std::endl;
|
||||||
std::cout << "<phi|Rdag|chi>"<<innerProduct(phi,Rdagchi)<<std::endl;
|
std::cout << "<phi|Rdag|chi>"<<innerProduct(phi,Rdagchi)<<std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
std::cout<<GridLogMessage<<"=========================================================="<<std::endl;
|
||||||
|
std::cout<<GridLogMessage<<"= Testing the sliced evolution of spin structured noise "<<std::endl;
|
||||||
|
std::cout<<GridLogMessage<<"=========================================================="<<std::endl;
|
||||||
|
|
||||||
|
Gamma::Algebra Gmu [] = {
|
||||||
|
Gamma::Algebra::GammaX,
|
||||||
|
Gamma::Algebra::GammaY,
|
||||||
|
Gamma::Algebra::GammaZ,
|
||||||
|
Gamma::Algebra::GammaT
|
||||||
|
};
|
||||||
|
int hits=2;
|
||||||
|
int isDWF=1;
|
||||||
|
std::cout << " latt " << latt <<" Nd "<<FGrid->Nd()<<" dims "<<FGrid->GlobalDimensions()<<std::endl;
|
||||||
|
LatticeInteger coor(FGrid);
|
||||||
|
for(int mu=0;mu<Nd;mu++){
|
||||||
|
Gamma G(Gmu[mu]);
|
||||||
|
int plane = latt[mu]/2;
|
||||||
|
for(int hit=0;hit<hits;hit++){
|
||||||
|
|
||||||
|
std::cout<<GridLogMessage<<"mu="<<mu<<" hit "<<hit<<std::endl;
|
||||||
|
LatticeCoordinate(coor,mu+isDWF);
|
||||||
|
|
||||||
|
gaussian(RNG5,src);
|
||||||
|
tmp = src - G*src;
|
||||||
|
src = src + G*src;
|
||||||
|
src= where(coor==Integer(plane),src,zz);
|
||||||
|
src= where(coor==Integer(0),tmp,src);
|
||||||
|
|
||||||
|
Schur.Dinverse(src,tmp);
|
||||||
|
DumpSliceNorm("1+/-gamma_mu",tmp,mu+isDWF);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Grid_finalize();
|
Grid_finalize();
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ int main (int argc, char ** argv)
|
|||||||
Coordinate simd_layout = GridDefaultSimd(Nd,vComplex::Nsimd());
|
Coordinate simd_layout = GridDefaultSimd(Nd,vComplex::Nsimd());
|
||||||
|
|
||||||
const int Ls=8;
|
const int Ls=8;
|
||||||
|
const int Nt = latt_size[3];
|
||||||
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
|
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
|
||||||
GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
|
GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
|
||||||
GridCartesian * FGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
|
GridCartesian * FGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
|
||||||
@ -152,37 +152,37 @@ int main (int argc, char ** argv)
|
|||||||
RealD mass=0.01;
|
RealD mass=0.01;
|
||||||
RealD M5=1.8;
|
RealD M5=1.8;
|
||||||
|
|
||||||
|
Coordinate Block1({0,0,0,Nt/2});
|
||||||
Coordinate Block({16,16,16,8});
|
Coordinate Block2({0,0,0,Nt/2-4});
|
||||||
|
|
||||||
// Double versions
|
// Double versions
|
||||||
typedef WilsonImplD FimplD;
|
typedef WilsonImplD FimplD;
|
||||||
typedef DirichletFermionOperator<WilsonImplR> DirichletFermion;
|
typedef DirichletFermionOperator<WilsonImplR> DirichletFermion;
|
||||||
DomainWallFermionR DdwfPeriodic(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
|
DomainWallFermionR DdwfPeriodic(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
|
||||||
DomainWallFermionR Ddwf(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
|
DomainWallFermionR Ddwf(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
|
||||||
DirichletFermion DdwfDirichlet(Ddwf,Block);
|
DirichletFermion DdwfDirichlet(Ddwf,Block1,Block2);
|
||||||
|
|
||||||
DomainWallFermionR PVPeriodic(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
|
DomainWallFermionR PVPeriodic(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
|
||||||
DomainWallFermionR PV(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
|
DomainWallFermionR PV(U,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
|
||||||
DirichletFermion PVDirichlet(PV,Block);
|
DirichletFermion PVDirichlet(PV,Block1,Block2);
|
||||||
|
|
||||||
// Single versions
|
// Single versions
|
||||||
typedef WilsonImplF FimplF;
|
typedef WilsonImplF FimplF;
|
||||||
typedef DirichletFermionOperator<WilsonImplF> DirichletFermionF;
|
typedef DirichletFermionOperator<WilsonImplF> DirichletFermionF;
|
||||||
DomainWallFermionF DdwfPeriodicF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
|
DomainWallFermionF DdwfPeriodicF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
|
||||||
DomainWallFermionF DdwfF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
|
DomainWallFermionF DdwfF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
|
||||||
DirichletFermionF DdwfDirichletF(DdwfF,Block);
|
DirichletFermionF DdwfDirichletF(DdwfF,Block1,Block2);
|
||||||
|
|
||||||
DomainWallFermionF PVPeriodicF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,1.0,M5);
|
DomainWallFermionF PVPeriodicF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,1.0,M5);
|
||||||
DomainWallFermionF PVF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,1.0,M5);
|
DomainWallFermionF PVF(UF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,1.0,M5);
|
||||||
DirichletFermionF PVDirichletF(PVF,Block);
|
DirichletFermionF PVDirichletF(PVF,Block1,Block2);
|
||||||
|
|
||||||
double StoppingCondition = 1.0e-12;
|
double StoppingCondition = 1.0e-12;
|
||||||
double MaxCGIterations = 10000;
|
double MaxCGIterations = 10000;
|
||||||
ConjugateGradient<LatticeFermion> CG(StoppingCondition,MaxCGIterations);
|
ConjugateGradient<LatticeFermion> CG(StoppingCondition,MaxCGIterations);
|
||||||
|
|
||||||
// DDHMCFilter<LatticeGaugeField> FilterDDHMC(Block,1);
|
// DDHMCFilter<LatticeGaugeField> FilterDDHMC(Block1,Block2,1);
|
||||||
DirichletFilter<LatticeGaugeField> FilterDDHMC(Block);
|
DirichletFilter<LatticeGaugeField> FilterDDHMC(Block1,Block2);
|
||||||
|
|
||||||
//////////////////// Two Flavour Determinant Ratio ///////////////////////////////
|
//////////////////// Two Flavour Determinant Ratio ///////////////////////////////
|
||||||
TwoFlavourRatioPseudoFermionAction<FimplD> Nf2(PVPeriodic, DdwfPeriodic,CG,CG);
|
TwoFlavourRatioPseudoFermionAction<FimplD> Nf2(PVPeriodic, DdwfPeriodic,CG,CG);
|
||||||
@ -202,27 +202,27 @@ int main (int argc, char ** argv)
|
|||||||
SchurFactoredFermionOperator<FimplD,FimplF>
|
SchurFactoredFermionOperator<FimplD,FimplF>
|
||||||
SchurDwf(DdwfPeriodic,DdwfPeriodicF,
|
SchurDwf(DdwfPeriodic,DdwfPeriodicF,
|
||||||
DdwfDirichlet,DdwfDirichletF,
|
DdwfDirichlet,DdwfDirichletF,
|
||||||
Block);
|
Block1,Block2);
|
||||||
|
|
||||||
SchurFactoredFermionOperator<FimplD,FimplF>
|
SchurFactoredFermionOperator<FimplD,FimplF>
|
||||||
SchurPV(PVPeriodic,PVPeriodicF,
|
SchurPV(PVPeriodic,PVPeriodicF,
|
||||||
PVDirichlet,PVDirichletF,
|
PVDirichlet,PVDirichletF,
|
||||||
Block);
|
Block1,Block2);
|
||||||
|
|
||||||
|
|
||||||
std::cout << "*** NUMERATOR ***\n";
|
std::cout << "*** NUMERATOR ***\n";
|
||||||
DomainDecomposedBoundaryTwoFlavourPseudoFermion<FimplD,FimplF> DBPFA(SchurDwf);
|
DomainDecomposedBoundaryTwoFlavourPseudoFermion<FimplD,FimplF> DBPFA(SchurDwf,1.0e-8,1.0e-8);
|
||||||
ForceTest<GimplTypesR>(DBPFA,U,FilterDDHMC);
|
ForceTest<GimplTypesR>(DBPFA,U,FilterDDHMC);
|
||||||
|
|
||||||
std::cout << "*** RATIO ***\n";
|
std::cout << "*** RATIO ***\n";
|
||||||
DomainDecomposedBoundaryTwoFlavourRatioPseudoFermion<FimplD,FimplF> DBPFRA(SchurPV,SchurDwf);
|
DomainDecomposedBoundaryTwoFlavourRatioPseudoFermion<FimplD,FimplF> DBPFRA(SchurPV,SchurDwf,1.0e-8,1.0e-8);
|
||||||
ForceTest<GimplTypesR>(DBPFRA,U,FilterDDHMC);
|
ForceTest<GimplTypesR>(DBPFRA,U,FilterDDHMC);
|
||||||
|
|
||||||
std::cout << "*** DEGENERATE ***\n";
|
std::cout << "*** DEGENERATE ***\n";
|
||||||
DomainDecomposedBoundaryTwoFlavourRatioPseudoFermion<FimplD,FimplF> DBPFRAdeg(SchurDwf,SchurDwf);
|
DomainDecomposedBoundaryTwoFlavourRatioPseudoFermion<FimplD,FimplF> DBPFRAdeg(SchurDwf,SchurDwf,1.0e-8,1.0e-8);
|
||||||
ForceTest<GimplTypesR>(DBPFRAdeg,U,FilterDDHMC);
|
ForceTest<GimplTypesR>(DBPFRAdeg,U,FilterDDHMC);
|
||||||
|
|
||||||
DomainDecomposedBoundaryTwoFlavourBosonPseudoFermion<FimplD,FimplF> DBPFBA(SchurPV);
|
DomainDecomposedBoundaryTwoFlavourBosonPseudoFermion<FimplD,FimplF> DBPFBA(SchurPV,1.0e-8,1.0e-8);
|
||||||
ForceTest<GimplTypesR>(DBPFBA,U,FilterDDHMC);
|
ForceTest<GimplTypesR>(DBPFBA,U,FilterDDHMC);
|
||||||
|
|
||||||
Grid_finalize();
|
Grid_finalize();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user