Bridge++  Version 1.4.4
 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 "field_G.h"
18 #include "Tools/vec_SU_N.h"
19 #include "Tools/gammaMatrix.h"
21 
22 #include "IO/bridgeIO.h"
23 using Bridge::vout;
24 
26 
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  Field_F& operator=(const Field_F& v) { copy(*this, v); return *this; }
89 
90  int nc() const { return m_Nc; }
91  int nc2() const { return m_Nc2; }
92  int nd() const { return m_Nd; }
93 
94  // accessors
95  double cmp_r(const int cc, const int s, const int site, const int e = 0)
96  const
97  {
98  return field[myindex(2 * cc, s, site, e)];
99  }
100 
101  double cmp_i(const int cc, const int s, const int site, const int e = 0)
102  const
103  {
104  return field[myindex(2 * cc + 1, s, site, e)];
105  }
106 
107  void set_r(const int cc, const int s, const int site, const int e, const double re)
108  {
109  field[myindex(2 * cc, s, site, e)] = re;
110  }
111 
112  void set_i(const int cc, const int s, const int site, const int e, const double im)
113  {
114  field[myindex(2 * cc + 1, s, site, e)] = im;
115  }
116 
117  void set_ri(const int cc, const int s, const int site, const int e, const double re, const double im)
118  {
119  field[myindex(2 * cc, s, site, e)] = re;
120  field[myindex(2 * cc + 1, s, site, e)] = im;
121  }
122 
123  Vec_SU_N vec(const int s, const int site, const int e = 0) const
124  {
125  Vec_SU_N Tmp;
126 
127  for (int cc = 0; cc < m_Nc; ++cc) {
128  Tmp.set(cc,
129  field[myindex(2 * cc, s, site, e)],
130  field[myindex(2 * cc + 1, s, site, e)]);
131  }
132  return Tmp;
133  }
134 
135  void set_vec(const int s, const int site, const int e, const Vec_SU_N& F)
136  {
137  for (int cc = 0; cc < m_Nc; ++cc) {
138  field[myindex(2 * cc, s, site, e)] = F.r(cc);
139  field[myindex(2 * cc + 1, s, site, e)] = F.i(cc);
140  }
141  }
142 
143  void add_vec(const int s, const int site, const int e, const Vec_SU_N& F)
144  {
145  for (int cc = 0; cc < m_Nc; ++cc) {
146  field[myindex(2 * cc, s, site, e)] += F.r(cc);
147  field[myindex(2 * cc + 1, s, site, e)] += F.i(cc);
148  }
149  }
150 
151  void clear_vec(const int s, const int site, const int e)
152  {
153  for (int cc = 0; cc < m_Nc2; ++cc) {
154  field[myindex(cc, s, site, e)] = 0.0;
155  }
156  }
157 
158  void xI()
159  {
160  assert(field_element_type() == COMPLEX);
161 
162  // // assume that components of complex are stored in pair: (real, imag), ...
163  // for (int i = 0, n = ntot(); i < n; i += 2) {
164  // double r = field[i];
165  // field[i] = -field[i + 1];
166  // field[i + 1] = r;
167  // }
168 
169  int size = ntot();
170 // int i_thread, Nthread, is, ns;
171 // set_threadtask(i_thread, Nthread, is, ns, ntot());
173  int i_thread = ThreadManager_OpenMP::get_thread_id();
174 
175  int is = size * i_thread / Nthread;
176  int ns = size * (i_thread + 1) / Nthread;
177 
178  double *p = this->ptr(0);
179 
180  for (int k = is; k < ns; k += 2) {
181  double r = p[k];
182  p[k] = -p[k + 1];
183  p[k + 1] = r;
184  }
185  }
186 
187  void Ix(const Field_F& w)
188  {
189  // assert(m_Nin = w.m_Nin);
190  // assert(m_Nvol = w.m_Nvol);
191  // assert(m_Nex = w.m_Nex);
192 
193  // // assume that components of complex are stored in pair: (real, imag), ...
194  // for (int i = 0, n = ntot(); i < n; i += 2) {
195  // double r = w.field[i]; // it should be safe if w = this.
196  // field[i] = -w.field[i + 1];
197  // field[i + 1] = r;
198  // }
199 
200  int size = ntot();
201 // int i_thread, Nthread, is, ns;
202 // set_threadtask(i_thread, Nthread, is, ns, ntot());
204  int i_thread = ThreadManager_OpenMP::get_thread_id();
205 
206  int is = size * i_thread / Nthread;
207  int ns = size * (i_thread + 1) / Nthread;
208 
209  double *yp = this->ptr(0);
210  const double *xp = w.ptr(0);
211 
212  for (int k = is; k < ns; k += 2) {
213  double r = xp[k];
214  yp[k] = -xp[k + 1];
215  yp[k + 1] = r;
216  }
217  }
218 
219  private:
220 
222  void check();
223 };
224 
225 
226 //- function style
227 void mult_Field_Gn(Field_F& y, const int ex,
228  const Field_G& u, int ex1,
229  const Field_F& x, int ex2);
230 
231 void mult_Field_Gd(Field_F& y, const int ex,
232  const Field_G& u, int ex1,
233  const Field_F& x, int ex2);
234 
235 void multadd_Field_Gn(Field_F& y, const int ex,
236  const Field_G& u, int ex1,
237  const Field_F& x, int ex2,
238  const double a);
239 
240 void multadd_Field_Gd(Field_F& y, const int ex,
241  const Field_G& u, int ex1,
242  const Field_F& x, int ex2,
243  const double a);
244 
246 void mult_GM(Field_F& y,
247  const GammaMatrix& gm,
248  const Field_F& x);
249 
251 void mult_iGM(Field_F& y,
252  const GammaMatrix& gm,
253  const Field_F& x);
254 
256 void mult_GMproj(Field_F& y,
257  const int pm, const GammaMatrix& gm,
258  const Field_F& x);
259 
261 void mult_GMproj2(Field_F& y,
262  const int pm, const GammaMatrix& gm,
263  const Field_F& x);
264 
266 void mult_GMproj2(Field_F& y,
267  const double nu_s,
268  const int pm,
269  const double r_s,
270  const GammaMatrix& gm,
271  const Field_F& x);
272 #endif
void mult_Field_Gd(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2)
Definition: field_F_imp.cpp:83
BridgeIO vout
Definition: bridgeIO.cpp:495
double cmp_i(const int cc, const int s, const int site, const int e=0) const
Definition: field_F.h:101
static int get_num_threads()
returns available number of threads.
const double * ptr(const int jin, const int site, const int jex) const
Definition: field.h:142
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:135
void set_i(const int cc, const int s, const int site, const int e, const double im)
Definition: field_F.h:112
Container of Field-type object.
Definition: field.h:39
void check()
check several assumptions for performance implementation.
Definition: field_F_imp.cpp:29
friend void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:381
Field_F clone() const
Definition: field_F.h:65
int nvol() const
Definition: field.h:116
void clear_vec(const int s, const int site, const int e)
Definition: field_F.h:151
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)
static int get_thread_id()
returns thread id.
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:44
SU(N) gauge field.
Definition: field_G.h:38
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:107
void Ix(const Field_F &w)
Definition: field_F.h:187
void mult_iGM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication (i is multiplied)
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:117
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:84
void xI()
Definition: field_F.h:158
int nex() const
Definition: field.h:117
Common parameter class: provides parameters as singleton.
int m_Nd
Definition: field_F.h:42
std::valarray< double > field
Definition: field.h:51
void mult_Field_Gn(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2)
Definition: field_F_imp.cpp:39
void mult_GM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication
Field_F & operator=(const Field_F &v)
Definition: field_F.h:88
int nc() const
Definition: field_F.h:90
int ntot() const
Definition: field.h:120
element_type field_element_type() const
Definition: field.h:118
int nc2() const
Definition: field_F.h:91
Vec_SU_N vec(const int s, const int site, const int e=0) const
Definition: field_F.h:123
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:143
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:92
int myindex(const int jin, const int site, const int jex) const
Definition: field.h:54
Field_F(const Field &x)
Definition: field_F.h:72
int size() const
Definition: field.h:121
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:95