Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mat_SU_N.cpp
Go to the documentation of this file.
1 
14 #include "mat_SU_N.h"
15 using namespace SU_N;
16 
17 #include <cassert>
18 
19 #include "randomNumbers.h"
20 
21 //==========================================================
23 {
24  // This implementation is applicable only to SU(3).
25  // H.Matsufuru [5 Feb 2012]
26 
27  assert(m_Nc == 3);
28 
29  Mat_SU_N rhs(m_Nc);
30  for (int i = 0; i < 2 * m_Nc * m_Nc; ++i) {
31  rhs.va[i] = va[i];
32  }
33 
34  double sn1 = 1.0 / (rhs.va[0] * rhs.va[0] + rhs.va[1] * rhs.va[1]
35  + rhs.va[2] * rhs.va[2] + rhs.va[3] * rhs.va[3]
36  + rhs.va[4] * rhs.va[4] + rhs.va[5] * rhs.va[5]);
37  sn1 = sqrt(sn1);
38 
39  va[0] = rhs.va[0] * sn1;
40  va[1] = rhs.va[1] * sn1;
41  va[2] = rhs.va[2] * sn1;
42  va[3] = rhs.va[3] * sn1;
43  va[4] = rhs.va[4] * sn1;
44  va[5] = rhs.va[5] * sn1;
45 
46  double sp1r = va[0] * rhs.va[6] + va[1] * rhs.va[7]
47  + va[2] * rhs.va[8] + va[3] * rhs.va[9]
48  + va[4] * rhs.va[10] + va[5] * rhs.va[11];
49  double sp1i = va[0] * rhs.va[7] - va[1] * rhs.va[6]
50  + va[2] * rhs.va[9] - va[3] * rhs.va[8]
51  + va[4] * rhs.va[11] - va[5] * rhs.va[10];
52 
53  va[6] = rhs.va[6] - sp1r * va[0] + sp1i * va[1];
54  va[7] = rhs.va[7] - sp1r * va[1] - sp1i * va[0];
55  va[8] = rhs.va[8] - sp1r * va[2] + sp1i * va[3];
56  va[9] = rhs.va[9] - sp1r * va[3] - sp1i * va[2];
57  va[10] = rhs.va[10] - sp1r * va[4] + sp1i * va[5];
58  va[11] = rhs.va[11] - sp1r * va[5] - sp1i * va[4];
59 
60  double sn2 = 1.0 / (va[6] * va[6] + va[7] * va[7]
61  + va[8] * va[8] + va[9] * va[9]
62  + va[10] * va[10] + va[11] * va[11]);
63  sn2 = sqrt(sn2);
64 
65  va[6] = va[6] * sn2;
66  va[7] = va[7] * sn2;
67  va[8] = va[8] * sn2;
68  va[9] = va[9] * sn2;
69  va[10] = va[10] * sn2;
70  va[11] = va[11] * sn2;
71 
72  va[12] = va[2] * va[10] - va[3] * va[11]
73  - va[4] * va[8] + va[5] * va[9];
74 
75  va[13] = -va[2] * va[11] - va[3] * va[10]
76  + va[4] * va[9] + va[5] * va[8];
77 
78  va[14] = va[4] * va[6] - va[5] * va[7]
79  - va[0] * va[10] + va[1] * va[11];
80 
81  va[15] = -va[4] * va[7] - va[5] * va[6]
82  + va[0] * va[11] + va[1] * va[10];
83 
84  va[16] = va[0] * va[8] - va[1] * va[9]
85  - va[2] * va[6] + va[3] * va[7];
86 
87  va[17] = -va[0] * va[9] - va[1] * va[8]
88  + va[2] * va[7] + va[3] * va[6];
89 
90  return *this;
91 }
92 
93 
94 //==========================================================
96 {
97  // temporary implementation: only applicable to SU(3).
98  // H.Matsufuru [5 Feb 2012]
99 
100  assert(m_Nc == 3);
101 
102  static const double PI = 4.0 * atan(1.0);
103  double PI2 = 2.0 * PI;
104 
105  for (int j = 0; j < m_Nc; ++j) {
106  int j2 = j * 2 * m_Nc;
107  double rn1 = rand->get();
108  double rn2 = rand->get();
109  double rn3 = rand->get();
110  double rn4 = rand->get();
111  double rn5 = rand->get();
112 
113  double c1 = 1.0 - 2.0 * rn1;
114  double s1 = sqrt(1.0 - c1 * c1);
115  double v1_2 = s1 * cos(PI2 * rn2);
116  double v1_3 = s1 * sin(PI2 * rn2);
117 
118  va[j2 + 0] = c1 * cos(PI2 * rn3);
119  va[j2 + 1] = c1 * sin(PI2 * rn3);
120  va[j2 + 2] = v1_2 * cos(PI2 * rn4);
121  va[j2 + 3] = v1_2 * sin(PI2 * rn4);
122  va[j2 + 4] = v1_3 * cos(PI2 * rn5);
123  va[j2 + 5] = v1_3 * sin(PI2 * rn5);
124  }
125 
126  reunit();
127 
128  return *this;
129 }
130 
131 
132 //==========================================================
133 //==================================================END=====