mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	CG test written and passes i.e. converges with small true residual
in RedBlack MpcDagMpc, Unprec MdagM and Schur red black solver for each of. DomainWallFermion MobiusFermion MobiusZolotarevFermion ScaledShamirFermion ScaledShamirZolotarevFermion
This commit is contained in:
		@@ -6,24 +6,24 @@ AM_LDFLAGS = -L$(top_builddir)/lib
 | 
				
			|||||||
# Test code
 | 
					# Test code
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
bin_PROGRAMS = \
 | 
					bin_PROGRAMS = \
 | 
				
			||||||
	Grid_comms \
 | 
						Benchmark_comms \
 | 
				
			||||||
	Grid_memory_bandwidth \
 | 
						Benchmark_memory_bandwidth \
 | 
				
			||||||
	Grid_su3 \
 | 
						Benchmark_su3 \
 | 
				
			||||||
	Grid_wilson \
 | 
						Benchmark_wilson \
 | 
				
			||||||
	Grid_dwf
 | 
						Benchmark_dwf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_comms_SOURCES = Grid_comms.cc
 | 
					Benchmark_comms_SOURCES = Benchmark_comms.cc
 | 
				
			||||||
Grid_comms_LDADD = -lGrid
 | 
					Benchmark_comms_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_memory_bandwidth_SOURCES = Grid_memory_bandwidth.cc
 | 
					Benchmark_memory_bandwidth_SOURCES = Benchmark_memory_bandwidth.cc
 | 
				
			||||||
Grid_memory_bandwidth_LDADD = -lGrid
 | 
					Benchmark_memory_bandwidth_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_su3_SOURCES = Grid_su3.cc Grid_su3_test.cc Grid_su3_expr.cc
 | 
					Benchmark_su3_SOURCES = Benchmark_su3.cc Benchmark_su3_test.cc Benchmark_su3_expr.cc
 | 
				
			||||||
Grid_su3_LDADD = -lGrid
 | 
					Benchmark_su3_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_wilson_SOURCES = Grid_wilson.cc
 | 
					Benchmark_wilson_SOURCES = Benchmark_wilson.cc
 | 
				
			||||||
Grid_wilson_LDADD = -lGrid
 | 
					Benchmark_wilson_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_dwf_SOURCES = Grid_dwf.cc
 | 
					Benchmark_dwf_SOURCES = Benchmark_dwf.cc
 | 
				
			||||||
Grid_dwf_LDADD = -lGrid
 | 
					Benchmark_dwf_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,85 +5,88 @@ AM_LDFLAGS = -L$(top_builddir)/lib
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
# Test code
 | 
					# Test code
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
bin_PROGRAMS = Grid_main \
 | 
					bin_PROGRAMS = Test_main \
 | 
				
			||||||
	Grid_simd \
 | 
						Test_simd \
 | 
				
			||||||
	Grid_gamma  \
 | 
						Test_gamma  \
 | 
				
			||||||
	Grid_cshift \
 | 
						Test_cshift \
 | 
				
			||||||
	Grid_cshift_red_black \
 | 
						Test_cshift_red_black \
 | 
				
			||||||
	Grid_stencil \
 | 
						Test_stencil \
 | 
				
			||||||
	Grid_nersc_io \
 | 
						Test_nersc_io \
 | 
				
			||||||
	Grid_rng \
 | 
						Test_rng \
 | 
				
			||||||
	Grid_remez \
 | 
						Test_remez \
 | 
				
			||||||
	Grid_rng_fixed \
 | 
						Test_rng_fixed \
 | 
				
			||||||
	Grid_wilson_evenodd \
 | 
						Test_wilson_evenodd \
 | 
				
			||||||
	Grid_wilson_cg_unprec \
 | 
						Test_wilson_cg_unprec \
 | 
				
			||||||
	Grid_wilson_cg_prec \
 | 
						Test_wilson_cg_prec \
 | 
				
			||||||
	Grid_wilson_cg_schur \
 | 
						Test_wilson_cg_schur \
 | 
				
			||||||
	Grid_dwf_even_odd\
 | 
						Test_dwf_even_odd\
 | 
				
			||||||
	Grid_dwf_cg_unprec\
 | 
						Test_dwf_cg_unprec\
 | 
				
			||||||
	Grid_dwf_cg_prec\
 | 
						Test_dwf_cg_prec\
 | 
				
			||||||
	Grid_dwf_cg_schur\
 | 
						Test_dwf_cg_schur\
 | 
				
			||||||
	Grid_any_evenodd
 | 
						Test_many_evenodd\
 | 
				
			||||||
 | 
						Test_many_cg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_main_SOURCES = Grid_main.cc
 | 
					Test_main_SOURCES = Test_main.cc
 | 
				
			||||||
