Grid 0.7.0
QCD.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/QCD.h
6
7 Copyright (C) 2015
8
9Author: Azusa Yamaguchi <ayamaguc@staffmail.ed.ac.uk>
10Author: Peter Boyle <paboyle@ph.ed.ac.uk>
11Author: Peter Boyle <peterboyle@Peters-MacBook-Pro-2.local>
12Author: neo <cossu@post.kek.jp>
13Author: paboyle <paboyle@ph.ed.ac.uk>
14
15 This program is free software; you can redistribute it and/or modify
16 it under the terms of the GNU General Public License as published by
17 the Free Software Foundation; either version 2 of the License, or
18 (at your option) any later version.
19
20 This program is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 GNU General Public License for more details.
24
25 You should have received a copy of the GNU General Public License along
26 with this program; if not, write to the Free Software Foundation, Inc.,
27 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
28
29 See the full license in the file "LICENSE" in the top level distribution directory
30*************************************************************************************/
31/* END LEGAL */
32#pragma once
33
35
36static constexpr int Xdir = 0;
37static constexpr int Ydir = 1;
38static constexpr int Zdir = 2;
39static constexpr int Tdir = 3;
40
41static constexpr int Xp = 0;
42static constexpr int Yp = 1;
43static constexpr int Zp = 2;
44static constexpr int Tp = 3;
45static constexpr int Xm = 4;
46static constexpr int Ym = 5;
47static constexpr int Zm = 6;
48static constexpr int Tm = 7;
49
50static constexpr int Nc=Config_Nc;
51static constexpr int Ns=4;
52static constexpr int Nd=4;
53static constexpr int Nhs=2; // half spinor
54static constexpr int Nds=8; // double stored gauge field
55static constexpr int Ngp=2; // gparity index range
56
58// QCD iMatrix types
59// Index conventions: Lorentz x Spin x Colour
60// note: static constexpr int or constexpr will work for type deductions
61// with the intel compiler (up to version 17)
63#define ColourIndex (2)
64#define SpinIndex (1)
65#define LorentzIndex (0)
66#define GparityFlavourIndex (0)
67
68// Also should make these a named enum type
69static constexpr int DaggerNo=0;
70static constexpr int DaggerYes=1;
71static constexpr int InverseNo=0;
72static constexpr int InverseYes=1;
73
74// Useful traits is this a spin index
75//typename std::enable_if<matchGridTensorIndex<iVector<vtype,Ns>,SpinorIndex>::value,iVector<vtype,Ns> >::type *SFINAE;
76
77const int SpinorIndex = 2;
78template<typename T> struct isSpinor {
79 static constexpr bool value = (SpinorIndex==T::TensorLevel);
80};
81template <typename T> using IfSpinor = Invoke<std::enable_if< isSpinor<T>::value,int> > ;
82template <typename T> using IfNotSpinor = Invoke<std::enable_if<!isSpinor<T>::value,int> > ;
83
84const int CoarseIndex = 4;
85template<typename T> struct isCoarsened {
86 static constexpr bool value = (CoarseIndex<=T::TensorLevel);
87};
88template <typename T> using IfCoarsened = Invoke<std::enable_if< isCoarsened<T>::value,int> > ;
90
91const int GparityFlavourTensorIndex = 3; //TensorLevel counts from the bottom!
92
93// ChrisK very keen to add extra space for Gparity doubling.
94//
95// Also add domain wall index, in a way where Wilson operator
96// naturally distributes across the 5th dimensions.
97//
98// That probably makes for GridRedBlack4dCartesian grid.
99
100// s,sp,c,spc,lc
101
102template<typename vtype> using iSinglet = iScalar<iScalar<iScalar<vtype> > >;
103template<typename vtype> using iSpinMatrix = iScalar<iMatrix<iScalar<vtype>, Ns> >;
104template<typename vtype> using iColourMatrix = iScalar<iScalar<iMatrix<vtype, Nc> > > ;
105template<typename vtype> using iSpinColourMatrix = iScalar<iMatrix<iMatrix<vtype, Nc>, Ns> >;
106template<typename vtype> using iLorentzColourMatrix = iVector<iScalar<iMatrix<vtype, Nc> >, Nd > ;
107template<typename vtype> using iLorentzComplex = iVector<iScalar<iScalar<vtype> >, Nd > ;
109template<typename vtype> using iSpinVector = iScalar<iVector<iScalar<vtype>, Ns> >;
110template<typename vtype> using iColourVector = iScalar<iScalar<iVector<vtype, Nc> > >;
111template<typename vtype> using iSpinColourVector = iScalar<iVector<iVector<vtype, Nc>, Ns> >;
112template<typename vtype> using iHalfSpinVector = iScalar<iVector<iScalar<vtype>, Nhs> >;
115
116
117template<typename vtype> using iGparityFlavourVector = iVector<iScalar<iScalar<vtype> >, Ngp>;
120template<typename vtype> using iGparityFlavourMatrix = iMatrix<iScalar<iScalar<vtype> >, Ngp>;
121
122// Spin matrix
126
131
132// Colour Matrix
136
141
142// SpinColour matrix
146
151
152// SpinColourSpinColour matrix
156
161
162// SpinColourSpinColour matrix
166
171
172// LorentzColour
176
181
182// LorentzComplex
186
190
191// DoubleStored gauge field
195
200
201//G-parity flavour matrix
205
210
211
212// Spin vector
216
221
222// Colour vector
226
231
232// SpinColourVector
236
241
242// HalfSpin vector
246
251
252// HalfSpinColour vector
256
261
262//G-parity flavour vector
266
271
272// singlets
273typedef iSinglet<Complex > TComplex; // FIXME This is painful. Tensor singlet complex type.
274typedef iSinglet<ComplexF> TComplexF; // FIXME This is painful. Tensor singlet complex type.
275typedef iSinglet<ComplexD> TComplexD; // FIXME This is painful. Tensor singlet complex type.
276
277typedef iSinglet<vComplex > vTComplex ; // what if we don't know the tensor structure
278typedef iSinglet<vComplexF> vTComplexF; // what if we don't know the tensor structure
279typedef iSinglet<vComplexD> vTComplexD; // what if we don't know the tensor structure
280typedef iSinglet<vComplexD2> vTComplexD2; // what if we don't know the tensor structure
281
282typedef iSinglet<Real > TReal; // Shouldn't need these; can I make it work without?
283typedef iSinglet<RealF> TRealF; // Shouldn't need these; can I make it work without?
284typedef iSinglet<RealD> TRealD; // Shouldn't need these; can I make it work without?
285
289
292
293
294// Lattices of these
299
304
309
314
319
323
324// DoubleStored gauge field
329
334
339
344
349
354
358
363
364typedef Lattice<vTInteger> LatticeInteger; // Predicates for "where"
365
366
368// Physical names for things
374
379
384
389
394
396
401
406
408// Peek and Poke named after physics attributes
410
411//spin
412template<class vobj> auto peekSpin(const vobj &rhs,int i) -> decltype(PeekIndex<SpinIndex>(rhs,0))
413{
414 return PeekIndex<SpinIndex>(rhs,i);
415}
416template<class vobj> auto peekSpin(const vobj &rhs,int i,int j) -> decltype(PeekIndex<SpinIndex>(rhs,0,0))
417{
418 return PeekIndex<SpinIndex>(rhs,i,j);
419}
420template<class vobj> auto peekSpin(const Lattice<vobj> &rhs,int i) -> decltype(PeekIndex<SpinIndex>(rhs,0))
421{
422 return PeekIndex<SpinIndex>(rhs,i);
423}
424template<class vobj> auto peekSpin(const Lattice<vobj> &rhs,int i,int j) -> decltype(PeekIndex<SpinIndex>(rhs,0,0))
425{
426 return PeekIndex<SpinIndex>(rhs,i,j);
427}
428//colour
429template<class vobj> auto peekColour(const vobj &rhs,int i) -> decltype(PeekIndex<ColourIndex>(rhs,0))
430{
431 return PeekIndex<ColourIndex>(rhs,i);
432}
433template<class vobj> auto peekColour(const vobj &rhs,int i,int j) -> decltype(PeekIndex<ColourIndex>(rhs,0,0))
434{
435 return PeekIndex<ColourIndex>(rhs,i,j);
436}
437template<class vobj> auto peekColour(const Lattice<vobj> &rhs,int i) -> decltype(PeekIndex<ColourIndex>(rhs,0))
438{
439 return PeekIndex<ColourIndex>(rhs,i);
440}
441template<class vobj> auto peekColour(const Lattice<vobj> &rhs,int i,int j) -> decltype(PeekIndex<ColourIndex>(rhs,0,0))
442{
443 return PeekIndex<ColourIndex>(rhs,i,j);
444}
445//lorentz
446template<class vobj> auto peekLorentz(const vobj &rhs,int i) -> decltype(PeekIndex<LorentzIndex>(rhs,0))
447{
448 return PeekIndex<LorentzIndex>(rhs,i);
449}
450template<class vobj> auto peekLorentz(const Lattice<vobj> &rhs,int i) -> decltype(PeekIndex<LorentzIndex>(rhs,0))
451{
452 return PeekIndex<LorentzIndex>(rhs,i);
453}
454
456// Poke lattice
458template<class vobj>
460 const Lattice<decltype(peekIndex<ColourIndex>(vobj(),0))> & rhs,
461 int i)
462{
463 PokeIndex<ColourIndex>(lhs,rhs,i);
464}
465template<class vobj>
467 const Lattice<decltype(peekIndex<ColourIndex>(vobj(),0,0))> & rhs,
468 int i,int j)
469{
470 PokeIndex<ColourIndex>(lhs,rhs,i,j);
471}
472template<class vobj>
474 const Lattice<decltype(peekIndex<SpinIndex>(vobj(),0))> & rhs,
475 int i)
476{
477 PokeIndex<SpinIndex>(lhs,rhs,i);
478}
479template<class vobj>
481 const Lattice<decltype(peekIndex<SpinIndex>(vobj(),0,0))> & rhs,
482 int i,int j)
483{
484 PokeIndex<SpinIndex>(lhs,rhs,i,j);
485}
486template<class vobj>
488 const Lattice<decltype(peekIndex<LorentzIndex>(vobj(),0))> & rhs,
489 int i)
490{
491 PokeIndex<LorentzIndex>(lhs,rhs,i);
492}
493
495// Poke scalars
497template<class vobj> void pokeSpin(vobj &lhs,const decltype(peekIndex<SpinIndex>(lhs,0)) & rhs,int i)
498{
499 pokeIndex<SpinIndex>(lhs,rhs,i);
500}
501template<class vobj> void pokeSpin(vobj &lhs,const decltype(peekIndex<SpinIndex>(lhs,0,0)) & rhs,int i,int j)
502{
503 pokeIndex<SpinIndex>(lhs,rhs,i,j);
504}
505
506template<class vobj> void pokeColour(vobj &lhs,const decltype(peekIndex<ColourIndex>(lhs,0)) & rhs,int i)
507{
508 pokeIndex<ColourIndex>(lhs,rhs,i);
509}
510template<class vobj> void pokeColour(vobj &lhs,const decltype(peekIndex<ColourIndex>(lhs,0,0)) & rhs,int i,int j)
511{
512 pokeIndex<ColourIndex>(lhs,rhs,i,j);
513}
514
515template<class vobj> void pokeLorentz(vobj &lhs,const decltype(peekIndex<LorentzIndex>(lhs,0)) & rhs,int i)
516{
517 pokeIndex<LorentzIndex>(lhs,rhs,i);
518}
519
521// Fermion <-> propagator assignements
523//template <class Prop, class Ferm>
524#define FAST_FERM_TO_PROP
525template <class Fimpl>
526void FermToProp(typename Fimpl::PropagatorField &p, const typename Fimpl::FermionField &f, const int s, const int c)
527{
528#ifdef FAST_FERM_TO_PROP
529 autoView(p_v,p,CpuWrite);
530 autoView(f_v,f,CpuRead);
531 thread_for(idx,p_v.oSites(),{
532 for(int ss = 0; ss < Ns; ++ss) {
533 for(int cc = 0; cc < Fimpl::Dimension; ++cc) {
534 p_v[idx]()(ss,s)(cc,c) = f_v[idx]()(ss)(cc); // Propagator sink index is LEFT, suitable for left mult by gauge link (e.g.)
535 }}
536 });
537#else
538 for(int j = 0; j < Ns; ++j)
539 {
540 auto pjs = peekSpin(p, j, s);
541 auto fj = peekSpin(f, j);
542
543 for(int i = 0; i < Fimpl::Dimension; ++i)
544 {
545 pokeColour(pjs, peekColour(fj, i), i, c);
546 }
547 pokeSpin(p, pjs, j, s);
548 }
549#endif
550}
551
552//template <class Prop, class Ferm>
553template <class Fimpl>
554void PropToFerm(typename Fimpl::FermionField &f, const typename Fimpl::PropagatorField &p, const int s, const int c)
555{
556#ifdef FAST_FERM_TO_PROP
557 autoView(p_v,p,CpuRead);
558 autoView(f_v,f,CpuWrite);
559 thread_for(idx,p_v.oSites(),{
560 for(int ss = 0; ss < Ns; ++ss) {
561 for(int cc = 0; cc < Fimpl::Dimension; ++cc) {
562 f_v[idx]()(ss)(cc) = p_v[idx]()(ss,s)(cc,c); // LEFT index is copied across for s,c right index
563 }}
564 });
565#else
566 for(int j = 0; j < Ns; ++j)
567 {
568 auto pjs = peekSpin(p, j, s);
569 auto fj = peekSpin(f, j);
570
571 for(int i = 0; i < Fimpl::Dimension; ++i)
572 {
573 pokeColour(fj, peekColour(pjs, i, c), i);
574 }
575 pokeSpin(f, fj, j);
576 }
577#endif
578}
579
581// transpose array and scalar
583template<int Index,class vobj> inline Lattice<vobj> transposeSpin(const Lattice<vobj> &lhs){
584 return transposeIndex<SpinIndex>(lhs);
585}
586template<int Index,class vobj> inline Lattice<vobj> transposeColour(const Lattice<vobj> &lhs){
587 return transposeIndex<ColourIndex>(lhs);
588}
589template<int Index,class vobj> inline vobj transposeSpin(const vobj &lhs){
590 return transposeIndex<SpinIndex>(lhs);
591}
592template<int Index,class vobj> inline vobj transposeColour(const vobj &lhs){
593 return transposeIndex<ColourIndex>(lhs);
594}
595
597// Trace lattice and non-lattice
599template<int Index,class vobj>
601{
602 return traceIndex<SpinIndex>(lhs);
603}
604template<int Index,class vobj>
606{
607 return traceIndex<ColourIndex>(lhs);
608}
609template<int Index,class vobj>
610inline auto traceSpin(const vobj &lhs) -> Lattice<decltype(traceIndex<SpinIndex>(lhs))>
611{
612 return traceIndex<SpinIndex>(lhs);
613}
614template<int Index,class vobj>
615inline auto traceColour(const vobj &lhs) -> Lattice<decltype(traceIndex<ColourIndex>(lhs))>
616{
617 return traceIndex<ColourIndex>(lhs);
618}
619
621// Current types
624 Vector, 0,
625 Axial, 1,
626 Tadpole, 2);
627
629
std::vector< T, uvmAllocator< T > > Vector
#define Config_Nc
Definition Config.h:35
typename T::type Invoke
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))>
#define autoView(l_v, l, mode)
#define GRID_SERIALIZABLE_ENUM(name, undefname,...)
Definition MacroMagic.h:154
@ CpuRead
@ CpuWrite
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
iSinglet< vComplex > vTComplex
Definition QCD.h:277
iColourMatrix< Complex > ColourMatrix
Definition QCD.h:133
static constexpr int Nhs
Definition QCD.h:53
iVector< iVector< iVector< vtype, Nc >, Ns >, Ngp > iGparitySpinColourVector
Definition QCD.h:118
Lattice< vSpinColourMatrixD2 > LatticeSpinColourMatrixD2
Definition QCD.h:308
iSinglet< ComplexF > TComplexF
Definition QCD.h:274
iSpinVector< vComplex > vSpinVector
Definition QCD.h:217
iDoubleStoredColourMatrix< vComplexD > vDoubleStoredColourMatrixD
Definition QCD.h:198
iHalfSpinVector< vComplex > vHalfSpinVector
Definition QCD.h:247
iSpinVector< ComplexF > SpinVectorF
Definition QCD.h:214
iColourVector< ComplexF > ColourVectorF
Definition QCD.h:224
LatticeSpinColourVector LatticeFermion
Definition QCD.h:375
Lattice< vColourMatrix > LatticeStaggeredPropagator
Definition QCD.h:402
Lattice< vColourVectorF > LatticeStaggeredFermionF
Definition QCD.h:398
LatticeHalfSpinColourVectorD2 LatticeHalfFermionD2
Definition QCD.h:373
iLorentzComplex< ComplexF > LorentzComplexF
Definition QCD.h:184
Lattice< vSpinColourMatrix > LatticeSpinColourMatrix
Definition QCD.h:305
iSinglet< RealD > TRealD
Definition QCD.h:284
Lattice< vColourVectorD2 > LatticeColourVectorD2
Definition QCD.h:338
iGparityFlavourMatrix< vComplexD2 > vGparityFlavourMatrixD2
Definition QCD.h:209
iSinglet< vComplexF > vTComplexF
Definition QCD.h:278
iSpinColourVector< vComplexD2 > vSpinColourVectorD2
Definition QCD.h:240
Lattice< vColourMatrixD > LatticeColourMatrixD
Definition QCD.h:297
iScalar< iVector< iScalar< vtype >, Nhs > > iHalfSpinVector
Definition QCD.h:112
Lattice< vTReal > LatticeReal
Definition QCD.h:355
iSpinColourSpinColourMatrix< vComplexD2 > vSpinColourSpinColourMatrixD2
Definition QCD.h:160
void pokeLorentz(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< LorentzIndex >(vobj(), 0))> &rhs, int i)
Definition QCD.h:487
auto traceSpin(const Lattice< vobj > &lhs) -> Lattice< decltype(traceIndex< SpinIndex >(vobj()))>
Definition QCD.h:600
Lattice< vHalfSpinColourVectorD2 > LatticeHalfSpinColourVectorD2
Definition QCD.h:353
Lattice< vColourVector > LatticeColourVector
Definition QCD.h:335
iVector< iScalar< iMatrix< vtype, Nc > >, Nds > iDoubleStoredColourMatrix
Definition QCD.h:108
iColourMatrix< vComplexD > vColourMatrixD
Definition QCD.h:139
static constexpr int Xm
Definition QCD.h:45
iSinglet< vRealF > vTRealF
Definition QCD.h:287
iLorentzColourMatrix< vComplexD2 > vLorentzColourMatrixD2
Definition QCD.h:180
iSpinColourSpinColourMatrix< ComplexF > SpinColourSpinColourMatrixF
Definition QCD.h:154
LatticeDoubleStoredColourMatrixD2 LatticeDoubledGaugeFieldD2
Definition QCD.h:393
void FermToProp(typename Fimpl::PropagatorField &p, const typename Fimpl::FermionField &f, const int s, const int c)
Definition QCD.h:526
iColourVector< vComplex > vColourVector
Definition QCD.h:227
iSpinVector< vComplexD > vSpinVectorD
Definition QCD.h:219
iSinglet< vComplexD2 > vTComplexD2
Definition QCD.h:280
Lattice< vSpinColourVectorD2 > LatticeSpinColourVectorD2
Definition QCD.h:343
Lattice< vColourMatrixD2 > LatticeColourMatrixD2
Definition QCD.h:298
iScalar< iMatrix< iMatrix< iMatrix< iMatrix< vtype, Nc >, Ns >, Nc >, Ns > > iSpinColourSpinColourMatrix
Definition QCD.h:114
Lattice< vLorentzColourMatrixD2 > LatticeLorentzColourMatrixD2
Definition QCD.h:318
iHalfSpinColourVector< ComplexF > HalfSpinColourVectorF
Definition QCD.h:254
iScalar< iMatrix< iMatrix< vtype, Nc >, Ns > > iSpinColourMatrix
Definition QCD.h:105
static constexpr int Tm
Definition QCD.h:48
iSpinMatrix< ComplexD > SpinMatrixD
Definition QCD.h:125
iSpinVector< ComplexD > SpinVectorD
Definition QCD.h:215
iLorentzColourMatrix< vComplexD > vLorentzColourMatrixD
Definition QCD.h:179
static constexpr int DaggerYes
Definition QCD.h:70
iSpinColourMatrix< ComplexF > SpinColourMatrixF
Definition QCD.h:144
iSinglet< ComplexD > TComplexD
Definition QCD.h:275
static constexpr int Ns
Definition QCD.h:51
Lattice< vSpinColourMatrixD > LatticeSpinColourMatrixD
Definition QCD.h:307
Lattice< vTInteger > LatticeInteger
Definition QCD.h:364
iGparityFlavourMatrix< vComplexD > vGparityFlavourMatrixD
Definition QCD.h:208
iColourMatrix< vComplexD2 > vColourMatrixD2
Definition QCD.h:140
iGparityFlavourMatrix< ComplexD > GparityFlavourMatrixD
Definition QCD.h:204
iVector< iScalar< iScalar< vtype > >, Ngp > iGparityFlavourVector
Definition QCD.h:117
Lattice< vHalfSpinVectorD > LatticeHalfSpinVectorD
Definition QCD.h:347
iVector< iVector< iVector< vtype, Nc >, Nhs >, Ngp > iGparityHalfSpinColourVector
Definition QCD.h:119
LatticeSpinColourMatrix LatticePropagator
Definition QCD.h:380
LatticeLorentzColourMatrixD LatticeGaugeFieldD
Definition QCD.h:387
Lattice< vHalfSpinVector > LatticeHalfSpinVector
Definition QCD.h:345
iLorentzComplex< vComplexF > vLorentzComplexF
Definition QCD.h:188
iSpinMatrix< vComplex > vSpinMatrix
Definition QCD.h:127
Lattice< vColourVectorD > LatticeStaggeredFermionD
Definition QCD.h:399
iDoubleStoredColourMatrix< ComplexD > DoubleStoredColourMatrixD
Definition QCD.h:194
iGparityFlavourMatrix< Complex > GparityFlavourMatrix
Definition QCD.h:202
Lattice< vTComplexD > LatticeComplexD
Definition QCD.h:361
void PropToFerm(typename Fimpl::FermionField &f, const typename Fimpl::PropagatorField &p, const int s, const int c)
Definition QCD.h:554
iSinglet< vComplexD > vTComplexD
Definition QCD.h:279
iSpinColourVector< vComplexF > vSpinColourVectorF
Definition QCD.h:238
iColourVector< vComplexD2 > vColourVectorD2
Definition QCD.h:230
LatticeLorentzColourMatrixF LatticeGaugeFieldF
Definition QCD.h:386
iScalar< iScalar< iVector< vtype, Nc > > > iColourVector
Definition QCD.h:110
static constexpr int Nd
Definition QCD.h:52
iSpinColourMatrix< vComplexD2 > vSpinColourMatrixD2
Definition QCD.h:150
LatticeSpinColourMatrixD2 LatticePropagatorD2
Definition QCD.h:383
iDoubleStoredColourMatrix< vComplexF > vDoubleStoredColourMatrixF
Definition QCD.h:197
static constexpr int Tp
Definition QCD.h:44
LatticeSpinColourVectorD LatticeFermionD
Definition QCD.h:377
const int GparityFlavourTensorIndex
Definition QCD.h:91
Lattice< vLorentzColourMatrixD > LatticeLorentzColourMatrixD
Definition QCD.h:317
static constexpr int Nc
Definition QCD.h:50
Lattice< vSpinColourVector > LatticeSpinColourVector
Definition QCD.h:340
LatticeSpinColourVectorF LatticeFermionF
Definition QCD.h:376
iSpinColourMatrix< ComplexD > SpinColourMatrixD
Definition QCD.h:145
Lattice< vSpinColourVectorF > LatticeSpinColourVectorF
Definition QCD.h:341
LatticeDoubleStoredColourMatrix LatticeDoubledGaugeField
Definition QCD.h:390
LatticeHalfSpinColourVector LatticeHalfFermion
Definition QCD.h:370
Lattice< vSpinVectorF > LatticeSpinVectorF
Definition QCD.h:331
static constexpr int Zp
Definition QCD.h:43
iColourVector< ComplexD > ColourVectorD
Definition QCD.h:225
iSpinColourSpinColourMatrix< vComplexF > vSpinColourSpinColourMatrixF
Definition QCD.h:158
iDoubleStoredColourMatrix< ComplexF > DoubleStoredColourMatrixF
Definition QCD.h:193
iLorentzComplex< vComplexD > vLorentzComplexD
Definition QCD.h:189
Lattice< vLorentzColourMatrix > LatticeLorentzColourMatrix
Definition QCD.h:315
iScalar< iScalar< iScalar< vtype > > > iSinglet
Definition QCD.h:102
static constexpr int Nds
Definition QCD.h:54
Lattice< vLorentzComplexD > LatticeLorentzComplexD
Definition QCD.h:322
iLorentzColourMatrix< vComplexF > vLorentzColourMatrixF
Definition QCD.h:178
iMatrix< iScalar< iScalar< vtype > >, Ngp > iGparityFlavourMatrix
Definition QCD.h:120
iSinglet< Real > TReal
Definition QCD.h:282
Lattice< vobj > transposeSpin(const Lattice< vobj > &lhs)
Definition QCD.h:583
iDoubleStoredColourMatrix< Complex > DoubleStoredColourMatrix
Definition QCD.h:192
Invoke< std::enable_if< isSpinor< T >::value, int > > IfSpinor
Definition QCD.h:81
iGparityFlavourVector< Complex > GparityFlavourVector
Definition QCD.h:263
LatticeHalfSpinColourVectorF LatticeHalfFermionF
Definition QCD.h:371
iHalfSpinColourVector< vComplexD2 > vHalfSpinColourVectorD2
Definition QCD.h:260
static constexpr int Xdir
Definition QCD.h:36
Lattice< vColourVectorF > LatticeColourVectorF
Definition QCD.h:336
iHalfSpinVector< vComplexD2 > vHalfSpinVectorD2
Definition QCD.h:250
static constexpr int Tdir
Definition QCD.h:39
iVector< iScalar< iMatrix< vtype, Nc > >, Nd > iLorentzColourMatrix
Definition QCD.h:106
iColourMatrix< ComplexF > ColourMatrixF
Definition QCD.h:134
iLorentzColourMatrix< Complex > LorentzColourMatrix
Definition QCD.h:173
const int SpinorIndex
Definition QCD.h:77
iSpinMatrix< vComplexD > vSpinMatrixD
Definition QCD.h:129
iScalar< iScalar< iMatrix< vtype, Nc > > > iColourMatrix
Definition QCD.h:104
Lattice< vSpinColourVectorD > LatticeSpinColourVectorD
Definition QCD.h:342
Lattice< vColourMatrixD > LatticeStaggeredPropagatorD
Definition QCD.h:404
iSpinColourVector< vComplex > vSpinColourVector
Definition QCD.h:237
static constexpr int Zdir
Definition QCD.h:38
Lattice< vHalfSpinColourVectorD > LatticeHalfSpinColourVectorD
Definition QCD.h:352
iScalar< iVector< iScalar< vtype >, Ns > > iSpinVector
Definition QCD.h:109
iSinglet< vReal > vTReal
Definition QCD.h:286
iHalfSpinColourVector< ComplexD > HalfSpinColourVectorD
Definition QCD.h:255
iSpinColourVector< vComplexD > vSpinColourVectorD
Definition QCD.h:239
Lattice< vSpinVector > LatticeSpinVector
Definition QCD.h:330
iHalfSpinColourVector< Complex > HalfSpinColourVector
Definition QCD.h:253
static constexpr int Zm
Definition QCD.h:47
iColourMatrix< ComplexD > ColourMatrixD
Definition QCD.h:135
void pokeSpin(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< SpinIndex >(vobj(), 0))> &rhs, int i)
Definition QCD.h:473
Invoke< std::enable_if<!isSpinor< T >::value, int > > IfNotSpinor
Definition QCD.h:82
iGparityFlavourVector< vComplex > vGparityFlavourVector
Definition QCD.h:267
LatticeLorentzColourMatrixD2 LatticeGaugeFieldD2
Definition QCD.h:388
LatticeSpinColourVectorD2 LatticeFermionD2
Definition QCD.h:378
const int CoarseIndex
Definition QCD.h:84
Lattice< vColourVectorD > LatticeColourVectorD
Definition QCD.h:337
iLorentzColourMatrix< ComplexD > LorentzColourMatrixD
Definition QCD.h:175
Lattice< vobj > transposeColour(const Lattice< vobj > &lhs)
Definition QCD.h:586
iDoubleStoredColourMatrix< vComplexD2 > vDoubleStoredColourMatrixD2
Definition QCD.h:199
iLorentzComplex< vComplex > vLorentzComplex
Definition QCD.h:187
iSinglet< Integer > TInteger
Definition QCD.h:291
Lattice< vSpinVectorD > LatticeSpinVectorD
Definition QCD.h:332
Lattice< vLorentzColourMatrixF > LatticeLorentzColourMatrixF
Definition QCD.h:316
iHalfSpinColourVector< vComplexF > vHalfSpinColourVectorF
Definition QCD.h:258
iSpinColourVector< ComplexD > SpinColourVectorD
Definition QCD.h:235
LatticeSpinColourMatrixD LatticePropagatorD
Definition QCD.h:382
Lattice< vHalfSpinVectorF > LatticeHalfSpinVectorF
Definition QCD.h:346
Lattice< vColourMatrixF > LatticeColourMatrixF
Definition QCD.h:296
Lattice< vSpinColourMatrixF > LatticeSpinColourMatrixF
Definition QCD.h:306
Lattice< vHalfSpinColourVectorF > LatticeHalfSpinColourVectorF
Definition QCD.h:351
iHalfSpinVector< ComplexD > HalfSpinVectorD
Definition QCD.h:245
Lattice< vColourMatrix > LatticeColourMatrix
Definition QCD.h:295
iHalfSpinColourVector< vComplexD > vHalfSpinColourVectorD
Definition QCD.h:259
iColourMatrix< vComplex > vColourMatrix
Definition QCD.h:137
iSpinColourSpinColourMatrix< Complex > SpinColourSpinColourMatrix
Definition QCD.h:153
Lattice< vLorentzComplex > LatticeLorentzComplex
Definition QCD.h:320
Invoke< std::enable_if<!isCoarsened< T >::value, int > > IfNotCoarsened
Definition QCD.h:89
iGparityFlavourVector< ComplexF > GparityFlavourVectorF
Definition QCD.h:264
Lattice< vTRealD > LatticeRealD
Definition QCD.h:357
iVector< iScalar< iScalar< vtype > >, Nd > iLorentzComplex
Definition QCD.h:107
iSpinColourSpinColourMatrix< vComplex > vSpinColourSpinColourMatrix
Definition QCD.h:157
iLorentzColourMatrix< vComplex > vLorentzColourMatrix
Definition QCD.h:177
iColourVector< Complex > ColourVector
Definition QCD.h:223
iHalfSpinVector< vComplexF > vHalfSpinVectorF
Definition QCD.h:248
iLorentzColourMatrix< ComplexF > LorentzColourMatrixF
Definition QCD.h:174
auto peekColour(const vobj &rhs, int i) -> decltype(PeekIndex< ColourIndex >(rhs, 0))
Definition QCD.h:429
Lattice< vTComplexD2 > LatticeComplexD2
Definition QCD.h:362
Lattice< vColourMatrixF > LatticeStaggeredPropagatorF
Definition QCD.h:403
static constexpr int DaggerNo
Definition QCD.h:69
Lattice< vSpinMatrix > LatticeSpinMatrix
Definition QCD.h:300
static constexpr int Xp
Definition QCD.h:41
iSpinColourVector< ComplexF > SpinColourVectorF
Definition QCD.h:234
iGparityFlavourVector< vComplexD2 > vGparityFlavourVectorD2
Definition QCD.h:270
iLorentzComplex< Complex > LorentzComplex
Definition QCD.h:183
static constexpr int Yp
Definition QCD.h:42
iScalar< iVector< iVector< vtype, Nc >, Ns > > iSpinColourVector
Definition QCD.h:111
iColourVector< vComplexF > vColourVectorF
Definition QCD.h:228
Lattice< vTComplexF > LatticeComplexF
Definition QCD.h:360
Lattice< vSpinColourSpinColourMatrix > LatticeSpinColourSpinColourMatrix
Definition QCD.h:310
LatticeLorentzColourMatrix LatticeGaugeField
Definition QCD.h:385
static constexpr int Ym
Definition QCD.h:46
iColourVector< vComplexD > vColourVectorD
Definition QCD.h:229
iGparityFlavourVector< vComplexD > vGparityFlavourVectorD
Definition QCD.h:269
Lattice< vTComplex > LatticeComplex
Definition QCD.h:359
static constexpr int Ngp
Definition QCD.h:55
iSpinMatrix< ComplexF > SpinMatrixF
Definition QCD.h:124
iHalfSpinVector< vComplexD > vHalfSpinVectorD
Definition QCD.h:249
iLorentzComplex< ComplexD > LorentzComplexD
Definition QCD.h:185
static constexpr int Ydir
Definition QCD.h:37
iSinglet< vInteger > vTInteger
Definition QCD.h:290
Lattice< vColourVectorD2 > LatticeStaggeredFermionD2
Definition QCD.h:400
iColourMatrix< vComplexF > vColourMatrixF
Definition QCD.h:138
iGparityFlavourMatrix< vComplex > vGparityFlavourMatrix
Definition QCD.h:206
iSpinVector< Complex > SpinVector
Definition QCD.h:213
iDoubleStoredColourMatrix< vComplex > vDoubleStoredColourMatrix
Definition QCD.h:196
iHalfSpinVector< ComplexF > HalfSpinVectorF
Definition QCD.h:244
LatticeDoubleStoredColourMatrixD LatticeDoubledGaugeFieldD
Definition QCD.h:392
Lattice< vDoubleStoredColourMatrixD2 > LatticeDoubleStoredColourMatrixD2
Definition QCD.h:328
static constexpr int InverseNo
Definition QCD.h:71
Lattice< vLorentzComplexF > LatticeLorentzComplexF
Definition QCD.h:321
Lattice< vSpinColourSpinColourMatrixD2 > LatticeSpinColourSpinColourMatrixD2
Definition QCD.h:313
iSpinColourMatrix< Complex > SpinColourMatrix
Definition QCD.h:143
auto peekSpin(const vobj &rhs, int i) -> decltype(PeekIndex< SpinIndex >(rhs, 0))
Definition QCD.h:412
Lattice< vTRealF > LatticeRealF
Definition QCD.h:356
Lattice< iScalar< typename GF::vector_object::element > > LorentzScalar
Definition QCD.h:395
iSpinColourVector< Complex > SpinColourVector
Definition QCD.h:233
Lattice< vSpinColourSpinColourMatrixD > LatticeSpinColourSpinColourMatrixD
Definition QCD.h:312
iSpinColourSpinColourMatrix< vComplexD > vSpinColourSpinColourMatrixD
Definition QCD.h:159
iGparityFlavourVector< vComplexF > vGparityFlavourVectorF
Definition QCD.h:268
Lattice< vHalfSpinVectorD2 > LatticeHalfSpinVectorD2
Definition QCD.h:348
iSpinColourMatrix< vComplex > vSpinColourMatrix
Definition QCD.h:147
void pokeColour(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< ColourIndex >(vobj(), 0))> &rhs, int i)
Definition QCD.h:459
static constexpr int InverseYes
Definition QCD.h:72
iSpinMatrix< Complex > SpinMatrix
Definition QCD.h:123
LatticeHalfSpinColourVectorD LatticeHalfFermionD
Definition QCD.h:372
iSpinMatrix< vComplexF > vSpinMatrixF
Definition QCD.h:128
iSpinColourMatrix< vComplexF > vSpinColourMatrixF
Definition QCD.h:148
iGparityFlavourVector< ComplexD > GparityFlavourVectorD
Definition QCD.h:265
LatticeDoubleStoredColourMatrixF LatticeDoubledGaugeFieldF
Definition QCD.h:391
Lattice< vDoubleStoredColourMatrixD > LatticeDoubleStoredColourMatrixD
Definition QCD.h:327
iSpinVector< vComplexD2 > vSpinVectorD2
Definition QCD.h:220
Lattice< vSpinMatrixD2 > LatticeSpinMatrixD2
Definition QCD.h:303
iHalfSpinColourVector< vComplex > vHalfSpinColourVector
Definition QCD.h:257
iHalfSpinVector< Complex > HalfSpinVector
Definition QCD.h:243
iSinglet< vRealD > vTRealD
Definition QCD.h:288
Lattice< vSpinMatrixF > LatticeSpinMatrixF
Definition QCD.h:301
iScalar< iVector< iVector< vtype, Nc >, Nhs > > iHalfSpinColourVector
Definition QCD.h:113
Lattice< vSpinColourSpinColourMatrixF > LatticeSpinColourSpinColourMatrixF
Definition QCD.h:311
Lattice< vColourMatrixD2 > LatticeStaggeredPropagatorD2
Definition QCD.h:405
iSinglet< RealF > TRealF
Definition QCD.h:283
Lattice< vDoubleStoredColourMatrix > LatticeDoubleStoredColourMatrix
Definition QCD.h:325
Lattice< vColourVector > LatticeStaggeredFermion
Definition QCD.h:397
Lattice< vDoubleStoredColourMatrixF > LatticeDoubleStoredColourMatrixF
Definition QCD.h:326
Lattice< vSpinMatrixD > LatticeSpinMatrixD
Definition QCD.h:302
iScalar< iMatrix< iScalar< vtype >, Ns > > iSpinMatrix
Definition QCD.h:103
Invoke< std::enable_if< isCoarsened< T >::value, int > > IfCoarsened
Definition QCD.h:88
iSinglet< Complex > TComplex
Definition QCD.h:273
iSpinVector< vComplexF > vSpinVectorF
Definition QCD.h:218
iSpinColourSpinColourMatrix< ComplexD > SpinColourSpinColourMatrixD
Definition QCD.h:155
auto traceColour(const Lattice< vobj > &lhs) -> Lattice< decltype(traceIndex< ColourIndex >(vobj()))>
Definition QCD.h:605
LatticeSpinColourMatrixF LatticePropagatorF
Definition QCD.h:381
Lattice< vHalfSpinColourVector > LatticeHalfSpinColourVector
Definition QCD.h:350
iSpinColourMatrix< vComplexD > vSpinColourMatrixD
Definition QCD.h:149
iSpinMatrix< vComplexD2 > vSpinMatrixD2
Definition QCD.h:130
iGparityFlavourMatrix< ComplexF > GparityFlavourMatrixF
Definition QCD.h:203
auto peekLorentz(const vobj &rhs, int i) -> decltype(PeekIndex< LorentzIndex >(rhs, 0))
Definition QCD.h:446
Lattice< vSpinVectorD2 > LatticeSpinVectorD2
Definition QCD.h:333
iGparityFlavourMatrix< vComplexF > vGparityFlavourMatrixF
Definition QCD.h:207
accelerator_inline void pokeIndex(vtype &ret, const decltype(TensorIndexRecursion< Level >::peekIndex(ret, 0)) &arg, int i)
accelerator_inline auto peekIndex(const vtype &arg, int i) -> RemoveCRV(TensorIndexRecursion< Level >::peekIndex(arg, 0))
accelerator_inline auto transposeIndex(const vtype &arg) -> RemoveCRV(TensorIndexRecursion< Level >::transposeIndex(arg))
accelerator_inline auto traceIndex(const vtype &arg) -> RemoveCRV(TensorIndexRecursion< Level >::traceIndex(arg))
#define thread_for(i, num,...)
Definition Threads.h:60
static constexpr bool value
Definition QCD.h:86
Definition QCD.h:78
static constexpr bool value
Definition QCD.h:79