1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-24 12:45:56 +01:00

Mixed precision

This commit is contained in:
Quadro 2021-06-01 13:34:05 -04:00
parent 3f2d8eb727
commit b83bbe2dd1

View File

@ -48,6 +48,11 @@ int main (int argc, char ** argv)
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 * FGridF = SpaceTimeGrid::makeFiveDimGrid(Ls,UGridF);
GridRedBlackCartesian * UrbGridF = SpaceTimeGrid::makeFourDimRedBlackGrid(UGridF);
GridRedBlackCartesian * FrbGridF = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGridF);
std::vector<int> seeds4({1,2,3,4}); std::vector<int> seeds4({1,2,3,4});
std::vector<int> seeds5({5,6,7,8}); std::vector<int> seeds5({5,6,7,8});
@ -63,17 +68,27 @@ int main (int argc, char ** argv)
LatticeFermion tmp1(FGrid); LatticeFermion tmp1(FGrid);
LatticeFermion err(FGrid); tmp=Zero(); LatticeFermion err(FGrid); tmp=Zero();
LatticeGaugeField Umu(UGrid); SU<Nc>::HotConfiguration(RNG4,Umu); LatticeGaugeField Umu(UGrid); SU<Nc>::HotConfiguration(RNG4,Umu);
LatticeGaugeFieldF UmuF(UGridF);
precisionChange(UmuF,Umu);
RealD mass=0.1; RealD mass=0.1;
RealD M5 =1.8; RealD M5 =1.8;
DomainWallFermionR DdwfPeri(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5); DomainWallFermionR DdwfPeri(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
DomainWallFermionF DdwfPeriF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
typedef DirichletFermionOperator<DomainWallFermionR::Impl_t> FermOp; typedef DomainWallFermionR::Impl_t FimplD;
typedef DomainWallFermionF::Impl_t FimplF;
typedef DirichletFermionOperator<FimplD> FermOp;
typedef DirichletFermionOperator<FimplF> FermOpF;
Coordinate Block({16,16,16,4}); Coordinate Block({16,16,16,4});
DomainWallFermionR DdwfPeriTmp(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5); DomainWallFermionR DdwfPeriTmp(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
FermOp Ddwf(DdwfPeriTmp,Block); DomainWallFermionF DdwfPeriTmpF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
FermOp Ddwf(DdwfPeriTmp,Block);
FermOpF DdwfF(DdwfPeriTmpF,Block);
Ddwf.ImportGauge(Umu); Ddwf.ImportGauge(Umu);
DdwfF.ImportGauge(UmuF);
LatticeFermion src_e (FrbGrid); LatticeFermion src_e (FrbGrid);
LatticeFermion src_o (FrbGrid); LatticeFermion src_o (FrbGrid);
@ -279,10 +294,9 @@ int main (int argc, char ** argv)
std::cout<<GridLogMessage<<"= Testing that POmega+POmegaBar = 1 "<<std::endl; std::cout<<GridLogMessage<<"= Testing that POmega+POmegaBar = 1 "<<std::endl;
std::cout<<GridLogMessage<<"=========================================================="<<std::endl; std::cout<<GridLogMessage<<"=========================================================="<<std::endl;
double StoppingCondition = 1e-10; SchurFactoredFermionOperator<FimplD,FimplF> Schur(DdwfPeri,DdwfPeriF,
double MaxCGIterations = 30000; Ddwf,DdwfF,
ConjugateGradient<LatticeFermion> CG(StoppingCondition,MaxCGIterations); Block);
SchurFactoredFermionOperator<DomainWallFermionR::Impl_t> Schur(DdwfPeri,Ddwf,CG,Block);
result = src; result = src;
Schur.ProjectOmega(result); Schur.ProjectOmega(result);
@ -422,7 +436,7 @@ int main (int argc, char ** argv)
tmp = phi; tmp = phi;
Schur.ProjectBoundaryBar(tmp); Schur.ProjectBoundaryBar(tmp);
std::cout << "Project Boundary Bar" << tmp<< std::endl; // std::cout << "Project Boundary Bar" << tmp<< std::endl;
tmp=tmp-result; tmp=tmp-result;