37template <
class S,
class Representation = FundamentalRepresentation,
class Options = CoeffReal >
41 static const int Dimension = Representation::Dimension;
45 static const int Nhcs = Options::Nhcs;
53 typedef typename Options::_Coeff_t
Coeff_t;
54 typedef typename Options::template PrecisionMapper<Simd>::LowerPrecVector
SimdL;
80 assert(
Params.boundary_phases.size() ==
Nd);
83 template<
class _Spinor>
90 mult(&phi(), &UU, &chi());
92 template<
class _Spinor>
103 template<
class _SpinorField>
106 const _SpinorField & phi,
116 multLink(tmp,Umu_v[sss],phi_v(sss),mu);
117 coalescedWrite(out_v[sss],tmp);
129 const GaugeField &Umu)
136 GaugeLinkField
U(GaugeGrid);
137 GaugeLinkField tmp(GaugeGrid);
143 for (
int mu = 0; mu <
Nd; mu++) {
146 auto pha =
Params.boundary_phases[mu];
161 std::cout <<
GridLogMessage <<
" Twist ["<<mu<<
"] "<<
Params.twist_n_2pi_L[mu]<<
" phase"<<phase <<std::endl;
164 tmp = where(coor == Lmu, phase *
U,
U);
174 GaugeLinkField link(mat.Grid());
189 for (
int mu = 0; mu <
Nd; mu++)
195#undef USE_OLD_INSERT_FORCE
198#ifdef USE_OLD_INSERT_FORCE
199 GaugeLinkField tmp(mat.Grid());
208 for(int s=0;s<Ls;s++){
210 tmp_v[sU] = tmp_v[sU]+ traceIndex<SpinIndex>(outerProduct(Btilde_v[sF],Atilde_v[sF]));
222 typedef decltype(coalescedRead(mat_v[sU](mu)() )) ColorMatrixType;
225 for(int s=0;s<Ls;s++){
227 for(int spn=0;spn<Ns;spn++){
228 auto bb = coalescedRead(Btilde_v[sF]()(spn) );
229 auto aa = coalescedRead(Atilde_v[sF]()(spn) );
230 auto op = outerProduct(bb,aa);
#define accelerator_inline
#define accelerator_for(iterator, num, nsimd,...)
auto Cshift(const Expression &expr, int dim, int shift) -> decltype(closure(expr))
accelerator_inline Grid_simd< S, V > cos(const Grid_simd< S, V > &r)
accelerator_inline Grid_simd< S, V > sin(const Grid_simd< S, V > &r)
void mult(Lattice< obj1 > &ret, const Lattice< obj2 > &lhs, const Lattice< obj3 > &rhs)
void LatticeCoordinate(Lattice< iobj > &l, int mu)
auto outerProduct(const Lattice< ll > &lhs, const Lattice< rr > &rhs) -> Lattice< decltype(outerProduct(ll(), rr()))>
void PokeIndex(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< Index >(vobj(), 0))> &rhs, int i)
auto PeekIndex(const Lattice< vobj > &lhs, int i) -> Lattice< decltype(peekIndex< Index >(vobj(), i))>
Lattice< vobj > real(const Lattice< vobj > &lhs)
Lattice< vobj > imag(const Lattice< vobj > &lhs)
Lattice< vobj > conjugate(const Lattice< vobj > &lhs)
Lattice< vobj > adj(const Lattice< vobj > &lhs)
vobj::scalar_object sum(const vobj *arg, Integer osites)
auto TraceIndex(const Lattice< vobj > &lhs) -> Lattice< decltype(traceIndex< Index >(vobj()))>
#define autoView(l_v, l, mode)
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
#define NAMESPACE_BEGIN(A)
accelerator_inline void coalescedWrite(vobj &__restrict__ vec, const vobj &__restrict__ extracted, int lane=0)
accelerator_inline vobj coalescedRead(const vobj &__restrict__ vec, int lane=0)
WilsonCompressorTemplate< HCS, HS, S, WilsonProjector > WilsonCompressor
WilsonImpl< vComplex, TwoIndexSymmetricRepresentation, CoeffReal > WilsonTwoIndexSymmetricImplR
WilsonImpl< vComplexF, FundamentalRepresentation, CoeffReal > WilsonImplF
WilsonImpl< vComplexD, SpTwoIndexSymmetricRepresentation, CoeffReal > SpWilsonTwoIndexSymmetricImplD
WilsonImpl< vComplex, SpTwoIndexSymmetricRepresentation, CoeffReal > SpWilsonTwoIndexSymmetricImplR
WilsonImpl< vComplexD2, FundamentalRepresentation, CoeffComplex > ZWilsonImplD2
WilsonImpl< vComplex, TwoIndexAntiSymmetricRepresentation, CoeffReal > WilsonTwoIndexAntiSymmetricImplR
WilsonImpl< vComplex, SpTwoIndexAntiSymmetricRepresentation, CoeffReal > SpWilsonTwoIndexAntiSymmetricImplR
WilsonImpl< vComplexD, TwoIndexSymmetricRepresentation, CoeffReal > WilsonTwoIndexSymmetricImplD
WilsonImpl< vComplexD2, FundamentalRepresentation, CoeffReal > WilsonImplD2
WilsonImpl< vComplex, SpTwoIndexSymmetricRepresentation, CoeffReal > SpWilsonAdjImplR
WilsonImpl< vComplex, FundamentalRepresentation, CoeffReal > WilsonImplR
WilsonImpl< vComplex, SpFundamentalRepresentation, CoeffComplex > ZSpWilsonImplR
WilsonImpl< vComplexD, SpFundamentalRepresentation, CoeffComplex > ZSpWilsonImplD
WilsonImpl< vComplexF, TwoIndexSymmetricRepresentation, CoeffReal > WilsonTwoIndexSymmetricImplF
WilsonImpl< vComplex, AdjointRepresentation, CoeffReal > WilsonAdjImplR
WilsonImpl< vComplexD, FundamentalRepresentation, CoeffComplex > ZWilsonImplD
WilsonImpl< vComplexD, SpTwoIndexAntiSymmetricRepresentation, CoeffReal > SpWilsonTwoIndexAntiSymmetricImplD
WilsonImpl< vComplexF, TwoIndexAntiSymmetricRepresentation, CoeffReal > WilsonTwoIndexAntiSymmetricImplF
WilsonImpl< vComplexF, SpFundamentalRepresentation, CoeffComplex > ZSpWilsonImplF
WilsonImpl< vComplexF, SpFundamentalRepresentation, CoeffReal > SpWilsonImplF
WilsonImpl< vComplexF, SpTwoIndexAntiSymmetricRepresentation, CoeffReal > SpWilsonTwoIndexAntiSymmetricImplF
WilsonImpl< vComplex, FundamentalRepresentation, CoeffComplex > ZWilsonImplR
WilsonImpl< vComplexD, FundamentalRepresentation, CoeffReal > WilsonImplD
WilsonImpl< vComplexD, SpFundamentalRepresentation, CoeffReal > SpWilsonImplD
WilsonImpl< vComplexD2, SpFundamentalRepresentation, CoeffComplex > ZSpWilsonImplD2
WilsonImpl< vComplexD, SpTwoIndexSymmetricRepresentation, CoeffReal > SpWilsonAdjImplD
WilsonImpl< vComplex, SpFundamentalRepresentation, CoeffReal > SpWilsonImplR
WilsonImpl< vComplexD, TwoIndexAntiSymmetricRepresentation, CoeffReal > WilsonTwoIndexAntiSymmetricImplD
WilsonImpl< vComplexF, SpTwoIndexSymmetricRepresentation, CoeffReal > SpWilsonTwoIndexSymmetricImplF
WilsonImpl< vComplexF, AdjointRepresentation, CoeffReal > WilsonAdjImplF
WilsonImpl< vComplexF, SpTwoIndexSymmetricRepresentation, CoeffReal > SpWilsonAdjImplF
WilsonImpl< vComplexF, FundamentalRepresentation, CoeffComplex > ZWilsonImplF
WilsonImpl< vComplexD, AdjointRepresentation, CoeffReal > WilsonAdjImplD
static INTERNAL_PRECISION U
Simd::scalar_type scalar_type
const Coordinate & GlobalDimensions(void)
complex< double > scalar_type
GridBase * Grid(void) const
Options::template PrecisionMapper< Simd >::LowerPrecVector SimdL
static accelerator_inline void multLink(_Spinor &phi, const SiteDoubledGaugeField &U, const _Spinor &chi, int mu)
PeriodicGaugeImpl< GaugeImplTypes< S, Dimension > > Gimpl
INHERIT_GIMPL_TYPES(Gimpl)
void DoubleStore(GridBase *GaugeGrid, DoubledGaugeField &Uds, const GaugeField &Umu)
Lattice< SiteSpinor > FermionField
iImplHalfSpinor< Simd > SiteHalfSpinor
static const bool isFundamental
static const bool isGparity
Lattice< SiteDoubledGaugeField > DoubledGaugeField
void multLinkField(_SpinorField &out, const DoubledGaugeField &Umu, const _SpinorField &phi, int mu)
static const int Dimension
constexpr bool is_fundamental() const
WilsonImpl(const ImplParams &p=ImplParams())
const StencilImpl::View_type StencilView
iImplHalfCommSpinor< SimdL > SiteHalfCommSpinor
WilsonCompressor< SiteHalfCommSpinor, SiteHalfSpinor, SiteSpinor > Compressor
static accelerator_inline void loadLinkElement(Simd ®, ref &memory)
static accelerator_inline void multLink(_Spinor &phi, const SiteDoubledGaugeField &U, const _Spinor &chi, int mu, StencilEntry *SE, StencilView &St)
iScalar< iVector< iVector< vtype, Dimension >, Nhs > > iImplHalfSpinor
void InsertForce5D(GaugeField &mat, FermionField &Btilde, FermionField Ã, int mu)
iImplDoubledGaugeField< Simd > SiteDoubledGaugeField
iVector< iScalar< iMatrix< vtype, Dimension > >, Nds > iImplDoubledGaugeField
void TraceSpinImpl(GaugeLinkField &mat, PropagatorField &P)
void InsertForce4D(GaugeField &mat, FermionField &Btilde, FermionField &A, int mu)
static const bool LsVectorised
iImplSpinor< Simd > SiteSpinor
void outerProductImpl(PropagatorField &mat, const FermionField &B, const FermionField &A)
iImplPropagator< Simd > SitePropagator
iScalar< iMatrix< iMatrix< vtype, Dimension >, Ns > > iImplPropagator
iScalar< iVector< iVector< vtype, Dimension >, Nhcs > > iImplHalfCommSpinor
WilsonStencil< SiteSpinor, SiteHalfSpinor, ImplParams > StencilImpl
iScalar< iVector< iVector< vtype, Dimension >, Ns > > iImplSpinor
Lattice< SitePropagator > PropagatorField
Options::_Coeff_t Coeff_t
WilsonImplParams ImplParams
void extractLinkField(std::vector< GaugeLinkField > &mat, DoubledGaugeField &Uds)
Base::View_type View_type
static accelerator_inline constexpr int Nsimd(void)