mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-09 23:45:36 +00:00
Added TM fermions for DSDR etc..
This commit is contained in:
parent
34a0fde2ad
commit
67ccb043f1
@ -292,6 +292,7 @@ PARALLEL_FOR_LOOP
|
|||||||
|
|
||||||
FermOpTemplateInstantiate(WilsonFermion);
|
FermOpTemplateInstantiate(WilsonFermion);
|
||||||
|
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,10 +42,12 @@ namespace Grid {
|
|||||||
/////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////
|
||||||
void Meooe(const FermionField &in, FermionField &out) ;
|
void Meooe(const FermionField &in, FermionField &out) ;
|
||||||
void MeooeDag(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) ;
|
// allow override for twisted mass and clover
|
||||||
void MooeeInv(const FermionField &in, FermionField &out) ;
|
virtual void Mooee(const FermionField &in, FermionField &out) ;
|
||||||
void MooeeInvDag(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
|
// 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
|
@ -9,6 +9,25 @@ namespace QCD{
|
|||||||
//These routines support five-D chiral fermions and contain s-subslice indexing
|
//These routines support five-D chiral fermions and contain s-subslice indexing
|
||||||
//on the 5d (rb4d) checkerboarded lattices
|
//on the 5d (rb4d) checkerboarded lattices
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class vobj>
|
||||||
|
void axibg5x(Lattice<vobj> &z,const Lattice<vobj> &x,RealD a,RealD b)
|
||||||
|
{
|
||||||
|
z.checkerboard = x.checkerboard;
|
||||||
|
conformable(x,z);
|
||||||
|
|
||||||
|
GridBase *grid=x._grid;
|
||||||
|
|
||||||
|
Gamma G5(Gamma::Gamma5);
|
||||||
|
PARALLEL_FOR_LOOP
|
||||||
|
for(int ss=0;ss<grid->oSites();ss++){
|
||||||
|
vobj tmp;
|
||||||
|
tmp = a*x._odata[ss];
|
||||||
|
tmp = tmp + G5*(b*timesI(x._odata[ss]));
|
||||||
|
vstream(z._odata[ss],tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template<class vobj>
|
template<class vobj>
|
||||||
void axpby_ssp(Lattice<vobj> &z, RealD a,const Lattice<vobj> &x,RealD b,const Lattice<vobj> &y,int s,int sp)
|
void axpby_ssp(Lattice<vobj> &z, RealD a,const Lattice<vobj> &x,RealD b,const Lattice<vobj> &y,int s,int sp)
|
||||||
{
|
{
|
||||||
|
@ -24,7 +24,7 @@ echo "Acceptance $PACC % $ACC / $TRAJ "
|
|||||||
|
|
||||||
grep Plaq $LOG | awk '{ print $10 }' | uniq > plaq.dat
|
grep Plaq $LOG | awk '{ print $10 }' | uniq > plaq.dat
|
||||||
grep dH $LOG | awk '{ print $10 }' > dH.dat
|
grep dH $LOG | awk '{ print $10 }' > dH.dat
|
||||||
echo set yrange [-0.1:0.6] > plot.gnu
|
echo set yrange [-0.2:1.0] > plot.gnu
|
||||||
echo set terminal 'pdf' >> plot.gnu
|
echo set terminal 'pdf' >> plot.gnu
|
||||||
echo "set output 'plaq.${LOG}.pdf'" >> plot.gnu
|
echo "set output 'plaq.${LOG}.pdf'" >> plot.gnu
|
||||||
echo "plot 'plaq.dat' w l, 'dH.dat' w l " >> plot.gnu
|
echo "plot 'plaq.dat' w l, 'dH.dat' w l " >> plot.gnu
|
||||||
|
@ -35,7 +35,7 @@ int main (int argc, char ** argv)
|
|||||||
#ifdef AVX512
|
#ifdef AVX512
|
||||||
for(int omp=128;omp<236;omp+=16){
|
for(int omp=128;omp<236;omp+=16){
|
||||||
#else
|
#else
|
||||||
for(int omp=1;omp<8;omp*=20){
|
for(int omp=1;omp<2;omp*=20){
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OMP
|
#ifdef OMP
|
||||||
@ -43,6 +43,9 @@ int main (int argc, char ** argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
for(int lat=8;lat<=16;lat+=40){
|
for(int lat=8;lat<=16;lat+=40){
|
||||||
|
|
||||||
|
std::cout << "Lat "<<lat<<std::endl;
|
||||||
|
|
||||||
latt_size[0] = lat;
|
latt_size[0] = lat;
|
||||||
latt_size[1] = lat;
|
latt_size[1] = lat;
|
||||||
latt_size[2] = lat;
|
latt_size[2] = lat;
|
||||||
@ -53,8 +56,19 @@ int main (int argc, char ** argv)
|
|||||||
GridRedBlackCartesian rbFine(latt_size,simd_layout,mpi_layout);
|
GridRedBlackCartesian rbFine(latt_size,simd_layout,mpi_layout);
|
||||||
GridParallelRNG FineRNG(&Fine);
|
GridParallelRNG FineRNG(&Fine);
|
||||||
GridSerialRNG SerialRNG;
|
GridSerialRNG SerialRNG;
|
||||||
|
|
||||||
FineRNG.SeedRandomDevice();
|
FineRNG.SeedRandomDevice();
|
||||||
|
|
||||||
|
std::cout <<"SerialRNG" << SerialRNG._generators[0] <<std::endl;
|
||||||
|
std::stringstream output(std::stringstream::out|std::stringstream::binary);
|
||||||
|
output <<SerialRNG._generators[0]<<std::endl;
|
||||||
|
std::cout << output.str();
|
||||||
|
|
||||||
|
{
|
||||||
|
std::ofstream of("rngstate",std::ios::out|std::ios::binary);
|
||||||
|
of << SerialRNG._generators[0];
|
||||||
|
}
|
||||||
|
|
||||||
LatticeColourMatrix Foo(&Fine);
|
LatticeColourMatrix Foo(&Fine);
|
||||||
LatticeColourMatrix Bar(&Fine);
|
LatticeColourMatrix Bar(&Fine);
|
||||||
|
|
||||||
@ -302,7 +316,6 @@ int main (int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FooBar = Bar;
|
FooBar = Bar;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
{
|
{
|
||||||
std::vector<int> coor(4);
|
std::vector<int> coor(4);
|
||||||
@ -315,6 +328,7 @@ int main (int argc, char ** argv)
|
|||||||
*/
|
*/
|
||||||
lex_sites(Foo);
|
lex_sites(Foo);
|
||||||
|
|
||||||
|
|
||||||
Integer mm[4];
|
Integer mm[4];
|
||||||
mm[0]=1;
|
mm[0]=1;
|
||||||
mm[1]=Fine._rdimensions[0];
|
mm[1]=Fine._rdimensions[0];
|
||||||
@ -330,8 +344,12 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Bar = zero;
|
|
||||||
Bar = where(lex<Integer(10),Foo,Bar);
|
|
||||||
|
// Bar = zero;
|
||||||
|
// Bar = where(lex<Integer(10),Foo,Bar);
|
||||||
|
|
||||||
|
|
||||||
cout << "peeking sites..\n";
|
cout << "peeking sites..\n";
|
||||||
{
|
{
|
||||||
std::vector<int> coor(4);
|
std::vector<int> coor(4);
|
||||||
|
Loading…
Reference in New Issue
Block a user