21 #if defined USE_GROUP_SU3
22 #include "field_G_imp_SU3.inc"
23 #elif defined USE_GROUP_SU2
24 #include "field_G_imp_SU2.inc"
25 #elif defined USE_GROUP_SU_N
26 #include "field_G_imp_SU_N.inc"
50 int is =
nvol() * ith / nth;
51 int ns =
nvol() * (ith + 1) / nth - is;
53 for (
int mu = 0; mu <
nex(); ++mu) {
54 for (
int site = is; site < is + ns; ++site) {
68 for (
int mu = 0; mu <
m_Nex; ++mu) {
69 for (
int site = 0; site <
m_Nvol; ++site) {
70 this->
mat(ut, site, mu);
88 int is =
nvol() * ith / nth;
89 int ns =
nvol() * (ith + 1) / nth - is;
91 for (
int mu = 0; mu <
nex(); ++mu) {
92 for (
int site = is; site < is + ns; ++site) {
106 assert(ex < w.
nex());
107 assert(ex1 < u1.
nex());
108 assert(ex2 < u2.
nex());
117 int is = w.
nvol() * ith / nth;
118 int ns = w.
nvol() * (ith + 1) / nth - is;
120 double *g = w.
ptr(0, is, ex);
121 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
122 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
124 const int Nc = w.
nc();
125 const int Nc2 = 2 * Nc;
126 const int Ndf = Nc2 * Nc;
128 for (
int site = 0; site < ns; ++site) {
131 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
132 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
133 int jg2 = ic2 * 2 + ig;
134 int jg1 = ic1 * Nc2 + ig;
135 g[2 * ic2 + Nc2 * ic1 + ig] = mult_Gnn_r(&g1[jg1], &g2[jg2], Nc);
136 g[2 * ic2 + 1 + Nc2 * ic1 + ig] = mult_Gnn_i(&g1[jg1], &g2[jg2], Nc);
148 assert(ex < w.
nex());
149 assert(ex1 < u1.
nex());
150 assert(ex2 < u2.
nex());
159 int is = w.
nvol() * ith / nth;
160 int ns = w.
nvol() * (ith + 1) / nth - is;
162 double *g = w.
ptr(0, is, ex);
163 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
164 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
166 const int Nc = w.
nc();
167 const int Nc2 = 2 * Nc;
168 const int Ndf = Nc2 * Nc;
170 for (
int site = 0; site < ns; ++site) {
173 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
174 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
175 int jg2 = ic2 * 2 + ig;
176 int jg1 = ic1 * 2 + ig;
177 g[2 * ic2 + Nc2 * ic1 + ig] = mult_Gdn_r(&g1[jg1], &g2[jg2], Nc);
178 g[2 * ic2 + 1 + Nc2 * ic1 + ig] = mult_Gdn_i(&g1[jg1], &g2[jg2], Nc);
190 assert(ex < w.
nex());
191 assert(ex1 < u1.
nex());
192 assert(ex2 < u2.
nex());
201 int is = w.
nvol() * ith / nth;
202 int ns = w.
nvol() * (ith + 1) / nth - is;
204 double *g = w.
ptr(0, is, ex);
205 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
206 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
208 const int Nc = w.
nc();
209 const int Nc2 = 2 * Nc;
210 const int Ndf = Nc2 * Nc;
212 for (
int site = 0; site < ns; ++site) {
215 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
216 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
217 int jg2 = ic2 * Nc2 + ig;
218 int jg1 = ic1 * Nc2 + ig;
219 g[2 * ic2 + Nc2 * ic1 + ig] = mult_Gnd_r(&g1[jg1], &g2[jg2], Nc);
220 g[2 * ic2 + 1 + Nc2 * ic1 + ig] = mult_Gnd_i(&g1[jg1], &g2[jg2], Nc);
232 assert(ex < w.
nex());
233 assert(ex1 < u1.
nex());
234 assert(ex2 < u2.
nex());
243 int is = w.
nvol() * ith / nth;
244 int ns = w.
nvol() * (ith + 1) / nth - is;
246 double *g = w.
ptr(0, is, ex);
247 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
248 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
250 const int Nc = w.
nc();
251 const int Nc2 = 2 * Nc;
252 const int Ndf = Nc2 * Nc;
254 for (
int site = 0; site < ns; ++site) {
257 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
258 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
259 int jg2 = ic2 * Nc2 + ig;
260 int jg1 = ic1 * 2 + ig;
261 g[2 * ic2 + Nc2 * ic1 + ig] = mult_Gdd_r(&g1[jg1], &g2[jg2], Nc);
262 g[2 * ic2 + 1 + Nc2 * ic1 + ig] = mult_Gdd_i(&g1[jg1], &g2[jg2], Nc);
275 assert(ex < w.
nex());
276 assert(ex1 < u1.
nex());
277 assert(ex2 < u2.
nex());
286 int is = w.
nvol() * ith / nth;
287 int ns = w.
nvol() * (ith + 1) / nth - is;
289 double *g = w.
ptr(0, is, ex);
290 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
291 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
293 const int Nc = w.
nc();
294 const int Nc2 = 2 * Nc;
295 const int Ndf = Nc2 * Nc;
297 for (
int site = 0; site < ns; ++site) {
300 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
301 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
302 int jg2 = ic2 * 2 + ig;
303 int jg1 = ic1 * Nc2 + ig;
304 g[2 * ic2 + Nc2 * ic1 + ig] +=
305 ff * mult_Gnn_r(&g1[jg1], &g2[jg2], Nc);
306 g[2 * ic2 + 1 + Nc2 * ic1 + ig] +=
307 ff * mult_Gnn_i(&g1[jg1], &g2[jg2], Nc);
320 assert(ex < w.
nex());
321 assert(ex1 < u1.
nex());
322 assert(ex2 < u2.
nex());
331 int is = w.
nvol() * ith / nth;
332 int ns = w.
nvol() * (ith + 1) / nth - is;
334 double *g = w.
ptr(0, is, ex);
335 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
336 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
338 const int Nc = w.
nc();
339 const int Nc2 = 2 * Nc;
340 const int Ndf = Nc2 * Nc;
342 for (
int site = 0; site < ns; ++site) {
345 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
346 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
347 int jg2 = ic2 * 2 + ig;
348 int jg1 = ic1 * 2 + ig;
349 g[2 * ic2 + Nc2 * ic1 + ig] +=
350 ff * mult_Gdn_r(&g1[jg1], &g2[jg2], Nc);
351 g[2 * ic2 + 1 + Nc2 * ic1 + ig] +=
352 ff * mult_Gdn_i(&g1[jg1], &g2[jg2], Nc);
365 assert(ex < w.
nex());
366 assert(ex1 < u1.
nex());
367 assert(ex2 < u2.
nex());
376 int is = w.
nvol() * ith / nth;
377 int ns = w.
nvol() * (ith + 1) / nth - is;
379 double *g = w.
ptr(0, is, ex);
380 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
381 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
383 const int Nc = w.
nc();
384 const int Nc2 = 2 * Nc;
385 const int Ndf = Nc2 * Nc;
387 for (
int site = 0; site < ns; ++site) {
390 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
391 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
392 int jg2 = ic2 * Nc2 + ig;
393 int jg1 = ic1 * Nc2 + ig;
394 g[2 * ic2 + Nc2 * ic1 + ig] +=
395 ff * mult_Gnd_r(&g1[jg1], &g2[jg2], Nc);
396 g[2 * ic2 + 1 + Nc2 * ic1 + ig]
397 += ff * mult_Gnd_i(&g1[jg1], &g2[jg2], Nc);
410 assert(ex < w.
nex());
411 assert(ex1 < u1.
nex());
412 assert(ex2 < u2.
nex());
421 int is = w.
nvol() * ith / nth;
422 int ns = w.
nvol() * (ith + 1) / nth - is;
424 double *g = w.
ptr(0, is, ex);
425 double *g1 =
const_cast<Field_G *
>(&u1)->ptr(0, is, ex1);
426 double *g2 =
const_cast<Field_G *
>(&u2)->ptr(0, is, ex2);
428 const int Nc = w.
nc();
429 const int Nc2 = 2 * Nc;
430 const int Ndf = Nc2 * Nc;
432 for (
int site = 0; site < ns; ++site) {
435 for (
int ic2 = 0; ic2 < Nc; ++ic2) {
436 for (
int ic1 = 0; ic1 < Nc; ++ic1) {
437 int jg2 = ic2 * Nc2 + ig;
438 int jg1 = ic1 * 2 + ig;
439 g[2 * ic2 + Nc2 * ic1 + ig] +=
440 ff * mult_Gdd_r(&g1[jg1], &g2[jg2], Nc);
441 g[2 * ic2 + 1 + Nc2 * ic1 + ig] +=
442 ff * mult_Gdd_i(&g1[jg1], &g2[jg2], Nc);
452 assert(ex < w.
nex());
459 int is = w.
nvol() * ith / nth;
460 int ns = w.
nvol() * (ith + 1) / nth - is;
462 double *g = w.
ptr(0, is, ex);
464 const int Nc = w.
nc();
465 const int Ndf = 2 * Nc * Nc;
467 for (
int site = 0; site < ns; ++site) {
470 for (
int a = 0; a < Nc; ++a) {
471 for (
int b = a + 1; b < Nc; ++b) {
472 double re = g[2 * (Nc * a + b) + ig] - g[2 * (Nc * b + a) + ig];
473 double im = g[2 * (Nc * a + b) + 1 + ig] + g[2 * (Nc * b + a) + 1 + ig];
475 g[2 * (Nc * a + b) + ig] = 0.5 * re;
476 g[2 * (Nc * a + b) + 1 + ig] = 0.5 * im;
478 g[2 * (Nc * b + a) + ig] = -0.5 * re;
479 g[2 * (Nc * b + a) + 1 + ig] = 0.5 * im;
483 for (
int cc = 0; cc < Nc; ++cc) {
484 tr += g[2 * (Nc * cc + cc) + 1 + ig];
487 for (
int cc = 0; cc < Nc; ++cc) {
488 g[2 * (Nc * cc + cc) + ig] = 0.0;
489 g[2 * (Nc * cc + cc) + 1 + ig] -= tr;
498 assert(ex < w.
nex());
505 int is = w.
nvol() * ith / nth;
506 int ns = w.
nvol() * (ith + 1) / nth - is;
508 double *g = w.
ptr(0, is, ex);
510 const int Nc = w.
nc();
511 const int Ndf = 2 * Nc * Nc;
513 for (
int site = 0; site < ns; ++site) {
516 for (
int a = 0; a < Nc; ++a) {
517 for (
int b = a; b < Nc; ++b) {
518 double re = g[2 * (Nc * a + b) + ig] - g[2 * (Nc * b + a) + ig];
519 double im = g[2 * (Nc * a + b) + 1 + ig] + g[2 * (Nc * b + a) + 1 + ig];
521 g[2 * (Nc * a + b) + ig] = 0.5 * re;
522 g[2 * (Nc * a + b) + 1 + ig] = 0.5 * im;
524 g[2 * (Nc * b + a) + ig] = -0.5 * re;
525 g[2 * (Nc * b + a) + 1 + ig] = 0.5 * im;
void mult_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
double * ptr(const int jin, const int site, const int jex)
void check()
check of assumptions for performance implementation.
virtual void gauss_lex_global(Field &)
gaussian random number defined on global lattice.
void set_random(RandomNumbers *rand)
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 ah_Field_G(Field_G &w, const int ex)
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)
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.
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)
Mat_SU_N mat(const int site, const int mn=0) const