mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	higher precision reduction variables in norm and inner product
This commit is contained in:
		@@ -42,7 +42,7 @@ template<class vobj> inline RealD norm2(const Lattice<vobj> &arg){
 | 
				
			|||||||
  ComplexD nrm = innerProduct(arg,arg);
 | 
					  ComplexD nrm = innerProduct(arg,arg);
 | 
				
			||||||
  return std::real(nrm); 
 | 
					  return std::real(nrm); 
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					// Double inner product
 | 
				
			||||||
template<class vobj>
 | 
					template<class vobj>
 | 
				
			||||||
inline ComplexD innerProduct(const Lattice<vobj> &left,const Lattice<vobj> &right) 
 | 
					inline ComplexD innerProduct(const Lattice<vobj> &left,const Lattice<vobj> &right) 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -102,6 +102,7 @@ inline auto sum(const LatticeTrinaryExpression<Op,T1,T2,T3> & expr)
 | 
				
			|||||||
  return sum(closure(expr));
 | 
					  return sum(closure(expr));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FIXME precision promoted summation
 | 
				
			||||||
template<class vobj>
 | 
					template<class vobj>
 | 
				
			||||||
inline typename vobj::scalar_object sum(const Lattice<vobj> &arg)
 | 
					inline typename vobj::scalar_object sum(const Lattice<vobj> &arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,7 +89,7 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
  GridStopWatch CGTimer;
 | 
					  GridStopWatch CGTimer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SchurDiagMooeeOperator<DomainWallFermionR, LatticeFermion> HermOpEO(Ddwf);
 | 
					  SchurDiagMooeeOperator<DomainWallFermionR, LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8, 10000, 0);// switch off the assert
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-5, 10000, 0);// switch off the assert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CGTimer.Start();
 | 
					  CGTimer.Start();
 | 
				
			||||||
  CG(HermOpEO, src_o, result_o);
 | 
					  CG(HermOpEO, src_o, result_o);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,7 +73,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-6,10000);
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user