Grid_main_LDADD = -lGrid
 | 
					Test_main_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_rng_SOURCES = Grid_rng.cc
 | 
					Test_rng_SOURCES = Test_rng.cc
 | 
				
			||||||
Grid_rng_LDADD = -lGrid
 | 
					Test_rng_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_rng_fixed_SOURCES = Grid_rng_fixed.cc
 | 
					Test_rng_fixed_SOURCES = Test_rng_fixed.cc
 | 
				
			||||||
Grid_rng_fixed_LDADD = -lGrid
 | 
					Test_rng_fixed_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_remez_SOURCES = Grid_remez.cc
 | 
					Test_remez_SOURCES = Test_remez.cc
 | 
				
			||||||
Grid_remez_LDADD = -lGrid
 | 
					Test_remez_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_nersc_io_SOURCES = Grid_nersc_io.cc
 | 
					Test_nersc_io_SOURCES = Test_nersc_io.cc
 | 
				
			||||||
Grid_nersc_io_LDADD = -lGrid
 | 
					Test_nersc_io_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_cshift_SOURCES = Grid_cshift.cc
 | 
					Test_cshift_SOURCES = Test_cshift.cc
 | 
				
			||||||
Grid_cshift_LDADD = -lGrid
 | 
					Test_cshift_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_cshift_red_black_SOURCES = Grid_cshift_red_black.cc
 | 
					Test_cshift_red_black_SOURCES = Test_cshift_red_black.cc
 | 
				
			||||||
Grid_cshift_red_black_LDADD = -lGrid
 | 
					Test_cshift_red_black_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_gamma_SOURCES = Grid_gamma.cc
 | 
					Test_gamma_SOURCES = Test_gamma.cc
 | 
				
			||||||
Grid_gamma_LDADD = -lGrid
 | 
					Test_gamma_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_stencil_SOURCES = Grid_stencil.cc
 | 
					Test_stencil_SOURCES = Test_stencil.cc
 | 
				
			||||||
Grid_stencil_LDADD = -lGrid
 | 
					Test_stencil_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_simd_SOURCES = Grid_simd.cc
 | 
					Test_simd_SOURCES = Test_simd.cc
 | 
				
			||||||
Grid_simd_LDADD = -lGrid
 | 
					Test_simd_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#Grid_simd_new_SOURCES = Grid_simd_new.cc
 | 
					#Test_simd_new_SOURCES = Test_simd_new.cc
 | 
				
			||||||
#Grid_simd_new_LDADD = -lGrid
 | 
					#Test_simd_new_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_wilson_evenodd_SOURCES = Grid_wilson_evenodd.cc
 | 
					Test_wilson_evenodd_SOURCES = Test_wilson_evenodd.cc
 | 
				
			||||||
Grid_wilson_evenodd_LDADD = -lGrid
 | 
					Test_wilson_evenodd_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_any_evenodd_SOURCES = Grid_any_evenodd.cc
 | 
					Test_wilson_cg_unprec_SOURCES = Test_wilson_cg_unprec.cc
 | 
				
			||||||
Grid_any_evenodd_LDADD = -lGrid
 | 
					Test_wilson_cg_unprec_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_wilson_cg_unprec_SOURCES = Grid_wilson_cg_unprec.cc
 | 
					Test_wilson_cg_prec_SOURCES = Test_wilson_cg_prec.cc
 | 
				
			||||||
Grid_wilson_cg_unprec_LDADD = -lGrid
 | 
					Test_wilson_cg_prec_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_wilson_cg_prec_SOURCES = Grid_wilson_cg_prec.cc
 | 
					Test_wilson_cg_schur_SOURCES = Test_wilson_cg_schur.cc
 | 
				
			||||||
Grid_wilson_cg_prec_LDADD = -lGrid
 | 
					Test_wilson_cg_schur_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_wilson_cg_schur_SOURCES = Grid_wilson_cg_schur.cc
 | 
					Test_dwf_even_odd_SOURCES = Test_dwf_even_odd.cc
 | 
				
			||||||
Grid_wilson_cg_schur_LDADD = -lGrid
 | 
					Test_dwf_even_odd_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_dwf_even_odd_SOURCES = Grid_dwf_even_odd.cc
 | 
					Test_dwf_cg_unprec_SOURCES = Test_dwf_cg_unprec.cc
 | 
				
			||||||
