mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Tests clean build on HIP
This commit is contained in:
		@@ -324,9 +324,9 @@ public:
 | 
				
			|||||||
  GridBase*        _cbgrid;
 | 
					  GridBase*        _cbgrid;
 | 
				
			||||||
  int hermitian;
 | 
					  int hermitian;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CartesianStencil<siteVector,siteVector,int> Stencil; 
 | 
					  CartesianStencil<siteVector,siteVector,DefaultImplParams> Stencil; 
 | 
				
			||||||
  CartesianStencil<siteVector,siteVector,int> StencilEven;
 | 
					  CartesianStencil<siteVector,siteVector,DefaultImplParams> StencilEven;
 | 
				
			||||||
  CartesianStencil<siteVector,siteVector,int> StencilOdd;
 | 
					  CartesianStencil<siteVector,siteVector,DefaultImplParams> StencilOdd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::vector<CoarseMatrix> A;
 | 
					  std::vector<CoarseMatrix> A;
 | 
				
			||||||
  std::vector<CoarseMatrix> Aeven;
 | 
					  std::vector<CoarseMatrix> Aeven;
 | 
				
			||||||
@@ -631,7 +631,7 @@ public:
 | 
				
			|||||||
    assert(Aself != nullptr);
 | 
					    assert(Aself != nullptr);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void DselfInternal(CartesianStencil<siteVector,siteVector,int> &st, CoarseMatrix &a,
 | 
					  void DselfInternal(CartesianStencil<siteVector,siteVector,DefaultImplParams> &st, CoarseMatrix &a,
 | 
				
			||||||
                       const CoarseVector &in, CoarseVector &out, int dag) {
 | 
					                       const CoarseVector &in, CoarseVector &out, int dag) {
 | 
				
			||||||
    int point = geom.npoint-1;
 | 
					    int point = geom.npoint-1;
 | 
				
			||||||
    autoView( out_v, out, AcceleratorWrite);
 | 
					    autoView( out_v, out, AcceleratorWrite);
 | 
				
			||||||
@@ -694,7 +694,7 @@ public:
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void DhopInternal(CartesianStencil<siteVector,siteVector,int> &st, std::vector<CoarseMatrix> &a,
 | 
					  void DhopInternal(CartesianStencil<siteVector,siteVector,DefaultImplParams> &st, std::vector<CoarseMatrix> &a,
 | 
				
			||||||
                    const CoarseVector &in, CoarseVector &out, int dag) {
 | 
					                    const CoarseVector &in, CoarseVector &out, int dag) {
 | 
				
			||||||
    SimpleCompressor<siteVector> compressor;
 | 
					    SimpleCompressor<siteVector> compressor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -784,9 +784,9 @@ public:
 | 
				
			|||||||
    _cbgrid(new GridRedBlackCartesian(&CoarseGrid)),
 | 
					    _cbgrid(new GridRedBlackCartesian(&CoarseGrid)),
 | 
				
			||||||
    geom(CoarseGrid._ndimension),
 | 
					    geom(CoarseGrid._ndimension),
 | 
				
			||||||
    hermitian(hermitian_),
 | 
					    hermitian(hermitian_),
 | 
				
			||||||
    Stencil(&CoarseGrid,geom.npoint,Even,geom.directions,geom.displacements,0),
 | 
					    Stencil(&CoarseGrid,geom.npoint,Even,geom.directions,geom.displacements),
 | 
				
			||||||
    StencilEven(_cbgrid,geom.npoint,Even,geom.directions,geom.displacements,0),
 | 
					    StencilEven(_cbgrid,geom.npoint,Even,geom.directions,geom.displacements),
 | 
				
			||||||
    StencilOdd(_cbgrid,geom.npoint,Odd,geom.directions,geom.displacements,0),
 | 
					    StencilOdd(_cbgrid,geom.npoint,Odd,geom.directions,geom.displacements),
 | 
				
			||||||
    A(geom.npoint,&CoarseGrid),
 | 
					    A(geom.npoint,&CoarseGrid),
 | 
				
			||||||
    Aeven(geom.npoint,_cbgrid),
 | 
					    Aeven(geom.npoint,_cbgrid),
 | 
				
			||||||
    Aodd(geom.npoint,_cbgrid),
 | 
					    Aodd(geom.npoint,_cbgrid),
 | 
				
			||||||
@@ -804,9 +804,9 @@ public:
 | 
				
			|||||||
    _cbgrid(&CoarseRBGrid),
 | 
					    _cbgrid(&CoarseRBGrid),
 | 
				
			||||||
    geom(CoarseGrid._ndimension),
 | 
					    geom(CoarseGrid._ndimension),
 | 
				
			||||||
    hermitian(hermitian_),
 | 
					    hermitian(hermitian_),
 | 
				
			||||||
    Stencil(&CoarseGrid,geom.npoint,Even,geom.directions,geom.displacements,0),
 | 
					    Stencil(&CoarseGrid,geom.npoint,Even,geom.directions,geom.displacements),
 | 
				
			||||||
    StencilEven(&CoarseRBGrid,geom.npoint,Even,geom.directions,geom.displacements,0),
 | 
					    StencilEven(&CoarseRBGrid,geom.npoint,Even,geom.directions,geom.displacements),
 | 
				
			||||||
    StencilOdd(&CoarseRBGrid,geom.npoint,Odd,geom.directions,geom.displacements,0),
 | 
					    StencilOdd(&CoarseRBGrid,geom.npoint,Odd,geom.directions,geom.displacements),
 | 
				
			||||||
    A(geom.npoint,&CoarseGrid),
 | 
					    A(geom.npoint,&CoarseGrid),
 | 
				
			||||||
    Aeven(geom.npoint,&CoarseRBGrid),
 | 
					    Aeven(geom.npoint,&CoarseRBGrid),
 | 
				
			||||||
    Aodd(geom.npoint,&CoarseRBGrid),
 | 
					    Aodd(geom.npoint,&CoarseRBGrid),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -526,6 +526,7 @@ public:
 | 
				
			|||||||
      (*this)(Linop,in[k],out[k]);
 | 
					      (*this)(Linop,in[k],out[k]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					  virtual ~OperatorFunction(){};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<class Field> class LinearFunction {
 | 
					template<class Field> class LinearFunction {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,15 +34,6 @@ directory
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
NAMESPACE_BEGIN(Grid);
 | 
					NAMESPACE_BEGIN(Grid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// These can move into a params header and be given MacroMagic serialisation
 | 
					 | 
				
			||||||
struct DefaultImplParams {
 | 
					 | 
				
			||||||
  Coordinate dirichlet; // Blocksize of dirichlet BCs
 | 
					 | 
				
			||||||
  int  partialDirichlet;
 | 
					 | 
				
			||||||
  DefaultImplParams()  {
 | 
					 | 
				
			||||||
    dirichlet.resize(0);
 | 
					 | 
				
			||||||
    partialDirichlet=0;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct GparityWilsonImplParams {
 | 
					struct GparityWilsonImplParams {
 | 
				
			||||||
  Coordinate twists;
 | 
					  Coordinate twists;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,16 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
NAMESPACE_BEGIN(Grid);
 | 
					NAMESPACE_BEGIN(Grid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// These can move into a params header and be given MacroMagic serialisation
 | 
				
			||||||
 | 
					struct DefaultImplParams {
 | 
				
			||||||
 | 
					  Coordinate dirichlet; // Blocksize of dirichlet BCs
 | 
				
			||||||
 | 
					  int  partialDirichlet;
 | 
				
			||||||
 | 
					  DefaultImplParams()  {
 | 
				
			||||||
 | 
					    dirichlet.resize(0);
 | 
				
			||||||
 | 
					    partialDirichlet=0;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Gather for when there *is* need to SIMD split with compression
 | 
					// Gather for when there *is* need to SIMD split with compression
 | 
				
			||||||
///////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -143,7 +143,7 @@ NAMESPACE_BEGIN(Grid);
 | 
				
			|||||||
    typedef ComplexD DoublePrecision2;
 | 
					    typedef ComplexD DoublePrecision2;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef GRID_CUDA
 | 
					#if defined(GRID_CUDA) || defined(GRID_HIP)  
 | 
				
			||||||
  template<> struct GridTypeMapper<std::complex<float> > : public GridTypeMapper_Base {
 | 
					  template<> struct GridTypeMapper<std::complex<float> > : public GridTypeMapper_Base {
 | 
				
			||||||
    typedef std::complex<float> scalar_type;
 | 
					    typedef std::complex<float> scalar_type;
 | 
				
			||||||
    typedef std::complex<double> scalar_typeD;
 | 
					    typedef std::complex<double> scalar_typeD;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
 | 
					CLIME=`spack find --paths c-lime@2-3-9 | grep c-lime| cut -c 15-`
 | 
				
			||||||
../../configure --enable-comms=mpi-auto \
 | 
					../../configure --enable-comms=mpi-auto \
 | 
				
			||||||
 | 
					--with-lime=$CLIME \
 | 
				
			||||||
--enable-unified=no \
 | 
					--enable-unified=no \
 | 
				
			||||||
--enable-shm=nvlink \
 | 
					--enable-shm=nvlink \
 | 
				
			||||||
--enable-accelerator=hip \
 | 
					--enable-accelerator=hip \
 | 
				
			||||||
@@ -7,7 +9,7 @@
 | 
				
			|||||||
--with-gmp=$OLCF_GMP_ROOT \
 | 
					--with-gmp=$OLCF_GMP_ROOT \
 | 
				
			||||||
--with-fftw=$FFTW_DIR/.. \
 | 
					--with-fftw=$FFTW_DIR/.. \
 | 
				
			||||||
--with-mpfr=/opt/cray/pe/gcc/mpfr/3.1.4/ \
 | 
					--with-mpfr=/opt/cray/pe/gcc/mpfr/3.1.4/ \
 | 
				
			||||||
--disable-gparity \
 | 
					--disable-fermion-reps \
 | 
				
			||||||
CXX=hipcc MPICXX=mpicxx \
 | 
					CXX=hipcc MPICXX=mpicxx \
 | 
				
			||||||
CXXFLAGS="-fPIC -I{$ROCM_PATH}/include/ -std=c++14 -I${MPICH_DIR}/include -L/lib64 " \
 | 
					CXXFLAGS="-fPIC -I{$ROCM_PATH}/include/ -std=c++14 -I${MPICH_DIR}/include -L/lib64 " \
 | 
				
			||||||
 LDFLAGS="-L/lib64 -L/opt/rocm-5.2.0/lib/ -L${MPICH_DIR}/lib -lmpi -L${CRAY_MPICH_ROOTDIR}/gtl/lib -lmpi_gtl_hsa -lamdhip64 "
 | 
					 LDFLAGS="-L/lib64 -L/opt/rocm-5.2.0/lib/ -L${MPICH_DIR}/lib -lmpi -L${CRAY_MPICH_ROOTDIR}/gtl/lib -lmpi_gtl_hsa -lamdhip64 "
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					. /autofs/nccs-svm1_home1/paboyle/Crusher/Grid/spack/share/spack/setup-env.sh
 | 
				
			||||||
 | 
					spack load c-lime
 | 
				
			||||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sw/crusher/spack-envs/base/opt/cray-sles15-zen3/gcc-11.2.0/gperftools-2.9.1-72ubwtuc5wcz2meqltbfdb76epufgzo2/lib
 | 
					export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sw/crusher/spack-envs/base/opt/cray-sles15-zen3/gcc-11.2.0/gperftools-2.9.1-72ubwtuc5wcz2meqltbfdb76epufgzo2/lib
 | 
				
			||||||
module load emacs 
 | 
					module load emacs 
 | 
				
			||||||
#module load gperftools
 | 
					#module load gperftools
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -125,10 +125,10 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionF DdwfF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
 | 
					  DomainWallFermionF DdwfF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5);
 | 
				
			||||||
  TestCGinversions<DomainWallFermionR>(Ddwf,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<DomainWallFermionD>(Ddwf,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5DFA<DomainWallFermionR,DomainWallFermionF>(Ddwf,DdwfF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5DFA<DomainWallFermionD,DomainWallFermionF>(Ddwf,DdwfF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD b=1.5;// Scale factor b+c=2, b-c=1
 | 
					  RealD b=1.5;// Scale factor b+c=2, b-c=1
 | 
				
			||||||
  RealD c=0.5;
 | 
					  RealD c=0.5;
 | 
				
			||||||
@@ -137,54 +137,54 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  MobiusFermionR Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
					  MobiusFermionD Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
				
			||||||
  MobiusFermionF DmobF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5,b,c);
 | 
					  MobiusFermionF DmobF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5,b,c);
 | 
				
			||||||
  TestCGinversions<MobiusFermionR>(Dmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<MobiusFermionD>(Dmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5DFA<MobiusFermionR,MobiusFermionF>(Dmob,DmobF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5DFA<MobiusFermionD,MobiusFermionF>(Dmob,DmobF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  ZMobiusFermionR ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,gamma,b,c);
 | 
					  ZMobiusFermionD ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,gamma,b,c);
 | 
				
			||||||
  TestCGinversions<ZMobiusFermionR>(ZDmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<ZMobiusFermionD>(ZDmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5D<ZMobiusFermionR>(ZDmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5D<ZMobiusFermionD>(ZDmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"MobiusZolotarevFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"MobiusZolotarevFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  MobiusZolotarevFermionR Dzolo(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,0.1,2.0);
 | 
					  MobiusZolotarevFermionD Dzolo(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,0.1,2.0);
 | 
				
			||||||
  TestCGinversions<MobiusZolotarevFermionR>(Dzolo,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<MobiusZolotarevFermionD>(Dzolo,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5D<MobiusZolotarevFermionR>(Dzolo,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5D<MobiusZolotarevFermionD>(Dzolo,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ScaledShamirFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ScaledShamirFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  ScaledShamirFermionR Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
					  ScaledShamirFermionD Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
				
			||||||
  ScaledShamirFermionF DshamF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5,2.0);
 | 
					  ScaledShamirFermionF DshamF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5,2.0);
 | 
				
			||||||
  TestCGinversions<ScaledShamirFermionR>(Dsham,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<ScaledShamirFermionD>(Dsham,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5DFA<ScaledShamirFermionR,ScaledShamirFermionF>(Dsham,DshamF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5DFA<ScaledShamirFermionD,ScaledShamirFermionF>(Dsham,DshamF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ShamirZolotarevFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ShamirZolotarevFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  ShamirZolotarevFermionR Dshamz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
					  ShamirZolotarevFermionD Dshamz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
				
			||||||
  TestCGinversions<ShamirZolotarevFermionR>(Dshamz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<ShamirZolotarevFermionD>(Dshamz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5D<ShamirZolotarevFermionR>(Dshamz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5D<ShamirZolotarevFermionD>(Dshamz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonCayleyTanhFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonCayleyTanhFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  OverlapWilsonCayleyTanhFermionR Dov(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
					  OverlapWilsonCayleyTanhFermionD Dov(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
				
			||||||
  OverlapWilsonCayleyTanhFermionF DovF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5,1.0);
 | 
					  OverlapWilsonCayleyTanhFermionF DovF(UmuF,*FGridF,*FrbGridF,*UGridF,*UrbGridF,mass,M5,1.0);
 | 
				
			||||||
  TestCGinversions<OverlapWilsonCayleyTanhFermionR>(Dov,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<OverlapWilsonCayleyTanhFermionD>(Dov,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5DFA<OverlapWilsonCayleyTanhFermionR,OverlapWilsonCayleyTanhFermionF>(Dov,DovF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5DFA<OverlapWilsonCayleyTanhFermionD,OverlapWilsonCayleyTanhFermionF>(Dov,DovF,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonCayleyZolotarevFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonCayleyZolotarevFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  OverlapWilsonCayleyZolotarevFermionR Dovz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
					  OverlapWilsonCayleyZolotarevFermionD Dovz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
				
			||||||
  TestCGinversions<OverlapWilsonCayleyZolotarevFermionR>(Dovz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<OverlapWilsonCayleyZolotarevFermionD>(Dovz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
  TestReconstruct5D<OverlapWilsonCayleyZolotarevFermionR>(Dovz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestReconstruct5D<OverlapWilsonCayleyZolotarevFermionD>(Dovz,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -95,8 +95,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  HermIndefOp.Op(src,ref);
 | 
					  HermIndefOp.Op(src,ref);
 | 
				
			||||||
  HermIndefOp.OpDiag(src,result);
 | 
					  HermIndefOp.OpDiag(src,result);
 | 
				
			||||||
@@ -118,7 +118,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage<<"Calling Aggregation class" <<std::endl;
 | 
					  std::cout<<GridLogMessage<<"Calling Aggregation class" <<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis> Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis> Subspace;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,cb);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,cb);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,41 +76,41 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass=0.1;
 | 
					  RealD mass=0.1;
 | 
				
			||||||
  RealD M5  =1.8;
 | 
					  RealD M5  =1.8;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  TestWhat<DomainWallFermionR>(Ddwf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<DomainWallFermionD>(Ddwf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD b=1.5;// Scale factor b+c=2, b-c=1
 | 
					  RealD b=1.5;// Scale factor b+c=2, b-c=1
 | 
				
			||||||
  RealD c=0.5;
 | 
					  RealD c=0.5;
 | 
				
			||||||
  std::vector<ComplexD> gamma(Ls,ComplexD(1.0,0.1));
 | 
					  std::vector<ComplexD> gamma(Ls,ComplexD(1.0,0.1));
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
 | 
				
			||||||
  MobiusFermionR Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
					  MobiusFermionD Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
				
			||||||
  TestWhat<MobiusFermionR>(Dmob,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<MobiusFermionD>(Dmob,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
 | 
				
			||||||
  ZMobiusFermionR ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,gamma,b,c);
 | 
					  ZMobiusFermionD ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,gamma,b,c);
 | 
				
			||||||
  TestWhat<ZMobiusFermionR>(ZDmob,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<ZMobiusFermionD>(ZDmob,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"MobiusZolotarevFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"MobiusZolotarevFermion test"<<std::endl;
 | 
				
			||||||
  MobiusZolotarevFermionR Dzolo(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,0.1,2.0);
 | 
					  MobiusZolotarevFermionD Dzolo(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,0.1,2.0);
 | 
				
			||||||
  TestWhat<MobiusZolotarevFermionR>(Dzolo,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<MobiusZolotarevFermionD>(Dzolo,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ScaledShamirFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ScaledShamirFermion test"<<std::endl;
 | 
				
			||||||
  ScaledShamirFermionR Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
					  ScaledShamirFermionD Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
				
			||||||
  TestWhat<ScaledShamirFermionR>(Dsham,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<ScaledShamirFermionD>(Dsham,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ShamirZolotarevFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ShamirZolotarevFermion test"<<std::endl;
 | 
				
			||||||
  ShamirZolotarevFermionR Dshamz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
					  ShamirZolotarevFermionD Dshamz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
				
			||||||
  TestWhat<ShamirZolotarevFermionR>(Dshamz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<ShamirZolotarevFermionD>(Dshamz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonCayleyTanhFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonCayleyTanhFermion test"<<std::endl;
 | 
				
			||||||
  OverlapWilsonCayleyTanhFermionR Dov(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
					  OverlapWilsonCayleyTanhFermionD Dov(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
				
			||||||
  TestWhat<OverlapWilsonCayleyTanhFermionR>(Dov,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<OverlapWilsonCayleyTanhFermionD>(Dov,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonCayleyZolotarevFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonCayleyZolotarevFermion test"<<std::endl;
 | 
				
			||||||
  OverlapWilsonCayleyZolotarevFermionR Dovz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
					  OverlapWilsonCayleyZolotarevFermionD Dovz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,2.0);
 | 
				
			||||||
  TestWhat<OverlapWilsonCayleyZolotarevFermionR>(Dovz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<OverlapWilsonCayleyZolotarevFermionD>(Dovz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,8 +83,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Building g5R5 hermitian DWF operator" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Building g5R5 hermitian DWF operator" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int nbasis = 8;
 | 
					  const int nbasis = 8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,7 +95,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,cb);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,cb);
 | 
				
			||||||
  Aggregates.CreateSubspace(RNG5,HermDefOp);
 | 
					  Aggregates.CreateSubspace(RNG5,HermDefOp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -128,8 +128,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  TestConserved<DomainWallFermionR>(Ddwf,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestConserved<DomainWallFermionD>(Ddwf,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD b=1.5;// Scale factor b+c=2, b-c=1
 | 
					  RealD b=1.5;// Scale factor b+c=2, b-c=1
 | 
				
			||||||
  RealD c=0.5;
 | 
					  RealD c=0.5;
 | 
				
			||||||
@@ -138,23 +138,23 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  MobiusFermionR Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
					  MobiusFermionD Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
				
			||||||
  TestConserved<MobiusFermionR>(Dmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestConserved<MobiusFermionD>(Dmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ScaledShamirFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ScaledShamirFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  ScaledShamirFermionR Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
					  ScaledShamirFermionD Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
				
			||||||
  TestConserved<ScaledShamirFermionR>(Dsham,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestConserved<ScaledShamirFermionD>(Dsham,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"======================"<<std::endl;
 | 
				
			||||||
  for(int s=0;s<Ls;s++) omegasrev[s]=conjugate(omegas[Ls-1-s]);
 | 
					  for(int s=0;s<Ls;s++) omegasrev[s]=conjugate(omegas[Ls-1-s]);
 | 
				
			||||||
  //  for(int s=0;s<Ls;s++) omegasrev[s]=omegas[Ls-1-s];
 | 
					  //  for(int s=0;s<Ls;s++) omegasrev[s]=omegas[Ls-1-s];
 | 
				
			||||||
  ZMobiusFermionR ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegas,b,c);
 | 
					  ZMobiusFermionD ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegas,b,c);
 | 
				
			||||||
  ZMobiusFermionR ZDmobrev(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegasrev,b,c);
 | 
					  ZMobiusFermionD ZDmobrev(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegasrev,b,c);
 | 
				
			||||||
  TestConserved<ZMobiusFermionR>(ZDmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5,&ZDmobrev);
 | 
					  TestConserved<ZMobiusFermionD>(ZDmob,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5,&ZDmobrev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -290,7 +290,7 @@ void  TestConserved(Action & Ddwf,
 | 
				
			|||||||
    const RealD DmuPAmu{real(TensorRemove(sumPA[t]-sumPA[(t-1+Nt)%Nt]))};
 | 
					    const RealD DmuPAmu{real(TensorRemove(sumPA[t]-sumPA[(t-1+Nt)%Nt]))};
 | 
				
			||||||
    std::cout<<GridLogMessage<<" t "<<t<<" DmuPAmu "<<DmuPAmu
 | 
					    std::cout<<GridLogMessage<<" t "<<t<<" DmuPAmu "<<DmuPAmu
 | 
				
			||||||
             <<" PP "<<real(TensorRemove(sumPP[t]))<<" PJ5q "<<real(TensorRemove(sumPJ5q[t]))
 | 
					             <<" PP "<<real(TensorRemove(sumPP[t]))<<" PJ5q "<<real(TensorRemove(sumPJ5q[t]))
 | 
				
			||||||
             <<" Ward Identity defect " <<(DmuPAmu - 2.*real(TensorRemove(Ddwf.mass*sumPP[t] + sumPJ5q[t])))<<std::endl;
 | 
					             <<" Ward Identity defect " <<(DmuPAmu - 2.*real(TensorRemove(Ddwf.Mass()*sumPP[t] + sumPJ5q[t])))<<std::endl;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  ///////////////////////////////
 | 
					  ///////////////////////////////
 | 
				
			||||||
@@ -539,7 +539,7 @@ void  TestConserved1(Action & Ddwf, Action & Ddwfrev,
 | 
				
			|||||||
  PA       = trace(g5*Axial_mu);
 | 
					  PA       = trace(g5*Axial_mu);
 | 
				
			||||||
  PP       = trace(adj(prop4)*prop4);
 | 
					  PP       = trace(adj(prop4)*prop4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Defect = Defect - 2.0*Ddwf.mass* PP;
 | 
					  Defect = Defect - 2.0*Ddwf.Mass()* PP;
 | 
				
			||||||
  Defect = Defect - 2.0*PJ5q;
 | 
					  Defect = Defect - 2.0*PJ5q;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::vector<TComplex> sumPAref;
 | 
					  std::vector<TComplex> sumPAref;
 | 
				
			||||||
@@ -565,8 +565,8 @@ void  TestConserved1(Action & Ddwf, Action & Ddwfrev,
 | 
				
			|||||||
    std::cout    <<" PAc action    "<<real(TensorRemove(sumPA[t]));
 | 
					    std::cout    <<" PAc action    "<<real(TensorRemove(sumPA[t]));
 | 
				
			||||||
    std::cout    <<" PJ5q ref      "<<real(TensorRemove(sumPJ5qref[t]));
 | 
					    std::cout    <<" PJ5q ref      "<<real(TensorRemove(sumPJ5qref[t]));
 | 
				
			||||||
    std::cout    <<" PJ5q action   "<<real(TensorRemove(sumPJ5q[t]));
 | 
					    std::cout    <<" PJ5q action   "<<real(TensorRemove(sumPJ5q[t]));
 | 
				
			||||||
    std::cout <<"WTI defects "<<real(TensorRemove(sumPAref[t]-sumPAref[(t-1+Nt)%Nt] - 2.0*(Ddwf.mass*sumPP[t] + sumPJ5q[t]) ))<<",";
 | 
					    std::cout <<"WTI defects "<<real(TensorRemove(sumPAref[t]-sumPAref[(t-1+Nt)%Nt] - 2.0*(Ddwf.Mass()*sumPP[t] + sumPJ5q[t]) ))<<",";
 | 
				
			||||||
    std::cout <<real(TensorRemove(sumPA[t]-sumPA[(t-1+Nt)%Nt] - 2.0*(Ddwf.mass*sumPP[t] + sumPJ5q[t]) ))<<"\n";
 | 
					    std::cout <<real(TensorRemove(sumPA[t]-sumPA[(t-1+Nt)%Nt] - 2.0*(Ddwf.Mass()*sumPP[t] + sumPJ5q[t]) ))<<"\n";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -600,7 +600,7 @@ void  TestConserved1(Action & Ddwf, Action & Ddwfrev,
 | 
				
			|||||||
      // Dperp
 | 
					      // Dperp
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
	RealD diag = 5.0 - Ddwf.M5;
 | 
						RealD diag = 5.0 - Ddwf.M5;
 | 
				
			||||||
	mass = Ddwf.mass;
 | 
						mass = Ddwf.Mass();
 | 
				
			||||||
	autoView( psi,result5,CpuRead);
 | 
						autoView( psi,result5,CpuRead);
 | 
				
			||||||
	autoView( chi,tmp,   CpuWrite);
 | 
						autoView( chi,tmp,   CpuWrite);
 | 
				
			||||||
	thread_for(sss,UGrid->oSites(),{
 | 
						thread_for(sss,UGrid->oSites(),{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,8 +77,8 @@ int main(int argc, char** argv)
 | 
				
			|||||||
  LatticeGaugeField Umu(UGrid);
 | 
					  LatticeGaugeField Umu(UGrid);
 | 
				
			||||||
  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
					  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DomainWallEOFAFermionR Lop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf,  mf, mpv,  0.0, -1, M5);
 | 
					  DomainWallEOFAFermionD Lop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf,  mf, mpv,  0.0, -1, M5);
 | 
				
			||||||
  DomainWallEOFAFermionR Rop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mpv, mf, mpv, -1.0,  1, M5);
 | 
					  DomainWallEOFAFermionD Rop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mpv, mf, mpv, -1.0,  1, M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Construct the action and test the heatbath (zero initial guess)
 | 
					  // Construct the action and test the heatbath (zero initial guess)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@ using namespace Grid;
 | 
				
			|||||||
 ;
 | 
					 ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef GparityWilsonImplR FermionImplPolicy;
 | 
					typedef GparityWilsonImplR FermionImplPolicy;
 | 
				
			||||||
typedef GparityDomainWallEOFAFermionR FermionAction;
 | 
					typedef GparityDomainWallEOFAFermionD FermionAction;
 | 
				
			||||||
typedef typename FermionAction::FermionField FermionField;
 | 
					typedef typename FermionAction::FermionField FermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Parameters for test
 | 
					// Parameters for test
 | 
				
			||||||
@@ -82,7 +82,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
  LatticeGaugeField Umu(UGrid);
 | 
					  LatticeGaugeField Umu(UGrid);
 | 
				
			||||||
  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
					  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // GparityDomainWallFermionR::ImplParams params;
 | 
					  // GparityDomainWallFermionD::ImplParams params;
 | 
				
			||||||
  FermionAction::ImplParams params;
 | 
					  FermionAction::ImplParams params;
 | 
				
			||||||
  FermionAction Lop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf,  mf, mpv,  0.0, -1, M5, params);
 | 
					  FermionAction Lop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf,  mf, mpv,  0.0, -1, M5, params);
 | 
				
			||||||
  FermionAction Rop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mpv, mf, mpv, -1.0,  1, M5, params);
 | 
					  FermionAction Rop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mpv, mf, mpv, -1.0,  1, M5, params);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,8 +79,8 @@ int main(int argc, char** argv)
 | 
				
			|||||||
  LatticeGaugeField Umu(UGrid);
 | 
					  LatticeGaugeField Umu(UGrid);
 | 
				
			||||||
  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
					  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MobiusEOFAFermionR Lop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf,  mf, mpv,  0.0, -1, M5, b, c);
 | 
					  MobiusEOFAFermionD Lop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf,  mf, mpv,  0.0, -1, M5, b, c);
 | 
				
			||||||
  MobiusEOFAFermionR Rop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mpv, mf, mpv, -1.0,  1, M5, b, c);
 | 
					  MobiusEOFAFermionD Rop(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mpv, mf, mpv, -1.0,  1, M5, b, c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Construct the action and test the heatbath (zero initial guess)
 | 
					  // Construct the action and test the heatbath (zero initial guess)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@ using namespace Grid;
 | 
				
			|||||||
 ;
 | 
					 ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef GparityWilsonImplR FermionImplPolicy;
 | 
					typedef GparityWilsonImplR FermionImplPolicy;
 | 
				
			||||||
typedef GparityMobiusEOFAFermionR FermionAction;
 | 
					typedef GparityMobiusEOFAFermionD FermionAction;
 | 
				
			||||||
typedef typename FermionAction::FermionField FermionField;
 | 
					typedef typename FermionAction::FermionField FermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Parameters for test
 | 
					// Parameters for test
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,10 +105,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
					  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Initialize RHMC fermion operators
 | 
					  // Initialize RHMC fermion operators
 | 
				
			||||||
  DomainWallFermionR Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5);
 | 
					  DomainWallFermionD Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5);
 | 
					  DomainWallFermionD Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5);
 | 
				
			||||||
  SchurDiagMooeeOperator<DomainWallFermionR, LatticeFermion> MdagM(Ddwf_f);
 | 
					  SchurDiagMooeeOperator<DomainWallFermionD, LatticeFermion> MdagM(Ddwf_f);
 | 
				
			||||||
  SchurDiagMooeeOperator<DomainWallFermionR, LatticeFermion> VdagV(Ddwf_b);
 | 
					  SchurDiagMooeeOperator<DomainWallFermionD, LatticeFermion> VdagV(Ddwf_b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
					  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
				
			||||||
  double     lo = 0.0001;
 | 
					  double     lo = 0.0001;
 | 
				
			||||||
@@ -153,10 +153,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  RealD shift_L = 0.0;
 | 
					  RealD shift_L = 0.0;
 | 
				
			||||||
  RealD shift_R = -1.0;
 | 
					  RealD shift_R = -1.0;
 | 
				
			||||||
  int pm = 1;
 | 
					  int pm = 1;
 | 
				
			||||||
  DomainWallEOFAFermionR Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5);
 | 
					  DomainWallEOFAFermionD Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5);
 | 
				
			||||||
  DomainWallEOFAFermionR Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5);
 | 
					  DomainWallEOFAFermionD Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallEOFAFermionR, LatticeFermion> LdagL(Deofa_L);
 | 
					  MdagMLinearOperator<DomainWallEOFAFermionD, LatticeFermion> LdagL(Deofa_L);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallEOFAFermionR, LatticeFermion> RdagR(Deofa_R);
 | 
					  MdagMLinearOperator<DomainWallEOFAFermionD, LatticeFermion> RdagR(Deofa_R);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Stochastically estimate reweighting factor via EOFA
 | 
					  // Stochastically estimate reweighting factor via EOFA
 | 
				
			||||||
  RealD k = Deofa_L.k;
 | 
					  RealD k = Deofa_L.k;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ using namespace std;
 | 
				
			|||||||
using namespace Grid;
 | 
					using namespace Grid;
 | 
				
			||||||
 ;
 | 
					 ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef typename GparityDomainWallFermionR::FermionField FermionField;
 | 
					typedef typename GparityDomainWallFermionD::FermionField FermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// parameters for test
 | 
					// parameters for test
 | 
				
			||||||
const std::vector<int> grid_dim = { 8, 8, 8, 8 };
 | 
					const std::vector<int> grid_dim = { 8, 8, 8, 8 };
 | 
				
			||||||
@@ -107,11 +107,11 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
					  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Initialize RHMC fermion operators
 | 
					  // Initialize RHMC fermion operators
 | 
				
			||||||
  GparityDomainWallFermionR::ImplParams params;
 | 
					  GparityDomainWallFermionD::ImplParams params;
 | 
				
			||||||
  GparityDomainWallFermionR Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5, params);
 | 
					  GparityDomainWallFermionD Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5, params);
 | 
				
			||||||
  GparityDomainWallFermionR Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5, params);
 | 
					  GparityDomainWallFermionD Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5, params);
 | 
				
			||||||
  SchurDiagMooeeOperator<GparityDomainWallFermionR, FermionField> MdagM(Ddwf_f);
 | 
					  SchurDiagMooeeOperator<GparityDomainWallFermionD, FermionField> MdagM(Ddwf_f);
 | 
				
			||||||
  SchurDiagMooeeOperator<GparityDomainWallFermionR, FermionField> VdagV(Ddwf_b);
 | 
					  SchurDiagMooeeOperator<GparityDomainWallFermionD, FermionField> VdagV(Ddwf_b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
					  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
				
			||||||
  double     lo = 0.0001;
 | 
					  double     lo = 0.0001;
 | 
				
			||||||
@@ -156,10 +156,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  RealD shift_L = 0.0;
 | 
					  RealD shift_L = 0.0;
 | 
				
			||||||
  RealD shift_R = -1.0;
 | 
					  RealD shift_R = -1.0;
 | 
				
			||||||
  int pm = 1;
 | 
					  int pm = 1;
 | 
				
			||||||
  GparityDomainWallEOFAFermionR Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5, params);
 | 
					  GparityDomainWallEOFAFermionD Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5, params);
 | 
				
			||||||
  GparityDomainWallEOFAFermionR Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5, params);
 | 
					  GparityDomainWallEOFAFermionD Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5, params);
 | 
				
			||||||
  MdagMLinearOperator<GparityDomainWallEOFAFermionR, FermionField> LdagL(Deofa_L);
 | 
					  MdagMLinearOperator<GparityDomainWallEOFAFermionD, FermionField> LdagL(Deofa_L);
 | 
				
			||||||
  MdagMLinearOperator<GparityDomainWallEOFAFermionR, FermionField> RdagR(Deofa_R);
 | 
					  MdagMLinearOperator<GparityDomainWallEOFAFermionD, FermionField> RdagR(Deofa_R);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Stochastically estimate reweighting factor via EOFA
 | 
					  // Stochastically estimate reweighting factor via EOFA
 | 
				
			||||||
  RealD k = Deofa_L.k;
 | 
					  RealD k = Deofa_L.k;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -107,10 +107,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
					  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Initialize RHMC fermion operators
 | 
					  // Initialize RHMC fermion operators
 | 
				
			||||||
  MobiusFermionR Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5, b, c);
 | 
					  MobiusFermionD Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5, b, c);
 | 
				
			||||||
  MobiusFermionR Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5, b, c);
 | 
					  MobiusFermionD Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5, b, c);
 | 
				
			||||||
  SchurDiagMooeeOperator<MobiusFermionR, LatticeFermion> MdagM(Ddwf_f);
 | 
					  SchurDiagMooeeOperator<MobiusFermionD, LatticeFermion> MdagM(Ddwf_f);
 | 
				
			||||||
  SchurDiagMooeeOperator<MobiusFermionR, LatticeFermion> VdagV(Ddwf_b);
 | 
					  SchurDiagMooeeOperator<MobiusFermionD, LatticeFermion> VdagV(Ddwf_b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
					  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
				
			||||||
  double     lo = 0.0001;
 | 
					  double     lo = 0.0001;
 | 
				
			||||||
@@ -155,10 +155,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  RealD shift_L = 0.0;
 | 
					  RealD shift_L = 0.0;
 | 
				
			||||||
  RealD shift_R = -1.0;
 | 
					  RealD shift_R = -1.0;
 | 
				
			||||||
  int pm = 1;
 | 
					  int pm = 1;
 | 
				
			||||||
  MobiusEOFAFermionR Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5, b, c);
 | 
					  MobiusEOFAFermionD Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5, b, c);
 | 
				
			||||||
  MobiusEOFAFermionR Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5, b, c);
 | 
					  MobiusEOFAFermionD Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5, b, c);
 | 
				
			||||||
  MdagMLinearOperator<MobiusEOFAFermionR, LatticeFermion> LdagL(Deofa_L);
 | 
					  MdagMLinearOperator<MobiusEOFAFermionD, LatticeFermion> LdagL(Deofa_L);
 | 
				
			||||||
  MdagMLinearOperator<MobiusEOFAFermionR, LatticeFermion> RdagR(Deofa_R);
 | 
					  MdagMLinearOperator<MobiusEOFAFermionD, LatticeFermion> RdagR(Deofa_R);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Stochastically estimate reweighting factor via EOFA
 | 
					  // Stochastically estimate reweighting factor via EOFA
 | 
				
			||||||
  RealD k = Deofa_L.k;
 | 
					  RealD k = Deofa_L.k;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ using namespace std;
 | 
				
			|||||||
using namespace Grid;
 | 
					using namespace Grid;
 | 
				
			||||||
 ;
 | 
					 ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef typename GparityDomainWallFermionR::FermionField FermionField;
 | 
					typedef typename GparityDomainWallFermionD::FermionField FermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// parameters for test
 | 
					// parameters for test
 | 
				
			||||||
const std::vector<int> grid_dim = { 8, 8, 8, 8 };
 | 
					const std::vector<int> grid_dim = { 8, 8, 8, 8 };
 | 
				
			||||||
@@ -109,11 +109,11 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
					  SU<Nc>::HotConfiguration(RNG4, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Initialize RHMC fermion operators
 | 
					  // Initialize RHMC fermion operators
 | 
				
			||||||
  GparityDomainWallFermionR::ImplParams params;
 | 
					  GparityDomainWallFermionD::ImplParams params;
 | 
				
			||||||
  GparityMobiusFermionR Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5, b, c, params);
 | 
					  GparityMobiusFermionD Ddwf_f(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, M5, b, c, params);
 | 
				
			||||||
  GparityMobiusFermionR Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5, b, c, params);
 | 
					  GparityMobiusFermionD Ddwf_b(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, M5, b, c, params);
 | 
				
			||||||
  SchurDiagMooeeOperator<GparityMobiusFermionR, FermionField> MdagM(Ddwf_f);
 | 
					  SchurDiagMooeeOperator<GparityMobiusFermionD, FermionField> MdagM(Ddwf_f);
 | 
				
			||||||
  SchurDiagMooeeOperator<GparityMobiusFermionR, FermionField> VdagV(Ddwf_b);
 | 
					  SchurDiagMooeeOperator<GparityMobiusFermionD, FermionField> VdagV(Ddwf_b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
					  // Degree 12 rational approximations to x^(1/4) and x^(-1/4)
 | 
				
			||||||
  double     lo = 0.0001;
 | 
					  double     lo = 0.0001;
 | 
				
			||||||
@@ -158,10 +158,10 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  RealD shift_L = 0.0;
 | 
					  RealD shift_L = 0.0;
 | 
				
			||||||
  RealD shift_R = -1.0;
 | 
					  RealD shift_R = -1.0;
 | 
				
			||||||
  int pm = 1;
 | 
					  int pm = 1;
 | 
				
			||||||
  GparityMobiusEOFAFermionR Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5, b, c, params);
 | 
					  GparityMobiusEOFAFermionD Deofa_L(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, shift_L, pm, M5, b, c, params);
 | 
				
			||||||
  GparityMobiusEOFAFermionR Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5, b, c, params);
 | 
					  GparityMobiusEOFAFermionD Deofa_R(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, shift_R, pm, M5, b, c, params);
 | 
				
			||||||
  MdagMLinearOperator<GparityMobiusEOFAFermionR, FermionField> LdagL(Deofa_L);
 | 
					  MdagMLinearOperator<GparityMobiusEOFAFermionD, FermionField> LdagL(Deofa_L);
 | 
				
			||||||
  MdagMLinearOperator<GparityMobiusEOFAFermionR, FermionField> RdagR(Deofa_R);
 | 
					  MdagMLinearOperator<GparityMobiusEOFAFermionD, FermionField> RdagR(Deofa_R);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Stochastically estimate reweighting factor via EOFA
 | 
					  // Stochastically estimate reweighting factor via EOFA
 | 
				
			||||||
  RealD k = Deofa_L.k;
 | 
					  RealD k = Deofa_L.k;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ directory
 | 
				
			|||||||
/*  END LEGAL */
 | 
					/*  END LEGAL */
 | 
				
			||||||
#include <Grid/Grid.h>
 | 
					#include <Grid/Grid.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
namespace Grid{
 | 
					namespace Grid{
 | 
				
			||||||
  struct FermionParameters: Serializable {
 | 
					  struct FermionParameters: Serializable {
 | 
				
			||||||
    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
					    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
				
			||||||
@@ -210,4 +210,6 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // main
 | 
					} // main
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc, char **argv){}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ directory
 | 
				
			|||||||
#include <Grid/Grid.h>
 | 
					#include <Grid/Grid.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
namespace Grid{
 | 
					namespace Grid{
 | 
				
			||||||
  struct FermionParameters: Serializable {
 | 
					  struct FermionParameters: Serializable {
 | 
				
			||||||
    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
					    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
				
			||||||
@@ -211,3 +212,6 @@ int main(int argc, char **argv)
 | 
				
			|||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // main
 | 
					} // main
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc, char **argv){}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ directory
 | 
				
			|||||||
#include "Grid/Grid.h"
 | 
					#include "Grid/Grid.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
namespace Grid{
 | 
					namespace Grid{
 | 
				
			||||||
  struct FermionParameters: Serializable {
 | 
					  struct FermionParameters: Serializable {
 | 
				
			||||||
    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
					    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
				
			||||||
@@ -222,3 +223,6 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // main
 | 
					} // main
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc, char **argv){}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ directory
 | 
				
			|||||||
#include <Grid/Grid.h>
 | 
					#include <Grid/Grid.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
namespace Grid{
 | 
					namespace Grid{
 | 
				
			||||||
  struct FermionParameters: Serializable {
 | 
					  struct FermionParameters: Serializable {
 | 
				
			||||||
    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
					    GRID_SERIALIZABLE_CLASS_MEMBERS(FermionParameters,
 | 
				
			||||||
@@ -211,3 +212,6 @@ int main(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
} // main
 | 
					} // main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc, char **argv){}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,9 +31,10 @@ directory
 | 
				
			|||||||
/*  END LEGAL */
 | 
					/*  END LEGAL */
 | 
				
			||||||
#include "Grid/Grid.h"
 | 
					#include "Grid/Grid.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char **argv) {
 | 
					int main(int argc, char **argv) {
 | 
				
			||||||
  using namespace Grid;
 | 
					  using namespace Grid;
 | 
				
			||||||
   ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Here change the allowed (higher) representations
 | 
					  // Here change the allowed (higher) representations
 | 
				
			||||||
  typedef Representations< FundamentalRepresentation, AdjointRepresentation > TheRepresentations;
 | 
					  typedef Representations< FundamentalRepresentation, AdjointRepresentation > TheRepresentations;
 | 
				
			||||||
@@ -127,3 +128,6 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
} // main
 | 
					} // main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc, char **argv){}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@ directory
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char **argv) {
 | 
					int main(int argc, char **argv) {
 | 
				
			||||||
#ifndef GRID_CUDA
 | 
					#ifndef GRID_CUDA
 | 
				
			||||||
@@ -138,3 +139,6 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
} // main
 | 
					} // main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc, char **argv){}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ directory
 | 
				
			|||||||
/*  END LEGAL */
 | 
					/*  END LEGAL */
 | 
				
			||||||
#include "Grid/Grid.h"
 | 
					#include "Grid/Grid.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
int main(int argc, char **argv) {
 | 
					int main(int argc, char **argv) {
 | 
				
			||||||
  using namespace Grid;
 | 
					  using namespace Grid;
 | 
				
			||||||
   ;
 | 
					   ;
 | 
				
			||||||
@@ -127,3 +128,6 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
} // main
 | 
					} // main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc, char **argv){}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,19 +28,21 @@ directory
 | 
				
			|||||||
/*  END LEGAL */
 | 
					/*  END LEGAL */
 | 
				
			||||||
#include <Grid/Grid.h>
 | 
					#include <Grid/Grid.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ENABLE_FERMION_REPS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
using namespace Grid;
 | 
					using namespace Grid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//typedef WilsonCloverFermionR FermionOp;
 | 
					//typedef WilsonCloverFermionD FermionOp;
 | 
				
			||||||
//typedef typename WilsonFermionR::FermionField FermionField;
 | 
					//typedef typename WilsonFermionD::FermionField FermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef WilsonImplR FundImplPolicy;
 | 
					typedef WilsonImplR FundImplPolicy;
 | 
				
			||||||
typedef WilsonCloverFermionR FundFermionAction; 
 | 
					typedef WilsonCloverFermionD FundFermionAction; 
 | 
				
			||||||
typedef typename FundFermionAction::FermionField FundFermionField;
 | 
					typedef typename FundFermionAction::FermionField FundFermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef WilsonTwoIndexAntiSymmetricImplR ASymmImplPolicy; 
 | 
					typedef WilsonTwoIndexAntiSymmetricImplR ASymmImplPolicy; 
 | 
				
			||||||
typedef WilsonCloverTwoIndexAntiSymmetricFermionR ASymmFermionAction; 
 | 
					typedef WilsonCloverTwoIndexAntiSymmetricFermionD ASymmFermionAction; 
 | 
				
			||||||
typedef typename ASymmFermionAction::FermionField ASymmFermionField;
 | 
					typedef typename ASymmFermionAction::FermionField ASymmFermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -175,3 +177,6 @@ NerscHmcCheckpointer<PeriodicGimplR> Checkpoint(CPparams);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int main(int argc,char **argv){ return 0;};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -188,8 +188,8 @@ int main (int argc, char ** argv) {
 | 
				
			|||||||
  std::cout << GridLogMessage << "Lattice dimensions: " << GridDefaultLatt() << "   Ls: " << Ls << std::endl;
 | 
					  std::cout << GridLogMessage << "Lattice dimensions: " << GridDefaultLatt() << "   Ls: " << Ls << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // ZMobius EO Operator
 | 
					  // ZMobius EO Operator
 | 
				
			||||||
  ZMobiusFermionR Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, Params.omega,1.,0.);
 | 
					  ZMobiusFermionD Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, Params.omega,1.,0.);
 | 
				
			||||||
  SchurDiagTwoOperator<ZMobiusFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  SchurDiagTwoOperator<ZMobiusFermionD,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Eigenvector storage
 | 
					  // Eigenvector storage
 | 
				
			||||||
  LanczosParams fine  =Params.FineParams;  
 | 
					  LanczosParams fine  =Params.FineParams;  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -188,8 +188,8 @@ int main (int argc, char ** argv) {
 | 
				
			|||||||
  std::cout << GridLogMessage << "Lattice dimensions: " << GridDefaultLatt() << "   Ls: " << Ls << std::endl;
 | 
					  std::cout << GridLogMessage << "Lattice dimensions: " << GridDefaultLatt() << "   Ls: " << Ls << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // ZMobius EO Operator
 | 
					  // ZMobius EO Operator
 | 
				
			||||||
  ZMobiusFermionR Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, Params.omega,1.,0.);
 | 
					  ZMobiusFermionD Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, Params.omega,1.,0.);
 | 
				
			||||||
  SchurDiagTwoOperator<ZMobiusFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  SchurDiagTwoOperator<ZMobiusFermionD,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Eigenvector storage
 | 
					  // Eigenvector storage
 | 
				
			||||||
  LanczosParams fine  =Params.FineParams;  
 | 
					  LanczosParams fine  =Params.FineParams;  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -301,8 +301,8 @@ int main (int argc, char ** argv) {
 | 
				
			|||||||
  std::cout << GridLogMessage << "Lattice dimensions: " << GridDefaultLatt() << "   Ls: " << Ls << std::endl;
 | 
					  std::cout << GridLogMessage << "Lattice dimensions: " << GridDefaultLatt() << "   Ls: " << Ls << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // ZMobius EO Operator
 | 
					  // ZMobius EO Operator
 | 
				
			||||||
  ZMobiusFermionR Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, Params.omega,1.,0.);
 | 
					  ZMobiusFermionD Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, Params.omega,1.,0.);
 | 
				
			||||||
  SchurDiagTwoOperator<ZMobiusFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  SchurDiagTwoOperator<ZMobiusFermionD,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Eigenvector storage
 | 
					  // Eigenvector storage
 | 
				
			||||||
  LanczosParams fine  =Params.FineParams;  
 | 
					  LanczosParams fine  =Params.FineParams;  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ template<typename Action>
 | 
				
			|||||||
struct Setup{};
 | 
					struct Setup{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
struct Setup<GparityMobiusFermionR>{
 | 
					struct Setup<GparityMobiusFermionD>{
 | 
				
			||||||
  static GparityMobiusFermionR* getAction(LatticeGaugeField &Umu,
 | 
					  static GparityMobiusFermionD* getAction(LatticeGaugeField &Umu,
 | 
				
			||||||
					  GridCartesian* FGrid, GridRedBlackCartesian* FrbGrid, GridCartesian* UGrid, GridRedBlackCartesian* UrbGrid){
 | 
										  GridCartesian* FGrid, GridRedBlackCartesian* FrbGrid, GridCartesian* UGrid, GridRedBlackCartesian* UrbGrid){
 | 
				
			||||||
    RealD mass=0.01;
 | 
					    RealD mass=0.01;
 | 
				
			||||||
    RealD M5=1.8;
 | 
					    RealD M5=1.8;
 | 
				
			||||||
@@ -44,17 +44,17 @@ struct Setup<GparityMobiusFermionR>{
 | 
				
			|||||||
    GparityMobiusFermionD ::ImplParams params;
 | 
					    GparityMobiusFermionD ::ImplParams params;
 | 
				
			||||||
    std::vector<int> twists({1,1,1,0});
 | 
					    std::vector<int> twists({1,1,1,0});
 | 
				
			||||||
    params.twists = twists;
 | 
					    params.twists = twists;
 | 
				
			||||||
    return new GparityMobiusFermionR(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,mob_b,mob_b-1.,params);
 | 
					    return new GparityMobiusFermionD(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,mob_b,mob_b-1.,params);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
struct Setup<DomainWallFermionR>{
 | 
					struct Setup<DomainWallFermionD>{
 | 
				
			||||||
  static DomainWallFermionR* getAction(LatticeGaugeField &Umu,
 | 
					  static DomainWallFermionD* getAction(LatticeGaugeField &Umu,
 | 
				
			||||||
					  GridCartesian* FGrid, GridRedBlackCartesian* FrbGrid, GridCartesian* UGrid, GridRedBlackCartesian* UrbGrid){
 | 
										  GridCartesian* FGrid, GridRedBlackCartesian* FrbGrid, GridCartesian* UGrid, GridRedBlackCartesian* UrbGrid){
 | 
				
			||||||
    RealD mass=0.01;
 | 
					    RealD mass=0.01;
 | 
				
			||||||
    RealD M5=1.8;
 | 
					    RealD M5=1.8;
 | 
				
			||||||
    return new DomainWallFermionR(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					    return new DomainWallFermionD(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -127,9 +127,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(action == "GparityMobius"){
 | 
					  if(action == "GparityMobius"){
 | 
				
			||||||
    run<GparityMobiusFermionR>();
 | 
					    run<GparityMobiusFermionD>();
 | 
				
			||||||
  }else if(action == "DWF"){
 | 
					  }else if(action == "DWF"){
 | 
				
			||||||
    run<DomainWallFermionR>();
 | 
					    run<DomainWallFermionD>();
 | 
				
			||||||
  }else{
 | 
					  }else{
 | 
				
			||||||
    std::cout << "Unknown action" << std::endl;
 | 
					    std::cout << "Unknown action" << std::endl;
 | 
				
			||||||
    exit(1);
 | 
					    exit(1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ using namespace std;
 | 
				
			|||||||
using namespace Grid;
 | 
					using namespace Grid;
 | 
				
			||||||
 ;
 | 
					 ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef WilsonFermionR FermionOp;
 | 
					typedef WilsonFermionD FermionOp;
 | 
				
			||||||
typedef typename WilsonFermionR::FermionField FermionField;
 | 
					typedef typename WilsonFermionD::FermionField FermionField;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RealD AllZero(RealD x) { return 0.; }
 | 
					RealD AllZero(RealD x) { return 0.; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,13 +96,16 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
  std::cout << GridLogMessage << "Initial plaquette: "
 | 
					  std::cout << GridLogMessage << "Initial plaquette: "
 | 
				
			||||||
    << WilsonLoops<PeriodicGimplR>::avgPlaquette(Umu) << std::endl;
 | 
					    << WilsonLoops<PeriodicGimplR>::avgPlaquette(Umu) << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WilsonFlow<PeriodicGimplR> WF(WFPar.steps, WFPar.step_size, WFPar.meas_interval);
 | 
					  int t=WFPar.maxTau;
 | 
				
			||||||
 | 
					  WilsonFlowAdaptive<PeriodicGimplR> WF(WFPar.step_size, WFPar.maxTau,
 | 
				
			||||||
 | 
										1.0e-4,
 | 
				
			||||||
 | 
										WFPar.meas_interval);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WF.smear_adaptive(Uflow, Umu, WFPar.maxTau);
 | 
					  WF.smear(Uflow, Umu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD WFlow_plaq = WilsonLoops<PeriodicGimplR>::avgPlaquette(Uflow);
 | 
					  RealD WFlow_plaq = WilsonLoops<PeriodicGimplR>::avgPlaquette(Uflow);
 | 
				
			||||||
  RealD WFlow_TC   = WilsonLoops<PeriodicGimplR>::TopologicalCharge(Uflow);
 | 
					  RealD WFlow_TC   = WilsonLoops<PeriodicGimplR>::TopologicalCharge(Uflow);
 | 
				
			||||||
  RealD WFlow_T0   = WF.energyDensityPlaquette(Uflow);
 | 
					  RealD WFlow_T0   = WF.energyDensityPlaquette(t,Uflow);
 | 
				
			||||||
  std::cout << GridLogMessage << "Plaquette          "<< conf << "   " << WFlow_plaq << std::endl;
 | 
					  std::cout << GridLogMessage << "Plaquette          "<< conf << "   " << WFlow_plaq << std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "T0                 "<< conf << "   " << WFlow_T0 << std::endl;
 | 
					  std::cout << GridLogMessage << "T0                 "<< conf << "   " << WFlow_T0 << std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "TopologicalCharge  "<< conf << "   " << WFlow_TC   << std::endl;
 | 
					  std::cout << GridLogMessage << "TopologicalCharge  "<< conf << "   " << WFlow_TC   << std::endl;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,14 +71,14 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass=0.1;
 | 
					  RealD mass=0.1;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  OverlapWilsonContFracTanhFermionR Dcf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
					  OverlapWilsonContFracTanhFermionD Dcf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateResidual<LatticeFermion> MCR(1.0e-8,10000);
 | 
					  ConjugateResidual<LatticeFermion> MCR(1.0e-8,10000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<OverlapWilsonContFracTanhFermionR,LatticeFermion> HermPosDefOp(Dcf);
 | 
					  MdagMLinearOperator<OverlapWilsonContFracTanhFermionD,LatticeFermion> HermPosDefOp(Dcf);
 | 
				
			||||||
  MCR(HermPosDefOp,src,result);
 | 
					  MCR(HermPosDefOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  HermitianLinearOperator<OverlapWilsonContFracTanhFermionR,LatticeFermion> HermIndefOp(Dcf);
 | 
					  HermitianLinearOperator<OverlapWilsonContFracTanhFermionD,LatticeFermion> HermIndefOp(Dcf);
 | 
				
			||||||
  MCR(HermIndefOp,src,result);
 | 
					  MCR(HermIndefOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,8 +108,8 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
  RealD mass = -0.30;
 | 
					  RealD mass = -0.30;
 | 
				
			||||||
  RealD csw  = 1.9192;
 | 
					  RealD csw  = 1.9192;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WilsonCloverFermionR Dwc(Umu, *Grid_f, *RBGrid_f, mass, csw, csw);
 | 
					  WilsonCloverFermionD Dwc(Umu, *Grid_f, *RBGrid_f, mass, csw, csw);
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR, LatticeFermion> MdagMOp_Dwc(Dwc);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD, LatticeFermion> MdagMOp_Dwc(Dwc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /////////////////////////////////////////////////////////////////////////////
 | 
					  /////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
  //                             Type definitions                            //
 | 
					  //                             Type definitions                            //
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,21 +102,21 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonContFracTanhFermion  test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonContFracTanhFermion  test"<<std::endl;
 | 
				
			||||||
  OverlapWilsonContFracTanhFermionR Dcf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
					  OverlapWilsonContFracTanhFermionD Dcf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
				
			||||||
  TestCGinversions<OverlapWilsonContFracTanhFermionR>(Dcf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<OverlapWilsonContFracTanhFermionD>(Dcf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonContFracZolotarevFermion  test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonContFracZolotarevFermion  test"<<std::endl;
 | 
				
			||||||
  OverlapWilsonContFracZolotarevFermionR Dcfz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,6.0);
 | 
					  OverlapWilsonContFracZolotarevFermionD Dcfz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,6.0);
 | 
				
			||||||
  TestCGinversions<OverlapWilsonContFracZolotarevFermionR>(Dcfz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<OverlapWilsonContFracZolotarevFermionD>(Dcfz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonPartialFractionTanhFermion  test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonPartialFractionTanhFermion  test"<<std::endl;
 | 
				
			||||||
  OverlapWilsonPartialFractionTanhFermionR Dpf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
					  OverlapWilsonPartialFractionTanhFermionD Dpf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,1.0);
 | 
				
			||||||
  TestCGinversions<OverlapWilsonPartialFractionTanhFermionR>(Dpf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<OverlapWilsonPartialFractionTanhFermionD>(Dpf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage <<"OverlapWilsonPartialFractionZolotarevFermion  test"<<std::endl;
 | 
					  std::cout<<GridLogMessage <<"OverlapWilsonPartialFractionZolotarevFermion  test"<<std::endl;
 | 
				
			||||||
  OverlapWilsonPartialFractionZolotarevFermionR Dpfz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,6.0);
 | 
					  OverlapWilsonPartialFractionZolotarevFermionD Dpfz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,0.1,6.0);
 | 
				
			||||||
  TestCGinversions<OverlapWilsonPartialFractionZolotarevFermionR>(Dpfz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestCGinversions<OverlapWilsonPartialFractionZolotarevFermionD>(Dpfz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,7 +79,7 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  RealD mass = 0.01;
 | 
					  RealD mass = 0.01;
 | 
				
			||||||
  RealD M5 = 1.8;
 | 
					  RealD M5 = 1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5);
 | 
					  DomainWallFermionD Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  LatticeFermion src_o(FrbGrid);
 | 
					  LatticeFermion src_o(FrbGrid);
 | 
				
			||||||
  LatticeFermion result_o(FrbGrid);
 | 
					  LatticeFermion result_o(FrbGrid);
 | 
				
			||||||
@@ -88,7 +88,7 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  GridStopWatch CGTimer;
 | 
					  GridStopWatch CGTimer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SchurDiagMooeeOperator<DomainWallFermionR, LatticeFermion> HermOpEO(Ddwf);
 | 
					  SchurDiagMooeeOperator<DomainWallFermionD, LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-5, 10000, 0);// switch off the assert
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-5, 10000, 0);// switch off the assert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CGTimer.Start();
 | 
					  CGTimer.Start();
 | 
				
			||||||
@@ -98,8 +98,5 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
  std::cout << GridLogMessage << "Total CG time : " << CGTimer.Elapsed()
 | 
					  std::cout << GridLogMessage << "Total CG time : " << CGTimer.Elapsed()
 | 
				
			||||||
            << std::endl;
 | 
					            << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "######## Dhop calls summary" << std::endl;
 | 
					 | 
				
			||||||
  Ddwf.Report();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,7 +70,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.1;
 | 
					  RealD mass=0.1;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  SchurRedBlackDiagMooeeSolve<LatticeFermion> SchurSolver(CG);
 | 
					  SchurRedBlackDiagMooeeSolve<LatticeFermion> SchurSolver(CG);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,9 +70,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.1;
 | 
					  RealD mass=0.1;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-6,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-6,10000);
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,12 +77,12 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
  MCR(HermOp,src,result);
 | 
					  MCR(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> g5HermOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> g5HermOp(Ddwf);
 | 
				
			||||||
  MCR(g5HermOp,src,result);
 | 
					  MCR(g5HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,12 +77,12 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
					  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage<<"* Solving with MdagM VPGCR "<<std::endl;
 | 
					  std::cout<<GridLogMessage<<"* Solving with MdagM VPGCR "<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
					  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
  TrivialPrecon<LatticeFermion> simple;
 | 
					  TrivialPrecon<LatticeFermion> simple;
 | 
				
			||||||
  PrecGeneralisedConjugateResidual<LatticeFermion> PGCR(1.0e-6,10000,HermOp,simple,4,160);
 | 
					  PrecGeneralisedConjugateResidual<LatticeFermion> PGCR(1.0e-6,10000,HermOp,simple,4,160);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -92,7 +92,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
					  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage<<"* Solving with g5-VPGCR "<<std::endl;
 | 
					  std::cout<<GridLogMessage<<"* Solving with g5-VPGCR "<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
					  std::cout<<GridLogMessage<<"*********************************************************"<<std::endl;
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> g5HermOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> g5HermOp(Ddwf);
 | 
				
			||||||
  PrecGeneralisedConjugateResidual<LatticeFermion> PGCR5(1.0e-6,10000,g5HermOp,simple,4,160);
 | 
					  PrecGeneralisedConjugateResidual<LatticeFermion> PGCR5(1.0e-6,10000,g5HermOp,simple,4,160);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  PGCR5(src,result);
 | 
					  PGCR5(src,result);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -254,7 +254,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.001;
 | 
					  RealD mass=0.001;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -263,7 +263,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -290,7 +290,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
					  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Level1Op LDOp(*Coarse5d,*Coarse5dRB,1); LDOp.CoarsenOperator(FGrid,HermIndefOp,Aggregates);
 | 
					  Level1Op LDOp(*Coarse5d,*Coarse5dRB,1); LDOp.CoarsenOperator(FGrid,HermIndefOp,Aggregates);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -351,16 +351,16 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
					  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
					  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
				
			||||||
  ChebyshevSmoother<CoarseVector,  Level1Op >        CoarseSmoother(0.1,12.0,3,L1LinOp,LDOp);
 | 
					  ChebyshevSmoother<CoarseVector,  Level1Op >        CoarseSmoother(0.1,12.0,3,L1LinOp,LDOp);
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,10,HermIndefOp,Ddwf);
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,10,HermIndefOp,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  MirsSmoother<CoarseVector,  Level1Op >        CoarseCGSmoother(0.1,0.1,4,L1LinOp,LDOp);
 | 
					  //  MirsSmoother<CoarseVector,  Level1Op >        CoarseCGSmoother(0.1,0.1,4,L1LinOp,LDOp);
 | 
				
			||||||
  //  MirsSmoother<LatticeFermion,DomainWallFermionR> FineCGSmoother(0.0,0.01,8,HermIndefOp,Ddwf);
 | 
					  //  MirsSmoother<LatticeFermion,DomainWallFermionD> FineCGSmoother(0.0,0.01,8,HermIndefOp,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CoarseMG Level2Precon (CoarseAggregates, L2Op,
 | 
					  CoarseMG Level2Precon (CoarseAggregates, L2Op,
 | 
				
			||||||
			 L1LinOp,LDOp,
 | 
								 L1LinOp,LDOp,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -268,7 +268,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.001;
 | 
					  RealD mass=0.001;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -277,7 +277,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -311,7 +311,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
					  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
					  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
				
			||||||
@@ -338,11 +338,11 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector> , SolverWrapper<CoarseVector> >   TwoLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector> , SolverWrapper<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
					  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,12,HermIndefOp,Ddwf);
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,12,HermIndefOp,Ddwf);
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling 2 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling 2 level Multigrid            "<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
@@ -382,7 +382,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
    LatticeFermion result_o(FrbGrid);
 | 
					    LatticeFermion result_o(FrbGrid);
 | 
				
			||||||
    pickCheckerboard(Odd,src_o,src);
 | 
					    pickCheckerboard(Odd,src_o,src);
 | 
				
			||||||
    result_o=Zero();
 | 
					    result_o=Zero();
 | 
				
			||||||
    SchurDiagMooeeOperator<DomainWallFermionR,LatticeFermion> HermOpEO(Ddwf);
 | 
					    SchurDiagMooeeOperator<DomainWallFermionD,LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
    //    pCG(HermOpEO,src_o,result_o);
 | 
					    //    pCG(HermOpEO,src_o,result_o);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -250,7 +250,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.00078;
 | 
					  RealD mass=0.00078;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -259,7 +259,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -292,7 +292,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
					  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
					  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
				
			||||||
@@ -391,18 +391,18 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  //  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
					  //  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
					  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.25,60.0,12,HermIndefOp,Ddwf);
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.25,60.0,12,HermIndefOp,Ddwf);
 | 
				
			||||||
  /*
 | 
					  /*
 | 
				
			||||||
  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
					  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
				
			||||||
  ChebyshevSmoother<CoarseVector,  Level1Op >        CoarseSmoother(0.1,15.0,3,L1LinOp,LDOp);
 | 
					  ChebyshevSmoother<CoarseVector,  Level1Op >        CoarseSmoother(0.1,15.0,3,L1LinOp,LDOp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  MirsSmoother<CoarseVector,  Level1Op >        CoarseCGSmoother(0.1,0.1,4,L1LinOp,LDOp);
 | 
					  //  MirsSmoother<CoarseVector,  Level1Op >        CoarseCGSmoother(0.1,0.1,4,L1LinOp,LDOp);
 | 
				
			||||||
  //  MirsSmoother<LatticeFermion,DomainWallFermionR> FineCGSmoother(0.0,0.01,8,HermIndefOp,Ddwf);
 | 
					  //  MirsSmoother<LatticeFermion,DomainWallFermionD> FineCGSmoother(0.0,0.01,8,HermIndefOp,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CoarseMG Level2Precon (CoarseAggregates, L2Op,
 | 
					  CoarseMG Level2Precon (CoarseAggregates, L2Op,
 | 
				
			||||||
			 L1LinOp,LDOp,
 | 
								 L1LinOp,LDOp,
 | 
				
			||||||
@@ -463,7 +463,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
    LatticeFermion result_o(FrbGrid);
 | 
					    LatticeFermion result_o(FrbGrid);
 | 
				
			||||||
    pickCheckerboard(Odd,src_o,src);
 | 
					    pickCheckerboard(Odd,src_o,src);
 | 
				
			||||||
    result_o=Zero();
 | 
					    result_o=Zero();
 | 
				
			||||||
    SchurDiagMooeeOperator<DomainWallFermionR,LatticeFermion> HermOpEO(Ddwf);
 | 
					    SchurDiagMooeeOperator<DomainWallFermionD,LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
    //    pCG(HermOpEO,src_o,result_o);
 | 
					    //    pCG(HermOpEO,src_o,result_o);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -288,7 +288,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.001;
 | 
					  RealD mass=0.001;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -297,7 +297,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -332,7 +332,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Level1Op LDOp(*Coarse5d,*Coarse5dRB,1); LDOp.CoarsenOperator(FGrid,HermIndefOp,Aggregates);
 | 
					  Level1Op LDOp(*Coarse5d,*Coarse5dRB,1); LDOp.CoarsenOperator(FGrid,HermIndefOp,Aggregates);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -375,21 +375,21 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Building 2 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Building 2 level Multigrid            "<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
					  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,14,HermIndefOp,Ddwf); // 72 iter 63s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,14,HermIndefOp,Ddwf); // 72 iter 63s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.1,60.0,20,HermIndefOp,Ddwf); // 66 iter 69s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.1,60.0,20,HermIndefOp,Ddwf); // 66 iter 69s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,20,HermIndefOp,Ddwf); // 63 iter 65  s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,20,HermIndefOp,Ddwf); // 63 iter 65  s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(1.0,60.0,20,HermIndefOp,Ddwf); // 69, 70
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(1.0,60.0,20,HermIndefOp,Ddwf); // 69, 70
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(1.0,60.0,14,HermIndefOp,Ddwf); // 77
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(1.0,60.0,14,HermIndefOp,Ddwf); // 77
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,10,HermIndefOp,Ddwf); // 23 iter 15.9s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,10,HermIndefOp,Ddwf); // 23 iter 15.9s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,14,HermIndefOp,Ddwf); // 20, 16.9s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,14,HermIndefOp,Ddwf); // 20, 16.9s
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,12,HermIndefOp,Ddwf); // 21, 15.6s
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,12,HermIndefOp,Ddwf); // 21, 15.6s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  MirsSmoother<LatticeFermion,DomainWallFermionR> FineCGSmoother(0.05,0.01,20,HermIndefOp,Ddwf);
 | 
					  //  MirsSmoother<LatticeFermion,DomainWallFermionD> FineCGSmoother(0.05,0.01,20,HermIndefOp,Ddwf);
 | 
				
			||||||
  //  RedBlackSmoother<LatticeFermion,DomainWallFermionR> FineRBSmoother(0.00,0.001,100,Ddwf);
 | 
					  //  RedBlackSmoother<LatticeFermion,DomainWallFermionD> FineRBSmoother(0.00,0.001,100,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Wrap the 2nd level solver in a MultiGrid preconditioner acting on the fine space
 | 
					  // Wrap the 2nd level solver in a MultiGrid preconditioner acting on the fine space
 | 
				
			||||||
  //  ZeroGuesser<CoarseVector> CoarseZeroGuesser;
 | 
					  //  ZeroGuesser<CoarseVector> CoarseZeroGuesser;
 | 
				
			||||||
@@ -416,7 +416,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<LatticeFermion>          FineCG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion>          FineCG(1.0e-8,10000);
 | 
				
			||||||
  SchurDiagMooeeOperator<DomainWallFermionR,LatticeFermion> FineDiagMooee(Ddwf); //  M_ee - Meo Moo^-1 Moe 
 | 
					  SchurDiagMooeeOperator<DomainWallFermionD,LatticeFermion> FineDiagMooee(Ddwf); //  M_ee - Meo Moo^-1 Moe 
 | 
				
			||||||
  LatticeFermion f_src_e(FrbGrid); f_src_e=1.0;
 | 
					  LatticeFermion f_src_e(FrbGrid); f_src_e=1.0;
 | 
				
			||||||
  LatticeFermion f_res_e(FrbGrid); f_res_e=Zero();
 | 
					  LatticeFermion f_res_e(FrbGrid); f_res_e=Zero();
 | 
				
			||||||
  FineCG(FineDiagMooee,f_src_e,f_res_e);
 | 
					  FineCG(FineDiagMooee,f_src_e,f_res_e);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -264,7 +264,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.00078;
 | 
					  RealD mass=0.00078;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -273,7 +273,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -306,7 +306,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
					  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
					  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
				
			||||||
@@ -332,9 +332,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector> , SolverWrapper<CoarseVector> >   TwoLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector> , SolverWrapper<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
					  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling 2 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling 2 level Multigrid            "<< std::endl;
 | 
				
			||||||
@@ -349,7 +349,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
    result=Zero();
 | 
					    result=Zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::cout << GridLogMessage <<" tol  " << tols[t] << " cheby order " <<ords[o]<< " lo "<<los[l] <<std::endl;
 | 
					    std::cout << GridLogMessage <<" tol  " << tols[t] << " cheby order " <<ords[o]<< " lo "<<los[l] <<std::endl;
 | 
				
			||||||
    ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(los[l],60.0,ords[o],HermIndefOp,Ddwf);
 | 
					    ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(los[l],60.0,ords[o],HermIndefOp,Ddwf);
 | 
				
			||||||
    ZeroGuesser<CoarseVector> CoarseZeroGuesser;
 | 
					    ZeroGuesser<CoarseVector> CoarseZeroGuesser;
 | 
				
			||||||
    ConjugateGradient<CoarseVector>  CoarseCG(tols[t],10000);
 | 
					    ConjugateGradient<CoarseVector>  CoarseCG(tols[t],10000);
 | 
				
			||||||
    SchurRedBlackDiagMooeeSolve<CoarseVector> CoarseRBCG(CoarseCG);
 | 
					    SchurRedBlackDiagMooeeSolve<CoarseVector> CoarseRBCG(CoarseCG);
 | 
				
			||||||
@@ -376,7 +376,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
    LatticeFermion result_o(FrbGrid);
 | 
					    LatticeFermion result_o(FrbGrid);
 | 
				
			||||||
    pickCheckerboard(Odd,src_o,src);
 | 
					    pickCheckerboard(Odd,src_o,src);
 | 
				
			||||||
    result_o=Zero();
 | 
					    result_o=Zero();
 | 
				
			||||||
    SchurDiagMooeeOperator<DomainWallFermionR,LatticeFermion> HermOpEO(Ddwf);
 | 
					    SchurDiagMooeeOperator<DomainWallFermionD,LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
    pCG(HermOpEO,src_o,result_o);
 | 
					    pCG(HermOpEO,src_o,result_o);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -248,7 +248,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.00078;
 | 
					  RealD mass=0.00078;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -257,7 +257,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -290,7 +290,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
					  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
					  GridRedBlackCartesian * Coarse4dRB = SpaceTimeGrid::makeFourDimRedBlackGrid(Coarse4d);
 | 
				
			||||||
@@ -386,18 +386,18 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
					  std::cout<<GridLogMessage << "Building 3 level Multigrid            "<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  //  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
					  //  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,DeflatedGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector> , NormalEquations<CoarseVector> >   TwoLevelMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
					  typedef MultiGridPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,Level1Op, DeflatedGuesser<CoarseCoarseVector>, NormalEquations<CoarseCoarseVector> > CoarseMG;
 | 
				
			||||||
  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionR,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
					  typedef MultiGridPreconditioner<vSpinColourVector,  vTComplex,nbasis, DomainWallFermionD,ZeroGuesser<CoarseVector>, LinearFunction<CoarseVector> >     ThreeLevelMG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.25,60.0,12,HermIndefOp,Ddwf);
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.25,60.0,12,HermIndefOp,Ddwf);
 | 
				
			||||||
  /*
 | 
					  /*
 | 
				
			||||||
  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
					  // MultiGrid preconditioner acting on the coarse space <-> coarsecoarse space
 | 
				
			||||||
  ChebyshevSmoother<CoarseVector,  Level1Op >        CoarseSmoother(0.1,15.0,3,L1LinOp,LDOp);
 | 
					  ChebyshevSmoother<CoarseVector,  Level1Op >        CoarseSmoother(0.1,15.0,3,L1LinOp,LDOp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  MirsSmoother<CoarseVector,  Level1Op >        CoarseCGSmoother(0.1,0.1,4,L1LinOp,LDOp);
 | 
					  //  MirsSmoother<CoarseVector,  Level1Op >        CoarseCGSmoother(0.1,0.1,4,L1LinOp,LDOp);
 | 
				
			||||||
  //  MirsSmoother<LatticeFermion,DomainWallFermionR> FineCGSmoother(0.0,0.01,8,HermIndefOp,Ddwf);
 | 
					  //  MirsSmoother<LatticeFermion,DomainWallFermionD> FineCGSmoother(0.0,0.01,8,HermIndefOp,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CoarseMG Level2Precon (CoarseAggregates, L2Op,
 | 
					  CoarseMG Level2Precon (CoarseAggregates, L2Op,
 | 
				
			||||||
			 L1LinOp,LDOp,
 | 
								 L1LinOp,LDOp,
 | 
				
			||||||
@@ -458,7 +458,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
    LatticeFermion result_o(FrbGrid);
 | 
					    LatticeFermion result_o(FrbGrid);
 | 
				
			||||||
    pickCheckerboard(Odd,src_o,src);
 | 
					    pickCheckerboard(Odd,src_o,src);
 | 
				
			||||||
    result_o=Zero();
 | 
					    result_o=Zero();
 | 
				
			||||||
    SchurDiagMooeeOperator<DomainWallFermionR,LatticeFermion> HermOpEO(Ddwf);
 | 
					    SchurDiagMooeeOperator<DomainWallFermionD,LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
    pCG(HermOpEO,src_o,result_o);
 | 
					    pCG(HermOpEO,src_o,result_o);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,9 +35,9 @@ using namespace Grid;
 | 
				
			|||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef HAVE_LIME 
 | 
					#ifdef HAVE_LIME 
 | 
				
			||||||
  typedef typename DomainWallFermionR::FermionField FermionField; 
 | 
					  typedef typename DomainWallFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename DomainWallFermionR::ComplexField ComplexField; 
 | 
					  typedef typename DomainWallFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename DomainWallFermionR::ImplParams params; 
 | 
					  typename DomainWallFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=4;
 | 
					  const int Ls=4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -194,15 +194,15 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.01;
 | 
					  RealD mass=0.01;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
					  DomainWallFermionD Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOpCk(Dchk);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOpCk(Dchk);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((1.0e-5/(me+1)),10000);
 | 
					  ConjugateGradient<FermionField> CG((1.0e-5/(me+1)),10000);
 | 
				
			||||||
  s_res = Zero();
 | 
					  s_res = Zero();
 | 
				
			||||||
  CG(HermOp,s_src,s_res);
 | 
					  CG(HermOp,s_src,s_res);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,9 +34,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename DomainWallFermionR::FermionField FermionField; 
 | 
					  typedef typename DomainWallFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename DomainWallFermionR::ComplexField ComplexField; 
 | 
					  typedef typename DomainWallFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename DomainWallFermionR::ImplParams params; 
 | 
					  typename DomainWallFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  double stp=1.0e-5;
 | 
					  double stp=1.0e-5;
 | 
				
			||||||
  const int Ls=4;
 | 
					  const int Ls=4;
 | 
				
			||||||
@@ -189,15 +189,15 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
					  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
				
			||||||
  RealD mass=0.01;
 | 
					  RealD mass=0.01;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
					  DomainWallFermionD Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOpCk(Dchk);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOpCk(Dchk);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((stp),10000);
 | 
					  ConjugateGradient<FermionField> CG((stp),10000);
 | 
				
			||||||
  s_res = Zero();
 | 
					  s_res = Zero();
 | 
				
			||||||
  CG(HermOp,s_src,s_res);
 | 
					  CG(HermOp,s_src,s_res);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,9 +34,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename DomainWallFermionR::FermionField FermionField; 
 | 
					  typedef typename DomainWallFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename DomainWallFermionR::ComplexField ComplexField; 
 | 
					  typedef typename DomainWallFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename DomainWallFermionR::ImplParams params; 
 | 
					  typename DomainWallFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=4;
 | 
					  const int Ls=4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,15 +124,15 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  ///////////////////////////////////////////////////////////////
 | 
					  ///////////////////////////////////////////////////////////////
 | 
				
			||||||
  RealD mass=0.01;
 | 
					  RealD mass=0.01;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
					  DomainWallFermionD Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOpCk(Dchk);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOpCk(Dchk);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((1.0e-8/(me+1)),10000);
 | 
					  ConjugateGradient<FermionField> CG((1.0e-8/(me+1)),10000);
 | 
				
			||||||
  s_res = Zero();
 | 
					  s_res = Zero();
 | 
				
			||||||
  CG(HermOp,s_src,s_res);
 | 
					  CG(HermOp,s_src,s_res);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -397,8 +397,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.001;
 | 
					  RealD mass=0.001;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
					  DomainWallFermionD Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -407,7 +407,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermDefOp(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates(Coarse5d,FGrid,0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -435,8 +435,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
					  typedef CoarsenedMatrix<siteVector,iScalar<vTComplex>,nbasisc> Level2Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOp(Ddwf);
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> HermIndefOpPV(Dpv);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> HermIndefOpPV(Dpv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Building coarse representation of Indef operator" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Building coarse representation of Indef operator" <<std::endl;
 | 
				
			||||||
@@ -470,10 +470,10 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  ConjugateGradient<LatticeFermion>          FineCG(tol,MaxIt);
 | 
					  ConjugateGradient<LatticeFermion>          FineCG(tol,MaxIt);
 | 
				
			||||||
  //  GeneralisedMinimalResidual<LatticeFermion> FineGMRES(tol,MaxIt,20);
 | 
					  //  GeneralisedMinimalResidual<LatticeFermion> FineGMRES(tol,MaxIt,20);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion>    FineMdagM(Ddwf);     //  M^\dag M
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion>    FineMdagM(Ddwf);     //  M^\dag M
 | 
				
			||||||
  PVdagMLinearOperator<DomainWallFermionR,LatticeFermion>   FinePVdagM(Ddwf,Dpv);//  M_{pv}^\dag M
 | 
					  PVdagMLinearOperator<DomainWallFermionD,LatticeFermion>   FinePVdagM(Ddwf,Dpv);//  M_{pv}^\dag M
 | 
				
			||||||
  SchurDiagMooeeOperator<DomainWallFermionR,LatticeFermion> FineDiagMooee(Ddwf); //  M_ee - Meo Moo^-1 Moe 
 | 
					  SchurDiagMooeeOperator<DomainWallFermionD,LatticeFermion> FineDiagMooee(Ddwf); //  M_ee - Meo Moo^-1 Moe 
 | 
				
			||||||
  SchurDiagOneOperator<DomainWallFermionR,LatticeFermion>   FineDiagOne(Ddwf);   //  1 - M_ee^{-1} Meo Moo^{-1} Moe e
 | 
					  SchurDiagOneOperator<DomainWallFermionD,LatticeFermion>   FineDiagOne(Ddwf);   //  1 - M_ee^{-1} Meo Moo^{-1} Moe e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   MdagMLinearOperator<Level1Op,CoarseVector> CoarseMdagM(LDOp);
 | 
					   MdagMLinearOperator<Level1Op,CoarseVector> CoarseMdagM(LDOp);
 | 
				
			||||||
  PVdagMLinearOperator<Level1Op,CoarseVector> CoarsePVdagM(LDOp,LDOpPV);
 | 
					  PVdagMLinearOperator<Level1Op,CoarseVector> CoarsePVdagM(LDOp,LDOpPV);
 | 
				
			||||||
@@ -552,7 +552,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<CoarseVector>  CoarseMgridCG(0.001,1000);     
 | 
					  ConjugateGradient<CoarseVector>  CoarseMgridCG(0.001,1000);     
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(0.5,60.0,10,HermIndefOp,Ddwf);
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(0.5,60.0,10,HermIndefOp,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef HDCRPreconditioner<vSpinColourVector,  vTComplex,nbasis, NormalEquations<CoarseVector> >   TwoLevelHDCR;
 | 
					  typedef HDCRPreconditioner<vSpinColourVector,  vTComplex,nbasis, NormalEquations<CoarseVector> >   TwoLevelHDCR;
 | 
				
			||||||
  TwoLevelHDCR TwoLevelPrecon(Aggregates,
 | 
					  TwoLevelHDCR TwoLevelPrecon(Aggregates,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,17 +66,17 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.0;
 | 
					  RealD mass=0.0;
 | 
				
			||||||
  RealD M5=-1.8;
 | 
					  RealD M5=-1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma5R5HermitianLinearOperator<DomainWallFermionR,LatticeFermion> g5HermOp(Ddwf);
 | 
					  Gamma5R5HermitianLinearOperator<DomainWallFermionD,LatticeFermion> g5HermOp(Ddwf);
 | 
				
			||||||
  QMR(g5HermOp,src,result);
 | 
					  QMR(g5HermOp,src,result);
 | 
				
			||||||
  GMR(g5HermOp,src,result);
 | 
					  GMR(g5HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NonHermitianLinearOperator<DomainWallFermionR,LatticeFermion> NonHermOp(Ddwf);
 | 
					  NonHermitianLinearOperator<DomainWallFermionD,LatticeFermion> NonHermOp(Ddwf);
 | 
				
			||||||
  QMR(NonHermOp,src,result);
 | 
					  QMR(NonHermOp,src,result);
 | 
				
			||||||
  GMR(NonHermOp,src,result);
 | 
					  GMR(NonHermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,8 +83,8 @@ int main (int argc, char** argv)
 | 
				
			|||||||
  RealD mf = 0.01;
 | 
					  RealD mf = 0.01;
 | 
				
			||||||
  RealD mb = 1.0;
 | 
					  RealD mb = 1.0;
 | 
				
			||||||
  RealD M5 = 1.8;
 | 
					  RealD M5 = 1.8;
 | 
				
			||||||
  MobiusEOFAFermionR Lop(U, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, 0.0, -1, M5, b, c);
 | 
					  MobiusEOFAFermionD Lop(U, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mf, mf, mb, 0.0, -1, M5, b, c);
 | 
				
			||||||
  MobiusEOFAFermionR Rop(U, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, -1.0, 1, M5, b, c);
 | 
					  MobiusEOFAFermionD Rop(U, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mb, mf, mb, -1.0, 1, M5, b, c);
 | 
				
			||||||
  OneFlavourRationalParams Params(0.95, 100.0, 5000, 1.0e-10, 12);
 | 
					  OneFlavourRationalParams Params(0.95, 100.0, 5000, 1.0e-10, 12);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-10, 5000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-10, 5000);
 | 
				
			||||||
  ExactOneFlavourRatioPseudoFermionAction<WilsonImplR> Meofa(Lop, Rop, CG, CG, CG, CG, CG, Params, false);
 | 
					  ExactOneFlavourRatioPseudoFermionAction<WilsonImplR> Meofa(Lop, Rop, CG, CG, CG, CG, CG, Params, false);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -292,9 +292,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  RealD mass=0.001;
 | 
					  RealD mass=0.001;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  WilsonFermionR    Dw(Umu,*UGrid,*UrbGrid,-M5);
 | 
					  WilsonFermionD    Dw(Umu,*UGrid,*UrbGrid,-M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
					  DomainWallFermionD Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -304,7 +304,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> SubspaceOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> SubspaceOp(Dw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Subspace Aggregates4D(Coarse4d,UGrid,0);
 | 
					  Subspace Aggregates4D(Coarse4d,UGrid,0);
 | 
				
			||||||
  Subspace Aggregates5D(Coarse5d,FGrid,0);
 | 
					  Subspace Aggregates5D(Coarse5d,FGrid,0);
 | 
				
			||||||
@@ -335,7 +335,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NonHermitianLinearOperator<DomainWallFermionR,LatticeFermion>  LinOpDwf(Ddwf);
 | 
					  NonHermitianLinearOperator<DomainWallFermionD,LatticeFermion>  LinOpDwf(Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Level1Op LDOp  (*Coarse5d,*Coarse5dRB,0);   
 | 
					  Level1Op LDOp  (*Coarse5d,*Coarse5dRB,0);   
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -395,7 +395,7 @@ public:
 | 
				
			|||||||
  Geometry  geom;
 | 
					  Geometry  geom;
 | 
				
			||||||
  GridBase *Coarse5D;
 | 
					  GridBase *Coarse5D;
 | 
				
			||||||
  GridBase *Coarse4D;
 | 
					  GridBase *Coarse4D;
 | 
				
			||||||
  CartesianStencil<siteVector,siteVector,int> Stencil; 
 | 
					  CartesianStencil<siteVector,siteVector,DefaultImplParams> Stencil; 
 | 
				
			||||||
  CoarsenedMatrix<Fobj,CComplex,nbasis> &Dw;
 | 
					  CoarsenedMatrix<Fobj,CComplex,nbasis> &Dw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  GridBase * Grid(void)         { return Coarse5D; };   // this is all the linalg routines need to know
 | 
					  GridBase * Grid(void)         { return Coarse5D; };   // this is all the linalg routines need to know
 | 
				
			||||||
@@ -409,7 +409,7 @@ public:
 | 
				
			|||||||
    Coarse5D(&CoarseGrid5),
 | 
					    Coarse5D(&CoarseGrid5),
 | 
				
			||||||
    Dw(_Dw),
 | 
					    Dw(_Dw),
 | 
				
			||||||
    geom(CoarseGrid5._ndimension),
 | 
					    geom(CoarseGrid5._ndimension),
 | 
				
			||||||
    Stencil( &CoarseGrid5,geom.npoint,Even,geom.directions,geom.displacements,0)
 | 
					    Stencil( &CoarseGrid5,geom.npoint,Even,geom.directions,geom.displacements,DefaultImplParams())
 | 
				
			||||||
  { 
 | 
					  { 
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -981,9 +981,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.00078;
 | 
					  RealD mass=0.00078;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WilsonFermionR     Dw(Umu,*UGrid,*UrbGrid,-M5);
 | 
					  WilsonFermionD     Dw(Umu,*UGrid,*UrbGrid,-M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
					  DomainWallFermionD Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -994,21 +994,21 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  // How to find criticall mass?
 | 
					  // How to find criticall mass?
 | 
				
			||||||
  // WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.75); //   600 iters
 | 
					  // WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.75); //   600 iters
 | 
				
			||||||
  // WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.80); //   800 iters
 | 
					  // WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.80); //   800 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.82); // 1023 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.82); // 1023 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.85); // 1428 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.85); // 1428 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.87); //  1900 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.87); //  1900 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.90); // 3900   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.90); // 3900   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.92); // 6200   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.92); // 6200   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.94);  // 8882 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.94);  // 8882 iters
 | 
				
			||||||
  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.95);  // 9170  iters
 | 
					  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.95);  // 9170  iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.96);  // 8882   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.96);  // 8882   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.97);  // 8406  iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.97);  // 8406  iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.99); // 6900   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.99); // 6900   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-1.01); // 6397   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-1.01); // 6397   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-1.00); // 5900   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-1.00); // 5900   iters
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> MdagM_Dw(Dw_null);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> MdagM_Dw(Dw_null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Testing Wilson criticality " <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Testing Wilson criticality " <<std::endl;
 | 
				
			||||||
@@ -1057,7 +1057,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op4;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op4;
 | 
				
			||||||
  typedef CoarseCayleyFermion<vSpinColourVector,vTComplex,nbasis> Level1Op5;
 | 
					  typedef CoarseCayleyFermion<vSpinColourVector,vTComplex,nbasis> Level1Op5;
 | 
				
			||||||
  Level1Op4 c_Dw    (*Coarse4d,0);
 | 
					  Level1Op4 c_Dw    (*Coarse4d,0);
 | 
				
			||||||
  NonHermitianLinearOperator<WilsonFermionR,LatticeFermion>  LinOpDw(Dw);
 | 
					  NonHermitianLinearOperator<WilsonFermionD,LatticeFermion>  LinOpDw(Dw);
 | 
				
			||||||
  c_Dw.CoarsenOperator(UGrid,LinOpDw,Aggregates4D); // contains the M5 from Dw(-M5)
 | 
					  c_Dw.CoarsenOperator(UGrid,LinOpDw,Aggregates4D); // contains the M5 from Dw(-M5)
 | 
				
			||||||
  //  c_Dw.Test(Aggregates4D,UGrid,LinOpDw);
 | 
					  //  c_Dw.Test(Aggregates4D,UGrid,LinOpDw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1127,8 +1127,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  ConjugateGradient<CoarseVector>            CoarseCG(tol,MaxIt);
 | 
					  ConjugateGradient<CoarseVector>            CoarseCG(tol,MaxIt);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion>          FineCG(tol,MaxIt);
 | 
					  ConjugateGradient<LatticeFermion>          FineCG(tol,MaxIt);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  NonHermitianLinearOperator<DomainWallFermionR,LatticeFermion> FineM(Ddwf);
 | 
					  NonHermitianLinearOperator<DomainWallFermionD,LatticeFermion> FineM(Ddwf);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion>    FineMdagM(Ddwf);     //  M^\dag M
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion>    FineMdagM(Ddwf);     //  M^\dag M
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NonHermitianLinearOperator<Level1Op5,CoarseVector> CoarseM(c_Dwf);
 | 
					  NonHermitianLinearOperator<Level1Op5,CoarseVector> CoarseM(c_Dwf);
 | 
				
			||||||
  MdagMLinearOperator<Level1Op5,CoarseVector> CoarseMdagM(c_Dwf);
 | 
					  MdagMLinearOperator<Level1Op5,CoarseVector> CoarseMdagM(c_Dwf);
 | 
				
			||||||
@@ -1233,39 +1233,39 @@ typedef HDCRPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,NormalEquations
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // Wrap the 2nd level solver in a MultiGrid preconditioner acting on the fine space
 | 
					  // Wrap the 2nd level solver in a MultiGrid preconditioner acting on the fine space
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,14,FineM,Ddwf); // 26 iter, 39s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,14,FineM,Ddwf); // 26 iter, 39s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,14,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,14,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 38s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 38s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,16,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,16,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 23 iter, 39s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 23 iter, 39s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,20,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,20,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,10,FineM,Ddwf);24 iter, 44s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,10,FineM,Ddwf);24 iter, 44s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,24,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,24,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // odd convergence tail at 10^-9 ish
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // odd convergence tail at 10^-9 ish
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.1,60.0,24,FineM,Ddwf); // 33 iter, waas O(10-9 by 26)
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.1,60.0,24,FineM,Ddwf); // 33 iter, waas O(10-9 by 26)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 39s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 39s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,18,FineM,Ddwf); //
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,18,FineM,Ddwf); //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,16,FineM,Ddwf); 
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,16,FineM,Ddwf); 
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,16,FineM,Ddwf); //
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,16,FineM,Ddwf); //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,11,FineM,Ddwf); // 33 iter, 49s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,11,FineM,Ddwf); // 33 iter, 49s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,11,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,11,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 26 iter, 37s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 26 iter, 37s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,12,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.4,60.0,12,FineM,Ddwf); //  iter 26 no change in final residual
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.4,60.0,12,FineM,Ddwf); //  iter 26 no change in final residual
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.4,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.4,60.0,12,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.3,60.0,12,FineM,Ddwf); // 27 iter 39s.
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.3,60.0,12,FineM,Ddwf); // 27 iter 39s.
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.3,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.3,60.0,12,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.3,60.0,13,FineM,Ddwf); // 26 iter, but slower
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.3,60.0,13,FineM,Ddwf); // 26 iter, but slower
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.3,60.0,13,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.3,60.0,13,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(1.0,60.0,12,FineM,Ddwf); // 34 iter, slower
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(1.0,60.0,12,FineM,Ddwf); // 34 iter, slower
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(1.0,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(1.0,60.0,12,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ThreeLevelMG ThreeLevelPrecon(Aggregates4D,
 | 
					  ThreeLevelMG ThreeLevelPrecon(Aggregates4D,
 | 
				
			||||||
				FineM,
 | 
									FineM,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -395,7 +395,7 @@ public:
 | 
				
			|||||||
  Geometry  geom;
 | 
					  Geometry  geom;
 | 
				
			||||||
  GridBase *Coarse5D;
 | 
					  GridBase *Coarse5D;
 | 
				
			||||||
  GridBase *Coarse4D;
 | 
					  GridBase *Coarse4D;
 | 
				
			||||||
  CartesianStencil<siteVector,siteVector,int> Stencil; 
 | 
					  CartesianStencil<siteVector,siteVector,DefaultImplParams> Stencil; 
 | 
				
			||||||
  CoarsenedMatrix<Fobj,CComplex,nbasis> &Dw;
 | 
					  CoarsenedMatrix<Fobj,CComplex,nbasis> &Dw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  GridBase * Grid(void)         { return Coarse5D; };   // this is all the linalg routines need to know
 | 
					  GridBase * Grid(void)         { return Coarse5D; };   // this is all the linalg routines need to know
 | 
				
			||||||
@@ -409,7 +409,7 @@ public:
 | 
				
			|||||||
    Coarse5D(&CoarseGrid5),
 | 
					    Coarse5D(&CoarseGrid5),
 | 
				
			||||||
    Dw(_Dw),
 | 
					    Dw(_Dw),
 | 
				
			||||||
    geom(CoarseGrid5._ndimension),
 | 
					    geom(CoarseGrid5._ndimension),
 | 
				
			||||||
    Stencil( &CoarseGrid5,geom.npoint,Even,geom.directions,geom.displacements,0)
 | 
					    Stencil( &CoarseGrid5,geom.npoint,Even,geom.directions,geom.displacements,DefaultImplParams())
 | 
				
			||||||
  { 
 | 
					  { 
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1005,9 +1005,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.00078;
 | 
					  RealD mass=0.00078;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WilsonFermionR     Dw(Umu,*UGrid,*UrbGrid,-M5);
 | 
					  WilsonFermionD     Dw(Umu,*UGrid,*UrbGrid,-M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
					  DomainWallFermionD Dpv (Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,1.0,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
					  typedef Aggregation<vSpinColourVector,vTComplex,nbasis>              Subspace;
 | 
				
			||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>          CoarseOperator;
 | 
				
			||||||
@@ -1018,21 +1018,21 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  // How to find criticall mass?
 | 
					  // How to find criticall mass?
 | 
				
			||||||
  // WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.75); //   600 iters
 | 
					  // WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.75); //   600 iters
 | 
				
			||||||
  // WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.80); //   800 iters
 | 
					  // WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.80); //   800 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.82); // 1023 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.82); // 1023 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.85); // 1428 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.85); // 1428 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.87); //  1900 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.87); //  1900 iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.90); // 3900   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.90); // 3900   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.92); // 6200   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.92); // 6200   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.94);  // 8882 iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.94);  // 8882 iters
 | 
				
			||||||
  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.95);  // 9170  iters
 | 
					  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.95);  // 9170  iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.96);  // 8882   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.96);  // 8882   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.97);  // 8406  iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.97);  // 8406  iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-0.99); // 6900   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-0.99); // 6900   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-1.01); // 6397   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-1.01); // 6397   iters
 | 
				
			||||||
  //  WilsonFermionR     Dw_null(Umu,*UGrid,*UrbGrid,-1.00); // 5900   iters
 | 
					  //  WilsonFermionD     Dw_null(Umu,*UGrid,*UrbGrid,-1.00); // 5900   iters
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> MdagM_Dw(Dw_null);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> MdagM_Dw(Dw_null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
					  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "Testing Wilson criticality " <<std::endl;
 | 
					  std::cout<<GridLogMessage << "Testing Wilson criticality " <<std::endl;
 | 
				
			||||||
@@ -1081,7 +1081,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op4;
 | 
					  typedef CoarsenedMatrix<vSpinColourVector,vTComplex,nbasis>    Level1Op4;
 | 
				
			||||||
  typedef CoarseCayleyFermion<vSpinColourVector,vTComplex,nbasis> Level1Op5;
 | 
					  typedef CoarseCayleyFermion<vSpinColourVector,vTComplex,nbasis> Level1Op5;
 | 
				
			||||||
  Level1Op4 c_Dw    (*Coarse4d,0);
 | 
					  Level1Op4 c_Dw    (*Coarse4d,0);
 | 
				
			||||||
  NonHermitianLinearOperator<WilsonFermionR,LatticeFermion>  LinOpDw(Dw);
 | 
					  NonHermitianLinearOperator<WilsonFermionD,LatticeFermion>  LinOpDw(Dw);
 | 
				
			||||||
  c_Dw.CoarsenOperator(UGrid,LinOpDw,Aggregates4D); // contains the M5 from Dw(-M5)
 | 
					  c_Dw.CoarsenOperator(UGrid,LinOpDw,Aggregates4D); // contains the M5 from Dw(-M5)
 | 
				
			||||||
  //  c_Dw.Test(Aggregates4D,UGrid,LinOpDw);
 | 
					  //  c_Dw.Test(Aggregates4D,UGrid,LinOpDw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1148,8 +1148,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  ConjugateGradient<CoarseVector>            CoarseCG(tol,MaxIt);
 | 
					  ConjugateGradient<CoarseVector>            CoarseCG(tol,MaxIt);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion>          FineCG(tol,MaxIt);
 | 
					  ConjugateGradient<LatticeFermion>          FineCG(tol,MaxIt);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  NonHermitianLinearOperator<DomainWallFermionR,LatticeFermion> FineM(Ddwf);
 | 
					  NonHermitianLinearOperator<DomainWallFermionD,LatticeFermion> FineM(Ddwf);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion>    FineMdagM(Ddwf);     //  M^\dag M
 | 
					  MdagMLinearOperator<DomainWallFermionD,LatticeFermion>    FineMdagM(Ddwf);     //  M^\dag M
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NonHermitianLinearOperator<Level1Op5,CoarseVector> CoarseM(c_Dwf);
 | 
					  NonHermitianLinearOperator<Level1Op5,CoarseVector> CoarseM(c_Dwf);
 | 
				
			||||||
  MdagMLinearOperator<Level1Op5,CoarseVector> CoarseMdagM(c_Dwf);
 | 
					  MdagMLinearOperator<Level1Op5,CoarseVector> CoarseMdagM(c_Dwf);
 | 
				
			||||||
@@ -1272,38 +1272,38 @@ typedef HDCRPreconditioner<siteVector,iScalar<vTComplex>,nbasisc,LinearFunction<
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // Wrap the 2nd level solver in a MultiGrid preconditioner acting on the fine space
 | 
					  // Wrap the 2nd level solver in a MultiGrid preconditioner acting on the fine space
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,14,FineM,Ddwf); // 26 iter, 39s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,14,FineM,Ddwf); // 26 iter, 39s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,14,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,14,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 38s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 38s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,16,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,16,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 23 iter, 39s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 23 iter, 39s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,20,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,20,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,10,FineM,Ddwf);24 iter, 44s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,10,FineM,Ddwf);24 iter, 44s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,24,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,24,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // odd convergence tail at 10^-9 ish
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // odd convergence tail at 10^-9 ish
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.1,60.0,24,FineM,Ddwf); // 33 iter, waas O(10-9 by 26)
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.1,60.0,24,FineM,Ddwf); // 33 iter, waas O(10-9 by 26)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 39s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 25 iter, 39s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,18,FineM,Ddwf); //
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,18,FineM,Ddwf); //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother(f_lo,f_hi,f_ord,FineM,Ddwf); 
 | 
					  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother(f_lo,f_hi,f_ord,FineM,Ddwf); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,11,FineM,Ddwf); // 33 iter, 49s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,11,FineM,Ddwf); // 33 iter, 49s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,11,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,11,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 26 iter, 37s
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.5,60.0,12,FineM,Ddwf); // 26 iter, 37s
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.5,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.5,60.0,12,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.4,60.0,12,FineM,Ddwf); //  iter 26 no change in final residual
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.4,60.0,12,FineM,Ddwf); //  iter 26 no change in final residual
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.4,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.4,60.0,12,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.3,60.0,12,FineM,Ddwf); // 27 iter 39s.
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.3,60.0,12,FineM,Ddwf); // 27 iter 39s.
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.3,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.3,60.0,12,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(0.3,60.0,13,FineM,Ddwf); // 26 iter, but slower
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(0.3,60.0,13,FineM,Ddwf); // 26 iter, but slower
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(0.3,60.0,13,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(0.3,60.0,13,FineM,Ddwf);
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother1(1.0,60.0,12,FineM,Ddwf); // 34 iter, slower
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother1(1.0,60.0,12,FineM,Ddwf); // 34 iter, slower
 | 
				
			||||||
  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionR> FineSmoother2(1.0,60.0,12,FineM,Ddwf);
 | 
					  //  ChebyshevSmoother<LatticeFermion,DomainWallFermionD> FineSmoother2(1.0,60.0,12,FineM,Ddwf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ThreeLevelMG ThreeLevelPrecon(Aggregates4D,
 | 
					  ThreeLevelMG ThreeLevelPrecon(Aggregates4D,
 | 
				
			||||||
				FineM,
 | 
									FineM,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,9 +33,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename MobiusFermionR::FermionField FermionField; 
 | 
					  typedef typename MobiusFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename MobiusFermionR::ComplexField ComplexField; 
 | 
					  typedef typename MobiusFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename MobiusFermionR::ImplParams params; 
 | 
					  typename MobiusFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=12;
 | 
					  const int Ls=12;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -158,15 +158,15 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mobius_factor=32./12.;
 | 
					  RealD mobius_factor=32./12.;
 | 
				
			||||||
  RealD mobius_b=0.5*(mobius_factor+1.);
 | 
					  RealD mobius_b=0.5*(mobius_factor+1.);
 | 
				
			||||||
  RealD mobius_c=0.5*(mobius_factor-1.);
 | 
					  RealD mobius_c=0.5*(mobius_factor-1.);
 | 
				
			||||||
  MobiusFermionR Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,mobius_b,mobius_c,params);
 | 
					  MobiusFermionD Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,mobius_b,mobius_c,params);
 | 
				
			||||||
  MobiusFermionR Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5,mobius_b,mobius_c,params);
 | 
					  MobiusFermionD Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5,mobius_b,mobius_c,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<MobiusFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<MobiusFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  MdagMLinearOperator<MobiusFermionR,FermionField> HermOpCk(Dchk);
 | 
					  MdagMLinearOperator<MobiusFermionD,FermionField> HermOpCk(Dchk);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((stp),100000);
 | 
					  ConjugateGradient<FermionField> CG((stp),100000);
 | 
				
			||||||
  s_res = Zero();
 | 
					  s_res = Zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,9 +35,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename DomainWallFermionR::FermionField FermionField; 
 | 
					  typedef typename DomainWallFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename DomainWallFermionR::ComplexField ComplexField; 
 | 
					  typedef typename DomainWallFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename DomainWallFermionR::ImplParams params; 
 | 
					  typename DomainWallFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=16;
 | 
					  const int Ls=16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -106,13 +106,13 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
					  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
				
			||||||
  RealD mass=0.01;
 | 
					  RealD mass=0.01;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,params);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((stp),100000);
 | 
					  ConjugateGradient<FermionField> CG((stp),100000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for(int rhs=0;rhs<1;rhs++){
 | 
					  for(int rhs=0;rhs<1;rhs++){
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,9 +35,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename DomainWallFermionR::FermionField FermionField; 
 | 
					  typedef typename DomainWallFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename DomainWallFermionR::ComplexField ComplexField; 
 | 
					  typedef typename DomainWallFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename DomainWallFermionR::ImplParams params; 
 | 
					  typename DomainWallFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=16;
 | 
					  const int Ls=16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -107,7 +107,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
					  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
				
			||||||
  RealD mass=0.01;
 | 
					  RealD mass=0.01;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,params);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,params);
 | 
				
			||||||
  for(int s=0;s<nrhs;s++) {
 | 
					  for(int s=0;s<nrhs;s++) {
 | 
				
			||||||
    Ddwf.ImportPhysicalFermionSource(src4[s],src[s]);
 | 
					    Ddwf.ImportPhysicalFermionSource(src4[s],src[s]);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -116,7 +116,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((stp),100000);
 | 
					  ConjugateGradient<FermionField> CG((stp),100000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for(int rhs=0;rhs<1;rhs++){
 | 
					  for(int rhs=0;rhs<1;rhs++){
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,9 +35,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename DomainWallFermionR::FermionField FermionField; 
 | 
					  typedef typename DomainWallFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename DomainWallFermionR::ComplexField ComplexField; 
 | 
					  typedef typename DomainWallFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename DomainWallFermionR::ImplParams params; 
 | 
					  typename DomainWallFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=16;
 | 
					  const int Ls=16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -106,13 +106,13 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
					  std::cout << GridLogMessage << " Building the solvers"<<std::endl;
 | 
				
			||||||
  RealD mass=0.01;
 | 
					  RealD mass=0.01;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,params);
 | 
					  DomainWallFermionD Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((stp),100000);
 | 
					  ConjugateGradient<FermionField> CG((stp),100000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for(int rhs=0;rhs<1;rhs++){
 | 
					  for(int rhs=0;rhs<1;rhs++){
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,9 +34,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename DomainWallFermionR::FermionField FermionField; 
 | 
					  typedef typename DomainWallFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename DomainWallFermionR::ComplexField ComplexField; 
 | 
					  typedef typename DomainWallFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename DomainWallFermionR::ImplParams params; 
 | 
					  typename DomainWallFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=4;
 | 
					  const int Ls=4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -117,15 +117,15 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  ///////////////////////////////////////////////////////////////
 | 
					  ///////////////////////////////////////////////////////////////
 | 
				
			||||||
  RealD mass=0.01;
 | 
					  RealD mass=0.01;
 | 
				
			||||||
  RealD M5=1.8;
 | 
					  RealD M5=1.8;
 | 
				
			||||||
  DomainWallFermionR Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
					  DomainWallFermionD Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5);
 | 
				
			||||||
  DomainWallFermionR Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
					  DomainWallFermionD Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOp(Ddwf);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOp(Ddwf);
 | 
				
			||||||
  MdagMLinearOperator<DomainWallFermionR,FermionField> HermOpCk(Dchk);
 | 
					  MdagMLinearOperator<DomainWallFermionD,FermionField> HermOpCk(Dchk);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG((1.0e-8/(me+1)),10000);
 | 
					  ConjugateGradient<FermionField> CG((1.0e-8/(me+1)),10000);
 | 
				
			||||||
  s_res = Zero();
 | 
					  s_res = Zero();
 | 
				
			||||||
  CG(HermOp,s_src,s_res);
 | 
					  CG(HermOp,s_src,s_res);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,9 +46,9 @@ struct scal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermion5DR::FermionField FermionField; 
 | 
					  typedef typename ImprovedStaggeredFermion5DD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermion5DR::ComplexField ComplexField; 
 | 
					  typedef typename ImprovedStaggeredFermion5DD::ComplexField ComplexField; 
 | 
				
			||||||
  typename ImprovedStaggeredFermion5DR::ImplParams params; 
 | 
					  typename ImprovedStaggeredFermion5DD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=8;
 | 
					  const int Ls=8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -98,8 +98,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermion5DR Ds(Umu,Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,c1,c2,u0); 
 | 
					  ImprovedStaggeredFermion5DD Ds(Umu,Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,c1,c2,u0); 
 | 
				
			||||||
  SchurStaggeredOperator<ImprovedStaggeredFermion5DR,FermionField> HermOp(Ds);
 | 
					  SchurStaggeredOperator<ImprovedStaggeredFermion5DD,FermionField> HermOp(Ds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
				
			||||||
  int blockDim = 0;
 | 
					  int blockDim = 0;
 | 
				
			||||||
@@ -111,8 +111,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling 4d CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling 4d CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds4d(Umu,Umu,*UGrid,*UrbGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds4d(Umu,Umu,*UGrid,*UrbGrid,mass,c1,c2,u0);
 | 
				
			||||||
  SchurStaggeredOperator<ImprovedStaggeredFermionR,FermionField> HermOp4d(Ds4d);
 | 
					  SchurStaggeredOperator<ImprovedStaggeredFermionD,FermionField> HermOp4d(Ds4d);
 | 
				
			||||||
  FermionField src4d(UGrid); random(pRNG,src4d);
 | 
					  FermionField src4d(UGrid); random(pRNG,src4d);
 | 
				
			||||||
  FermionField src4d_o(UrbGrid);   pickCheckerboard(Odd,src4d_o,src4d);
 | 
					  FermionField src4d_o(UrbGrid);   pickCheckerboard(Odd,src4d_o,src4d);
 | 
				
			||||||
  FermionField result4d_o(UrbGrid); 
 | 
					  FermionField result4d_o(UrbGrid); 
 | 
				
			||||||
@@ -135,7 +135,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling 5d CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling 5d CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  Ds.ZeroCounters();
 | 
					 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    double t1=usecond();
 | 
					    double t1=usecond();
 | 
				
			||||||
@@ -152,7 +151,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling multiRHS CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling multiRHS CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  Ds.ZeroCounters();
 | 
					 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    double t1=usecond();
 | 
					    double t1=usecond();
 | 
				
			||||||
@@ -170,7 +168,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling Block CGrQ for "<<Ls <<" right hand sides" <<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling Block CGrQ for "<<Ls <<" right hand sides" <<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  Ds.ZeroCounters();
 | 
					 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    double t1=usecond();
 | 
					    double t1=usecond();
 | 
				
			||||||
@@ -187,7 +184,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling Block CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling Block CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  Ds.ZeroCounters();
 | 
					 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    double t1=usecond();
 | 
					    double t1=usecond();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,12 +30,6 @@ Author: Peter Boyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
using namespace Grid;
 | 
					using namespace Grid;
 | 
				
			||||||
 ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<class d>
 | 
					 | 
				
			||||||
struct scal {
 | 
					 | 
				
			||||||
  d internal;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gamma::Algebra Gmu [] = {
 | 
					  Gamma::Algebra Gmu [] = {
 | 
				
			||||||
    Gamma::Algebra::GammaX,
 | 
					    Gamma::Algebra::GammaX,
 | 
				
			||||||
@@ -46,9 +40,9 @@ struct scal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermion5DR::FermionField FermionField; 
 | 
					  typedef typename ImprovedStaggeredFermion5DD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermion5DR::ComplexField ComplexField; 
 | 
					  typedef typename ImprovedStaggeredFermion5DD::ComplexField ComplexField; 
 | 
				
			||||||
  typename ImprovedStaggeredFermion5DR::ImplParams params; 
 | 
					  typename ImprovedStaggeredFermion5DD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const int Ls=8;
 | 
					  const int Ls=8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -83,8 +77,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
    volume=volume*latt_size[mu];
 | 
					    volume=volume*latt_size[mu];
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ImprovedStaggeredFermion5DR Ds(Umu,Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,c1,c2,u0); 
 | 
					  ImprovedStaggeredFermion5DD Ds(Umu,Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,c1,c2,u0); 
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermion5DR,FermionField> HermOp(Ds);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermion5DD,FermionField> HermOp(Ds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
				
			||||||
  int blockDim = 0;
 | 
					  int blockDim = 0;
 | 
				
			||||||
@@ -95,8 +89,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling 4d CG "<<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling 4d CG "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
					  std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds4d(Umu,Umu,*UGrid,*UrbGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds4d(Umu,Umu,*UGrid,*UrbGrid,mass,c1,c2,u0);
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermionR,FermionField> HermOp4d(Ds4d);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermionD,FermionField> HermOp4d(Ds4d);
 | 
				
			||||||
  FermionField src4d(UGrid); random(pRNG,src4d);
 | 
					  FermionField src4d(UGrid); random(pRNG,src4d);
 | 
				
			||||||
  FermionField result4d(UGrid); result4d=Zero();
 | 
					  FermionField result4d(UGrid); result4d=Zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,7 +114,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  Ds.ZeroCounters();
 | 
					 | 
				
			||||||
  double t1=usecond();
 | 
					  double t1=usecond();
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
  double t2=usecond();
 | 
					  double t2=usecond();
 | 
				
			||||||
@@ -129,7 +122,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "usec    =   "<< (t2-t1)<<std::endl;
 | 
					  std::cout<<GridLogMessage << "usec    =   "<< (t2-t1)<<std::endl;
 | 
				
			||||||
    std::cout<<GridLogMessage << "flops   =   "<< flops<<std::endl;
 | 
					    std::cout<<GridLogMessage << "flops   =   "<< flops<<std::endl;
 | 
				
			||||||
    std::cout<<GridLogMessage << "mflop/s =   "<< flops/(t2-t1)<<std::endl;
 | 
					    std::cout<<GridLogMessage << "mflop/s =   "<< flops/(t2-t1)<<std::endl;
 | 
				
			||||||
  Ds.Report();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -137,7 +129,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout << GridLogMessage << " Calling multiRHS CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling multiRHS CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  Ds.ZeroCounters();
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  double t1=usecond();
 | 
					  double t1=usecond();
 | 
				
			||||||
  mCG(HermOp,src,result);
 | 
					  mCG(HermOp,src,result);
 | 
				
			||||||
@@ -148,14 +139,12 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "flops   =   "<< flops<<std::endl;
 | 
					  std::cout<<GridLogMessage << "flops   =   "<< flops<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "mflop/s =   "<< flops/(t2-t1)<<std::endl;
 | 
					  std::cout<<GridLogMessage << "mflop/s =   "<< flops/(t2-t1)<<std::endl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
  Ds.Report();
 | 
					 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << " Calling Block CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
					  std::cout << GridLogMessage << " Calling Block CG for "<<Ls <<" right hand sides" <<std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  Ds.ZeroCounters();
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  double t1=usecond();
 | 
					  double t1=usecond();
 | 
				
			||||||
  BCGrQ(HermOp,src,result);
 | 
					  BCGrQ(HermOp,src,result);
 | 
				
			||||||
@@ -166,7 +155,6 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "flops   =   "<< flops<<std::endl;
 | 
					  std::cout<<GridLogMessage << "flops   =   "<< flops<<std::endl;
 | 
				
			||||||
  std::cout<<GridLogMessage << "mflop/s =   "<< flops/(t2-t1)<<std::endl;
 | 
					  std::cout<<GridLogMessage << "mflop/s =   "<< flops/(t2-t1)<<std::endl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
  Ds.Report();
 | 
					 | 
				
			||||||
  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
					  std::cout << GridLogMessage << "************************************************************************ "<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,9 +33,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField;
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField;
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::ComplexField ComplexField;
 | 
					  typedef typename ImprovedStaggeredFermionD::ComplexField ComplexField;
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params;
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,9 +62,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermionR,FermionField> HermOp(Ds);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermionD,FermionField> HermOp(Ds);
 | 
				
			||||||
  CommunicationAvoidingGeneralisedMinimalResidual<FermionField> CAGMRES(1.0e-8, 10000, 25);
 | 
					  CommunicationAvoidingGeneralisedMinimalResidual<FermionField> CAGMRES(1.0e-8, 10000, 25);
 | 
				
			||||||
  CAGMRES(HermOp,src,result);
 | 
					  CAGMRES(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,8 +47,8 @@ struct scal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField; 
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField; 
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params; 
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -74,14 +74,14 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FermionField res_o(&RBGrid); 
 | 
					  FermionField res_o(&RBGrid); 
 | 
				
			||||||
  FermionField src_o(&RBGrid); 
 | 
					  FermionField src_o(&RBGrid); 
 | 
				
			||||||
  pickCheckerboard(Odd,src_o,src);
 | 
					  pickCheckerboard(Odd,src_o,src);
 | 
				
			||||||
  res_o=Zero();
 | 
					  res_o=Zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SchurStaggeredOperator<ImprovedStaggeredFermionR,FermionField> HermOpEO(Ds);
 | 
					  SchurStaggeredOperator<ImprovedStaggeredFermionD,FermionField> HermOpEO(Ds);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
				
			||||||
  double t1=usecond();
 | 
					  double t1=usecond();
 | 
				
			||||||
  CG(HermOpEO,src_o,res_o);
 | 
					  CG(HermOpEO,src_o,res_o);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,8 +45,8 @@ struct scal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField; 
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField; 
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params; 
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params; 
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Coordinate latt_size   = GridDefaultLatt();
 | 
					  Coordinate latt_size   = GridDefaultLatt();
 | 
				
			||||||
@@ -68,7 +68,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<FermionField> CG(1.0e-8,10000);
 | 
				
			||||||
  SchurRedBlackStaggeredSolve<FermionField> SchurSolver(CG);
 | 
					  SchurRedBlackStaggeredSolve<FermionField> SchurSolver(CG);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,9 +47,9 @@ struct scal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField; 
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField; 
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::ComplexField ComplexField; 
 | 
					  typedef typename ImprovedStaggeredFermionD::ComplexField ComplexField; 
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params; 
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,9 +76,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermionR,FermionField> HermOp(Ds);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermionD,FermionField> HermOp(Ds);
 | 
				
			||||||
  ConjugateGradient<FermionField> CG(1.0e-6,10000);
 | 
					  ConjugateGradient<FermionField> CG(1.0e-6,10000);
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,9 +33,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField;
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField;
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::ComplexField ComplexField;
 | 
					  typedef typename ImprovedStaggeredFermionD::ComplexField ComplexField;
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params;
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,9 +62,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermionR,FermionField> HermOp(Ds);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermionD,FermionField> HermOp(Ds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<FermionField> simple;
 | 
					  TrivialPrecon<FermionField> simple;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,9 +33,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField;
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField;
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::ComplexField ComplexField;
 | 
					  typedef typename ImprovedStaggeredFermionD::ComplexField ComplexField;
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params;
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,9 +62,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermionR,FermionField> HermOp(Ds);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermionD,FermionField> HermOp(Ds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<FermionField> simple;
 | 
					  TrivialPrecon<FermionField> simple;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,9 +33,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField;
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField;
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::ComplexField ComplexField;
 | 
					  typedef typename ImprovedStaggeredFermionD::ComplexField ComplexField;
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params;
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,9 +62,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermionR,FermionField> HermOp(Ds);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermionD,FermionField> HermOp(Ds);
 | 
				
			||||||
  GeneralisedMinimalResidual<FermionField> GMRES(1.0e-8, 10000, 25);
 | 
					  GeneralisedMinimalResidual<FermionField> GMRES(1.0e-8, 10000, 25);
 | 
				
			||||||
  GMRES(HermOp,src,result);
 | 
					  GMRES(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,9 +33,9 @@ using namespace Grid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField;
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField;
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::ComplexField ComplexField;
 | 
					  typedef typename ImprovedStaggeredFermionD::ComplexField ComplexField;
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params;
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,9 +62,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c1=9.0/8.0;
 | 
					  RealD c1=9.0/8.0;
 | 
				
			||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<ImprovedStaggeredFermionR,FermionField> HermOp(Ds);
 | 
					  MdagMLinearOperator<ImprovedStaggeredFermionD,FermionField> HermOp(Ds);
 | 
				
			||||||
  MinimalResidual<FermionField> MR(1.0e-8,10000,0.8);
 | 
					  MinimalResidual<FermionField> MR(1.0e-8,10000,0.8);
 | 
				
			||||||
  MR(HermOp,src,result);
 | 
					  MR(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,8 +46,8 @@ struct scal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main (int argc, char ** argv)
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  typedef typename ImprovedStaggeredFermionR::FermionField FermionField; 
 | 
					  typedef typename ImprovedStaggeredFermionD::FermionField FermionField; 
 | 
				
			||||||
  typename ImprovedStaggeredFermionR::ImplParams params; 
 | 
					  typename ImprovedStaggeredFermionD::ImplParams params; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_init(&argc,&argv);
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -90,8 +90,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD c2=-1.0/24.0;
 | 
					  RealD c2=-1.0/24.0;
 | 
				
			||||||
  RealD u0=1.0;
 | 
					  RealD u0=1.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ImprovedStaggeredFermionR Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
					  ImprovedStaggeredFermionD Ds(Umu,Umu,Grid,RBGrid,mass,c1,c2,u0);
 | 
				
			||||||
  SchurStaggeredOperator<ImprovedStaggeredFermionR,FermionField> HermOpEO(Ds);
 | 
					  SchurStaggeredOperator<ImprovedStaggeredFermionD,FermionField> HermOpEO(Ds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FermionField src(&Grid); random(pRNG,src);
 | 
					  FermionField src(&Grid); random(pRNG,src);
 | 
				
			||||||
  FermionField src_o(&RBGrid); 
 | 
					  FermionField src_o(&RBGrid); 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,9 +55,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  CommunicationAvoidingGeneralisedMinimalResidual<LatticeFermion> CAGMRES(1.0e-8, 10000, 25);
 | 
					  CommunicationAvoidingGeneralisedMinimalResidual<LatticeFermion> CAGMRES(1.0e-8, 10000, 25);
 | 
				
			||||||
  CAGMRES(HermOp,src,result);
 | 
					  CAGMRES(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  HermitianOperator<WilsonFermion,LatticeFermion> HermOp(Dw);
 | 
					  //  HermitianOperator<WilsonFermion,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  //  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  //  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
@@ -80,7 +80,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  pickCheckerboard(Odd,src_o,src);
 | 
					  pickCheckerboard(Odd,src_o,src);
 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SchurDiagMooeeOperator<WilsonFermionR,LatticeFermion> HermOpEO(Dw);
 | 
					  SchurDiagMooeeOperator<WilsonFermionD,LatticeFermion> HermOpEO(Dw);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  CG(HermOpEO,src_o,result_o);
 | 
					  CG(HermOpEO,src_o,result_o);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  LatticeFermion resid(&Grid); 
 | 
					  LatticeFermion resid(&Grid); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  SchurRedBlackDiagMooeeSolve<LatticeFermion> SchurSolver(CG);
 | 
					  SchurRedBlackDiagMooeeSolve<LatticeFermion> SchurSolver(CG);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -68,9 +68,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }  
 | 
					  }  
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,9 +70,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }  
 | 
					  }  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateResidual<LatticeFermion> MCR(1.0e-8,10000);
 | 
					  ConjugateResidual<LatticeFermion> MCR(1.0e-8,10000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,9 +55,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<LatticeFermion> simple;
 | 
					  TrivialPrecon<LatticeFermion> simple;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,9 +55,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<LatticeFermion> simple;
 | 
					  TrivialPrecon<LatticeFermion> simple;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,9 +55,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  GeneralisedMinimalResidual<LatticeFermion> GMRES(1.0e-8, 10000, 25);
 | 
					  GeneralisedMinimalResidual<LatticeFermion> GMRES(1.0e-8, 10000, 25);
 | 
				
			||||||
  GMRES(HermOp,src,result);
 | 
					  GMRES(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,16 +77,16 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
  // Note: We do chiral doubling, so actually only nbasis/2 full basis vectors are used
 | 
					  // Note: We do chiral doubling, so actually only nbasis/2 full basis vectors are used
 | 
				
			||||||
  const int nbasis = 40;
 | 
					  const int nbasis = 40;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WilsonFermionR Dw(Umu, *FGrid, *FrbGrid, mass);
 | 
					  WilsonFermionD Dw(Umu, *FGrid, *FrbGrid, mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR, LatticeFermion> MdagMOpDw(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD, LatticeFermion> MdagMOpDw(Dw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
					  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Multigrid for Wilson" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Multigrid for Wilson" << std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
					  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<LatticeFermion> TrivialPrecon;
 | 
					  TrivialPrecon<LatticeFermion> TrivialPrecon;
 | 
				
			||||||
  auto MGPreconDw = createMGInstance<vSpinColourVector, vTComplex, nbasis, WilsonFermionR>(mgParams, levelInfo, Dw, Dw);
 | 
					  auto MGPreconDw = createMGInstance<vSpinColourVector, vTComplex, nbasis, WilsonFermionD>(mgParams, levelInfo, Dw, Dw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MGPreconDw->setup();
 | 
					  MGPreconDw->setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,9 +55,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RealD mass=0.5;
 | 
					  RealD mass=0.5;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,Grid,RBGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,Grid,RBGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  MinimalResidual<LatticeFermion> MR(1.0e-8,10000,0.8);
 | 
					  MinimalResidual<LatticeFermion> MR(1.0e-8,10000,0.8);
 | 
				
			||||||
  MR(HermOp,src,result);
 | 
					  MR(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,9 +56,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  QuasiMinimalResidual<LatticeFermion> QMR(1.0e-8,10000);
 | 
					  QuasiMinimalResidual<LatticeFermion> QMR(1.0e-8,10000);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  RealD mass=0.0;
 | 
					  RealD mass=0.0;
 | 
				
			||||||
  WilsonFermionR Dw(Umu,*Grid,*rbGrid,mass);
 | 
					  WilsonFermionD Dw(Umu,*Grid,*rbGrid,mass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NonHermitianLinearOperator<WilsonFermionR,LatticeFermion> NonHermOp(Dw);
 | 
					  NonHermitianLinearOperator<WilsonFermionD,LatticeFermion> NonHermOp(Dw);
 | 
				
			||||||
  QMR(NonHermOp,src,result);
 | 
					  QMR(NonHermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,14 +70,14 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass = -0.1;
 | 
					  RealD mass = -0.1;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonCloverFermionD Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  LatticeFermion    src_o(&RBGrid);
 | 
					  LatticeFermion    src_o(&RBGrid);
 | 
				
			||||||
  LatticeFermion result_o(&RBGrid);
 | 
					  LatticeFermion result_o(&RBGrid);
 | 
				
			||||||
  pickCheckerboard(Odd, src_o, src);
 | 
					  pickCheckerboard(Odd, src_o, src);
 | 
				
			||||||
  result_o = Zero();
 | 
					  result_o = Zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NonHermitianSchurDiagMooeeOperator<WilsonCloverFermionR,LatticeFermion> HermOp(Dw);
 | 
					  NonHermitianSchurDiagMooeeOperator<WilsonCloverFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  BiCGSTAB<LatticeFermion> CG(1.0e-8,10000);
 | 
					  BiCGSTAB<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  CG(HermOp, src_o, result_o);
 | 
					  CG(HermOp, src_o, result_o);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,7 +70,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass = -0.1;
 | 
					  RealD mass = -0.1;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonCloverFermionD Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  BiCGSTAB<LatticeFermion> CG(1.0e-8,10000);
 | 
					  BiCGSTAB<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  NonHermitianSchurRedBlackDiagMooeeSolve<LatticeFermion> SchurSolver(CG);
 | 
					  NonHermitianSchurRedBlackDiagMooeeSolve<LatticeFermion> SchurSolver(CG);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,9 +70,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass = -0.1;
 | 
					  RealD mass = -0.1;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonCloverFermionD Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NonHermitianLinearOperator<WilsonCloverFermionR,LatticeFermion> HermOp(Dw);
 | 
					  NonHermitianLinearOperator<WilsonCloverFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  BiCGSTAB<LatticeFermion> CG(1.0e-8,10000);
 | 
					  BiCGSTAB<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::vector<int> seeds({1,2,3,4});
 | 
					  std::vector<int> seeds({1,2,3,4});
 | 
				
			||||||
  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
					  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef typename WilsonCloverFermionR::FermionField FermionField;
 | 
					  typedef typename WilsonCloverFermionD::FermionField FermionField;
 | 
				
			||||||
  typename WilsonCloverFermionR::ImplParams params;
 | 
					  typename WilsonCloverFermionD::ImplParams params;
 | 
				
			||||||
  WilsonAnisotropyCoefficients anis;
 | 
					  WilsonAnisotropyCoefficients anis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FermionField src(&Grid); random(pRNG,src);
 | 
					  FermionField src(&Grid); random(pRNG,src);
 | 
				
			||||||
@@ -61,9 +61,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass  = 0.5;
 | 
					  RealD mass  = 0.5;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
					  WilsonCloverFermionD Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR,FermionField> HermOp(Dwc);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD,FermionField> HermOp(Dwc);
 | 
				
			||||||
  CommunicationAvoidingGeneralisedMinimalResidual<FermionField> CAGMRES(1.0e-8, 10000, 25);
 | 
					  CommunicationAvoidingGeneralisedMinimalResidual<FermionField> CAGMRES(1.0e-8, 10000, 25);
 | 
				
			||||||
  CAGMRES(HermOp,src,result);
 | 
					  CAGMRES(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,10 +72,10 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  RealD cF = 1.0;
 | 
					  RealD cF = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonCloverFermionD Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
  CompactWilsonCloverFermionR Dw_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
					  CompactWilsonCloverFermionD Dw_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
				
			||||||
  WilsonExpCloverFermionR Dwe(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonExpCloverFermionD Dwe(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
  CompactWilsonExpCloverFermionR Dwe_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
					  CompactWilsonExpCloverFermionD Dwe_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //  HermitianOperator<WilsonFermion,LatticeFermion> HermOp(Dw);
 | 
					  //  HermitianOperator<WilsonFermion,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
@@ -89,22 +89,22 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Wilson Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Wilson Clover" << std::endl;
 | 
				
			||||||
  SchurDiagMooeeOperator<WilsonCloverFermionR,LatticeFermion> HermOpEO(Dw);
 | 
					  SchurDiagMooeeOperator<WilsonCloverFermionD,LatticeFermion> HermOpEO(Dw);
 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  CG(HermOpEO,src_o,result_o);
 | 
					  CG(HermOpEO,src_o,result_o);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Compact Wilson Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Compact Wilson Clover" << std::endl;
 | 
				
			||||||
  SchurDiagMooeeOperator<CompactWilsonCloverFermionR,LatticeFermion> HermOpEO_compact(Dw_compact);
 | 
					  SchurDiagMooeeOperator<CompactWilsonCloverFermionD,LatticeFermion> HermOpEO_compact(Dw_compact);
 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  CG(HermOpEO_compact,src_o,result_o);
 | 
					  CG(HermOpEO_compact,src_o,result_o);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Wilson Exp Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Wilson Exp Clover" << std::endl;
 | 
				
			||||||
  SchurDiagMooeeOperator<WilsonExpCloverFermionR,LatticeFermion> HermOpEO_exp(Dwe);
 | 
					  SchurDiagMooeeOperator<WilsonExpCloverFermionD,LatticeFermion> HermOpEO_exp(Dwe);
 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  CG(HermOpEO_exp,src_o,result_o);
 | 
					  CG(HermOpEO_exp,src_o,result_o);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Compact Wilson Exp Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Compact Wilson Exp Clover" << std::endl;
 | 
				
			||||||
  SchurDiagMooeeOperator<CompactWilsonExpCloverFermionR,LatticeFermion> HermOpEO_exp_compact(Dwe_compact);
 | 
					  SchurDiagMooeeOperator<CompactWilsonExpCloverFermionD,LatticeFermion> HermOpEO_exp_compact(Dwe_compact);
 | 
				
			||||||
  result_o=Zero();
 | 
					  result_o=Zero();
 | 
				
			||||||
  CG(HermOpEO_exp_compact,src_o,result_o);
 | 
					  CG(HermOpEO_exp_compact,src_o,result_o);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,22 +72,22 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD cF = 1.0;
 | 
					  RealD cF = 1.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Wilson Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Wilson Clover" << std::endl;
 | 
				
			||||||
  WilsonCloverFermionR Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonCloverFermionD Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  SchurSolver(Dw,src,result);
 | 
					  SchurSolver(Dw,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Compact Wilson Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Compact Wilson Clover" << std::endl;
 | 
				
			||||||
  CompactWilsonCloverFermionR Dw_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
					  CompactWilsonCloverFermionD Dw_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  SchurSolver(Dw_compact,src,result);
 | 
					  SchurSolver(Dw_compact,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Wilson Exp Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Wilson Exp Clover" << std::endl;
 | 
				
			||||||
  WilsonExpCloverFermionR Dwe(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonExpCloverFermionD Dwe(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  SchurSolver(Dwe,src,result);
 | 
					  SchurSolver(Dwe,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Compact Wilson Exp Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Compact Wilson Exp Clover" << std::endl;
 | 
				
			||||||
  CompactWilsonExpCloverFermionR Dwe_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
					  CompactWilsonExpCloverFermionD Dwe_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  SchurSolver(Dwe_compact,src,result);
 | 
					  SchurSolver(Dwe_compact,src,result);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,31 +71,31 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  RealD cF = 1.0;
 | 
					  RealD cF = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonCloverFermionD Dw(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
  CompactWilsonCloverFermionR Dw_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
					  CompactWilsonCloverFermionD Dw_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
				
			||||||
  WilsonExpCloverFermionR Dwe(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
					  WilsonExpCloverFermionD Dwe(Umu, Grid, RBGrid, mass, csw_r, csw_t);
 | 
				
			||||||
  CompactWilsonExpCloverFermionR Dwe_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
					  CompactWilsonExpCloverFermionD Dwe_compact(Umu, Grid, RBGrid, mass, csw_r, csw_t, 0.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Wilson Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Wilson Clover" << std::endl;
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR,LatticeFermion> HermOp(Dw);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD,LatticeFermion> HermOp(Dw);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  CG(HermOp,src,result);
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Compact Wilson Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Compact Wilson Clover" << std::endl;
 | 
				
			||||||
  MdagMLinearOperator<CompactWilsonCloverFermionR,LatticeFermion> HermOp_compact(Dw_compact);
 | 
					  MdagMLinearOperator<CompactWilsonCloverFermionD,LatticeFermion> HermOp_compact(Dw_compact);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  CG(HermOp_compact,src,result);
 | 
					  CG(HermOp_compact,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Wilson Exp Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Wilson Exp Clover" << std::endl;
 | 
				
			||||||
  MdagMLinearOperator<WilsonExpCloverFermionR,LatticeFermion> HermOp_exp(Dwe);
 | 
					  MdagMLinearOperator<WilsonExpCloverFermionD,LatticeFermion> HermOp_exp(Dwe);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  CG(HermOp_exp,src,result);
 | 
					  CG(HermOp_exp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Compact Wilson Exp Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Compact Wilson Exp Clover" << std::endl;
 | 
				
			||||||
  MdagMLinearOperator<CompactWilsonExpCloverFermionR,LatticeFermion> HermOp_exp_compact(Dwe_compact);
 | 
					  MdagMLinearOperator<CompactWilsonExpCloverFermionD,LatticeFermion> HermOp_exp_compact(Dwe_compact);
 | 
				
			||||||
  result=Zero();
 | 
					  result=Zero();
 | 
				
			||||||
  CG(HermOp_exp_compact,src,result);
 | 
					  CG(HermOp_exp_compact,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::vector<int> seeds({1,2,3,4});
 | 
					  std::vector<int> seeds({1,2,3,4});
 | 
				
			||||||
  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
					  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef typename WilsonCloverFermionR::FermionField FermionField;
 | 
					  typedef typename WilsonCloverFermionD::FermionField FermionField;
 | 
				
			||||||
  typename WilsonCloverFermionR::ImplParams params;
 | 
					  typename WilsonCloverFermionD::ImplParams params;
 | 
				
			||||||
  WilsonAnisotropyCoefficients anis;
 | 
					  WilsonAnisotropyCoefficients anis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FermionField src(&Grid); random(pRNG,src);
 | 
					  FermionField src(&Grid); random(pRNG,src);
 | 
				
			||||||
@@ -61,9 +61,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass  = 0.5;
 | 
					  RealD mass  = 0.5;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
					  WilsonCloverFermionD Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR,FermionField> HermOp(Dwc);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD,FermionField> HermOp(Dwc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<FermionField> simple;
 | 
					  TrivialPrecon<FermionField> simple;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::vector<int> seeds({1,2,3,4});
 | 
					  std::vector<int> seeds({1,2,3,4});
 | 
				
			||||||
  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
					  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef typename WilsonCloverFermionR::FermionField FermionField;
 | 
					  typedef typename WilsonCloverFermionD::FermionField FermionField;
 | 
				
			||||||
  typename WilsonCloverFermionR::ImplParams params;
 | 
					  typename WilsonCloverFermionD::ImplParams params;
 | 
				
			||||||
  WilsonAnisotropyCoefficients anis;
 | 
					  WilsonAnisotropyCoefficients anis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FermionField src(&Grid); random(pRNG,src);
 | 
					  FermionField src(&Grid); random(pRNG,src);
 | 
				
			||||||
@@ -61,9 +61,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass  = 0.5;
 | 
					  RealD mass  = 0.5;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
					  WilsonCloverFermionD Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR,FermionField> HermOp(Dwc);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD,FermionField> HermOp(Dwc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<FermionField> simple;
 | 
					  TrivialPrecon<FermionField> simple;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::vector<int> seeds({1,2,3,4});
 | 
					  std::vector<int> seeds({1,2,3,4});
 | 
				
			||||||
  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
					  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef typename WilsonCloverFermionR::FermionField FermionField;
 | 
					  typedef typename WilsonCloverFermionD::FermionField FermionField;
 | 
				
			||||||
  typename WilsonCloverFermionR::ImplParams params;
 | 
					  typename WilsonCloverFermionD::ImplParams params;
 | 
				
			||||||
  WilsonAnisotropyCoefficients anis;
 | 
					  WilsonAnisotropyCoefficients anis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FermionField src(&Grid); random(pRNG,src);
 | 
					  FermionField src(&Grid); random(pRNG,src);
 | 
				
			||||||
@@ -61,9 +61,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass  = 0.5;
 | 
					  RealD mass  = 0.5;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
					  WilsonCloverFermionD Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR,FermionField> HermOp(Dwc);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD,FermionField> HermOp(Dwc);
 | 
				
			||||||
  GeneralisedMinimalResidual<FermionField> GMRES(1.0e-8, 10000, 25);
 | 
					  GeneralisedMinimalResidual<FermionField> GMRES(1.0e-8, 10000, 25);
 | 
				
			||||||
  GMRES(HermOp,src,result);
 | 
					  GMRES(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,16 +80,16 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
  // Note: We do chiral doubling, so actually only nbasis/2 full basis vectors are used
 | 
					  // Note: We do chiral doubling, so actually only nbasis/2 full basis vectors are used
 | 
				
			||||||
  const int nbasis = 40;
 | 
					  const int nbasis = 40;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WilsonCloverFermionR Dwc(Umu, *FGrid, *FrbGrid, mass, csw_r, csw_t);
 | 
					  WilsonCloverFermionD Dwc(Umu, *FGrid, *FrbGrid, mass, csw_r, csw_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR, LatticeFermion> MdagMOpDwc(Dwc);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD, LatticeFermion> MdagMOpDwc(Dwc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
					  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "Testing Multigrid for Wilson Clover" << std::endl;
 | 
					  std::cout << GridLogMessage << "Testing Multigrid for Wilson Clover" << std::endl;
 | 
				
			||||||
  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
					  std::cout << GridLogMessage << "**************************************************" << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TrivialPrecon<LatticeFermion> TrivialPrecon;
 | 
					  TrivialPrecon<LatticeFermion> TrivialPrecon;
 | 
				
			||||||
  auto MGPreconDwc = createMGInstance<vSpinColourVector, vTComplex, nbasis, WilsonCloverFermionR>(mgParams, levelInfo, Dwc, Dwc);
 | 
					  auto MGPreconDwc = createMGInstance<vSpinColourVector, vTComplex, nbasis, WilsonCloverFermionD>(mgParams, levelInfo, Dwc, Dwc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MGPreconDwc->setup();
 | 
					  MGPreconDwc->setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,8 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::vector<int> seeds({1,2,3,4});
 | 
					  std::vector<int> seeds({1,2,3,4});
 | 
				
			||||||
  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
					  GridParallelRNG          pRNG(&Grid);  pRNG.SeedFixedIntegers(seeds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  typedef typename WilsonCloverFermionR::FermionField FermionField;
 | 
					  typedef typename WilsonCloverFermionD::FermionField FermionField;
 | 
				
			||||||
  typename WilsonCloverFermionR::ImplParams params;
 | 
					  typename WilsonCloverFermionD::ImplParams params;
 | 
				
			||||||
  WilsonAnisotropyCoefficients anis;
 | 
					  WilsonAnisotropyCoefficients anis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FermionField src(&Grid); random(pRNG,src);
 | 
					  FermionField src(&Grid); random(pRNG,src);
 | 
				
			||||||
@@ -61,9 +61,9 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  RealD mass  = 0.5;
 | 
					  RealD mass  = 0.5;
 | 
				
			||||||
  RealD csw_r = 1.0;
 | 
					  RealD csw_r = 1.0;
 | 
				
			||||||
  RealD csw_t = 1.0;
 | 
					  RealD csw_t = 1.0;
 | 
				
			||||||
  WilsonCloverFermionR Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
					  WilsonCloverFermionD Dwc(Umu,Grid,RBGrid,mass,csw_r,csw_t,anis,params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MdagMLinearOperator<WilsonCloverFermionR,FermionField> HermOp(Dwc);
 | 
					  MdagMLinearOperator<WilsonCloverFermionD,FermionField> HermOp(Dwc);
 | 
				
			||||||
  MinimalResidual<FermionField> MR(1.0e-8,10000,0.8);
 | 
					  MinimalResidual<FermionField> MR(1.0e-8,10000,0.8);
 | 
				
			||||||
  MR(HermOp,src,result);
 | 
					  MR(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,7 +101,7 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
  omegas.push_back( std::complex<double>(0.0686324988446592,-0.0550658530827402) );
 | 
					  omegas.push_back( std::complex<double>(0.0686324988446592,-0.0550658530827402) );
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ZMobiusFermionR Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, omegas,1.,0.);
 | 
					  ZMobiusFermionD Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, omegas,1.,0.);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  LatticeFermion src_o(FrbGrid);
 | 
					  LatticeFermion src_o(FrbGrid);
 | 
				
			||||||
  LatticeFermion result_o(FrbGrid);
 | 
					  LatticeFermion result_o(FrbGrid);
 | 
				
			||||||
@@ -110,7 +110,7 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  GridStopWatch CGTimer;
 | 
					  GridStopWatch CGTimer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SchurDiagMooeeOperator<ZMobiusFermionR, LatticeFermion> HermOpEO(Ddwf);
 | 
					  SchurDiagMooeeOperator<ZMobiusFermionD, LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
  ConjugateGradient<LatticeFermion> CG(1.0e-8, 10000, 0);// switch off the assert
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8, 10000, 0);// switch off the assert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CGTimer.Start();
 | 
					  CGTimer.Start();
 | 
				
			||||||
@@ -121,7 +121,6 @@ int main(int argc, char** argv) {
 | 
				
			|||||||
            << std::endl;
 | 
					            << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::cout << GridLogMessage << "######## Dhop calls summary" << std::endl;
 | 
					  std::cout << GridLogMessage << "######## Dhop calls summary" << std::endl;
 | 
				
			||||||
  Ddwf.Report();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user