Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
field_F.h
Go to the documentation of this file.
1 
14 #ifndef FIELD_F_INCLUDED
15 #define FIELD_F_INCLUDED
16 
17 #include "commonParameters.h"
18 #include "communicator.h"
19 #include "field.h"
20 #include "field_G.h"
21 #include "vec_SU_N.h"
22 #include "gammaMatrix.h"
23 
24 #include "bridgeIO.h"
25 using Bridge::vout;
26 
28 
37 class Field_F : public Field
38 {
39  private:
40  int m_Nc; // num of the color elements
41  int m_Nc2; // num of the double color elements
42  int m_Nd; // num of the spinor elements
43 
44  inline
45  int myindex(const int c2, const int s, const int site, const int ex)
46  const
47  {
48  return Field::myindex(c2 + m_Nc2 * s, site, ex);
49  }
50 
51  public:
52 
53  explicit
54  Field_F(const int Nvol = CommonParameters::Nvol(), const int Nex = 1) :
55  Field(
56  2 * CommonParameters::Nc() * CommonParameters::Nd(), Nvol, Nex, COMPLEX
57  ),
58  m_Nc(CommonParameters::Nc()),
59  m_Nc2(2 * CommonParameters::Nc()),
60  m_Nd(CommonParameters::Nd())
61  {
62  check();
63  }
64 
65  Field_F clone() const
66  {
67  return Field_F(nvol(), nex());
68  }
69 
70  // conversion from Field type
71 
72  Field_F(const Field& x) :
73  Field(x),
74  m_Nc(CommonParameters::Nc()),
75  m_Nc2(2 * CommonParameters::Nc()),
76  m_Nd(CommonParameters::Nd())
77  {
78  check();
79  }
80 
81  void reset(int Nvol, int Nex)
82  {
83  Field::reset(m_Nc2 * m_Nd, Nvol, Nex);
84  }
85 
86  // assignment
87  Field_F& operator=(const double a) { field = a; return *this; }
88 
89  int nc() const { return m_Nc; }
90  int nc2() const { return m_Nc2; }
91  int nd() const { return m_Nd; }
92 
93  // accessors
94  double cmp_r(const int cc, const int s, const int site, const int e = 0)
95  const
96  {
97  return field[myindex(2 * cc, s, site, e)];
98  }
99 
100  double cmp_i(const int cc, const int s, const int site, const int e = 0)
101  const
102  {
103  return field[myindex(2 * cc + 1, s, site, e)];
104  }
105 
106  void set_r(const int cc, const int s, const int site, const int e, const double re)
107  {
108  field[myindex(2 * cc, s, site, e)] = re;
109  }
110 
111  void set_i(const int cc, const int s, const int site, const int e, const double im)
112  {
113  field[myindex(2 * cc + 1, s, site, e)] = im;
114  }
115 
116  void set_ri(const int cc, const int s, const int site, const int e, const double re, const double im)
117  {
118  field[myindex(2 * cc, s, site, e)] = re;
119  field[myindex(2 * cc + 1, s, site, e)] = im;
120  }
121 
122  Vec_SU_N vec(const int s, const int site, const int e = 0) const
123  {
124  Vec_SU_N Tmp;
125 
126  for (int cc = 0; cc < m_Nc; ++cc) {
127  Tmp.set(cc,
128  field[myindex(2 * cc, s, site, e)],
129  field[myindex(2 * cc + 1, s, site, e)]);
130  }
131  return Tmp;
132  }
133 
134  void set_vec(const int s, const int site, const int e, const Vec_SU_N& F)
135  {
136  for (int cc = 0; cc < m_Nc; ++cc) {
137  field[myindex(2 * cc, s, site, e)] = F.r(cc);
138  field[myindex(2 * cc + 1, s, site, e)] = F.i(cc);
139  }
140  }
141 
142  void add_vec(const int s, const int site, const int e, const Vec_SU_N& F)
143  {
144  for (int cc = 0; cc < m_Nc; ++cc) {
145  field[myindex(2 * cc, s, site, e)] += F.r(cc);
146  field[myindex(2 * cc + 1, s, site, e)] += F.i(cc);
147  }
148  }
149 
150  void clear_vec(const int s, const int site, const int e)
151  {
152  for (int cc = 0; cc < m_Nc2; ++cc) {
153  field[myindex(cc, s, site, e)] = 0.0;
154  }
155  }
156 
157  void xI()
158  {
159  assert(field_element_type() == COMPLEX);
160 
161  // assume that components of complex are stored in pair: (real, imag), ...
162  for (int i = 0, n = ntot(); i < n; i += 2) {
163  double r = field[i];
164  field[i] = -field[i + 1];
165  field[i + 1] = r;
166  }
167  }
168 
169  void Ix(const Field_F& w)
170  {
171  // assert(m_Nin = w.m_Nin);
172  // assert(m_Nvol = w.m_Nvol);
173  // assert(m_Nex = w.m_Nex);
174 
175  // assume that components of complex are stored in pair: (real, imag), ...
176  for (int i = 0, n = ntot(); i < n; i += 2) {
177  double r = w.field[i]; // it should be safe if w = this.
178  field[i] = -w.field[i + 1];
179  field[i + 1] = r;
180  }
181  }
182 
183  private:
184 
186  void check();
187 };
188 
189 
190 // function style
191 
192 void mult_Field_Gn(Field_F& y, const int ex,
193  const Field_G& u, int ex1,
194  const Field_F& x, int ex2);
195 
196 void mult_Field_Gd(Field_F& y, const int ex,
197  const Field_G& u, int ex1,
198  const Field_F& x, int ex2);
199 
200 void multadd_Field_Gn(Field_F& y, const int ex,
201  const Field_G& u, int ex1,
202  const Field_F& x, int ex2,
203  const double a);
204 
205 void multadd_Field_Gd(Field_F& y, const int ex,
206  const Field_G& u, int ex1,
207  const Field_F& x, int ex2,
208  const double a);
209 
211 void mult_GM(Field_F& y,
212  const GammaMatrix& gm,
213  const Field_F& x);
214 
216 void mult_iGM(Field_F& y,
217  const GammaMatrix& gm,
218  const Field_F& x);
219 
221 void mult_GMproj(Field_F& y,
222  const int pm, const GammaMatrix& gm,
223  const Field_F& x);
224 
226 void mult_GMproj2(Field_F& y,
227  const int pm, const GammaMatrix& gm,
228  const Field_F& x);
229 
230 #endif
void mult_Field_Gd(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2)
BridgeIO vout
Definition: bridgeIO.cpp:207
double cmp_i(const int cc, const int s, const int site, const int e=0) const
Definition: field_F.h:100
double r(const int c) const
Definition: vec_SU_N.h:65
void set_vec(const int s, const int site, const int e, const Vec_SU_N &F)
Definition: field_F.h:134
void set_i(const int cc, const int s, const int site, const int e, const double im)
Definition: field_F.h:111
Container of Field-type object.
Definition: field.h:37
void check()
check several assumptions for performance implementation.
Definition: field_F_imp.cpp:29
Field_F clone() const
Definition: field_F.h:65
int nvol() const
Definition: field.h:101
void clear_vec(const int s, const int site, const int e)
Definition: field_F.h:150
int m_Nc
Definition: field_F.h:40
int myindex(const int c2, const int s, const int site, const int ex) const
Definition: field_F.h:45
void multadd_Field_Gn(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2, const double a)
Wilson-type fermion field.
Definition: field_F.h:37
void mult_GMproj2(Field_F &y, const int pm, const GammaMatrix &gm, const Field_F &x)
projection with gamma matrix: (1 gamma)
void set(const int c, const double re, const double im)
Definition: vec_SU_N.h:74
Gamma Matrix class.
Definition: gammaMatrix.h:45
SU(N) gauge field.
Definition: field_G.h:36
void reset(int Nvol, int Nex)
Definition: field_F.h:81
void set_r(const int cc, const int s, const int site, const int e, const double re)
Definition: field_F.h:106
void Ix(const Field_F &w)
Definition: field_F.h:169
void mult_iGM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication (i is multiplied)
Definition: field_F_imp.cpp:94
double i(const int c) const
Definition: vec_SU_N.h:67
void multadd_Field_Gd(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2, const double a)
void set_ri(const int cc, const int s, const int site, const int e, const double re, const double im)
Definition: field_F.h:116
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:82
void xI()
Definition: field_F.h:157
int nex() const
Definition: field.h:102
Common parameter class: provides parameters as singleton.
int m_Nd
Definition: field_F.h:42
std::valarray< double > field
Definition: field.h:49
void mult_Field_Gn(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2)
void mult_GM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication
Definition: field_F_imp.cpp:39
int nc() const
Definition: field_F.h:89
int ntot() const
Definition: field.h:105
element_type field_element_type() const
Definition: field.h:103
Field_F & operator=(const double a)
Definition: field_F.h:87
int nc2() const
Definition: field_F.h:90
Vec_SU_N vec(const int s, const int site, const int e=0) const
Definition: field_F.h:122
Field_F(const int Nvol=CommonParameters::Nvol(), const int Nex=1)
Definition: field_F.h:54
void add_vec(const int s, const int site, const int e, const Vec_SU_N &F)
Definition: field_F.h:142
void mult_GMproj(Field_F &y, const int pm, const GammaMatrix &gm, const Field_F &x)
projection with gamma matrix: (1 gamma)/2
int nd() const
Definition: field_F.h:91
int myindex(const int jin, const int site, const int jex) const
Definition: field.h:52
Field_F(const Field &x)
Definition: field_F.h:72
int m_Nc2
Definition: field_F.h:41
double cmp_r(const int cc, const int s, const int site, const int e=0) const
Definition: field_F.h:94