Grid_dwf_even_odd_LDADD = -lGrid
 | 
					Test_dwf_cg_unprec_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_dwf_cg_unprec_SOURCES = Grid_dwf_cg_unprec.cc
 | 
					Test_dwf_cg_prec_SOURCES = Test_dwf_cg_prec.cc
 | 
				
			||||||
Grid_dwf_cg_unprec_LDADD = -lGrid
 | 
					Test_dwf_cg_prec_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_dwf_cg_prec_SOURCES = Grid_dwf_cg_prec.cc
 | 
					Test_dwf_cg_schur_SOURCES = Test_dwf_cg_schur.cc
 | 
				
			||||||
Grid_dwf_cg_prec_LDADD = -lGrid
 | 
					Test_dwf_cg_schur_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Grid_dwf_cg_schur_SOURCES = Grid_dwf_cg_schur.cc
 | 
					Test_many_evenodd_SOURCES = Test_many_evenodd.cc
 | 
				
			||||||
Grid_dwf_cg_schur_LDADD = -lGrid
 | 
					Test_many_evenodd_LDADD = -lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Test_many_cg_SOURCES = Test_many_cg.cc
 | 
				
			||||||
 | 
					Test_many_cg_LDADD = -lGrid
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										164
									
								
								tests/Test_many_cg.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								tests/Test_many_cg.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
				
			|||||||
 | 
					#include <Grid.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace std;
 | 
				
			||||||
 | 
					using namespace Grid;
 | 
				
			||||||
 | 
					using namespace Grid::QCD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class d>
 | 
				
			||||||
 | 
					struct scal {
 | 
				
			||||||
 | 
					  d internal;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Gamma::GammaMatrix Gmu [] = {
 | 
				
			||||||
 | 
					    Gamma::GammaX,
 | 
				
			||||||
 | 
					    Gamma::GammaY,
 | 
				
			||||||
 | 
					    Gamma::GammaZ,
 | 
				
			||||||
 | 
					    Gamma::GammaT
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGinversions(What & Ddwf, 
 | 
				
			||||||
 | 
							       GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							       GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							       RealD mass, RealD M5,
 | 
				
			||||||
 | 
							       GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							       GridParallelRNG *RNG5);
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGschur(What & Ddwf, 
 | 
				
			||||||
 | 
							  GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							  GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							  RealD mass, RealD M5,
 | 
				
			||||||
 | 
							  GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							  GridParallelRNG *RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGunprec(What & Ddwf, 
 | 
				
			||||||
 | 
							   GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							   GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							   RealD mass, RealD M5,
 | 
				
			||||||
 | 
							   GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							   GridParallelRNG *RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGprec(What & Ddwf, 
 | 
				
			||||||
 | 
							 GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							 GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							 RealD mass, RealD M5,
 | 
				
			||||||
 | 
							 GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							 GridParallelRNG *RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main (int argc, char ** argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  Grid_init(&argc,&argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int threads = GridThread::GetThreads();
 | 
				
			||||||
 | 
					  std::cout << "Grid is setup to use "<<threads<<" threads"<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const int Ls=8;
 | 
				
			||||||
 | 
					  GridCartesian         * UGrid   = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplexF::Nsimd()),GridDefaultMpi());
 | 
				
			||||||
 | 
					  GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
 | 
				
			||||||
 | 
					  GridCartesian         * FGrid   = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
 | 
				
			||||||
 | 
					  GridRedBlackCartesian * FrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGrid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  std::vector<int> seeds4({1,2,3,4});
 | 
				
			||||||
 | 
					  std::vector<int> seeds5({5,6,7,8});
 | 
				
			||||||
 | 
					  GridParallelRNG          RNG5(FGrid);  RNG5.SeedFixedIntegers(seeds5);
 | 
				
			||||||
 | 
					  GridParallelRNG          RNG4(UGrid);  RNG4.SeedFixedIntegers(seeds4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  LatticeGaugeField Umu(UGrid); random(RNG4,Umu);
 | 
				
			||||||
 | 
					  std::vector<LatticeColourMatrix> U(4,UGrid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RealD mass=0.1;
 | 
				
			||||||
 | 
					  RealD M5  =1.8;
 | 
				
			||||||
 | 
					  std::cout <<"DomainWallFermion test"<<std::endl;
 | 
				
			||||||
 | 
					  DomainWallFermion Ddwf(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5);
 | 
				
			||||||
 | 
					  TestCGinversions<DomainWallFermion>(Ddwf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RealD b=1.5;// Scale factor b+c=2, b-c=1
 | 
				
			||||||
 | 
					  RealD c=0.5;
 | 
				
			||||||
 | 
					  std::cout <<"MobiusFermion test"<<std::endl;
 | 
				
			||||||
 | 
					  MobiusFermion Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
				
			||||||
 | 
					  TestCGinversions<MobiusFermion>(Dmob,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  std::cout <<"MobiusZolotarevFermion test"<<std::endl;
 | 
				
			||||||
 | 
					  MobiusZolotarevFermion Dzolo(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,0.1,2.0);
 | 
				
			||||||
 | 
					  TestCGinversions<MobiusZolotarevFermion>(Dzolo,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  std::cout <<"ScaledShamirFermion test"<<std::endl;
 | 
				
			||||||
 | 
					  ScaledShamirFermion Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
				
			||||||
 | 
					  TestCGinversions<ScaledShamirFermion>(Dsham,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  std::cout <<"ScaledShamirZolotarevFermion test"<<std::endl;
 | 
				
			||||||
 | 
					  ScaledShamirZolotarevFermion Dshamz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0,0.1,2.0);
 | 
				
			||||||
 | 
					  TestCGinversions<ScaledShamirZolotarevFermion>(Dshamz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Grid_finalize();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGinversions(What & Ddwf, 
 | 
				
			||||||
 | 
							       GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							       GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							       RealD mass, RealD M5,
 | 
				
			||||||
 | 
							       GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							       GridParallelRNG *RNG5)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  std::cout << "Testing unpreconditioned inverter"<<std::endl;
 | 
				
			||||||
 | 
					  TestCGunprec<What>(Ddwf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,RNG4,RNG5);
 | 
				
			||||||
 | 
					  std::cout << "Testing red black preconditioned inverter"<<std::endl;
 | 
				
			||||||
 | 
					  TestCGprec<What>(Ddwf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,RNG4,RNG5);
 | 
				
			||||||
 | 
					  std::cout << "Testing red black Schur inverter"<<std::endl;
 | 
				
			||||||
 | 
					  TestCGschur<What>(Ddwf,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,RNG4,RNG5);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGunprec(What & Ddwf, 
 | 
				
			||||||
 | 
							   GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							   GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							   RealD mass, RealD M5,
 | 
				
			||||||
 | 
							   GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							   GridParallelRNG *RNG5)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  LatticeFermion src   (FGrid); random(*RNG5,src);
 | 
				
			||||||
 | 
					  LatticeFermion result(FGrid); result=zero;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  HermitianOperator<What,LatticeFermion> HermOp(Ddwf);
 | 
				
			||||||
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
 | 
					  CG(HermOp,src,result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGprec(What & Ddwf, 
 | 
				
			||||||
 | 
							 GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							 GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							 RealD mass, RealD M5,
 | 
				
			||||||
 | 
							 GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							 GridParallelRNG *RNG5)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  LatticeFermion src   (FGrid); random(*RNG5,src);
 | 
				
			||||||
 | 
					  LatticeFermion    src_o(FrbGrid);
 | 
				
			||||||
 | 
					  LatticeFermion result_o(FrbGrid);
 | 
				
			||||||
 | 
					  pickCheckerboard(Odd,src_o,src);
 | 
				
			||||||
 | 
					  result_o=zero;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  HermitianCheckerBoardedOperator<What,LatticeFermion> HermOpEO(Ddwf);
 | 
				
			||||||
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
 | 
					  CG(HermOpEO,src_o,result_o);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<class What> 
 | 
				
			||||||
 | 
					void  TestCGschur(What & Ddwf, 
 | 
				
			||||||
 | 
							   GridCartesian         * FGrid,	       GridRedBlackCartesian * FrbGrid,
 | 
				
			||||||
 | 
							   GridCartesian         * UGrid,	       GridRedBlackCartesian * UrbGrid,
 | 
				
			||||||
 | 
							   RealD mass, RealD M5,
 | 
				
			||||||
 | 
							   GridParallelRNG *RNG4,
 | 
				
			||||||
 | 
							   GridParallelRNG *RNG5)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  LatticeFermion src   (FGrid); random(*RNG5,src);
 | 
				
			||||||
 | 
					  LatticeFermion result(FGrid); result=zero;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ConjugateGradient<LatticeFermion> CG(1.0e-8,10000);
 | 
				
			||||||
 | 
					  SchurRedBlackSolve<LatticeFermion> SchurSolver(CG);
 | 
				
			||||||
 | 
					  SchurSolver(Ddwf,src,result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user