Grid 0.7.0
GaugeGroup.h
Go to the documentation of this file.
1/*************************************************************************************
2
3Grid physics library, www.github.com/paboyle/Grid
4
5Source file: ./lib/qcd/utils/GaugeGroup.h
6
7Copyright (C) 2015
8
9Author: Azusa Yamaguchi <ayamaguc@staffmail.ed.ac.uk>
10Author: Peter Boyle <paboyle@ph.ed.ac.uk>
11Author: neo <cossu@post.kek.jp>
12Author: paboyle <paboyle@ph.ed.ac.uk>
13
14This program is free software; you can redistribute it and/or modify
15it under the terms of the GNU General Public License as published by
16the Free Software Foundation; either version 2 of the License, or
17(at your option) any later version.
18
19This program is distributed in the hope that it will be useful,
20but WITHOUT ANY WARRANTY; without even the implied warranty of
21MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22GNU General Public License for more details.
23
24You should have received a copy of the GNU General Public License along
25with this program; if not, write to the Free Software Foundation, Inc.,
2651 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27
28See the full license in the file "LICENSE" in the top level distribution
29directory
30*************************************************************************************/
31/* END LEGAL */
32#ifndef QCD_UTIL_GAUGEGROUP_H
33#define QCD_UTIL_GAUGEGROUP_H
34
35// Important detail: nvcc requires all template parameters to have names.
36// This is the only reason why the second template parameter has a name.
37#define ONLY_IF_SU \
38 typename dummy_name = group_name, \
39 typename named_dummy = std::enable_if_t < \
40 std::is_same<dummy_name, group_name>::value && \
41 is_su<dummy_name>::value >
42
43#define ONLY_IF_Sp \
44 typename dummy_name = group_name, \
45 typename named_dummy = std::enable_if_t < \
46 std::is_same<dummy_name, group_name>::value && \
47 is_sp<dummy_name>::value >
48
50namespace GroupName {
51class SU {};
52class Sp {};
53} // namespace GroupName
54
55template <typename group_name>
56struct is_su {
57 static const bool value = false;
58};
59
60template <>
61struct is_su<GroupName::SU> {
62 static const bool value = true;
63};
64
65template <typename group_name>
66struct is_sp {
67 static const bool value = false;
68};
69
70template <>
71struct is_sp<GroupName::Sp> {
72 static const bool value = true;
73};
74
75template <typename group_name>
76constexpr int compute_adjoint_dimension(int ncolour);
77
78template <>
79constexpr int compute_adjoint_dimension<GroupName::SU>(int ncolour) {
80 return ncolour * ncolour - 1;
81}
82
83template <>
84constexpr int compute_adjoint_dimension<GroupName::Sp>(int ncolour) {
85 return ncolour / 2 * (ncolour + 1);
87
88template <int ncolour, class group_name>
90 public:
91 static const int Dimension = ncolour;
92 static const int AdjointDimension =
94 static const int AlgebraDimension =
97 template <typename vtype>
99 template <typename vtype>
101 template <typename vtype>
103 template <typename vtype>
106 static int su2subgroups(void) { return su2subgroups(group_name()); }
109 // Types can be accessed as SU<2>::Matrix , SU<2>::vSUnMatrix,
110 // SU<2>::LatticeMatrix etc...
115
119
120 // For the projectors to the algebra
121 // these should be real...
142
159
160 // Private implementation details are specified in the following files:
161 // Grid/qcd/utils/SUn.impl
162 // Grid/qcd/utils/SUn.impl
163 // The public part of the interface follows below and refers to these
164 // private member functions.
165
168
169 public:
170 template <class cplx>
171 static void generator(int lieIndex, iGroupMatrix<cplx> &ta) {
172 return generator(lieIndex, ta, group_name());
173 }
174
175 static accelerator_inline void su2SubGroupIndex(int &i1, int &i2, int su2_index) {
176 return su2SubGroupIndex(i1, i2, su2_index, group_name());
177 }
178
179 static void testGenerators(void) { testGenerators(group_name()); }
181 static void printGenerators(void) {
182 for (int gen = 0; gen < AlgebraDimension; gen++) {
183 Matrix ta;
184 generator(gen, ta);
185 std::cout << GridLogMessage << "Nc = " << ncolour << " t_" << gen
186 << std::endl;
187 std::cout << GridLogMessage << ta << std::endl;
188 }
189 }
190
191 template <typename LatticeMatrixType>
192 static void LieRandomize(GridParallelRNG &pRNG, LatticeMatrixType &out,
193 double scale = 1.0) {
194 GridBase *grid = out.Grid();
195
196 typedef typename LatticeMatrixType::vector_type vector_type;
197
198 typedef iSinglet<vector_type> vTComplexType;
199
200 typedef Lattice<vTComplexType> LatticeComplexType;
201 typedef typename GridTypeMapper<
202 typename LatticeMatrixType::vector_object>::scalar_object MatrixType;
203
204 LatticeComplexType ca(grid);
205 LatticeMatrixType lie(grid);
206 LatticeMatrixType la(grid);
207 ComplexD ci(0.0, scale);
208 MatrixType ta;
209
210 lie = Zero();
212 for (int a = 0; a < AlgebraDimension; a++) {
213 random(pRNG, ca);
214
215 ca = (ca + conjugate(ca)) * 0.5;
216 ca = ca - 0.5;
217
218 generator(a, ta);
219
220 la = ci * ca * ta;
221
222 lie = lie + la; // e^{i la ta}
223 }
224 taExp(lie, out);
225 }
226
228 LatticeMatrix &out,
229 Real scale = 1.0) {
230 GridBase *grid = out.Grid();
231 LatticeReal ca(grid);
232 LatticeMatrix la(grid);
233 Complex ci(0.0, scale);
234 Matrix ta;
235
236 out = Zero();
237 for (int a = 0; a < AlgebraDimension; a++) {
238 gaussian(pRNG, ca);
239 generator(a, ta);
240 la = toComplex(ca) * ta;
241 out += la;
242 }
243 out *= ci;
244 }
245
247 LatticeMatrix &out,
248 Real scale = 1.0) {
249 conformable(h, out);
250 GridBase *grid = out.Grid();
251 LatticeMatrix la(grid);
252 Matrix ta;
253
254 out = Zero();
255 for (int a = 0; a < AlgebraDimension; a++) {
256 generator(a, ta);
257 la = peekColour(h, a) * timesI(ta) * scale;
258 out += la;
259 }
261
262 // Projects the algebra components a lattice matrix (of dimension ncol*ncol -1
263 // ) inverse operation: FundamentalLieAlgebraMatrix
265 const LatticeMatrix &in, Real scale = 1.0) {
266 conformable(h_out, in);
267 h_out = Zero();
268 Matrix Ta;
269
270 for (int a = 0; a < AlgebraDimension; a++) {
271 generator(a, Ta);
272 pokeColour(h_out, -2.0 * (trace(timesI(Ta) * in)) * scale, a);
273 }
274 }
276
277 template <class vtype>
281
282 template <class vtype, int N>
286
287 template <class vtype,int N, typename std::enable_if< GridTypeMapper<vtype>::TensorLevel == 0 >::type * =nullptr>
289 return ProjectOnGeneralGroup(arg, group_name());
290 }
291
292 template <int N,class vComplex_t> // Projects on the general groups U(N), Sp(2N)xZ2 i.e. determinant is allowed a complex phase.
294 for (int mu = 0; mu < Nd; mu++) {
295 auto Umu = PeekIndex<LorentzIndex>(U, mu);
296 Umu = ProjectOnGeneralGroup(Umu);
297 }
298 }
299
300
301
302 template <int N,class vComplex_t>
304 return ProjectOnGeneralGroup(Umu, group_name());
305 }
307 template <int N,class vComplex_t> // Projects on SU(N), Sp(2N), with unit determinant, by first projecting on general group and then enforcing unit determinant
309 Umu = ProjectOnGeneralGroup(Umu);
310 auto det = Determinant(Umu);
311
312 det = conjugate(det);
313
314 for (int i = 0; i < N; i++) {
315 auto element = PeekIndex<ColourIndex>(Umu, N - 1, i);
316 element = element * det;
317 PokeIndex<ColourIndex>(Umu, element, Nc - 1, i);
318 }
319 }
320
321 template <int N,class vComplex_t> // reunitarise, resimplectify... previously ProjectSUn
323 // Reunitarise
324 for (int mu = 0; mu < Nd; mu++) {
325 auto Umu = PeekIndex<LorentzIndex>(U, mu);
327 PokeIndex<LorentzIndex>(U, Umu, mu);
328 }
329 }
330
331 template <typename GaugeField>
332 static void HotConfiguration(GridParallelRNG &pRNG, GaugeField &out) {
333 typedef typename GaugeField::vector_type vector_type;
334 typedef iGroupMatrix<vector_type> vMatrixType;
335 typedef Lattice<vMatrixType> LatticeMatrixType;
336
337 LatticeMatrixType Umu(out.Grid());
338 LatticeMatrixType tmp(out.Grid());
339 for (int mu = 0; mu < Nd; mu++) {
340 // LieRandomize(pRNG, Umu, 1.0);
341 // PokeIndex<LorentzIndex>(out, Umu, mu);
342 gaussian(pRNG,Umu);
343 tmp = Ta(Umu);
344 taExp(tmp,Umu);
346 // ProjectSUn(Umu);
347 PokeIndex<LorentzIndex>(out, Umu, mu);
348 }
349 }
350 template <typename GaugeField>
351 static void TepidConfiguration(GridParallelRNG &pRNG, GaugeField &out) {
352 typedef typename GaugeField::vector_type vector_type;
353 typedef iGroupMatrix<vector_type> vMatrixType;
354 typedef Lattice<vMatrixType> LatticeMatrixType;
355
356 LatticeMatrixType Umu(out.Grid());
357 for (int mu = 0; mu < Nd; mu++) {
358 LieRandomize(pRNG, Umu, 0.01);
359 PokeIndex<LorentzIndex>(out, Umu, mu);
360 }
361 }
362
363 template <typename GaugeField>
364 static void ColdConfiguration(GaugeField &out) {
365 typedef typename GaugeField::vector_type vector_type;
366 typedef iGroupMatrix<vector_type> vMatrixType;
367 typedef Lattice<vMatrixType> LatticeMatrixType;
368
369 LatticeMatrixType Umu(out.Grid());
370 Umu = 1.0;
371 for (int mu = 0; mu < Nd; mu++) {
372 PokeIndex<LorentzIndex>(out, Umu, mu);
373 }
374 }
375
376 template <typename GaugeField>
377 static void ColdConfiguration(GridParallelRNG &pRNG, GaugeField &out) {
379 }
380
381 template <typename LatticeMatrixType>
382 static void taProj(const LatticeMatrixType &in, LatticeMatrixType &out) {
383 taProj(in, out, group_name());
384 }
385
386 template <typename LatticeMatrixType>
387 static void taExp(const LatticeMatrixType &x, LatticeMatrixType &ex) {
388 typedef typename LatticeMatrixType::scalar_type ComplexType;
389
390 LatticeMatrixType xn(x.Grid());
391 RealD nfac = 1.0;
392
393 xn = x;
394 ex = xn + ComplexType(1.0); // 1+x
395
396 // Do a 12th order exponentiation
397 for (int i = 2; i <= 12; ++i) {
398 nfac = nfac / RealD(i); // 1/2, 1/2.3 ...
399 xn = xn * x; // x2, x3,x4....
400 ex = ex + xn * nfac; // x2/2!, x3/3!....
401 }
402 }
403
404// Ta are hermitian (?)
405// Anti herm is i Ta basis
406static void LieAlgebraProject(LatticeAlgebraMatrix &out,const LatticeMatrix &in, int b)
407{
408 conformable(in, out);
409 GridBase *grid = out.Grid();
410 LatticeComplex tmp(grid);
411 Matrix ta;
412 // Using Luchang's projection convention
413 // 2 Tr{Ta Tb} A_b= 2/2 delta ab A_b = A_a
414 autoView(out_v,out,AcceleratorWrite);
415 autoView(in_v,in,AcceleratorRead);
416 int N = ncolour;
417 int NNm1 = N * (N - 1);
418 int hNNm1= NNm1/2;
419 RealD sqrt_2 = sqrt(2.0);
420 Complex ci(0.0,1.0);
421 for(int su2Index=0;su2Index<hNNm1;su2Index++){
422 int i1, i2;
423 su2SubGroupIndex(i1, i2, su2Index);
424 int ax = su2Index*2;
425 int ay = su2Index*2+1;
426 accelerator_for(ss,grid->oSites(),1,{
427 // in is traceless ANTI-hermitian whereas Grid generators are Hermitian.
428 // trace( Ta x Ci in)
429 // Bet I need to move to real part with mult by -i
430 out_v[ss]()()(ax,b) = 0.5*(real(in_v[ss]()()(i2,i1)) - real(in_v[ss]()()(i1,i2)));
431 out_v[ss]()()(ay,b) = 0.5*(imag(in_v[ss]()()(i1,i2)) + imag(in_v[ss]()()(i2,i1)));
432 });
433 }
434 for(int diagIndex=0;diagIndex<N-1;diagIndex++){
435 int k = diagIndex + 1; // diagIndex starts from 0
436 int a = NNm1+diagIndex;
437 RealD scale = 1.0/sqrt(2.0*k*(k+1));
439 auto tmp = in_v[ss]()()(0,0);
440 for(int i=1;i<k;i++){
441 tmp=tmp+in_v[ss]()()(i,i);
442 }
443 tmp = tmp - in_v[ss]()()(k,k)*k;
444 out_v[ss]()()(a,b) =imag(tmp) * scale;
445 });
446 }
447}
448
449
450};
451
452template <int ncolour>
454
455template <int ncolour>
457
458typedef SU<2> SU2;
459typedef SU<3> SU3;
460typedef SU<4> SU4;
461typedef SU<5> SU5;
462
464
465typedef Sp<2> Sp2;
466typedef Sp<4> Sp4;
467typedef Sp<6> Sp6;
468typedef Sp<8> Sp8;
469
470template <int N,class vComplex_t>
475
476template <int N,class vComplex_t>
481
482template <int N,class vComplex_t>
487
488template <int N,class vComplex_t>
493
494// Explicit specialisation for SU(3).
496{
497 GridBase *grid = Umu.Grid();
498 const int x = 0;
499 const int y = 1;
500 const int z = 2;
501 // Reunitarise
502 Umu = ProjectOnGroup(Umu);
503 autoView(Umu_v, Umu, CpuWrite);
504 thread_for(ss, grid->oSites(), {
505 auto cm = Umu_v[ss];
506 cm()()(2, x) = adj(cm()()(0, y) * cm()()(1, z) -
507 cm()()(0, z) * cm()()(1, y)); // x= yz-zy
508 cm()()(2, y) = adj(cm()()(0, z) * cm()()(1, x) -
509 cm()()(0, x) * cm()()(1, z)); // y= zx-xz
510 cm()()(2, z) = adj(cm()()(0, x) * cm()()(1, y) -
511 cm()()(0, y) * cm()()(1, x)); // z= xy-yx
512 Umu_v[ss] = cm;
513 });
514}
516{
517 GridBase *grid = U.Grid();
518 // Reunitarise
519 for (int mu = 0; mu < Nd; mu++) {
520 auto Umu = PeekIndex<LorentzIndex>(U, mu);
521 Umu = ProjectOnGroup(Umu);
523 PokeIndex<LorentzIndex>(U, Umu, mu);
524 }
525}
526
528#endif
#define accelerator_inline
#define accelerator_for(iterator, num, nsimd,...)
static void ProjectSU3(Lattice< iScalar< iScalar< iMatrix< vComplexD, 3 > > > > &Umu)
Definition GaugeGroup.h:495
Sp< 8 > Sp8
Definition GaugeGroup.h:468
constexpr int compute_adjoint_dimension(int ncolour)
Sp< 2 > Sp2
Definition GaugeGroup.h:465
GaugeGroup< ncolour, GroupName::SU > SU
Definition GaugeGroup.h:453
SU< 2 > SU2
Definition GaugeGroup.h:458
Sp< 4 > Sp4
Definition GaugeGroup.h:466
constexpr int compute_adjoint_dimension< GroupName::Sp >(int ncolour)
Definition GaugeGroup.h:84
SU< Nc > FundamentalMatrices
Definition GaugeGroup.h:463
Sp< 6 > Sp6
Definition GaugeGroup.h:467
GaugeGroup< ncolour, GroupName::Sp > Sp
Definition GaugeGroup.h:456
SU< 4 > SU4
Definition GaugeGroup.h:460
static void ProjectSUn(Lattice< iScalar< iScalar< iMatrix< vComplex_t, N > > > > &Umu)
Definition GaugeGroup.h:471
constexpr int compute_adjoint_dimension< GroupName::SU >(int ncolour)
Definition GaugeGroup.h:79
SU< 5 > SU5
Definition GaugeGroup.h:461
static void ProjectSpn(Lattice< iScalar< iScalar< iMatrix< vComplex_t, N > > > > &Umu)
Definition GaugeGroup.h:483
SU< 3 > SU3
Definition GaugeGroup.h:459
accelerator_inline void timesI(Grid_simd2< S, V > &ret, const Grid_simd2< S, V > &in)
accelerator_inline Grid_simd2< S, V > trace(const Grid_simd2< S, V > &arg)
accelerator_inline Grid_simd< S, V > sqrt(const Grid_simd< S, V > &r)
void conformable(const Lattice< obj1 > &lhs, const Lattice< obj2 > &rhs)
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 > imag(const Lattice< vobj > &lhs)
Lattice< typename vobj::Complexified > toComplex(const Lattice< vobj > &lhs)
Lattice< vobj > conjugate(const Lattice< vobj > &lhs)
void gaussian(GridParallelRNG &rng, Lattice< vobj > &l)
void random(GridParallelRNG &rng, Lattice< vobj > &l)
Lattice< iScalar< iScalar< iScalar< Vec > > > > Determinant(const Lattice< iScalar< iScalar< iMatrix< Vec, N > > > > &Umu)
#define autoView(l_v, l, mode)
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
@ AcceleratorRead
@ AcceleratorWrite
@ CpuWrite
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
Lattice< vTReal > LatticeReal
Definition QCD.h:355
static constexpr int Nd
Definition QCD.h:52
static constexpr int Nc
Definition QCD.h:50
iScalar< iScalar< iScalar< vtype > > > iSinglet
Definition QCD.h:102
auto peekColour(const vobj &rhs, int i) -> decltype(PeekIndex< ColourIndex >(rhs, 0))
Definition QCD.h:429
Lattice< vTComplex > LatticeComplex
Definition QCD.h:359
void pokeColour(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< ColourIndex >(vobj(), 0))> &rhs, int i)
Definition QCD.h:459
RealF Real
Definition Simd.h:65
std::complex< RealD > ComplexD
Definition Simd.h:79
std::complex< Real > Complex
Definition Simd.h:80
double RealD
Definition Simd.h:61
accelerator_inline iScalar< vtype > ProjectOnGroup(const iScalar< vtype > &r)
Definition Tensor_Ta.h:124
accelerator_inline iScalar< vtype > Ta(const iScalar< vtype > &r)
Definition Tensor_Ta.h:45
#define thread_for(i, num,...)
Definition Threads.h:60
static INTERNAL_PRECISION U
Definition Zolotarev.cc:230
iAlgebraVector< ComplexD > AlgebraVectorD
Definition GaugeGroup.h:125
static void ProjectOnSpecialGroup(Lattice< iScalar< iScalar< iMatrix< vComplex_t, N > > > > &Umu)
Definition GaugeGroup.h:308
static void ColdConfiguration(GaugeField &out)
Definition GaugeGroup.h:364
iScalar< iScalar< iMatrix< vtype, 2 > > > iSU2Matrix
Definition GaugeGroup.h:98
Lattice< vAlgebraMatrixD > LatticeAlgebraMatrixD
Definition GaugeGroup.h:145
static void ProjectOnSpecialGroup(Lattice< iVector< iScalar< iMatrix< vComplex_t, N > >, Nd > > &U)
Definition GaugeGroup.h:322
Lattice< vMatrixD > LatticeMatrixD
Definition GaugeGroup.h:133
iScalar< iScalar< iMatrix< vtype, AdjointDimension > > > iSUnAlgebraMatrix
Definition GaugeGroup.h:104
static accelerator_inline iVector< vtype, N > ProjectOnGeneralGroup(const iVector< vtype, N > &r)
Definition GaugeGroup.h:283
Lattice< vAlgebraMatrixF > LatticeAlgebraMatrixF
Definition GaugeGroup.h:144
iGroupMatrix< ComplexD > MatrixD
Definition GaugeGroup.h:114
static void TepidConfiguration(GridParallelRNG &pRNG, GaugeField &out)
Definition GaugeGroup.h:351
iAlgebraVector< vComplexF > vAlgebraVectorF
Definition GaugeGroup.h:128
iSU2Matrix< ComplexD > SU2MatrixD
Definition GaugeGroup.h:150
Lattice< vSU2Matrix > LatticeSU2Matrix
Definition GaugeGroup.h:156
iScalar< iScalar< iMatrix< vtype, ncolour > > > iGroupMatrix
Definition GaugeGroup.h:100
static Lattice< iScalar< iScalar< iMatrix< vComplex_t, N > > > > ProjectOnGeneralGroup(const Lattice< iScalar< iScalar< iMatrix< vComplex_t, N > > > > &Umu)
Definition GaugeGroup.h:303
static int su2subgroups(void)
Definition GaugeGroup.h:106
static void ProjectOnGeneralGroup(Lattice< iVector< iScalar< iMatrix< vComplex_t, N > >, Nd > > &U)
Definition GaugeGroup.h:293
iGroupMatrix< vComplexD > vMatrixD
Definition GaugeGroup.h:118
static const int Dimension
Definition GaugeGroup.h:91
Lattice< vAlgebraVectorF > LatticeAlgebraVectorF
Definition GaugeGroup.h:136
static void projectOnAlgebra(LatticeAlgebraVector &h_out, const LatticeMatrix &in, Real scale=1.0)
Definition GaugeGroup.h:264
iGroupMatrix< Complex > Matrix
Definition GaugeGroup.h:112
static void LieRandomize(GridParallelRNG &pRNG, LatticeMatrixType &out, double scale=1.0)
Definition GaugeGroup.h:192
static void ColdConfiguration(GridParallelRNG &pRNG, GaugeField &out)
Definition GaugeGroup.h:377
iGroupMatrix< vComplexF > vMatrixF
Definition GaugeGroup.h:117
Lattice< vAlgebraVector > LatticeAlgebraVector
Definition GaugeGroup.h:135
static void GaussianFundamentalLieAlgebraMatrix(GridParallelRNG &pRNG, LatticeMatrix &out, Real scale=1.0)
Definition GaugeGroup.h:227
iSU2Matrix< Complex > SU2Matrix
Definition GaugeGroup.h:148
static void printGenerators(void)
Definition GaugeGroup.h:181
iAlgebraVector< vComplex > vAlgebraVector
Definition GaugeGroup.h:127
Lattice< vMatrixF > LatticeMatrixF
Definition GaugeGroup.h:132
static void taExp(const LatticeMatrixType &x, LatticeMatrixType &ex)
Definition GaugeGroup.h:387
static void taProj(const LatticeMatrixType &in, LatticeMatrixType &out, GroupName::SU)
Definition GaugeGroup.h:537
static void taProj(const LatticeMatrixType &in, LatticeMatrixType &out)
Definition GaugeGroup.h:382
iSUnAlgebraMatrix< vComplexD > vAlgebraMatrixD
Definition GaugeGroup.h:141
static void generator(int lieIndex, iGroupMatrix< cplx > &ta)
Definition GaugeGroup.h:171
iGroupMatrix< vComplex > vMatrix
Definition GaugeGroup.h:116
static void LieAlgebraProject(LatticeAlgebraMatrix &out, const LatticeMatrix &in, int b)
Definition GaugeGroup.h:406
iSU2Matrix< vComplex > vSU2Matrix
Definition GaugeGroup.h:152
static Lattice< iScalar< iScalar< iMatrix< vtype, N > > > > ProjectOnGeneralGroup(const Lattice< iScalar< iScalar< iMatrix< vtype, N > > > > &Umu, GroupName::SU)
Definition GaugeGroup.h:517
Lattice< vSU2MatrixD > LatticeSU2MatrixD
Definition GaugeGroup.h:158
iSU2Matrix< vComplexD > vSU2MatrixD
Definition GaugeGroup.h:154
static const int AlgebraDimension
Definition GaugeGroup.h:94
iSU2Matrix< ComplexF > SU2MatrixF
Definition GaugeGroup.h:149
static accelerator_inline iScalar< vtype > ProjectOnGeneralGroup(const iScalar< vtype > &r)
Definition GaugeGroup.h:278
static void FundamentalLieAlgebraMatrix(const LatticeAlgebraVector &h, LatticeMatrix &out, Real scale=1.0)
Definition GaugeGroup.h:246
iSUnAlgebraMatrix< vComplex > vAlgebraMatrix
Definition GaugeGroup.h:139
static void HotConfiguration(GridParallelRNG &pRNG, GaugeField &out)
Definition GaugeGroup.h:332
static accelerator_inline iMatrix< vtype, N > ProjectOnGeneralGroup(const iMatrix< vtype, N > &arg)
Definition GaugeGroup.h:288
Lattice< vSU2MatrixF > LatticeSU2MatrixF
Definition GaugeGroup.h:157
static const int AdjointDimension
Definition GaugeGroup.h:92
Lattice< vAlgebraVectorD > LatticeAlgebraVectorD
Definition GaugeGroup.h:137
Lattice< vMatrix > LatticeMatrix
Definition GaugeGroup.h:131
iGroupMatrix< ComplexF > MatrixF
Definition GaugeGroup.h:113
iSUnAlgebraMatrix< vComplexF > vAlgebraMatrixF
Definition GaugeGroup.h:140
iAlgebraVector< Complex > AlgebraVector
Definition GaugeGroup.h:123
iSU2Matrix< vComplexF > vSU2MatrixF
Definition GaugeGroup.h:153
iAlgebraVector< ComplexF > AlgebraVectorF
Definition GaugeGroup.h:124
Lattice< vAlgebraMatrix > LatticeAlgebraMatrix
Definition GaugeGroup.h:143
static accelerator_inline void su2SubGroupIndex(int &i1, int &i2, int su2_index)
Definition GaugeGroup.h:175
iScalar< iScalar< iVector< vtype, AdjointDimension > > > iAlgebraVector
Definition GaugeGroup.h:102
static accelerator_inline void su2SubGroupIndex(int &i1, int &i2, int su2_index, GroupName::SU)
Definition GaugeGroup.h:122
static void generator(int lieIndex, iGroupMatrix< cplx > &ta, GroupName::SU)
Definition GaugeGroup.h:66
static void testGenerators(void)
Definition GaugeGroup.h:179
iAlgebraVector< vComplexD > vAlgebraVectorD
Definition GaugeGroup.h:129
int oSites(void) const
static accelerator_inline constexpr int Nsimd(void)
GridBase * Grid(void) const
Definition Simd.h:194
static const bool value
Definition GaugeGroup.h:72
static const bool value
Definition GaugeGroup.h:67
static const bool value
Definition GaugeGroup.h:62
static const bool value
Definition GaugeGroup.h:57