mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Added TM fermions for DSDR etc..
This commit is contained in:
		@@ -292,6 +292,7 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
 
 | 
			
		||||
  FermOpTemplateInstantiate(WilsonFermion);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,10 +42,12 @@ namespace Grid {
 | 
			
		||||
      /////////////////////////////////////////////////////////
 | 
			
		||||
      void Meooe(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      void MeooeDag(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      void Mooee(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      void MooeeDag(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      void MooeeInv(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      void MooeeInvDag(const FermionField &in, FermionField &out) ;
 | 
			
		||||
 | 
			
		||||
      // allow override for twisted mass and clover
 | 
			
		||||
      virtual void Mooee(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      virtual void MooeeDag(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      virtual void MooeeInv(const FermionField &in, FermionField &out) ;
 | 
			
		||||
      virtual void MooeeInvDag(const FermionField &in, FermionField &out) ;
 | 
			
		||||
 | 
			
		||||
      ////////////////////////
 | 
			
		||||
      // Derivative interface
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								lib/qcd/action/fermion/WilsonTMFermion.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								lib/qcd/action/fermion/WilsonTMFermion.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
#include <Grid.h>
 | 
			
		||||
 | 
			
		||||
namespace Grid {
 | 
			
		||||
namespace QCD {
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * BF sequence
 | 
			
		||||
     *
 | 
			
		||||
      void bfmbase<Float>::MooeeInv(Fermion_t psi, 
 | 
			
		||||
			       Fermion_t chi, 
 | 
			
		||||
			      int dag, int cb)
 | 
			
		||||
 | 
			
		||||
    double m    = this->mass;
 | 
			
		||||
    double tm   = this->twistedmass;
 | 
			
		||||
    double mtil = 4.0+this->mass;
 | 
			
		||||
 | 
			
		||||
    double sq = mtil*mtil + tm*tm;
 | 
			
		||||
 | 
			
		||||
    double a = mtil/sq;
 | 
			
		||||
    double b = -tm /sq;
 | 
			
		||||
    if(dag) b=-b;
 | 
			
		||||
    axpibg5x(chi,psi,a,b);
 | 
			
		||||
 | 
			
		||||
      void bfmbase<Float>::Mooee(Fermion_t psi, 
 | 
			
		||||
			   Fermion_t chi, 
 | 
			
		||||
			   int dag,int cb)
 | 
			
		||||
    double a = 4.0+this->mass;
 | 
			
		||||
    double b = this->twistedmass;
 | 
			
		||||
    if(dag) b=-b;
 | 
			
		||||
    axpibg5x(chi,psi,a,b);
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
  void WilsonTMFermion<Impl>::Mooee(const FermionField &in, FermionField &out) {
 | 
			
		||||
    RealD a = 4.0+this->mass;
 | 
			
		||||
    RealD b = this->mu;
 | 
			
		||||
    out.checkerboard = in.checkerboard;
 | 
			
		||||
    axpibg5x(out,in,a,b);
 | 
			
		||||
  }
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
  void WilsonTMFermion<Impl>::MooeeDag(const FermionField &in, FermionField &out) {
 | 
			
		||||
    RealD a = 4.0+this->mass;
 | 
			
		||||
    RealD b = -this->mu;
 | 
			
		||||
    out.checkerboard = in.checkerboard;
 | 
			
		||||
    axpibg5x(out,in,a,b);
 | 
			
		||||
  }
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
  void WilsonTMFermion<Impl>::MooeeInv(const FermionField &in, FermionField &out) {
 | 
			
		||||
    RealD m    = this->mass;
 | 
			
		||||
    RealD tm   = this->mu;
 | 
			
		||||
    RealD mtil = 4.0+this->mass;
 | 
			
		||||
    RealD sq   = mtil*mtil+tm*tm;
 | 
			
		||||
    RealD a    = mtil/sq;
 | 
			
		||||
    RealD b    = -tm /sq;
 | 
			
		||||
    axpibg5x(out,in,a,b);
 | 
			
		||||
  }
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
  void WilsonTMFermion<Impl>::MooeeInvDag(const FermionField &in, FermionField &out) {
 | 
			
		||||
    RealD m    = this->mass;
 | 
			
		||||
    RealD tm   = this->mu;
 | 
			
		||||
    RealD mtil = 4.0+this->mass;
 | 
			
		||||
    RealD sq   = mtil*mtil+tm*tm;
 | 
			
		||||
    RealD a    = mtil/sq;
 | 
			
		||||
    RealD b    = tm /sq;
 | 
			
		||||
    axpibg5x(out,in,a,b);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  FermOpTemplateInstantiate(WilsonTMFermion);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								lib/qcd/action/fermion/WilsonTMFermion.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								lib/qcd/action/fermion/WilsonTMFermion.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
#ifndef  GRID_QCD_WILSON_TM_FERMION_H
 | 
			
		||||
#define  GRID_QCD_WILSON_TM_FERMION_H
 | 
			
		||||
 | 
			
		||||
#include <Grid.h>
 | 
			
		||||
 | 
			
		||||
namespace Grid {
 | 
			
		||||
 | 
			
		||||
  namespace QCD {
 | 
			
		||||
 | 
			
		||||
    template<class Impl>
 | 
			
		||||
    class WilsonTMFermion : public WilsonFermion<Impl>
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
     INHERIT_IMPL_TYPES(Impl);
 | 
			
		||||
    public:
 | 
			
		||||
     RealD mu; // TwistedMass parameter
 | 
			
		||||
 | 
			
		||||
      virtual void   Instantiatable(void) {};
 | 
			
		||||
      // Constructors
 | 
			
		||||
      WilsonTMFermion(GaugeField &_Umu,
 | 
			
		||||
		    GridCartesian         &Fgrid,
 | 
			
		||||
		    GridRedBlackCartesian &Hgrid, 
 | 
			
		||||
		    RealD _mass,
 | 
			
		||||
		    RealD _mu,
 | 
			
		||||
		    const ImplParams &p= ImplParams()
 | 
			
		||||
		      ) :
 | 
			
		||||
	WilsonFermion<Impl>(_Umu,
 | 
			
		||||
			    Fgrid,
 | 
			
		||||
			    Hgrid,
 | 
			
		||||
			    _mass,p)
 | 
			
		||||
 | 
			
		||||
      {
 | 
			
		||||
	mu = _mu;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
    // allow override for twisted mass and clover
 | 
			
		||||
    virtual void Mooee(const FermionField &in, FermionField &out) ;
 | 
			
		||||
    virtual void MooeeDag(const FermionField &in, FermionField &out) ;
 | 
			
		||||
    virtual void MooeeInv(const FermionField &in, FermionField &out) ;
 | 
			
		||||
    virtual void MooeeInvDag(const FermionField &in, FermionField &out) ;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		Reference in New Issue
	
	Block a user