8 using namespace QDP::Hints;
25 const Real& WilsonMass_,
27 const multi1d<Real>& b5_,
28 const multi1d<Real>& c5_,
33 WilsonMass = WilsonMass_;
37 if( b5_.size() != N5_ ) {
38 QDPIO::cerr <<
"b5 array size and N5 are inconsistent" << std::endl;
39 QDPIO::cerr <<
"b5_array.size() = " << b5_.size() << std::endl;
40 QDPIO::cerr <<
"N5_ = " << N5_ << std::endl << std::flush;
48 for(
int i=0;
i <
N5;
i++) {
55 for(
int i=0;
i <
N5;
i++) {
56 f_plus[
i] = b5[
i]*( Real(
Nd) - WilsonMass ) + 1;
57 f_minus[
i]= c5[
i]*( Real(
Nd) - WilsonMass ) - 1;
64 l[0] = -m_q*f_minus[
N5-1]/f_plus[0];
65 r[0] = -m_q*f_minus[0]/f_plus[0];
67 for(
int i=1;
i <
N5-1;
i++) {
68 l[
i] = -(f_minus[
i-1]/f_plus[
i])*
l[
i-1];
69 r[
i] = -(f_minus[
i]/f_plus[
i])*
r[
i-1];
74 for(
int i=0;
i <
N5-1;
i++) {
75 a[
i] = f_minus[
i+1]/f_plus[
i];
76 b[
i] = f_minus[
i]/f_plus[
i];
80 for(
int i=0;
i <
N5;
i++) {
84 Real tmp1 = f_minus[
N5-2]*
l[
N5-2];
110 EvenOddPrecGenNEFDWLinOpArray::applyDiag(multi1d<LatticeFermion>&
chi,
111 const multi1d<LatticeFermion>&
psi,
148 fact = f_minus[0]*m_q;
150 chi[0][rb[
cb]] += f_minus[0]*chiralProjectMinus(
psi[1]);
151 chi[0][rb[
cb]] -= fact*chiralProjectPlus(
psi[
N5-1]);
187 fact = f_minus[
N5-1]*m_q;
190 chi[
N5-1][rb[
cb]] -= fact*chiralProjectMinus(
psi[0]);
193 for(
int s=1;
s<
N5-1;
s++) {
213 chi[
s][rb[
cb]] += f_minus[
s]*chiralProjectMinus(
psi[
s+1]);
214 chi[
s][rb[
cb]] += f_minus[
s]*chiralProjectPlus(
psi[
s-1]);
247 fact = m_q * f_minus[
N5-1];
249 chi[0][rb[
cb]] += f_minus[1]*chiralProjectPlus(
psi[1]);
250 chi[0][rb[
cb]] -= fact*chiralProjectMinus(
psi[
N5-1]);
263 fact = m_q * f_minus[0];
266 chi[
N5-1][rb[
cb]] -= fact*chiralProjectPlus(
psi[0]);
269 for(
int s=1;
s<
N5-1;
s++) {
282 chi[
s][rb[
cb]] += f_minus[
s-1]*chiralProjectMinus(
psi[
s-1]);
283 chi[
s][rb[
cb]] += f_minus[
s+1]*chiralProjectPlus(
psi[
s+1]);
306 EvenOddPrecGenNEFDWLinOpArray::applyDiagInv(multi1d<LatticeFermion>&
chi,
307 const multi1d<LatticeFermion>&
psi,
316 multi1d<LatticeFermion>
z(
N5); moveToFastMemoryHint(
z);
317 multi1d<LatticeFermion> z_prime(
N5); moveToFastMemoryHint(z_prime);
328 for(
int s=0;
s <
N5-1;
s++){
338 z[
N5-1][rb[
cb]] -=
l[
s]*chiralProjectMinus(
psi[
s]);
345 z_prime[0][rb[
cb]] =
z[0];
346 for(
int s = 0;
s <
N5-1;
s++) {
354 z_prime[
s+1][rb[
cb]] =
z[
s+1] -
a[
s]*chiralProjectPlus(z_prime[
s]);
359 for(
int s=0;
s <
N5;
s++) {
361 z[
s][rb[
cb]] = fact*z_prime[
s];
366 z_prime[
N5-1][rb[
cb]] =
z[
N5-1];
367 for(
int s=
N5-2;
s >=0;
s-- ) {
375 z_prime[
s][rb[
cb]] =
z[
s] -
b[
s]*chiralProjectMinus(z_prime[
s+1]);
380 for(
int s=0;
s <
N5-1;
s++) {
403 for(
int s=0;
s <
N5-1;
s++){
419 z_prime[0][rb[
cb]] =
z[0];
420 for(
int s = 0;
s <
N5-1;
s++) {
428 z_prime[
s+1][rb[
cb]] =
z[
s+1] -
b[
s]*chiralProjectMinus(z_prime[
s]);
432 for(
int s=0;
s <
N5;
s++) {
434 z[
s][rb[
cb]] = fact*z_prime[
s];
442 z_prime[
N5-1][rb[
cb]] =
z[
N5-1];
443 for(
int s=
N5-2;
s >=0;
s-- ) {
450 z_prime[
s][rb[
cb]] =
z[
s] -
a[
s]*chiralProjectPlus(z_prime[
s+1]);
456 for(
int s=0;
s <
N5-1;
s++) {
485 EvenOddPrecGenNEFDWLinOpArray::applyOffDiag(multi1d<LatticeFermion>&
chi,
486 const multi1d<LatticeFermion>&
psi,
498 multi1d<LatticeFermion>
tmp(
N5); moveToFastMemoryHint(
tmp);
503 int otherCB = (
cb + 1)%2 ;
521 fact1 = -Real(0.5)*b5[0];
522 fact2 = -Real(0.5)*c5[0];
525 tmp[0][rb[otherCB]] = fact1*
psi[0];
526 tmp[0][rb[otherCB]] += fact2*chiralProjectMinus(
psi[1]);
527 tmp[0][rb[otherCB]] -= fact2mf*chiralProjectPlus(
psi[
N5-1]);
543 fact1 = -Real(0.5)*b5[
N5-1];
544 fact2 = -Real(0.5)*c5[
N5-1];
548 tmp[
N5-1][rb[otherCB]] += fact2*chiralProjectPlus(
psi[
N5-2]);
549 tmp[
N5-1][rb[otherCB]] -= fact2mf*chiralProjectMinus(
psi[0]);
551 for(
int s=1;
s <
N5-1;
s++) {
566 fact1 = -Real(0.5)*b5[
s];
567 fact2 = -Real(0.5)*c5[
s];
569 tmp[
s][rb[otherCB]] += fact2*chiralProjectPlus(
psi[
s-1]);
570 tmp[
s][rb[otherCB]] += fact2*chiralProjectMinus(
psi[
s+1]);
582 multi1d<LatticeFermion> tmp_d(
N5) ; moveToFastMemoryHint(tmp_d);
606 Real factb = -Real(0.5)*b5[0];
607 Real factc1 = -Real(0.5)*c5[1];
608 Real factc2 = -Real(0.5)*m_q*c5[
N5-1];
610 chi[0][rb[
cb]] = factb*tmp_d[0];
611 chi[0][rb[
cb]] += factc1*chiralProjectPlus(tmp_d[1]);
612 chi[0][rb[
cb]] -= factc2*chiralProjectMinus(tmp_d[
N5-1]);
628 factb = -Real(0.5)*b5[
N5-1];
629 factc1 = -Real(0.5)*c5[
N5-2];
630 factc2 = -Real(0.5)*m_q*c5[0];
633 chi[
N5-1][rb[
cb]] += factc1*chiralProjectMinus(tmp_d[
N5-2]);
634 chi[
N5-1][rb[
cb]] -= factc2*chiralProjectPlus(tmp_d[0]);
637 for(
int s=1;
s<
N5-1;
s++){
638 factb = -Real(0.5) * b5[
s];
639 factc1 = -Real(0.5) * c5[
s-1];
640 factc2 = -Real(0.5) * c5[
s+1];
650 chi[
s][rb[
cb]] = factb*tmp_d[
s];
651 chi[
s][rb[
cb]] += factc1*chiralProjectMinus(tmp_d[
s-1]);
652 chi[
s][rb[
cb]] += factc2*chiralProjectPlus(tmp_d[
s+1]);
666 EvenOddPrecGenNEFDWLinOpArray::Dminus(LatticeFermion&
chi,
667 const LatticeFermion&
psi,
671 LatticeFermion tt ; moveToFastMemoryHint(tt);
674 Real fact = Real(0.5)*c5[s5];
675 chi = f_minus[s5]*
psi - fact*tt ;
686 EvenOddPrecGenNEFDWLinOpArray::applyDerivOffDiag(multi1d<LatticeColorMatrix>& ds_u,
687 const multi1d<LatticeFermion>&
chi,
688 const multi1d<LatticeFermion>&
psi,
695 multi1d<LatticeColorMatrix> ds_tmp(
Nd);
702 LatticeFermion
tmp; moveToFastMemoryHint(
tmp);
706 int otherCB = (
cb + 1)%2 ;
724 fact1 = -Real(0.5)*b5[0];
725 fact2 = -Real(0.5)*c5[0];
728 tmp[rb[otherCB]] = fact1*
psi[0];
729 tmp[rb[otherCB]] += fact2*chiralProjectMinus(
psi[1]);
730 tmp[rb[otherCB]] -= fact2mf*chiralProjectPlus(
psi[
N5-1]);
746 fact1 = -Real(0.5)*b5[
N5-1];
747 fact2 = -Real(0.5)*c5[
N5-1];
751 tmp[rb[otherCB]] += fact2*chiralProjectPlus(
psi[
N5-2]);
752 tmp[rb[otherCB]] -= fact2mf*chiralProjectMinus(
psi[0]);
758 for(
int s=1;
s <
N5-1;
s++) {
773 fact1 = -Real(0.5)*b5[
s];
774 fact2 = -Real(0.5)*c5[
s];
775 tmp[rb[otherCB]] = fact1*
psi[
s];
776 tmp[rb[otherCB]] += fact2*chiralProjectPlus(
psi[
s-1]);
777 tmp[rb[otherCB]] += fact2*chiralProjectMinus(
psi[
s+1]);
817 multi1d<LatticeFermion> chi_plus(
N5); moveToFastMemoryHint(chi_plus);
818 multi1d<LatticeFermion> chi_minus(
N5); moveToFastMemoryHint(chi_minus);
820 for(
int s=0;
s <
N5;
s++) {
831 chi_plus[
s][rb[
cb]] = chiralProjectPlus(
chi[
s]);
832 chi_minus[
s][rb[
cb]] = chiralProjectMinus(
chi[
s]);
841 LatticeFermion chi_tmp =
zero; moveToFastMemoryHint(chi_tmp);
848 ftmp=Real(0.5)*b5[0];
849 chi_tmp[rb[
cb]] = ftmp*
chi[0];
855 ftmp=Real(0.5)*c5[1];
856 chi_tmp[rb[
cb]] = ftmp*chi_plus[0];
861 ftmp=Real(0.5)*c5[
N5-1]*m_q;
862 chi_tmp[rb[
cb]] = ftmp*chi_minus[0];
868 for(
int s=1;
s <
N5-1;
s++) {
871 ftmp = Real(0.5)*b5[
s];
872 chi_tmp[rb[
cb]] = ftmp*
chi[
s];
877 ftmp = Real(0.5)*c5[
s-1];
878 chi_tmp[rb[
cb]] = ftmp*chi_minus[
s];
883 ftmp = Real(0.5)*c5[
s+1];
884 chi_tmp[rb[
cb]] = ftmp*chi_plus[
s];
893 ftmp = Real(0.5)*b5[
N5-1];
894 chi_tmp[rb[
cb]] = ftmp *
chi[
N5-1];
899 ftmp = Real(0.5)*c5[
N5-2];
900 chi_tmp[rb[
cb]] = ftmp*chi_minus[
N5-1];
905 ftmp = Real(0.5)*c5[0]*m_q;
906 chi_tmp[rb[
cb]] = ftmp * chi_plus[
N5-1];
Primary include file for CHROMA library code.
Support class for fermion actions and linear operators.
Class for counted reference semantics.
4D Even Odd preconditioned NEF domain-wall fermion linear operator generalised to take array of b_5 a...
Asqtad Staggered-Dirac operator.
multi1d< LatticeFermion > r(Ncb)