Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fieldStrength.cpp
Go to the documentation of this file.
1 
14 #include "fieldStrength.h"
15 
16 const std::string FieldStrength::class_name = "FieldStrengh";
17 
18 //====================================================================
20  const int mu, const int nu, const Field_G& U)
21 {
22  int Nvol = CommonParameters::Nvol();
23 
24  Field_G Cup(Nvol, 1), Cdn(Nvol, 1);
25  Field_G Umu(Nvol, 1);
26  Field_G v(Nvol, 1), v2(Nvol, 1);
27 
28 
29  //- building blocks
30  // (1) mu (2)
31  // +->-+
32  // nu | |
33  // i+ +
34  m_staple.upper(Cup, U, mu, nu);
35 
36  // (1) mu (2)
37  // i+ +
38  // nu | |
39  // +->-+
40  m_staple.lower(Cdn, U, mu, nu);
41  Umu.setpart_ex(0, U, mu);
42 
43 
44  //- right clover leaf
45  // (2) +-<-+
46  // nu | |
47  // i+->-+
48  // mu (1)
49  mult_Field_Gnd(Fmunu_1x1, 0, Umu, 0, Cup, 0);
50 
51  // (1) i+-<-+
52  // nu | |
53  // +->-+
54  // mu (2)
55  multadd_Field_Gnd(Fmunu_1x1, 0, Cdn, 0, Umu, 0, 1.0);
56 
57 
58  //- left clover leaf
59  // mu (2)
60  // +-<-+ (1)
61  // | | nu mu (1)
62  // +->-+i + +-<-+i (2)
63  // | | nu
64  // +->-+
65  mult_Field_Gdn(v, 0, Cup, 0, Umu, 0);
66  multadd_Field_Gdn(v, 0, Umu, 0, Cdn, 0, 1.0);
67 
68  // NB. shift.forward(mu)
69  // mu (2) mu (2)
70  // +-<-+ (1) +-<-+ (1)
71  // | | nu -> | | nu
72  // i+->-+ +->-+i
73  m_shift.forward(v2, v, mu);
74 
75  axpy(Fmunu_1x1, 1.0, v2);
76 
77  ah_Field_G(Fmunu_1x1, 0);
78 
79  scal(Fmunu_1x1, -0.25);
80  Fmunu_1x1.xI();
81 }
82 
83 
84 //====================================================================
86  const int mu, const int nu, const Field_G& U)
87 {
88  int Nvol = CommonParameters::Nvol();
89 
90  Field_G Cup1(Nvol, 1), Cup2(Nvol, 1);
91  Field_G Cdn1(Nvol, 1), Cdn2(Nvol, 1);
92  Field_G Umu(Nvol, 1), Unu(Nvol, 1);
93  Field_G Umu_nu(Nvol, 1), Unu_mu(Nvol, 1);
94  Field_G rect(Nvol, 1);
95  Field_G v(Nvol, 1), w(Nvol, 1), c(Nvol, 1);
96 
97  //-- building blocks
98  // mu (2)
99  // (1) +->-+
100  // nu | |
101  // i+ +
102  m_staple.upper(Cup1, U, mu, nu);
103 
104  // +-<-+ (2)
105  // | nu
106  // i+->-+
107  // mu (1)
108  m_staple.upper(Cup2, U, nu, mu);
109 
110  // (1) i+ +
111  // nu | |
112  // +->-+
113  // mu (2)
114  m_staple.lower(Cdn1, U, mu, nu);
115 
116  // (2) +->-+
117  // nu |
118  // +-<-+i
119  // mu (1)
120  m_staple.lower(Cdn2, U, nu, mu);
121 
122  Umu.setpart_ex(0, U, mu);
123  Unu.setpart_ex(0, U, nu);
124 
125  // +->-+
126  //
127  // i+
128  m_shift.backward(Umu_nu, Umu, nu);
129 
130  // +
131  // |
132  // i+ +
133  m_shift.backward(Unu_mu, Unu, mu);
134 
135  //============================================================
136  //-- 2x1 part
137 
138  //- upper-right(2x1)
139  // +---<---+ + +-<-+ <---+
140  // nu | | = | + + | +
141  // i+--->---+ i+ i+ i+ >---+ i+->-+
142  m_shift.backward(c, Cup2, mu);
143 
144  mult_Field_Gdd(v, 0, Umu_nu, 0, Unu, 0);
145  mult_Field_Gnn(w, 0, c, 0, v, 0);
146 
147  mult_Field_Gnn(rect, 0, Umu, 0, w, 0);
148 
149  Fmunu_1x2 = rect;
150 
151  //- lower-right(2x1)
152  // (1) +---<---+ (1) i+---<---+
153  // nu | | -> nu | |
154  // i+--->---+ +--->---+
155  // mu (2) mu (2)
156  mult_Field_Gnd(v, 0, c, 0, Umu_nu, 0);
157  mult_Field_Gnn(w, 0, Umu, 0, v, 0);
158 
159  mult_Field_Gdn(rect, 0, Unu, 0, w, 0);
160 
161  m_shift.forward(v, rect, nu);
162 
163  axpy(Fmunu_1x2, 1.0, v);
164 
165  //- upper-left(2x1)
166  // mu (2)
167  // +---<---+ (1) +-<-+ +-<-+ +
168  // | | nu = + | + + |
169  // +---i---+ i+->-+ +->-+i +i +i +
170  //
171  // NB. shift.forward(mu)
172  // mu (2) mu (2)
173  // +---<---+ (1) +---<---+ (1)
174  // | | nu -> | | nu
175  // +---i---+ +--->---+i
176  mult_Field_Gdn(v, 0, Cdn2, 0, Umu, 0);
177  mult_Field_Gdn(w, 0, Umu_nu, 0, v, 0);
178 
179  mult_Field_Gnn(rect, 0, Unu_mu, 0, w, 0);
180 
181  m_shift.forward(v, rect, mu);
182 
183  axpy(Fmunu_1x2, 1.0, v);
184 
185  //- lower-left(2x1)
186  // mu (1)
187  // +---<---+ (2) + +-<-+ +-<-+
188  // | | nu = | + + | +
189  // +---i---+ +i + i+->-+ +->-+i +i
190  //
191  // NB. shift.forward(mu+nu)
192  // mu (1) mu (1) mu (1)
193  // +---<---+ (2) +---<---+ (2) +---<---+i (2)
194  // | | nu -> | | nu -> | | nu
195  // +---i---+ +--->---+i +--->---+
196  mult_Field_Gnn(v, 0, Umu, 0, Unu_mu, 0);
197  mult_Field_Gdn(w, 0, Cdn2, 0, v, 0);
198 
199  mult_Field_Gdn(rect, 0, Umu_nu, 0, w, 0);
200 
201  m_shift.forward(w, rect, mu);
202  m_shift.forward(v, w, nu);
203 
204  axpy(Fmunu_1x2, 1.0, v);
205  //============================================================
206 
207 
208  //============================================================
209  //-- 1x2 part
210 
211  //- upper-right(1x2)
212  // +-<-+ +-<-+
213  // | | | |
214  // (2) + + = + + + + + + +
215  // nu | | | |
216  // i+->-+ i+ i+ i+ + i+->-+
217  // mu (1)
218  m_shift.backward(c, Cup1, nu);
219 
220  mult_Field_Gdd(v, 0, c, 0, Unu, 0);
221  mult_Field_Gnn(w, 0, Unu_mu, 0, v, 0);
222 
223  mult_Field_Gnn(rect, 0, Umu, 0, w, 0);
224 
225  axpy(Fmunu_1x2, 1.0, rect);
226 
227  //- lower-right(1x2)
228  // mu (2)
229  // (1) +-<-+ +-<-+ + +
230  // nu | | | |
231  // i+ + = i+ + i+ + + i+ + + i+
232  // | | | |
233  // +->-+ +->-+
234  //
235  // NB. shift.forward(nu)
236  // mu (2) mu (2)
237  // (1) +-<-+ (1) i+-<-+
238  // nu | | nu | |
239  // i+ + -> + +
240  // | | | |
241  // +->-+ +->-+
242  mult_Field_Gnd(v, 0, Unu_mu, 0, Umu_nu, 0);
243  mult_Field_Gnn(w, 0, Cdn1, 0, v, 0);
244 
245  mult_Field_Gdn(rect, 0, Unu, 0, w, 0);
246 
247  m_shift.forward(v, rect, nu);
248 
249  axpy(Fmunu_1x2, 1.0, v);
250 
251  //- upper-left(1x2)
252  // +-<-+ +-<-+
253  // | | | |
254  // + + (1) = + + + + + + +
255  // | | nu | |
256  // i+->-+ i+->-+ i+ i+ i+ +
257  // mu (2)
258  //
259  // NB. shift.forward(mu)
260  // +-<-+ +-<-+
261  // | | | |
262  // + + (1) -> + + (1)
263  // | | nu | | nu
264  // i+->-+ +->-+i
265  // mu (2) mu (2)
266  mult_Field_Gdn(v, 0, Unu, 0, Umu, 0);
267  mult_Field_Gdn(w, 0, c, 0, v, 0);
268 
269  mult_Field_Gnn(rect, 0, Unu_mu, 0, w, 0);
270 
271  m_shift.forward(v, rect, mu);
272 
273  axpy(Fmunu_1x2, 1.0, v);
274 
275  //- lower-left(1x2)
276  // mu (1)
277  // (2) +-<-+ + + +-<-+
278  // nu | | | |
279  // i+ + = i+ + + i+ + + i+ + i+
280  // | | | |
281  // +->-+ +->-+
282  //
283  // NB. shift.forward(mu+nu)
284  // mu (1) mu (1)
285  // (2) +-<-+ (2) +-<-+i
286  // nu | | nu | |
287  // i+ + -> + +
288  // | | | |
289  // +->-+ +->-+
290  mult_Field_Gnn(v, 0, Cdn1, 0, Unu_mu, 0);
291  mult_Field_Gdn(w, 0, Unu, 0, v, 0);
292 
293  mult_Field_Gdn(rect, 0, Umu_nu, 0, w, 0);
294 
295  m_shift.forward(w, rect, mu);
296  m_shift.forward(v, w, nu);
297 
298  axpy(Fmunu_1x2, 1.0, v);
299  //============================================================
300 
301  ah_Field_G(Fmunu_1x2, 0);
302 
303  //- normalization = 1/8
304  // i.e. overall factor = 1/4, average of 1x2 and 2x1 = 1/2
305  scal(Fmunu_1x2, -0.125);
306  Fmunu_1x2.xI();
307 }
308 
309 
310 //====================================================================
311 //============================================================END=====
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:282
Staple_lex m_staple
Definition: fieldStrength.h:41
void construct_Fmunu_1x2(Field_G &Fmunu, const int mu, const int nu, const Field_G &U)
ShiftField_lex m_shift
Definition: fieldStrength.h:40
void ah_Field_G(Field_G &W, const int ex)
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 mult_Field_Gdn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
static const std::string class_name
Definition: fieldStrength.h:34
void lower(Field_G &, const Field_G &, const int mu, const int nu)
constructs lower staple in mu-nu plane.
Definition: staple_lex.cpp:180
SU(N) gauge field.
Definition: field_G.h:38
void construct_Fmunu_1x1(Field_G &Fmunu, const int mu, const int nu, const Field_G &U)
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 backward(Field &, const Field &, const int mu)
void upper(Field_G &, const Field_G &, const int mu, const int nu)
constructs upper staple in mu-nu plane.
Definition: staple_lex.cpp:156
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:168
void mult_Field_Gnn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
void setpart_ex(int ex, const Field &w, int exw)
Definition: field.h:186
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 forward(Field &, const Field &, const int mu)
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 xI()
Definition: field_G.h:183