mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-24 12:45:56 +01:00
Mixed precision
This commit is contained in:
parent
3f2d8eb727
commit
b83bbe2dd1
@ -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);
|
||||||
|
DomainWallFermionF DdwfPeriTmpF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
|
||||||
FermOp Ddwf(DdwfPeriTmp,Block);
|
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;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user