121 auto grid = this->_grid;
129 GF Ughost_fat(Ughost.Grid());
130 GF Ughost_3link(Ughost.Grid());
131 GF Ughost_5linkA(Ughost.Grid());
132 GF Ughost_5linkB(Ughost.Grid());
136 std::vector<Coordinate> shifts;
137 for(
int mu=0;mu<
Nd;mu++)
138 for(
int nu=0;nu<
Nd;nu++) {
154 for(
int mu=0;mu<
Nd;mu++) {
157 Ughost_3link =
Zero();
158 Ughost_5linkA=
Zero();
159 Ughost_5linkB=
Zero();
169 typedef decltype(gStencil.
GetEntry(0,0)) stencilElement;
172 int Nsites = U_v.size();
176 stencilElement SE0, SE1, SE2, SE3, SE4, SE5;
177 U3matrix
U0,
U1,
U2, U3, U4, U5,
W;
178 for(
int nu=0;nu<
Nd;nu++) {
184 SE0 = gStencil_v.GetEntry(s+0,site);
int x_p_mu = SE0->_offset;
185 SE1 = gStencil_v.GetEntry(s+1,site);
int x_p_nu = SE1->_offset;
186 SE2 = gStencil_v.GetEntry(s+2,site);
int x = SE2->_offset;
187 SE3 = gStencil_v.GetEntry(s+3,site);
int x_p_mu_m_nu = SE3->_offset;
188 SE4 = gStencil_v.GetEntry(s+4,site);
int x_m_nu = SE4->_offset;
189 SE5 = gStencil_v.GetEntry(s+5,site);
int x_m_mu = SE5->_offset;
218 stencilElement SE0, SE1, SE2, SE3, SE4, SE5;
219 U3matrix
U0,
U1,
U2, U3, U4, U5,
W;
221 for(
int nu=0;nu<
Nd;nu++) {
224 for(
int rho=0;rho<
Nd;rho++) {
225 if (rho == mu || rho == nu)
continue;
227 SE0 = gStencil_v.GetEntry(s+0,site);
int x_p_mu = SE0->_offset;
228 SE1 = gStencil_v.GetEntry(s+1,site);
int x_p_nu = SE1->_offset;
229 SE2 = gStencil_v.GetEntry(s+2,site);
int x = SE2->_offset;
230 SE3 = gStencil_v.GetEntry(s+3,site);
int x_p_mu_m_nu = SE3->_offset;
231 SE4 = gStencil_v.GetEntry(s+4,site);
int x_m_nu = SE4->_offset;
255 stencilElement SE0, SE1, SE2, SE3, SE4, SE5;
256 U3matrix
U0,
U1,
U2, U3, U4, U5,
W;
258 for(
int nu=0;nu<
Nd;nu++) {
261 for(
int rho=0;rho<
Nd;rho++) {
262 if (rho == mu || rho == nu)
continue;
264 SE0 = gStencil_v.GetEntry(s+0,site);
int x_p_mu = SE0->_offset;
265 SE1 = gStencil_v.GetEntry(s+1,site);
int x_p_nu = SE1->_offset;
266 SE2 = gStencil_v.GetEntry(s+2,site);
int x = SE2->_offset;
267 SE3 = gStencil_v.GetEntry(s+3,site);
int x_p_mu_m_nu = SE3->_offset;
268 SE4 = gStencil_v.GetEntry(s+4,site);
int x_m_nu = SE4->_offset;
296 u_smr = Ghost.
Extract(Ughost_fat) + lt.
c_1*u_thin;
299 std::vector<LF>
U(
Nd, grid);
300 std::vector<LF> V(
Nd, grid);
301 std::vector<LF> Vnaik(
Nd, grid);
302 for (
int mu = 0; mu <
Nd; mu++) {
307 for(
int mu=0;mu<
Nd;mu++) {
310 Vnaik[mu] = lt.
c_naik*Gimpl::CovShiftForward(
U[mu],mu,
311 Gimpl::CovShiftForward(
U[mu],mu,
312 Gimpl::CovShiftIdentityForward(
U[mu],mu)));
315 for (
int nu_h=1;nu_h<
Nd;nu_h++) {
318 V[mu] = V[mu] + lt.
c_lp*Gimpl::CovShiftForward(
U[nu],nu,
319 Gimpl::CovShiftForward(
U[nu],nu,
320 Gimpl::CovShiftForward(
U[mu],mu,
321 Gimpl::CovShiftBackward(
U[nu],nu,
322 Gimpl::CovShiftIdentityBackward(
U[nu],nu)))))
324 + lt.
c_lp*Gimpl::CovShiftBackward(
U[nu],nu,
325 Gimpl::CovShiftBackward(
U[nu],nu,
326 Gimpl::CovShiftForward(
U[mu],mu,
327 Gimpl::CovShiftForward(
U[nu],nu,
328 Gimpl::CovShiftIdentityForward(
U[nu],nu)))));
333 for (
int mu = 0; mu <
Nd; mu++) {
344 auto grid = this->_grid;
346 LF V(grid), Q(grid), sqrtQinv(grid), id_3(grid), diff(grid);
347 CF c0(grid), c1(grid), c2(grid), g0(grid), g1(grid), g2(grid), S(grid), R(grid), theta(grid),
348 u(grid), v(grid), w(grid), den(grid), f0(grid), f1(grid), f2(grid);
351 for (
int mu = 0; mu <
Nd; mu++) {
357 S = (1/3.)*c1-(1/18.)*c0*c0;
358 if (
norm2(S)<1e-28) {
359 g0 = (1/3.)*c0; g1 = g0; g2 = g1;
361 R = (1/2.)*c2-(1/3. )*c0*c1+(1/27.)*c0*c0*c0;
363 g0 = (1/3.)*c0+2.*
sqrt(S)*
cos((1/3.)*theta-2*
M_PI/3.);
364 g1 = (1/3.)*c0+2.*
sqrt(S)*
cos((1/3.)*theta );
365 g2 = (1/3.)*c0+2.*
sqrt(S)*
cos((1/3.)*theta+2*
M_PI/3.);
372 f0 = (-w*(u*u+v)+u*v*v)/den;
373 f1 = (-w-u*u*u+2.*u*v)/den;
377 sqrtQinv = f0*id_3 + f1*Q + f2*Q*Q;