Grid 0.7.0
WilsonFermion5D.h
Go to the documentation of this file.
1/*************************************************************************************
2
3 Grid physics library, www.github.com/paboyle/Grid
4
5 Source file: ./lib/qcd/action/fermion/WilsonFermion5D.h
6
7 Copyright (C) 2015
8
9Author: Peter Boyle <pabobyle@ph.ed.ac.uk>
10Author: Peter Boyle <paboyle@ph.ed.ac.uk>
11Author: paboyle <paboyle@ph.ed.ac.uk>
12
13 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 2 of the License, or
16 (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
22
23 You should have received a copy of the GNU General Public License along
24 with this program; if not, write to the Free Software Foundation, Inc.,
25 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26
27 See the full license in the file "LICENSE" in the top level distribution directory
28*************************************************************************************/
29/* END LEGAL */
30#ifndef GRID_QCD_WILSON_FERMION_5D_H
31#define GRID_QCD_WILSON_FERMION_5D_H
32
33#include <Grid/perfmon/Stat.h>
34
36
38// This is the 4d red black case appropriate to support
39//
40// parity = (x+y+z+t)|2;
41// generalised five dim fermions like mobius, zolotarev etc..
42//
43// i.e. even even contains fifth dim hopping term.
44//
45// [DIFFERS from original CPS red black implementation parity = (x+y+z+t+s)|2 ]
47
49// This is the 4d red black case appropriate to support
50//
51// parity = (x+y+z+t)|2;
52// generalised five dim fermions like mobius, zolotarev etc..
53//
54// i.e. even even contains fifth dim hopping term.
55//
56// [DIFFERS from original CPS red black implementation parity = (x+y+z+t+s)|2 ]
58
60public:
61 // S-direction is INNERMOST and takes no part in the parity.
62 static const std::vector<int> directions;
63 static const std::vector<int> displacements;
64 static constexpr int npoint = 8;
65};
66
67template<class Impl>
69{
70public:
74
75 FermionField _tmp;
76 FermionField &tmp(void) { return _tmp; }
77
80
82 // Implement the abstract base
84 GridBase *GaugeGrid(void) { return _FourDimGrid ;}
88
89 // full checkerboard operations; leave unimplemented as abstract for now
90 virtual void M (const FermionField &in, FermionField &out){assert(0);};
91 virtual void Mdag (const FermionField &in, FermionField &out){assert(0);};
92
93 // half checkerboard operations; leave unimplemented as abstract for now
94 virtual void Meooe (const FermionField &in, FermionField &out);
95 virtual void Mooee (const FermionField &in, FermionField &out);
96 virtual void MooeeInv (const FermionField &in, FermionField &out);
97
98 virtual void MeooeDag (const FermionField &in, FermionField &out);
99 virtual void MooeeDag (const FermionField &in, FermionField &out);
100 virtual void MooeeInvDag (const FermionField &in, FermionField &out);
101 virtual void Mdir (const FermionField &in, FermionField &out,int dir,int disp){assert(0);}; // case by case Wilson, Clover, Cayley, ContFrac, PartFrac
102 virtual void MdirAll(const FermionField &in, std::vector<FermionField> &out){assert(0);}; // case by case Wilson, Clover, Cayley, ContFrac, PartFrac
103
104 // These can be overridden by fancy 5d chiral action
105 virtual void DhopDeriv (GaugeField &mat,const FermionField &U,const FermionField &V,int dag);
106 virtual void DhopDerivEO(GaugeField &mat,const FermionField &U,const FermionField &V,int dag);
107 virtual void DhopDerivOE(GaugeField &mat,const FermionField &U,const FermionField &V,int dag);
108
109 void MomentumSpacePropagatorHt_5d(FermionField &out,const FermionField &in,RealD mass,std::vector<double> twist) ;
110 void MomentumSpacePropagatorHt(FermionField &out,const FermionField &in,RealD mass,std::vector<double> twist) ;
111 void MomentumSpacePropagatorHw(FermionField &out,const FermionField &in,RealD mass,std::vector<double> twist) ;
112 void MomentumSpacePropagatorHwQ(FermionField &out,const FermionField &in,RealD mass,std::vector<double> twist,
113 std::vector<double> qmu) ;
114
115 // Implement hopping term non-hermitian hopping term; half cb or both
116 // Implement s-diagonal DW
117 void DW (const FermionField &in, FermionField &out,int dag);
118 void Dhop (const FermionField &in, FermionField &out,int dag);
119 void DhopOE(const FermionField &in, FermionField &out,int dag);
120 void DhopEO(const FermionField &in, FermionField &out,int dag);
121
122 void DhopComms (const FermionField &in, FermionField &out);
123 void DhopCalc (const FermionField &in, FermionField &out,uint64_t *ids);
124
125 // add a DhopComm
126 // -- suboptimal interface will presently trigger multiple comms.
127 void DhopDir(const FermionField &in, FermionField &out,int dir,int disp);
128 void DhopDirAll(const FermionField &in,std::vector<FermionField> &out);
129 void DhopDirComms(const FermionField &in);
130 void DhopDirCalc(const FermionField &in, FermionField &out,int point);
131
133 // New methods added
135 void DerivInternal(StencilImpl & st,
136 DoubledGaugeField & U,
137 GaugeField &mat,
138 const FermionField &A,
139 const FermionField &B,
140 int dag);
141
142 void DhopInternal(StencilImpl & st,
143 DoubledGaugeField &U,
144 const FermionField &in,
145 FermionField &out,
146 int dag);
147
148 void DhopInternalOverlappedComms(StencilImpl & st,
149 DoubledGaugeField &U,
150 const FermionField &in,
151 FermionField &out,
152 int dag);
153
154 void DhopInternalSerialComms(StencilImpl & st,
155 DoubledGaugeField &U,
156 const FermionField &in,
157 FermionField &out,
158 int dag);
159
160 // Constructors
161 WilsonFermion5D(GaugeField &_Umu,
162 GridCartesian &FiveDimGrid,
163 GridRedBlackCartesian &FiveDimRedBlackGrid,
164 GridCartesian &FourDimGrid,
165 GridRedBlackCartesian &FourDimRedBlackGrid,
166 double _M5,const ImplParams &p= ImplParams());
167
168 virtual void DirichletBlock(const Coordinate & block)
169 {
170 }
171 // Constructors
172 /*
173 WilsonFermion5D(int simd,
174 GaugeField &_Umu,
175 GridCartesian &FiveDimGrid,
176 GridRedBlackCartesian &FiveDimRedBlackGrid,
177 GridCartesian &FourDimGrid,
178 double _M5,const ImplParams &p= ImplParams());
179 */
180
181 // DoubleStore
182 void ImportGauge(const GaugeField &_Umu);
183
185 // Data members require to support the functionality
187public:
188
189 // Add these to the support from Wilson
194
195 double M5;
196 int Ls;
197
198 //Defines the stencils for even and odd
199 StencilImpl Stencil;
200 StencilImpl StencilEven;
201 StencilImpl StencilOdd;
202
203 // Copy of the gauge field , with even and odd subsets
204 DoubledGaugeField Umu;
205 DoubledGaugeField UmuEven;
206 DoubledGaugeField UmuOdd;
207
208
209 void SloppyComms(int sloppy)
210 {
211 Stencil.SetSloppyComms(sloppy);
212 StencilEven.SetSloppyComms(sloppy);
213 StencilOdd.SetSloppyComms(sloppy);
214 }
215 // Comms buffer
216 // std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> > comm_buf;
217
218
219};
220
222
223#endif
AcceleratorVector< int, MaxDims > Coordinate
Definition Coordinate.h:95
B
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
double RealD
Definition Simd.h:61
static INTERNAL_PRECISION U
Definition Zolotarev.cc:230
Definition Stat.h:46
static const std::vector< int > displacements
static constexpr int npoint
static const std::vector< int > directions
void DhopDirCalc(const FermionField &in, FermionField &out, int point)
void ImportGauge(const GaugeField &_Umu)
StencilImpl StencilOdd
virtual void M(const FermionField &in, FermionField &out)
void DhopInternalOverlappedComms(StencilImpl &st, DoubledGaugeField &U, const FermionField &in, FermionField &out, int dag)
DoubledGaugeField UmuOdd
virtual void MooeeInvDag(const FermionField &in, FermionField &out)
GridBase * GaugeGrid(void)
GridBase * _FiveDimGrid
virtual void MooeeDag(const FermionField &in, FermionField &out)
void DhopComms(const FermionField &in, FermionField &out)
virtual void MdirAll(const FermionField &in, std::vector< FermionField > &out)
DoubledGaugeField UmuEven
GridBase * _FiveDimRedBlackGrid
void MomentumSpacePropagatorHwQ(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist, std::vector< double > qmu)
WilsonKernels< Impl > Kernels
void DhopCalc(const FermionField &in, FermionField &out, uint64_t *ids)
virtual void MooeeInv(const FermionField &in, FermionField &out)
FermionField _tmp
FermionField & tmp(void)
void DhopInternal(StencilImpl &st, DoubledGaugeField &U, const FermionField &in, FermionField &out, int dag)
virtual void Meooe(const FermionField &in, FermionField &out)
void DhopDirComms(const FermionField &in)
void DhopInternalSerialComms(StencilImpl &st, DoubledGaugeField &U, const FermionField &in, FermionField &out, int dag)
virtual void Mdir(const FermionField &in, FermionField &out, int dir, int disp)
void MomentumSpacePropagatorHt(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist)
GridBase * _FourDimGrid
GridBase * FermionGrid(void)
virtual void DhopDerivEO(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
void DW(const FermionField &in, FermionField &out, int dag)
virtual void Mdag(const FermionField &in, FermionField &out)
void DhopDir(const FermionField &in, FermionField &out, int dir, int disp)
void DhopDirAll(const FermionField &in, std::vector< FermionField > &out)
void MomentumSpacePropagatorHw(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist)
virtual void MeooeDag(const FermionField &in, FermionField &out)
WilsonFermion5D(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, double _M5, const ImplParams &p=ImplParams())
virtual void DhopDeriv(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
INHERIT_IMPL_TYPES(Impl)
GridBase * GaugeRedBlackGrid(void)
void DhopEO(const FermionField &in, FermionField &out, int dag)
GridBase * _FourDimRedBlackGrid
StencilImpl Stencil
StencilImpl StencilEven
GridBase * FermionRedBlackGrid(void)
void SloppyComms(int sloppy)
virtual void DhopDerivOE(GaugeField &mat, const FermionField &U, const FermionField &V, int dag)
virtual void Mooee(const FermionField &in, FermionField &out)
void Dhop(const FermionField &in, FermionField &out, int dag)
virtual void DirichletBlock(const Coordinate &block)
DoubledGaugeField Umu
void DerivInternal(StencilImpl &st, DoubledGaugeField &U, GaugeField &mat, const FermionField &A, const FermionField &B, int dag)
void DhopOE(const FermionField &in, FermionField &out, int dag)
void MomentumSpacePropagatorHt_5d(FermionField &out, const FermionField &in, RealD mass, std::vector< double > twist)
WilsonKernels(const ImplParams &p=ImplParams())