Bridge++  Version 1.5.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mat_SU_N.h
Go to the documentation of this file.
1 
15 #ifndef MAT_SU_N_INCLUDED
16 #define MAT_SU_N_INCLUDED
17 
18 #include <cassert>
19 #include <valarray>
20 
21 #include "decompose_QR_Cmplx.h"
22 #include "eigen_QR_Cmplx.h"
23 
24 #include "randomNumbers.h"
25 
26 class RandomNumbers;
27 
28 namespace SU_N {
35  class Mat_SU_N {
36  private:
37  int m_Nc;
38  std::valarray<double> va;
42 
43  public:
44 
45  explicit
46  Mat_SU_N(int Nc, double r = 0.0) : m_Nc(Nc)
47  {
48  va.resize(2 * m_Nc * m_Nc, r);
49 
50  if (m_Nc == 3) {
53  } else if (m_Nc == 2) {
56  } else {
59  }
60  }
61 
62  Mat_SU_N& dag();
63  Mat_SU_N& ht();
64  Mat_SU_N& ah();
65  Mat_SU_N& at();
66  Mat_SU_N& unit();
67  Mat_SU_N& zero();
68  Mat_SU_N& xI();
69 
70  // Mat_SU_N& reunit();
71  Mat_SU_N& reunit() { return (this->*m_reunit)(); }
75 
77  {
78  return (this->*m_set_random)(rand);
79  }
80 
81  // H.Matsufuru added (original version for SU(3)) [15 Mar 2012].
85 
86  int nc() const { return m_Nc; }
87 
89 
90  Mat_SU_N& operator=(const double&);
91 
92  // Mat_SU_N& operator=(const std::complex<double>&);
93 
94  Mat_SU_N& operator+=(const Mat_SU_N&);
95  Mat_SU_N& operator+=(const double&);
96 
97  // Mat_SU_N& operator+=(const std::complex<double>&);
98 
99  Mat_SU_N& operator-=(const Mat_SU_N&);
100  Mat_SU_N& operator-=(const double&);
101 
102  // Mat_SU_N& operator-=(const std::complex<double>&);
103 
104  Mat_SU_N& operator*=(const Mat_SU_N&);
105  Mat_SU_N& operator*=(const double&);
106 
107  // Mat_SU_N& operator*=(const std::complex<double>&);
108 
109  Mat_SU_N& operator/=(const double&);
110 
111  // Mat_SU_N& operator/=(const std::complex<double>&);
112 
113  int size() const { return va.size(); }
114  double r(int c) const { return va[2 * c]; }
115  double i(int c) const { return va[2 * c + 1]; }
116 
117  double r(int c1, int c2) const { return r(m_Nc * c1 + c2); }
118  double i(int c1, int c2) const { return i(m_Nc * c1 + c2); }
119 
120  void set_r(int c, const double& re) { va[2 * c] = re; }
121  void set_i(int c, const double& im) { va[2 * c + 1] = im; }
122 
123  void set_r(int c1, int c2, const double& re)
124  {
125  set_r(m_Nc * c1 + c2, re);
126  }
127 
128  void set_i(int c1, int c2, const double& im)
129  {
130  set_i(m_Nc * c1 + c2, im);
131  }
132 
133  void set(int c, double re, const double& im)
134  {
135  va[2 * c] = re;
136  va[2 * c + 1] = im;
137  }
138 
139  void set(int c1, int c2, const double& re, const double& im)
140  {
141  set(m_Nc * c1 + c2, re, im);
142  }
143 
144  void add(int c, const double& re, const double& im)
145  {
146  va[2 * c] += re;
147  va[2 * c + 1] += im;
148  }
149 
150  void add(int c1, int c2, const double& re, const double& im)
151  {
152  add(m_Nc * c1 + c2, re, im);
153  }
154 
155  double norm2() // H.Matsufuru added [15 Mar 2012]
156  {
157  double t = 0.0;
158 
159  for (int i = 0; i < 2 * m_Nc * m_Nc; ++i) { t += va[i] * va[i]; }
160  return t;
161  }
162 
163  void mult_nn(const Mat_SU_N& u1, const Mat_SU_N& u2)
164  {
165  for (int a = 0; a < m_Nc; ++a) {
166  for (int b = 0; b < m_Nc; ++b) {
167  va[2 * (b + m_Nc * a)] = 0.0;
168  va[2 * (b + m_Nc * a) + 1] = 0.0;
169  for (int c = 0; c < m_Nc; ++c) {
170  va[2 * (b + m_Nc * a)] +=
171  u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (b + m_Nc * c)]
172  - u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (b + m_Nc * c) + 1];
173  va[2 * (b + m_Nc * a) + 1] +=
174  u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (b + m_Nc * c)]
175  + u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (b + m_Nc * c) + 1];
176  }
177  }
178  }
179  }
180 
181  void multadd_nn(const Mat_SU_N& u1, const Mat_SU_N& u2)
182  {
183  for (int a = 0; a < m_Nc; ++a) {
184  for (int b = 0; b < m_Nc; ++b) {
185  for (int c = 0; c < m_Nc; ++c) {
186  va[2 * (b + m_Nc * a)] +=
187  u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (b + m_Nc * c)]
188  - u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (b + m_Nc * c) + 1];
189  va[2 * (b + m_Nc * a) + 1] +=
190  u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (b + m_Nc * c)]
191  + u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (b + m_Nc * c) + 1];
192  }
193  }
194  }
195  }
196 
197  void mult_nd(const Mat_SU_N& u1, const Mat_SU_N& u2)
198  {
199  for (int a = 0; a < m_Nc; ++a) {
200  for (int b = 0; b < m_Nc; ++b) {
201  va[2 * (b + m_Nc * a)] = 0.0;
202  va[2 * (b + m_Nc * a) + 1] = 0.0;
203  for (int c = 0; c < m_Nc; ++c) {
204  va[2 * (b + m_Nc * a)] +=
205  u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (c + m_Nc * b)]
206  + u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (c + m_Nc * b) + 1];
207  va[2 * (b + m_Nc * a) + 1] +=
208  u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (c + m_Nc * b)]
209  - u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (c + m_Nc * b) + 1];
210  }
211  }
212  }
213  }
214 
215  void multadd_nd(const Mat_SU_N& u1, const Mat_SU_N& u2)
216  {
217  for (int a = 0; a < m_Nc; ++a) {
218  for (int b = 0; b < m_Nc; ++b) {
219  for (int c = 0; c < m_Nc; ++c) {
220  va[2 * (b + m_Nc * a)] +=
221  u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (c + m_Nc * b)]
222  + u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (c + m_Nc * b) + 1];
223  va[2 * (b + m_Nc * a) + 1] +=
224  u1.va[2 * (c + m_Nc * a) + 1] * u2.va[2 * (c + m_Nc * b)]
225  - u1.va[2 * (c + m_Nc * a)] * u2.va[2 * (c + m_Nc * b) + 1];
226  }
227  }
228  }
229  }
230 
231  void mult_dn(const Mat_SU_N& u1, const Mat_SU_N& u2)
232  {
233  for (int a = 0; a < m_Nc; ++a) {
234  for (int b = 0; b < m_Nc; ++b) {
235  va[2 * (b + m_Nc * a)] = 0.0;
236  va[2 * (b + m_Nc * a) + 1] = 0.0;
237  for (int c = 0; c < m_Nc; ++c) {
238  va[2 * (b + m_Nc * a)] +=
239  u1.va[2 * (a + m_Nc * c)] * u2.va[2 * (b + m_Nc * c)]
240  + u1.va[2 * (a + m_Nc * c) + 1] * u2.va[2 * (b + m_Nc * c) + 1];
241  va[2 * (b + m_Nc * a) + 1] -=
242  u1.va[2 * (a + m_Nc * c) + 1] * u2.va[2 * (b + m_Nc * c)]
243  - u1.va[2 * (a + m_Nc * c)] * u2.va[2 * (b + m_Nc * c) + 1];
244  }
245  }
246  }
247  }
248 
249  void multadd_dn(const Mat_SU_N& u1, const Mat_SU_N& u2)
250  {
251  for (int a = 0; a < m_Nc; ++a) {
252  for (int b = 0; b < m_Nc; ++b) {
253  for (int c = 0; c < m_Nc; ++c) {
254  va[2 * (b + m_Nc * a)] +=
255  u1.va[2 * (a + m_Nc * c)] * u2.va[2 * (b + m_Nc * c)]
256  + u1.va[2 * (a + m_Nc * c) + 1] * u2.va[2 * (b + m_Nc * c) + 1];
257  va[2 * (b + m_Nc * a) + 1] -=
258  u1.va[2 * (a + m_Nc * c) + 1] * u2.va[2 * (b + m_Nc * c)]
259  - u1.va[2 * (a + m_Nc * c)] * u2.va[2 * (b + m_Nc * c) + 1];
260  }
261  }
262  }
263  }
264 
265  void zcopy(double re, double im, const Mat_SU_N& v)
266  {
267  for (int cc = 0; cc < m_Nc * m_Nc; ++cc) {
268  va[2 * cc] = re * v.va[2 * cc] - im * v.va[2 * cc + 1];
269  va[2 * cc + 1] = re * v.va[2 * cc + 1] + im * v.va[2 * cc];
270  }
271  }
272 
273  void zaxpy(double re, double im, const Mat_SU_N& v)
274  {
275  for (int cc = 0; cc < m_Nc * m_Nc; ++cc) {
276  va[2 * cc] += re * v.va[2 * cc] - im * v.va[2 * cc + 1];
277  va[2 * cc + 1] += re * v.va[2 * cc + 1] + im * v.va[2 * cc];
278  }
279  }
280  }; // end of class definition.
281 
282 
284  {
285  for (int a = 0; a < m_Nc; ++a) {
286  for (int b = a; b < m_Nc; ++b) {
287  double re = va[2 * (m_Nc * a + b)];
288  double im = va[2 * (m_Nc * a + b) + 1];
289 
290  va[2 * (m_Nc * a + b)] = va[2 * (m_Nc * b + a)];
291  va[2 * (m_Nc * a + b) + 1] = -va[2 * (m_Nc * b + a) + 1];
292 
293  va[2 * (m_Nc * b + a)] = re;
294  va[2 * (m_Nc * b + a) + 1] = -im;
295  }
296  }
297  return *this;
298  }
299 
300 
301  inline Mat_SU_N& Mat_SU_N::ht() // hermitian traceless
302  {
303  for (int a = 0; a < m_Nc; ++a) {
304  for (int b = a + 1; b < m_Nc; ++b) {
305  double re = va[2 * (m_Nc * a + b)] + va[2 * (m_Nc * b + a)];
306  double im = va[2 * (m_Nc * a + b) + 1] - va[2 * (m_Nc * b + a) + 1];
307 
308  va[2 * (m_Nc * a + b)] = 0.5 * re;
309  va[2 * (m_Nc * a + b) + 1] = 0.5 * im;
310 
311  va[2 * (m_Nc * b + a)] = 0.5 * re;
312  va[2 * (m_Nc * b + a) + 1] = -0.5 * im;
313  }
314  }
315  double tr = 0.0;
316  for (int cc = 0; cc < m_Nc; ++cc) {
317  tr += va[2 * (m_Nc * cc + cc)];
318  }
319  tr = tr / m_Nc;
320  for (int cc = 0; cc < m_Nc; ++cc) {
321  va[2 * (m_Nc * cc + cc)] -= tr;
322  va[2 * (m_Nc * cc + cc) + 1] = 0.0;
323  }
324  return *this;
325  }
326 
327 
330  {
331  for (int a = 0; a < m_Nc; ++a) {
332  for (int b = a + 1; b < m_Nc; ++b) {
333  double re = va[2 * (m_Nc * a + b)] - va[2 * (m_Nc * b + a)];
334  double im = va[2 * (m_Nc * a + b) + 1] + va[2 * (m_Nc * b + a) + 1];
335 
336  va[2 * (m_Nc * a + b)] = 0.5 * re;
337  va[2 * (m_Nc * a + b) + 1] = 0.5 * im;
338 
339  va[2 * (m_Nc * b + a)] = -0.5 * re;
340  va[2 * (m_Nc * b + a) + 1] = 0.5 * im;
341  }
342  }
343  double tr = 0.0;
344  for (int cc = 0; cc < m_Nc; ++cc) {
345  tr += va[2 * (m_Nc * cc + cc) + 1];
346  }
347  tr = tr / m_Nc;
348  for (int cc = 0; cc < m_Nc; ++cc) {
349  va[2 * (m_Nc * cc + cc)] = 0.0;
350  va[2 * (m_Nc * cc + cc) + 1] -= tr;
351  }
352  return *this;
353  }
354 
355 
358  {
359  for (int a = 0; a < m_Nc; ++a) {
360  for (int b = a; b < m_Nc; ++b) {
361  double re = va[2 * (m_Nc * a + b)] - va[2 * (m_Nc * b + a)];
362  double im = va[2 * (m_Nc * a + b) + 1] + va[2 * (m_Nc * b + a) + 1];
363  va[2 * (m_Nc * a + b)] = 0.5 * re;
364  va[2 * (m_Nc * a + b) + 1] = 0.5 * im;
365  va[2 * (m_Nc * b + a)] = -0.5 * re;
366  va[2 * (m_Nc * b + a) + 1] = 0.5 * im;
367  }
368  }
369  return *this;
370  }
371 
372 
374  {
375  va = 0.0;
376  for (int c = 0; c < m_Nc; ++c) {
377  va[2 * (m_Nc + 1) * c] = 1.0;
378  }
379  return *this;
380  }
381 
382 
384  {
385  va = 0.0;
386  return *this;
387  }
388 
389 
391  {
392  for (int c = 0; c < va.size() / 2; ++c) {
393  double tmp = va[2 * c];
394  va[2 * c] = -va[2 * c + 1];
395  va[2 * c + 1] = tmp;
396  }
397  return *this;
398  }
399 
400 
402  {
403  va = -va;
404  return *this;
405  }
406 
407 
409  {
410  va += rhs.va;
411  return *this;
412  }
413 
414 
416  {
417  va -= rhs.va;
418  return *this;
419  }
420 
421 
422  inline Mat_SU_N& Mat_SU_N::operator=(const double& rhs)
423  {
424  va = rhs;
425  return *this;
426  }
427 
428 
429  inline Mat_SU_N& Mat_SU_N::operator+=(const double& rhs)
430  {
431  va += rhs;
432  return *this;
433  }
434 
435 
436  inline Mat_SU_N& Mat_SU_N::operator-=(const double& rhs)
437  {
438  va -= rhs;
439  return *this;
440  }
441 
442 
444  {
445  std::valarray<double> tmp(2 * m_Nc * m_Nc);
446 
447  for (int a = 0; a < m_Nc; ++a) {
448  for (int b = 0; b < m_Nc; ++b) {
449  tmp[2 * (m_Nc * a + b)] = 0.0;
450  tmp[2 * (m_Nc * a + b) + 1] = 0.0;
451  for (int c = 0; c < m_Nc; ++c) {
452  tmp[2 * (m_Nc * a + b)] += va[2 * (m_Nc * a + c)] * rhs.va[2 * (m_Nc * c + b)]
453  - va[2 * (m_Nc * a + c) + 1] * rhs.va[2 * (m_Nc * c + b) + 1];
454  tmp[2 * (m_Nc * a + b) + 1] += va[2 * (m_Nc * a + c) + 1] * rhs.va[2 * (m_Nc * c + b)]
455  + va[2 * (m_Nc * a + c)] * rhs.va[2 * (m_Nc * c + b) + 1];
456  }
457  }
458  }
459  va = tmp;
460  return *this;
461  }
462 
463 
464  inline Mat_SU_N& Mat_SU_N::operator*=(const double& rhs)
465  {
466  va *= rhs;
467  return *this;
468  }
469 
470 
471 /*
472 inline Mat_SU_N& Mat_SU_N::operator*=(const std::complex<double>& rhs){
473  std::valarray<double> tmp = va;
474  for(int c = 0; c < va.size()/2; ++c){
475  va[2*c ] = (tmp[2*c]*real(rhs) -tmp[2*c+1]*imag(rhs));
476  va[2*c+1] = (tmp[2*c]*imag(rhs) +tmp[2*c+1]*real(rhs));
477  }
478  return *this;
479 }
480 */
481  inline Mat_SU_N& Mat_SU_N::operator/=(const double& rhs)
482  {
483  va /= rhs;
484  return *this;
485  }
486 
487 
488  inline double ReTr(const Mat_SU_N& m)
489  {
490  int Nc = m.nc();
491  double tr = 0.0;
492 
493  for (int c = 0; c < Nc; ++c) {
494  tr += m.r(c, c);
495  }
496  return tr;
497  }
498 
499 
500  inline double ImTr(const Mat_SU_N& m)
501  {
502  int Nc = m.nc();
503  double tr = 0.0;
504 
505  for (int c = 0; c < Nc; ++c) {
506  tr += m.i(c, c);
507  }
508  return tr;
509  }
510 
511 
512  inline Mat_SU_N dag(const Mat_SU_N& u)
513  {
514  int Nc = u.nc();
515  Mat_SU_N tmp(Nc);
516 
517  for (int a = 0; a < Nc; a++) {
518  for (int b = 0; b < Nc; b++) {
519  tmp.set(a, b, u.r(b, a), -u.i(b, a));
520  }
521  }
522  return tmp;
523  }
524 
525 
526  inline Mat_SU_N xI(const Mat_SU_N& u)
527  {
528  int Nc = u.nc();
529  Mat_SU_N tmp(Nc);
530 
531  for (int c = 0; c < u.size() / 2; ++c) {
532  tmp.set(c, -u.i(c), u.r(c));
533  }
534  return tmp;
535  }
536 
537 
538  inline Mat_SU_N operator+(const Mat_SU_N& m1, const Mat_SU_N& m2)
539  {
540  return Mat_SU_N(m1) += m2;
541  }
542 
543 
544  inline Mat_SU_N operator-(const Mat_SU_N& m1, const Mat_SU_N& m2)
545  {
546  return Mat_SU_N(m1) -= m2;
547  }
548 
549 
550  inline Mat_SU_N operator*(const Mat_SU_N& m1, const Mat_SU_N& m2)
551  {
552  return Mat_SU_N(m1) *= m2;
553  }
554 
555 
556  inline Mat_SU_N operator*(const Mat_SU_N& m, const double a)
557  {
558  return Mat_SU_N(m) *= a;
559  }
560 
561 
562  inline Mat_SU_N operator*(const double a, const Mat_SU_N& m)
563  {
564  return Mat_SU_N(m) *= a;
565  }
566 
567 
568  inline Mat_SU_N reunit(const Mat_SU_N& m)
569  {
570  Mat_SU_N tmp = m;
571 
572  tmp.reunit();
573  return tmp;
574  }
575 
576 
577  inline Mat_SU_N mat_exp(const double alpha, const Mat_SU_N& iv, const Mat_SU_N& u, const int Nprec)
578  {
579  // w = exp(alpha * iv) * u
580  // = (u + alpha * iv * (u + alpha/2 * iv * ( ... (u + alpha/n * iv * u) ... )
581 
582  Mat_SU_N p(u), tmp(u);
583 
584  tmp = u;
585 
586  for (int iprec = 0; iprec < Nprec; ++iprec) {
587  double exp_factor = alpha / (Nprec - iprec);
588 
589  p = iv * tmp;
590  p *= exp_factor;
591  tmp = p;
592  tmp += u; // w' = u + alpha/(n-k) alpha iv ( w )
593  }
594 
595  return tmp.reunit();
596  }
597 } // namespace SU_N
598 #endif
Mat_SU_N & reunit_SU2()
Definition: mat_SU_N.cpp:91
double i(int c) const
Definition: mat_SU_N.h:115
Mat_SU_N & set_random(RandomNumbers *rand)
Definition: mat_SU_N.h:76
void mult_dn(const Mat_SU_N &u1, const Mat_SU_N &u2)
Definition: mat_SU_N.h:231
Mat_SU_N operator+(const Mat_SU_N &m1, const Mat_SU_N &m2)
Definition: mat_SU_N.h:538
void add(int c1, int c2, const double &re, const double &im)
Definition: mat_SU_N.h:150
Mat_SU_N & operator-()
Definition: mat_SU_N.h:401
Mat_SU_N & zero()
Definition: mat_SU_N.h:383
Mat_SU_N & dag()
Definition: mat_SU_N.h:283
Mat_SU_N & operator=(const double &)
Definition: mat_SU_N.h:422
Mat_SU_N & set_random_SU3(RandomNumbers *)
Definition: mat_SU_N.cpp:148
Mat_SU_N & operator/=(const double &)
Definition: mat_SU_N.h:481
double r(int c1, int c2) const
Definition: mat_SU_N.h:117
Mat_SU_N & operator+=(const Mat_SU_N &)
Definition: mat_SU_N.h:408
Mat_SU_N & at()
antihermitian traceless
Definition: mat_SU_N.h:329
Mat_SU_N(int Nc, double r=0.0)
Definition: mat_SU_N.h:46
void set(int c1, int c2, const double &re, const double &im)
Definition: mat_SU_N.h:139
void zcopy(double re, double im, const Mat_SU_N &v)
Definition: mat_SU_N.h:265
void multadd_dn(const Mat_SU_N &u1, const Mat_SU_N &u2)
Definition: mat_SU_N.h:249
Mat_SU_N & operator-=(const Mat_SU_N &)
Definition: mat_SU_N.h:415
Mat_SU_N & reunit()
Definition: mat_SU_N.h:71
void set_i(int c, const double &im)
Definition: mat_SU_N.h:121
void add(int c, const double &re, const double &im)
Definition: mat_SU_N.h:144
Mat_SU_N dag(const Mat_SU_N &u)
Definition: mat_SU_N.h:512
void set_r(int c, const double &re)
Definition: mat_SU_N.h:120
Mat_SU_N & xI()
Definition: mat_SU_N.h:390
void multadd_nn(const Mat_SU_N &u1, const Mat_SU_N &u2)
Definition: mat_SU_N.h:181
Mat_SU_N & set_random_general(RandomNumbers *)
Definition: mat_SU_N.cpp:196
Mat_SU_N reunit(const Mat_SU_N &m)
Definition: mat_SU_N.h:568
Mat_SU_N xI(const Mat_SU_N &u)
Definition: mat_SU_N.h:526
void set_i(int c1, int c2, const double &im)
Definition: mat_SU_N.h:128
void set_r(int c1, int c2, const double &re)
Definition: mat_SU_N.h:123
Mat_SU_N & ah()
antihermitian
Definition: mat_SU_N.h:357
double ImTr(const Mat_SU_N &m)
Definition: mat_SU_N.h:500
void mult_nd(const Mat_SU_N &u1, const Mat_SU_N &u2)
Definition: mat_SU_N.h:197
Mat_SU_N operator-(const Mat_SU_N &m1, const Mat_SU_N &m2)
Definition: mat_SU_N.h:544
std::valarray< double > va
Definition: mat_SU_N.h:38
double i(int c1, int c2) const
Definition: mat_SU_N.h:118
int size() const
Definition: mat_SU_N.h:113
void multadd_nd(const Mat_SU_N &u1, const Mat_SU_N &u2)
Definition: mat_SU_N.h:215
int nc() const
Definition: mat_SU_N.h:86
double norm2()
Definition: mat_SU_N.h:155
Mat_SU_N operator*(const Mat_SU_N &m1, const Mat_SU_N &m2)
Definition: mat_SU_N.h:550
Mat_SU_N & operator*=(const Mat_SU_N &)
Definition: mat_SU_N.h:443
Base class of random number generators.
Definition: randomNumbers.h:43
Mat_SU_N & reunit_general()
Definition: mat_SU_N.cpp:117
Mat_SU_N mat_exp(const double alpha, const Mat_SU_N &iv, const Mat_SU_N &u, const int Nprec)
Definition: mat_SU_N.h:577
Mat_SU_N & unit()
Definition: mat_SU_N.h:373
Mat_SU_N & ht()
Definition: mat_SU_N.h:301
double r(int c) const
Definition: mat_SU_N.h:114
Mat_SU_N &(Mat_SU_N::* m_reunit)()
Definition: mat_SU_N.h:39
void set(int c, double re, const double &im)
Definition: mat_SU_N.h:133
Mat_SU_N & reunit_SU3()
Definition: mat_SU_N.cpp:18
void zaxpy(double re, double im, const Mat_SU_N &v)
Definition: mat_SU_N.h:273
Mat_SU_N &(SU_N::Mat_SU_N::* m_set_random)(RandomNumbers *)
pointer to reunitalization.
Definition: mat_SU_N.h:40
void mult_nn(const Mat_SU_N &u1, const Mat_SU_N &u2)
Definition: mat_SU_N.h:163
Mat_SU_N & set_random_SU2(RandomNumbers *)
Definition: mat_SU_N.cpp:186
double ReTr(const Mat_SU_N &m)
Definition: mat_SU_N.h:488