Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
gammaMatrix.cpp
Go to the documentation of this file.
1 
14 #include "gammaMatrix.h"
15 
16 #include <cassert>
17 
18 #include "commonParameters.h"
19 #include "communicator.h"
20 #include "bridgeIO.h"
21 using Bridge::vout;
22 
23 //====================================================================
24 void GammaMatrix::set(int row, int index, icomplex val)
25 {
26  assert(row < m_Nd);
27  assert(index < m_Nd);
28 
29  m_gmindex[row] = index; // m_gmindex[a] = b(=index) if \gamma_{ab} \not=0 (SA)
30  m_gmval_i[row] = val; // m_gmval_i[a] = \gamma_{ab}(=val) in complex<int> (SA)
31 
32  set_values(row);
33 }
34 
35 
36 //====================================================================
38 {
39  // \gamma2_{ab}=\gamma_{ac} * \gamma1_{cb} (SA)
40 
41  GammaMatrix gm2;
42 
43  for (int row = 0; row < m_Nd; ++row) {
44  gm2.m_gmindex[row] = gm1.m_gmindex[m_gmindex[row]];
45  gm2.m_gmval_i[row] = m_gmval_i[row]
46  * gm1.m_gmval_i[m_gmindex[row]];
47  // \gamma_{ac} * \gamma1_{cb}, c=m_gmindex[a], (a=row) (SA)
48 
49  gm2.set_values(row);
50  }
51 
52  return gm2;
53 }
54 
55 
56 //====================================================================
58 {
59  // \gamma2_{ab}=i * \gamma_{ac} * \gamma1_{cb} (SA)
60 
61  GammaMatrix gm2;
62 
63  for (int row = 0; row < m_Nd; ++row) {
64  gm2.m_gmindex[row] = gm1.m_gmindex[m_gmindex[row]];
65  gm2.m_gmval_i[row] = icomplex(0, 1) * m_gmval_i[row]
66  * gm1.m_gmval_i[m_gmindex[row]];
67  gm2.set_values(row);
68  }
69 
70  return gm2;
71 }
72 
73 
74 //====================================================================
76 {
77  for (int row = 0; row < m_Nd; ++row) {
78  if (m_gmindex[row] == 0) {
79  vout.general(m_vl, " (%2d,%2d)\n",
80  real(m_gmval_i[row]), imag(m_gmval_i[row]));
81  } else if (m_gmindex[row] == 1) {
82  vout.general(m_vl, " (%2d,%2d)\n",
83  real(m_gmval_i[row]), imag(m_gmval_i[row]));
84  } else if (m_gmindex[row] == 2) {
85  vout.general(m_vl, " (%2d,%2d)\n",
86  real(m_gmval_i[row]), imag(m_gmval_i[row]));
87  } else if (m_gmindex[row] == 3) {
88  vout.general(m_vl, " (%2d,%2d)\n",
89  real(m_gmval_i[row]), imag(m_gmval_i[row]));
90  } else {
91  vout.general(m_vl, "gamma matrix not defined: GammaMatrix::print().\n");
92  abort();
93  }
94  }
95 }
96 
97 
98 //====================================================================
100 {
101  m_gmvalue[row] = cmplx((double)real(m_gmval_i[row]),
102  (double)imag(m_gmval_i[row]));
103  // m_gmvalue[a] = \gamma_{ab} in complex<double> (SA)
104 
105  if (real(m_gmval_i[row]) != 0) { // if \gamma_{ab} is real (SA)
106  m_gmindex_c[row] = 0;
107  m_gmvalue_r[row] = real(m_gmvalue[row]);
108  m_gmvalue_i[row] = real(m_gmvalue[row]);
109  } else if (imag(m_gmval_i[row]) != 0) { // if \gamma_{ab} is complex (SA)
110  m_gmindex_c[row] = 1;
111  m_gmvalue_r[row] = -imag(m_gmvalue[row]);
112  m_gmvalue_i[row] = imag(m_gmvalue[row]);
113  } else {
114  vout.general(m_vl, "something wrong in GammaMatrix::set_doublerepr().\n");
115  abort();
116  }
117 }
118 
119 
120 //====================================================================
122 {
123  // n * \gamma_{ab} (SA)
124 
125  GammaMatrix gm2;
126 
127  for (int row = 0; row < m_Nd; ++row) {
128  gm2.m_gmindex[row] = m_gmindex[row];
129  gm2.m_gmval_i[row] = m_gmval_i[row] * icomplex(n, 0);
130  gm2.set_values(row);
131  }
132 
133  return gm2;
134 }
135 
136 
137 //====================================================================
138 //============================================================END=====