CHROMA
aniso_sym_shared_functions.cc
Go to the documentation of this file.
2 
3 namespace Chroma {
4 
5  namespace AnisoSym {
6 
7 
8  void deriv_part(const int mu,
9  const int nu,
10  const int t_dir,
11  const Real& c_plaq_munu,
12  const Real& c_rect_munu,
13  const bool noTemporal2Link,
14  multi1d<LatticeColorMatrix>& ds_u,
15  const multi1d<LatticeColorMatrix>& u)
16  {
17 
18  START_CODE();
19 
20 
21  LatticeColorMatrix ds_plaq_mu;
22  LatticeColorMatrix ds_plaq_nu;
23  LatticeColorMatrix ds_rect_mu;
24  LatticeColorMatrix ds_rect_nu;
25 
26 
27  LatticeColorMatrix u_mu_xplusnu = shift(u[mu], FORWARD, nu);
28  LatticeColorMatrix u_nu_xplusmu = shift(u[nu], FORWARD, mu);
29  LatticeColorMatrix t_1, t_2, t_3;
30 
31 
32 
33  // --<--
34  // | U^+(x+nu, mu) U^+(x,nu)
35  // V
36  // |
37  // x
38  t_1 = adj(u_mu_xplusnu)*adj(u[nu]);
39 
40  // --<--
41  // |
42  // ^
43  // |
44 
45  t_3 = u_nu_xplusmu*adj(u_mu_xplusnu);
46 
47 
48 
49  // -->--
50  // |
51  // V
52  // |
53  // --<--
54  LatticeColorMatrix right_staple = adj(t_3)*adj(u[mu]);
55 
56  if( nu > mu ) {
57  // --<--
58  // | |
59  // V ^
60  // | |
61 
62  LatticeColorMatrix up_staple = u_nu_xplusmu*t_1;
63 
64  ds_plaq_mu = up_staple;
65  ds_plaq_nu = right_staple;
66  }
67  // --<--
68  // |
69  // V
70  // |
71  // -->-- U^+(x+nu, mu) U^+(x,nu) U(x,mu)
72  // x
73  t_2 = t_1 * u[mu];
74 
75  // --<--
76  // |
77  // V U^+(x-mu+nu, mu) U^+(x-mu,nu) U(x-mu,mu)
78  // |
79  // -->--
80  // x
81  LatticeColorMatrix left_staple = shift(t_2, BACKWARD, mu);
82  if( nu > mu ) {
83  ds_plaq_nu += left_staple;
84  }
85 
86  //
87  // |
88  // ^
89  // |
90  // --<--
91  LatticeColorMatrix l_left_corner = adj(u[mu])*u[nu];
92 
93  if( nu > mu ) {
94  //
95  // | |
96  // ^ V
97  // | |
98  // --<--
99  t_2 = adj(u_nu_xplusmu)*l_left_corner;
100  t_1 = shift(t_2, BACKWARD, nu);
101  ds_plaq_mu += t_1;
102 
103  Real c = c_plaq_munu/Real(-2*Nc);
104  ds_u[mu] += c*ds_plaq_mu;
105 
106  ds_u[nu] += c*ds_plaq_nu;
107  }
108  // ------------- Plaquette done here, now rectangle ----
109 
110  // If mu is temporal then we are computing contributions from
111  // rectangles with time extent = 2, both to ds_u[mu] and ds_u[nu].
112  //
113  // If contribs from such rectangles are unrequired, then set
114  // the appropriate coefficient to zero, and/or set noTemporal2Link
115  // or do both
116  bool skip = ( mu == t_dir && noTemporal2Link );
117 
118  if( !skip) {
119 
120 
121  // --<--
122  // |
123  // V U^+(x-mu+nu, mu) U^+(x-mu,nu) U(x-mu,mu) U(x,mu)
124  // |
125  // -->-- -->--
126  // x
127  t_1 = left_staple * u[mu];
128 
129  // --<-- --<--
130  // |
131  // V U^+(x+nu, mu) U^+(x-mu+nu, mu) U^+(x-mu,nu) U(x-mu,mu) U(x,mu)
132  // |
133  // -->-- -->--
134  // x
135 
136  t_2= adj(u_mu_xplusnu)*t_1;
137 
138  // --<-- --<--
139  // |
140  // V U^+(x-mu+nu, mu) U^+(x-2mu+nu, mu) U^+(x-2mu,nu) U(x-2mu,mu) U(x-mu,mu)
141  // |
142  // -->-- -->--
143  // x
144 
145 
146  //=U^dag(x+-mu+nu, mu)*U^dag(x-2mu+nu, mu)*U^dag(x-2mu, nu)*U(x-2mu,mu)*U(x-mu,mu)
147 
148  ds_rect_nu = shift(t_2, BACKWARD, mu);
149 
150 
151 
152 
153 
154 
155 
156 
157  // -->--
158  // |
159  // V U(x+mu+nu, mu) U^+(x+2mu, nu) U^+(x+mu,mu)
160  // |
161  // x --<--
162  LatticeColorMatrix shift_right_staple = shift(right_staple, FORWARD, mu);
163 
164 
165 
166  // -->-- -->--
167  // |
168  // V U(x+nu, mu)U(x+mu+nu, mu) U^+(x+2mu, nu) U^+(x+mu,mu)
169  // |
170  // x --<--
171  t_2 = u_mu_xplusnu*shift_right_staple;
172 
173  // -->-- -->--
174  // |
175  // V U(x+nu, mu)U(x+mu+nu, mu) U^+(x+2mu, nu) U^+(x+mu,mu) U^(x,mu)
176  // |
177  // --<-- --<--
178  // x
179 
180  // = u(x+nu, mu)*u(x+mu+nu, mu)*u^dag(x+2mu, nu)*u^dag(x+mu, mu)*u^dag(x,mu)
181 
182  ds_rect_nu += t_2*adj(u[mu]);
183 
184 
185 
186 
187 
188 
189 
190  // --<-- --<--
191  // | |
192  // V ^
193  // | |
194  // -->--
195  // x
196 
197 
198  ds_rect_mu = adj(t_2)*adj(u[nu]);
199 
200 
201 
202  // --<-- --<--
203  // | |
204  // V ^
205  // | |
206  // -->--
207  // x
208 
209  ds_rect_mu += t_3*left_staple;
210 
211  //
212  // -->--
213  // | |
214  // ^ V
215  // | |
216  // --<-- --<--
217  // x
218 
219  t_2 = shift_right_staple*l_left_corner;
220 
221 
222  //
223  // |
224  // V
225  // |
226  // --<--
227  // x
228 
229  t_1 = adj(u_nu_xplusmu)*adj(u[mu]);
230 
231 
232  // -->--
233  // | |
234  // ^ V
235  // | |
236  // --<-- --<--
237  // x
238  t_3 = t_1*adj(left_staple);
239  t_2 += t_3;
240 
241  ds_rect_mu += shift(t_2, BACKWARD, nu);
242  Real c = c_rect_munu/Real(-2*Nc);
243 
244  ds_u[mu] += c * ds_rect_mu;
245  ds_u[nu] += c * ds_rect_nu;
246  }
247 
248 
249 
250  END_CODE();
251 
252  return;
253 
254  }
255 
256 
257  // S_part
258  void S_part(int mu, int nu, int t_dir,
259  Real c_plaq_munu,
260  Real c_rect_munu,
261  bool noTemporal2Link,
262  LatticeReal& lgimp,
263  const multi1d<LatticeColorMatrix>& u)
264  {
265  START_CODE();
266 
267  LatticeColorMatrix tmp1;
268  LatticeColorMatrix tmp2;
269 
270  LatticeColorMatrix rectangle_2munu;
271  LatticeColorMatrix rectangle_mu2nu;
272 
273  LatticeColorMatrix u_nu_xplus_mu = shift(u[nu], FORWARD, mu);
274  LatticeColorMatrix u_mu_xplus_nu = shift(u[mu], FORWARD, nu);
275 
276  // ^
277  // lr_corner = | = u(x, mu) * u(x + mu, nu)
278  // |
279  // ----->
280  //
281  LatticeColorMatrix lr_corner = u[mu]*u_nu_xplus_mu;
282 
283  // <----
284  // ^
285  // right_staple = | = u(x, mu) * u(x + mu, nu) * u^{+}(x+nu,mu)
286  // |
287  // ----->
288  //
289 
290  LatticeColorMatrix right_staple = lr_corner*adj(u_mu_xplus_nu);
291 
292  {
293  // <----
294  // | ^
295  // plaq = | | = u(x, mu) * u(x + mu, nu) * u^{+}(x+nu,mu)
296  // V | *u^{+}(x,nu)
297  // ----->
298 
299  if( nu > mu) {
300  tmp1 = right_staple*adj(u[nu]);
301  lgimp += c_plaq_munu*real(trace(tmp1));
302  }
303 
304  }
305 
306  // End of Plaquette bit...
307  bool skip = ( noTemporal2Link && (t_dir == mu) );
308  if( ! skip ) {
309  // <---- <----^
310  // Make: |
311  // -----> ----->
312 
313  // <----
314  // |
315  // ----> ---->
316 
317 
318  tmp1 = shift(right_staple, FORWARD, mu);
319  tmp2 = u[mu]*tmp1;
320 
321 
322  // <---- <----
323  // |
324  // ----> ---->
325  right_staple = tmp2*adj(u_mu_xplus_nu);
326 
327  // Loop
328  // = u(x, mu) u(x + mu, mu) * u(x + 2mu, nu)
329  // * u^dag(x + mu + nu, mu) * u^dag(x + nu, mu) * u^dag(nu)
330  rectangle_2munu = right_staple*adj(u[nu]);
331 
332 
333  lgimp += c_rect_munu * real(trace(rectangle_2munu));
334  }
335 
336  END_CODE();
337  }
338 
339 
340  }
341 
342 }
int mu
Definition: cool.cc:24
int nu
Definition: cool.cc:25
Double tmp2
Definition: mesq.cc:30
void deriv_part(const int mu, const int nu, const int t_dir, const Real &c_plaq_munu, const Real &c_rect_munu, const bool noTemporal2Link, multi1d< LatticeColorMatrix > &ds_u, const multi1d< LatticeColorMatrix > &u)
void S_part(int mu, int nu, int t_dir, Real c_plaq_munu, Real c_rect_munu, bool noTemporal2Link, LatticeReal &lgimp, const multi1d< LatticeColorMatrix > &u)
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
static multi1d< LatticeColorMatrix > u
Double c
Definition: invbicg.cc:108
START_CODE()
#define FORWARD
Definition: primitives.h:82
#define BACKWARD
Definition: primitives.h:83