1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-25 05:05: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 * 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> seeds5({5,6,7,8});
@ -63,17 +68,27 @@ int main (int argc, char ** argv)
LatticeFermion tmp1(FGrid);
LatticeFermion err(FGrid); tmp=Zero();
LatticeGaugeField Umu(UGrid); SU<Nc>::HotConfiguration(RNG4,Umu);
LatticeGaugeFieldF UmuF(UGridF);
precisionChange(UmuF,Umu);
RealD mass=0.1;
RealD M5 =1.8;
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});
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);
DdwfF.ImportGauge(UmuF);
LatticeFermion src_e (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<<"=========================================================="<<std::endl;
double StoppingCondition = 1e-10;
double MaxCGIterations = 30000;
ConjugateGradient<LatticeFermion> CG(StoppingCondition,MaxCGIterations);
SchurFactoredFermionOperator<DomainWallFermionR::Impl_t> Schur(DdwfPeri,Ddwf,CG,Block);
SchurFactoredFermionOperator<FimplD,FimplF> Schur(DdwfPeri,DdwfPeriF,
Ddwf,DdwfF,
Block);
result = src;
Schur.ProjectOmega(result);
@ -422,7 +436,7 @@ int main (int argc, char ** argv)
tmp = phi;
Schur.ProjectBoundaryBar(tmp);
std::cout << "Project Boundary Bar" << tmp<< std::endl;
// std::cout << "Project Boundary Bar" << tmp<< std::endl;
tmp=tmp-result;