Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
field_G.cpp
Go to the documentation of this file.
1 
15 #include "field_G.h"
16 
17 #include "commonParameters.h"
18 #include "communicator.h"
19 #include "bridgeIO.h"
20 using Bridge::vout;
21 
22 #include "mat_SU_N.h"
23 
24 
25 //====================================================================
26 void Field_G::check()
27 {
28  // int nth = ThreadManager_OpenMP::get_num_threads();
29  // int ith = ThreadManager_OpenMP::get_thread_id();
30  // assert(nth == 1);
31  // assert(ith == 0);
32  // Org-version only support single thread environment.
33 }
34 
35 
36 //====================================================================
37 void Field_G::set_unit()
38 {
39  Mat_SU_N ut(m_Nc);
40 
41  ut.unit();
42 
43  for (int mu = 0; mu < m_Nex; ++mu) {
44  for (int site = 0; site < m_Nvol; ++site) {
45  set_mat(site, mu, ut);
46  }
47  }
48 }
49 
50 
51 //====================================================================
53 {
54  rand->gauss_lex_global(*this);
55 
56  Mat_SU_N ut(m_Nc);
57 
58  for (int mu = 0; mu < m_Nex; ++mu) {
59  for (int site = 0; site < m_Nvol; ++site) {
60  this->mat(ut, site, mu);
61  ut.reunit();
62  this->set_mat(site, mu, ut);
63  }
64  }
65 }
66 
67 
68 //====================================================================
69 void Field_G::reunit()
70 {
71  Mat_SU_N ut(m_Nc);
72 
73  for (int mu = 0; mu < m_Nex; ++mu) {
74  for (int site = 0; site < m_Nvol; ++site) {
75  mat(ut, site, mu);
76  ut.reunit();
77  set_mat(site, mu, ut);
78  }
79  }
80 }
81 
82 
83 //====================================================================
84 void mult_Field_Gnn(Field_G& w, const int ex,
85  const Field_G& u1, const int ex1,
86  const Field_G& u2, const int ex2)
87 {
88  assert(ex < w.nex());
89  assert(ex1 < u1.nex());
90  assert(ex2 < u2.nex());
91  assert(u1.nvol() == w.nvol());
92  assert(u2.nvol() == w.nvol());
93 
94  const int Nvol = w.nvol();
95 
96  for (int site = 0; site < Nvol; ++site) {
97  w.set_mat(site, ex, u1.mat(site, ex1) * u2.mat(site, ex2));
98  }
99 }
100 
101 
102 //====================================================================
103 void mult_Field_Gdn(Field_G& w, const int ex,
104  const Field_G& u1, const int ex1,
105  const Field_G& u2, const int ex2)
106 {
107  assert(ex < w.nex());
108  assert(ex1 < u1.nex());
109  assert(ex2 < u2.nex());
110  assert(u1.nvol() == w.nvol());
111  assert(u2.nvol() == w.nvol());
112 
113  const int Nvol = w.nvol();
114 
115  for (int site = 0; site < Nvol; ++site) {
116  w.set_mat(site, ex, u1.mat_dag(site, ex1) * u2.mat(site, ex2));
117  }
118 }
119 
120 
121 //====================================================================
122 void mult_Field_Gnd(Field_G& w, const int ex,
123  const Field_G& u1, const int ex1,
124  const Field_G& u2, const int ex2)
125 {
126  assert(ex < w.nex());
127  assert(ex1 < u1.nex());
128  assert(ex2 < u2.nex());
129  assert(u1.nvol() == w.nvol());
130  assert(u2.nvol() == w.nvol());
131 
132  const int Nvol = w.nvol();
133 
134  for (int site = 0; site < Nvol; ++site) {
135  w.set_mat(site, ex, u1.mat(site, ex1) * u2.mat_dag(site, ex2));
136  }
137 }
138 
139 
140 //====================================================================
141 void mult_Field_Gdd(Field_G& w, const int ex,
142  const Field_G& u1, const int ex1,
143  const Field_G& u2, const int ex2)
144 {
145  assert(ex < w.nex());
146  assert(ex1 < u1.nex());
147  assert(ex2 < u2.nex());
148  assert(u1.nvol() == w.nvol());
149  assert(u2.nvol() == w.nvol());
150 
151  const int Nvol = w.nvol();
152 
153  for (int site = 0; site < Nvol; ++site) {
154  w.set_mat(site, ex, u1.mat_dag(site, ex1) * u2.mat_dag(site, ex2));
155  }
156 }
157 
158 
159 //====================================================================
160 void multadd_Field_Gnn(Field_G& w, const int ex,
161  const Field_G& u1, const int ex1,
162  const Field_G& u2, const int ex2,
163  const double ff)
164 {
165  assert(ex < w.nex());
166  assert(ex1 < u1.nex());
167  assert(ex2 < u2.nex());
168  assert(u1.nvol() == w.nvol());
169  assert(u2.nvol() == w.nvol());
170 
171  const int Nvol = w.nvol();
172 
173  for (int site = 0; site < Nvol; ++site) {
174  w.add_mat(site, ex, u1.mat(site, ex1) * u2.mat(site, ex2) * ff);
175  }
176 }
177 
178 
179 //====================================================================
180 void multadd_Field_Gdn(Field_G& w, const int ex,
181  const Field_G& u1, const int ex1,
182  const Field_G& u2, const int ex2,
183  const double ff)
184 {
185  assert(ex < w.nex());
186  assert(ex1 < u1.nex());
187  assert(ex2 < u2.nex());
188  assert(u1.nvol() == w.nvol());
189  assert(u2.nvol() == w.nvol());
190 
191  const int Nvol = w.nvol();
192 
193  for (int site = 0; site < Nvol; ++site) {
194  w.add_mat(site, ex, u1.mat_dag(site, ex1) * u2.mat(site, ex2) * ff);
195  }
196 }
197 
198 
199 //====================================================================
200 void multadd_Field_Gnd(Field_G& w, const int ex,
201  const Field_G& u1, const int ex1,
202  const Field_G& u2, const int ex2,
203  const double ff)
204 {
205  assert(ex < w.nex());
206  assert(ex1 < u1.nex());
207  assert(ex2 < u2.nex());
208  assert(u1.nvol() == w.nvol());
209  assert(u2.nvol() == w.nvol());
210 
211  const int Nvol = w.nvol();
212 
213  for (int site = 0; site < Nvol; ++site) {
214  w.add_mat(site, ex, u1.mat(site, ex1) * u2.mat_dag(site, ex2) * ff);
215  }
216 }
217 
218 
219 //====================================================================
220 void multadd_Field_Gdd(Field_G& w, const int ex,
221  const Field_G& u1, const int ex1,
222  const Field_G& u2, const int ex2,
223  const double ff)
224 {
225  assert(ex < w.nex());
226  assert(ex1 < u1.nex());
227  assert(ex2 < u2.nex());
228  assert(u1.nvol() == w.nvol());
229  assert(u2.nvol() == w.nvol());
230 
231  const int Nvol = w.nvol();
232 
233  for (int site = 0; site < Nvol; ++site) {
234  w.add_mat(site, ex, u1.mat_dag(site, ex1) * u2.mat_dag(site, ex2) * ff);
235  }
236 }
237 
238 
239 //====================================================================
240 void at_Field_G(Field_G& w, const int ex)
241 {
242  assert(ex < w.nex());
243 
244  const int Nvol = w.nvol();
245 
246  for (int site = 0; site < Nvol; ++site) {
247  w.set_mat(site, ex, w.mat(site, ex).at());
248  }
249 }
250 
251 
252 //====================================================================
253 void ah_Field_G(Field_G& w, const int ex)
254 {
255  assert(ex < w.nex());
256 
257  const int Nvol = w.nvol();
258 
259  for (int site = 0; site < Nvol; ++site) {
260  w.set_mat(site, ex, w.mat(site, ex).ah());
261  }
262 }
263 
264 
265 //====================================================================
266 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:207
int m_Nex
Definition: field.h:45
void mult_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
int m_Nvol
Definition: field.h:44
int nvol() const
Definition: field.h:101
void check()
check of assumptions for performance implementation.
Definition: field_G_imp.cpp:30
Mat_SU_N & at()
antihermitian traceless
Definition: mat_SU_N.h:329
virtual void gauss_lex_global(Field &)
gaussian random number defined on global lattice.
void set_random(RandomNumbers *rand)
Definition: field_G_imp.cpp:62
void mult_Field_Gdd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
void multadd_Field_Gdd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void set_unit()
Definition: field_G_imp.cpp:39
void ah_Field_G(Field_G &w, const int ex)
SU(N) gauge field.
Definition: field_G.h:36
void multadd_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void mult_Field_Gnd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
void mult_Field_Gnn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
Mat_SU_N & ah()
antihermitian
Definition: mat_SU_N.h:357
int nex() const
Definition: field.h:102
void reunit()
Definition: field_G_imp.cpp:79
void multadd_Field_Gnd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void at_Field_G(Field_G &w, const int ex)
Base class of random number generators.
Definition: randomNumbers.h:40
Mat_SU_N mat_dag(const int site, const int mn=0) const
Definition: field_G.h:123
void multadd_Field_Gnn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void set_mat(const int site, const int mn, const Mat_SU_N &U)
Definition: field_G.h:156
Mat_SU_N mat(const int site, const int mn=0) const
Definition: field_G.h:110
void add_mat(const int site, const int mn, const Mat_SU_N &U)
Definition: field_G.h:164
int m_Nc
Definition: field_G.h:39