mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Scaled Shamir and Scaled Shamir Zolotarev aliases for special cases of Mobius.
This commit is contained in:
		@@ -41,7 +41,8 @@
 | 
				
			|||||||
#include <qcd/action/fermion/DomainWallFermion.h>
 | 
					#include <qcd/action/fermion/DomainWallFermion.h>
 | 
				
			||||||
#include <qcd/action/fermion/MobiusFermion.h>
 | 
					#include <qcd/action/fermion/MobiusFermion.h>
 | 
				
			||||||
#include <qcd/action/fermion/MobiusZolotarevFermion.h>
 | 
					#include <qcd/action/fermion/MobiusZolotarevFermion.h>
 | 
				
			||||||
//#include <qcd/action/fermion/ScaledShamirCayleyTanh.h>
 | 
					#include <qcd/action/fermion/ScaledShamirFermion.h>
 | 
				
			||||||
 | 
					#include <qcd/action/fermion/ScaledShamirZolotarevFermion.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Chroma interface defining FermionAction
 | 
					    // Chroma interface defining FermionAction
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,51 +0,0 @@
 | 
				
			|||||||
#ifndef  GRID_QCD_DOMAIN_WALL_FERMION_H
 | 
					 | 
				
			||||||
#define  GRID_QCD_DOMAIN_WALL_FERMION_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <Grid.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Grid {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  namespace QCD {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    class ScaledShamirFermion : public CayleyFermion5D
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
    public:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // Constructors
 | 
					 | 
				
			||||||
      ScaledShamirFermion(LatticeGaugeField &_Umu,
 | 
					 | 
				
			||||||
			  GridCartesian         &FiveDimGrid,
 | 
					 | 
				
			||||||
			  GridRedBlackCartesian &FiveDimRedBlackGrid,
 | 
					 | 
				
			||||||
			  GridCartesian         &FourDimGrid,
 | 
					 | 
				
			||||||
			  GridRedBlackCartesian &FourDimRedBlackGrid,
 | 
					 | 
				
			||||||
			  RealD _mass,RealD _M5, RealD scale) : 
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      CayleyFermion5D(_Umu,
 | 
					 | 
				
			||||||
		      FiveDimGrid,
 | 
					 | 
				
			||||||
		      FiveDimRedBlackGrid,
 | 
					 | 
				
			||||||
		      FourDimGrid,
 | 
					 | 
				
			||||||
		      FourDimRedBlackGrid,_mass,_M5,
 | 
					 | 
				
			||||||
		      RealD b, 
 | 
					 | 
				
			||||||
		      RealD c)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
	RealD eps = 1.0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	Approx::zolotarev_data *zdata = Approx::grid_higham(eps,this->Ls);// eps is ignored for higham
 | 
					 | 
				
			||||||
	assert(zdata->n==this->Ls);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	//b+c = scale;
 | 
					 | 
				
			||||||
	//b-c = 1
 | 
					 | 
				
			||||||
	//b   = 0.5(scale+1);
 | 
					 | 
				
			||||||
	//c   = 0.5(scale-1);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// Call base setter
 | 
					 | 
				
			||||||
	this->CayleyFermion5D::SetCoefficients(1.0,zdata,0.5*(scale+1.0),0.5*(scale-1.0));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
							
								
								
									
										37
									
								
								lib/qcd/action/fermion/ScaledShamirFermion.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								lib/qcd/action/fermion/ScaledShamirFermion.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					#ifndef  GRID_QCD_SCALED_SHAMIR_FERMION_H
 | 
				
			||||||
 | 
					#define  GRID_QCD_SCALED_SHAMIR_FERMION_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Grid.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Grid {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace QCD {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class ScaledShamirFermion : public MobiusFermion
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Constructors
 | 
				
			||||||
 | 
					    ScaledShamirFermion(LatticeGaugeField &_Umu,
 | 
				
			||||||
 | 
								GridCartesian         &FiveDimGrid,
 | 
				
			||||||
 | 
								GridRedBlackCartesian &FiveDimRedBlackGrid,
 | 
				
			||||||
 | 
								GridCartesian         &FourDimGrid,
 | 
				
			||||||
 | 
								GridRedBlackCartesian &FourDimRedBlackGrid,
 | 
				
			||||||
 | 
								RealD _mass,RealD _M5,
 | 
				
			||||||
 | 
								RealD scale) :
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      // b+c=scale, b-c = 1 <=> 2b = scale+1; 2c = scale-1
 | 
				
			||||||
 | 
					      MobiusFermion(_Umu,
 | 
				
			||||||
 | 
							    FiveDimGrid,
 | 
				
			||||||
 | 
							    FiveDimRedBlackGrid,
 | 
				
			||||||
 | 
							    FourDimGrid,
 | 
				
			||||||
 | 
							    FourDimRedBlackGrid,_mass,_M5,0.5*(scale+1.0),0.5*(scale-1.0))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										39
									
								
								lib/qcd/action/fermion/ScaledShamirZolotarevFermion.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								lib/qcd/action/fermion/ScaledShamirZolotarevFermion.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					#ifndef  GRID_QCD_SCALED_SHAMIR_ZOLOTAREV_FERMION_H
 | 
				
			||||||
 | 
					#define  GRID_QCD_SCALED_SHAMIR_ZOLOTAREV_FERMION_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Grid.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Grid {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  namespace QCD {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class ScaledShamirZolotarevFermion : public MobiusZolotarevFermion
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Constructors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ScaledShamirZolotarevFermion(LatticeGaugeField &_Umu,
 | 
				
			||||||
 | 
									 GridCartesian         &FiveDimGrid,
 | 
				
			||||||
 | 
									 GridRedBlackCartesian &FiveDimRedBlackGrid,
 | 
				
			||||||
 | 
									 GridCartesian         &FourDimGrid,
 | 
				
			||||||
 | 
									 GridRedBlackCartesian &FourDimRedBlackGrid,
 | 
				
			||||||
 | 
									 RealD _mass,RealD _M5,
 | 
				
			||||||
 | 
									 RealD scale,
 | 
				
			||||||
 | 
									 RealD lo, RealD hi) : 
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      MobiusZolotarevFermion(_Umu,
 | 
				
			||||||
 | 
								       FiveDimGrid,
 | 
				
			||||||
 | 
								       FiveDimRedBlackGrid,
 | 
				
			||||||
 | 
								       FourDimGrid,
 | 
				
			||||||
 | 
								       FourDimRedBlackGrid,_mass,_M5,0.5*(scale+1.0),0.5*(scale-1.0),lo,hi)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -56,9 +56,15 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  MobiusFermion Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
					  MobiusFermion Dmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c);
 | 
				
			||||||
  TestWhat<MobiusFermion>(Dmob,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<MobiusFermion>(Dmob,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MobiusZolotarevFermion Dzolo(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,0.1,4.0);
 | 
					  MobiusZolotarevFermion Dzolo(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,b,c,0.1,2.0);
 | 
				
			||||||
  TestWhat<MobiusZolotarevFermion>(Dzolo,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
					  TestWhat<MobiusZolotarevFermion>(Dzolo,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ScaledShamirFermion Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
 | 
				
			||||||
 | 
					  TestWhat<ScaledShamirFermion>(Dsham,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ScaledShamirZolotarevFermion Dshamz(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0,0.1,2.0);
 | 
				
			||||||
 | 
					  TestWhat<ScaledShamirZolotarevFermion>(Dshamz,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Grid_finalize();
 | 
					  Grid_finalize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user