16 #define CADD(a,b,c) { (c).real = (a).real + (b).real; \
17 (c).imag = (a).imag + (b).imag; }
18 #define CMUL(a,b,c) { (c).real = (a).real*(b).real - (a).imag*(b).imag; \
19 (c).imag = (a).real*(b).imag + (a).imag*(b).real; }
20 #define CSUM(a,b) { (a).real += (b).real; (a).imag += (b).imag; }
23 #define CMULJ_(a,b,c) { (c).real = (a).real*(b).real + (a).imag*(b).imag; \
24 (c).imag = (a).real*(b).imag - (a).imag*(b).real; }
27 #define CMUL_J(a,b,c) { (c).real = (a).real*(b).real + (a).imag*(b).imag; \
28 (c).imag = (a).imag*(b).real - (a).real*(b).imag; }
30 #define CONJG(a,b) { (b).real = (a).real; (b).imag = -(a).imag; }
50 float m00im,m11im,m22im;
56 double m00im,m11im,m22im;
64 template<
typename su3_matrix>
68 return (p + 4*idx + dir);
70 su3_matrix* data = ((su3_matrix**)p)[dir];
73 errorQuda(
"get_su3_matrix: unsupported ordering scheme!\n");
78 template<
typename su3_matrix>
83 for(i=0;i<3;i++)
for(j=0;j<3;j++){
84 CONJG( a->e[j][i], b->e[i][j] );
88 template<
typename su3_matrix>
90 adjoint_su3_matrix( su3_matrix *a)
94 for(i=0;i<3;i++)
for(j=0;j<3;j++){
95 CONJG( a->e[j][i], b.e[i][j] );
101 template<
typename su3_matrix,
typename anti_hermitmat>
106 typeof(ah3->m00im) temp =
107 (m3->e[0][0].imag + m3->e[1][1].imag + m3->e[2][2].imag)*0.33333333333333333;
108 ah3->m00im = m3->e[0][0].imag - temp;
109 ah3->m11im = m3->e[1][1].imag - temp;
110 ah3->m22im = m3->e[2][2].imag - temp;
111 ah3->m01.real = (m3->e[0][1].real - m3->e[1][0].real)*0.5;
112 ah3->m02.real = (m3->e[0][2].real - m3->e[2][0].real)*0.5;
113 ah3->m12.real = (m3->e[1][2].real - m3->e[2][1].real)*0.5;
114 ah3->m01.imag = (m3->e[0][1].imag + m3->e[1][0].imag)*0.5;
115 ah3->m02.imag = (m3->e[0][2].imag + m3->e[2][0].imag)*0.5;
116 ah3->m12.imag = (m3->e[1][2].imag + m3->e[2][1].imag)*0.5;
120 template <typename anti_hermitmat, typename su3_matrix>
122 uncompress_anti_hermitian(anti_hermitmat *mat_antihermit,
123 su3_matrix *mat_su3 )
125 typeof(mat_antihermit->m00im) temp1;
126 mat_su3->e[0][0].imag=mat_antihermit->m00im;
127 mat_su3->e[0][0].real=0.;
128 mat_su3->e[1][1].imag=mat_antihermit->m11im;
129 mat_su3->e[1][1].real=0.;
130 mat_su3->e[2][2].imag=mat_antihermit->m22im;
131 mat_su3->e[2][2].real=0.;
132 mat_su3->e[0][1].imag=mat_antihermit->m01.imag;
133 temp1=mat_antihermit->m01.real;
134 mat_su3->e[0][1].real=temp1;
135 mat_su3->e[1][0].real= -temp1;
136 mat_su3->e[1][0].imag=mat_antihermit->m01.imag;
137 mat_su3->e[0][2].imag=mat_antihermit->m02.imag;
138 temp1=mat_antihermit->m02.real;
139 mat_su3->e[0][2].real=temp1;
140 mat_su3->e[2][0].real= -temp1;
141 mat_su3->e[2][0].imag=mat_antihermit->m02.imag;
142 mat_su3->e[1][2].imag=mat_antihermit->m12.imag;
143 temp1=mat_antihermit->m12.real;
144 mat_su3->e[1][2].real=temp1;
145 mat_su3->e[2][1].real= -temp1;
146 mat_su3->e[2][1].imag=mat_antihermit->m12.imag;
149 template <typename su3_matrix, typename
Float>
151 scalar_mult_sub_su3_matrix(su3_matrix *a,su3_matrix *b,
Float s, su3_matrix *c)
156 c->e[i][j].real = a->e[i][j].real - s*b->e[i][j].real;
157 c->e[i][j].imag = a->e[i][j].imag - s*b->e[i][j].imag;
162 template <
typename su3_matrix,
typename Float>
164 scalar_mult_add_su3_matrix(su3_matrix *a,su3_matrix *b,
Float s, su3_matrix *c)
169 c->e[i][j].real = a->e[i][j].real + s*b->e[i][j].real;
170 c->e[i][j].imag = a->e[i][j].imag + s*b->e[i][j].imag;
174 template <
typename su3_matrix,
typename Float>
176 scale_su3_matrix(su3_matrix *a,
Float s)
181 a->e[i][j].real = a->e[i][j].real *
s;
182 a->e[i][j].imag = a->e[i][j].imag *
s;
187 template<
typename su3_matrix,
typename su3_vector>
189 mult_su3_mat_vec( su3_matrix *a, su3_vector *b, su3_vector *c )
192 typeof(a->e[0][0])
x,
y;
196 CMUL( a->e[i][j] , b->c[j] ,
y );
202 template<
typename su3_matrix,
typename su3_vector>
204 mult_adj_su3_mat_vec( su3_matrix *a, su3_vector *b, su3_vector *c )
207 typeof(a->e[0][0])
x,
y,z;
211 CONJG( a->e[j][i], z );
212 CMUL( z , b->c[j],
y );
219 template<
typename su3_vector,
typename su3_matrix>
221 su3_projector( su3_vector *a, su3_vector *b, su3_matrix *c )
224 for(i=0;i<3;i++)
for(j=0;j<3;j++){
225 CMUL_J( a->c[i], b->c[j], c->e[i][j] );
229 template<
typename su3_vector,
typename Real>
231 scalar_mult_add_su3_vector(su3_vector *a, su3_vector *b, Real s,
236 c->c[i].real = a->c[i].real + s*b->c[i].real;
237 c->c[i].imag = a->c[i].imag + s*b->c[i].imag;
243 template <
typename su3_matrix>
250 printf(
"(%f %f)\t", a->e[i][j].real, a->e[i][j].imag);
260 template<
typename su3_matrix>
262 matrix_mult_nn(su3_matrix* a, su3_matrix* b, su3_matrix* c){
264 typeof(c->e[0][0])
x;
265 for(
int i=0; i<3; i++){
266 for(
int j=0; j<3; j++){
267 c->e[i][j].real = 0.;
268 c->e[i][j].imag = 0.;
269 for(
int k=0; k<3; k++){
270 CMUL(a->e[i][k],b->e[k][j],
x);
271 c->e[i][j].real +=
x.real;
272 c->e[i][j].imag +=
x.imag;
280 template<
typename su3_matrix>
282 matrix_mult_an(su3_matrix* a, su3_matrix* b, su3_matrix* c){
284 typeof(c->e[0][0])
x;
285 for(
int i=0; i<3; i++){
286 for(
int j=0; j<3; j++){
287 c->e[i][j].real = 0.;
288 c->e[i][j].imag = 0.;
289 for(
int k=0; k<3; k++){
290 CMULJ_(a->e[k][i],b->e[k][j],
x);
291 c->e[i][j].real +=
x.real;
292 c->e[i][j].imag +=
x.imag;
301 template<
typename su3_matrix>
303 matrix_mult_na(su3_matrix* a, su3_matrix* b, su3_matrix* c){
305 typeof(c->e[0][0])
x;
306 for(
int i=0; i<3; i++){
307 for(
int j=0; j<3; j++){
308 c->e[i][j].real = 0.; c->e[i][j].imag = 0.;
309 for(
int k=0; k<3; k++){
310 CMUL_J(a->e[i][k],b->e[j][k],
x);
311 c->e[i][j].real +=
x.real;
312 c->e[i][j].imag +=
x.imag;
319 template<
typename su3_matrix>
321 matrix_mult_aa(su3_matrix* a, su3_matrix* b, su3_matrix* c){
323 su3_matrix a_adjoint;
325 matrix_mult_na(&a_adjoint, b, c);
328 template <
typename su3_matrix,
typename anti_hermitmat,
typename Float>
330 update_mom(anti_hermitmat* momentum,
int dir, su3_matrix* sitelink,
331 su3_matrix* staple,
Float eb3)
339 su3_matrix* lnk = sitelink + 4*i+dir;
340 su3_matrix* stp = staple + i;
341 anti_hermitmat* mom = momentum + 4*i+dir;
343 mult_su3_na(lnk, stp, &tmat1);
344 uncompress_anti_hermitian(mom, &tmat2);
346 scalar_mult_sub_su3_matrix(&tmat2, &tmat1, eb3, &tmat3);
354 template<
typename half_wilson_vector,
typename su3_matrix>
356 u_shift_hw(half_wilson_vector *src, half_wilson_vector *dest,
int dir, su3_matrix* sitelink )
361 dx[3]=dx[2]=dx[1]=dx[0]=0;
367 half_wilson_vector* hw = src + nbr_idx;
368 su3_matrix* link = sitelink + i*4 + dir;
369 mult_su3_mat_vec(link, &hw->h[0], &dest[i].h[0]);
370 mult_su3_mat_vec(link, &hw->h[1], &dest[i].h[1]);
376 half_wilson_vector* hw = src + nbr_idx;
377 su3_matrix* link = sitelink + nbr_idx*4 +
OPP_DIR(dir);
378 mult_adj_su3_mat_vec(link, &hw->h[0], &dest[i].h[0]);
379 mult_adj_su3_mat_vec(link, &hw->h[1], &dest[i].h[1]);
386 template<
typename half_wilson_vector,
typename su3_matrix>
388 shifted_outer_prod(half_wilson_vector *src, su3_matrix* dest,
int dir)
394 dx[3]=dx[2]=dx[1]=dx[0]=0;
402 half_wilson_vector* hw = src + nbr_idx;
403 su3_projector( &src[i].h[0], &(hw->h[0]), &dest[i]);
408 template<
typename half_wilson_vector,
typename su3_matrix>
410 forward_shifted_outer_prod(half_wilson_vector *src, su3_matrix* dest,
int dir)
416 dx[3]=dx[2]=dx[1]=dx[0]=0;
424 half_wilson_vector* hw = src + nbr_idx;
426 su3_projector( &(hw->h[0]), &src[i].h[0], &dest[i]);
436 template <
typename half_wilson_vector,
typename su3_matrix>
441 for(
int i=0; i<
V; ++i){
442 for(
int dir=0; dir<4; ++dir){
443 dx[3]=dx[2]=dx[1]=dx[0]=0;
446 half_wilson_vector* hw = src + nbr_idx;
448 su3_projector( &(hw->h[0]), &src[i].h[0], p);
455 template <
typename half_wilson_vector,
typename su3_matrix>
460 for(
int i=0; i<
V; ++i){
461 for(
int dir=0; dir<4; ++dir){
462 dx[3]=dx[2]=dx[1]=dx[0]=0;
465 half_wilson_vector* hw = src + nbr_idx;
467 su3_projector( &(hw->h[0]), &src[i].h[0], p);
498 template<
typename half_wilson_vector,
typename su3_matrix>
499 static void shiftedOuterProduct(half_wilson_vector *src, su3_matrix* dest){
500 for(
int dir=0; dir<4; dir++){
501 shifted_outer_prod(src, &dest[dir*V],
OPP_DIR(dir));
505 template<
typename half_wilson_vector,
typename su3_matrix>
506 static void forwardShiftedOuterProduct(half_wilson_vector *src, su3_matrix* dest){
507 for(
int dir=0; dir<4; dir++){
508 forward_shifted_outer_prod(src, &dest[dir*V], dir);
526 template<
typename su3_matrix>
528 u_shift_mat(su3_matrix *src, su3_matrix *dest,
int dir, su3_matrix* sitelink)
532 dx[3]=dx[2]=dx[1]=dx[0]=0;
538 su3_matrix*
mat = src+nbr_idx;
539 su3_matrix* link = sitelink + i*4 + dir;
540 matrix_mult_nn(link, mat, &dest[i]);
546 su3_matrix*
mat = src+nbr_idx;
547 su3_matrix* link = sitelink + nbr_idx*4 +
OPP_DIR(dir);
548 matrix_mult_an(link, mat, &dest[i]);
560 template <
typename half_wilson_vector,
561 typename anti_hermitmat,
typename Real>
563 add_3f_force_to_mom(half_wilson_vector *back, half_wilson_vector *forw,
564 int dir, Real
coeff[2], anti_hermitmat* momentum)
573 my_coeff[0] = -coeff[0];
574 my_coeff[1] = -coeff[1];
577 my_coeff[0] = coeff[0];
578 my_coeff[1] = coeff[1];
583 tmp_coeff[0] = my_coeff[0];
584 tmp_coeff[1] = my_coeff[1];
586 tmp_coeff[0] = -my_coeff[0];
587 tmp_coeff[1] = -my_coeff[1] ;
590 if (
sizeof(Real) ==
sizeof(
float)){
593 anti_hermitmat* mom = momentum+ 4* i + mydir;
594 uncompress_anti_hermitian(mom, &mom_matrix);
595 su3_projector( &back[i].h[0], &forw[i].h[0], &tmat);
596 scalar_mult_add_su3_matrix(&mom_matrix, &tmat, tmp_coeff[0], &mom_matrix );
601 anti_hermitmat* mom = momentum+ 4* i + mydir;
602 uncompress_anti_hermitian(mom, &mom_matrix);
603 su3_projector( &back[i].h[0], &forw[i].h[0], &tmat);
604 scalar_mult_add_su3_matrix(&mom_matrix, &tmat, tmp_coeff[0], &mom_matrix );
611 template<
typename Real,
typename half_wilson_vector,
typename anti_hermitmat>
613 side_link_3f_force(
int mu,
int nu, Real coeff[2], half_wilson_vector *Path ,
614 half_wilson_vector *Path_nu, half_wilson_vector *Path_mu,
615 half_wilson_vector *Path_numu, anti_hermitmat* mom)
619 m_coeff[0] = -coeff[0] ;
620 m_coeff[1] = -coeff[1] ;
624 add_3f_force_to_mom(Path_numu, Path, mu, coeff, mom) ;
626 add_3f_force_to_mom(Path,Path_numu,
OPP_DIR(mu),m_coeff, mom);
631 add_3f_force_to_mom(Path_nu, Path_mu, mu, m_coeff, mom);
633 add_3f_force_to_mom(Path_mu, Path_nu,
OPP_DIR(mu), coeff, mom) ;
638 template<
typename Real,
typename su3_matrix,
typename anti_hermitmat>
640 add_force_to_momentum(su3_matrix *back, su3_matrix *forw,
641 int dir, Real coeff, anti_hermitmat* momentum)
658 if(i<
Vh){ tmp_coeff = my_coeff; }
659 else{ tmp_coeff = -my_coeff; }
663 su3_matrix mom_matrix;
664 anti_hermitmat* mom = momentum + 4*i + mydir;
665 uncompress_anti_hermitian(mom, &mom_matrix);
666 matrix_mult_na(&back[i], &forw[i], &tmat);
667 scalar_mult_add_su3_matrix(&mom_matrix, &tmat, tmp_coeff, &mom_matrix);
675 template<
typename Real,
typename su3_matrix,
typename anti_hermitmat>
677 side_link_force(
int mu,
int nu, Real coeff, su3_matrix *Path,
678 su3_matrix *Path_nu, su3_matrix *Path_mu,
679 su3_matrix *Path_numu, anti_hermitmat* mom)
686 add_force_to_momentum(Path_numu, Path, mu, coeff, mom);
690 add_force_to_momentum(Path, Path_numu,
OPP_DIR(mu), m_coeff, mom);
696 add_force_to_momentum(Path_nu, Path_mu, mu, m_coeff, mom);
699 add_force_to_momentum(Path_mu, Path_nu,
OPP_DIR(mu), coeff, mom);
709 #define Pmu tempmat[0]
710 #define Pnumu tempmat[1]
711 #define Prhonumu tempmat[2]
712 #define P7 tempmat[3]
713 #define P7rho tempmat[4]
714 #define P5 tempmat[5]
715 #define P3 tempmat[6]
716 #define P5nu tempmat[3]
717 #define P3mu tempmat[3]
718 #define Popmu tempmat[4]
719 #define Pmumumu tempmat[4]
721 #define Qmu tempmat[7]
722 #define Qnumu tempmat[8]
723 #define Qrhonumu tempmat[2] // same as Prhonumu
729 template<
typename su3_matrix>
730 static void set_identity_matrix(su3_matrix*
mat)
732 for(
int i=0; i<3; i++){
733 for(
int j=0; j<3; j++){
742 template<
typename su3_matrix>
743 static void set_identity(su3_matrix* matrices,
int num_dirs){
744 for(
int i=0; i<V*num_dirs; i++){
745 set_identity_matrix(&matrices[i]);
750 template <
typename Real,
typename su3_matrix,
typename anti_hermitmat>
752 su3_matrix* temp_xx, Real* act_path_coeff,
753 su3_matrix* sitelink, anti_hermitmat* mom)
756 int mu, nu, rho,
sig;
758 Real OneLink, Lepage, FiveSt, ThreeSt, SevenSt;
760 Real mLepage, mFiveSt, mThreeSt, mSevenSt;
762 su3_matrix* tempmat[9];
763 int sites_on_node =
V;
767 ferm_epsilon = 2.0*weight*eps;
768 OneLink = act_path_coeff[0]*ferm_epsilon ;
770 ThreeSt = act_path_coeff[2]*ferm_epsilon ; mThreeSt = -ThreeSt;
771 FiveSt = act_path_coeff[3]*ferm_epsilon ; mFiveSt = -FiveSt;
772 SevenSt = act_path_coeff[4]*ferm_epsilon ; mSevenSt = -SevenSt;
773 Lepage = act_path_coeff[5]*ferm_epsilon ; mLepage = -Lepage;
779 for(mu=0; mu<9; mu++){
780 tempmat[
mu] = (su3_matrix *)malloc( sites_on_node*
sizeof(su3_matrix) );
785 id = (su3_matrix *)malloc(sites_on_node*
sizeof(su3_matrix) );
800 printf(
"Calling modified hisq\n");
804 for(sig=0; sig < 8; sig++){
808 u_shift_mat(&temp_xx[
OPP_DIR(sig)*V],
Pmu, sig, sitelink);
809 add_force_to_momentum(
Pmu,
id, sig, OneLink, mom);
815 for(mu = 0; mu < 8; mu++){
816 if ( (mu == sig) || (mu ==
OPP_DIR(sig))){
832 u_shift_mat(
Pmu,
P3, sig, sitelink);
835 add_force_to_momentum(
P3,
Qmu, sig, mThreeSt, mom);
839 for(nu=0; nu < 8; nu++){
840 if (nu == sig || nu ==
OPP_DIR(sig)
841 || nu == mu || nu ==
OPP_DIR(mu)){
860 u_shift_mat(
Pnumu,
P5, sig, sitelink);
862 add_force_to_momentum(
P5,
Qnumu, sig, FiveSt, mom);
864 for(rho =0; rho < 8; rho++){
865 if (rho == sig || rho ==
OPP_DIR(sig)
866 || rho == mu || rho ==
OPP_DIR(mu)
867 || rho == nu || rho ==
OPP_DIR(nu)){
881 add_force_to_momentum(
P7,
Qrhonumu, sig, mSevenSt, mom) ;
883 u_shift_mat(
P7,
P7rho, rho, sitelink);
885 if(FiveSt != 0)coeff = SevenSt/FiveSt ;
else coeff = 0;
887 scalar_mult_add_su3_matrix(&
P5[i], &
P7rho[i], coeff, &
P5[i]);
892 u_shift_mat(
P5,
P5nu, nu, sitelink);
895 if(ThreeSt != 0)coeff = FiveSt/ThreeSt;
else coeff = 0;
898 scalar_mult_add_su3_matrix(&
P3[i], &
P5nu[i], coeff, &
P3[i]);
906 u_shift_mat(
Pnumu,
P5, sig, sitelink);
908 add_force_to_momentum(
P5,
Qnumu, sig, Lepage, mom);
911 u_shift_mat(
P5,
P5nu, mu, sitelink);
915 if(ThreeSt != 0)coeff = Lepage/ThreeSt;
else coeff = 0;
918 scalar_mult_add_su3_matrix(&
P3[i], &
P5nu[i], coeff, &
P3[i]);
922 u_shift_mat(
P3,
P3mu, mu, sitelink);
924 side_link_force(mu, sig, ThreeSt,
id,
P3,
Qmu,
P3mu, mom);
936 template <
typename Real,
typename su3_matrix,
typename anti_hermitmat,
typename half_wilson_vector>
938 half_wilson_vector* temp_x, Real* act_path_coeff,
939 su3_matrix* sitelink, anti_hermitmat* mom)
942 int mu, nu, rho,
sig;
944 Real OneLink, Lepage, FiveSt, ThreeSt, SevenSt;
946 Real mLepage, mFiveSt, mThreeSt, mSevenSt;
948 su3_matrix* tempmat[9];
949 int sites_on_node =
V;
953 ferm_epsilon = 2.0*weight*eps;
954 OneLink = act_path_coeff[0]*ferm_epsilon ;
956 ThreeSt = act_path_coeff[2]*ferm_epsilon ; mThreeSt = -ThreeSt;
957 FiveSt = act_path_coeff[3]*ferm_epsilon ; mFiveSt = -FiveSt;
958 SevenSt = act_path_coeff[4]*ferm_epsilon ; mSevenSt = -SevenSt;
959 Lepage = act_path_coeff[5]*ferm_epsilon ; mLepage = -Lepage;
966 for(mu=0; mu<9; mu++){
967 tempmat[
mu] = (su3_matrix *)malloc( sites_on_node*
sizeof(su3_matrix) );
972 id = (su3_matrix *)malloc(sites_on_node*
sizeof(su3_matrix) );
974 id4 = (su3_matrix *)malloc(sites_on_node*4*
sizeof(su3_matrix) );
976 su3_matrix* temp_mat;
977 temp_mat = (su3_matrix *)malloc(sites_on_node*
sizeof(su3_matrix) );
982 printf(
"Calling hisq reference routine\n");
983 for(sig=0; sig < 8; sig++){
984 shifted_outer_prod(temp_x, temp_mat,
OPP_DIR(sig));
989 u_shift_mat(temp_mat,
Pmu, sig, sitelink);
990 add_force_to_momentum(
Pmu,
id, sig, OneLink, mom);
993 for(mu = 0; mu < 8; mu++){
994 if ( (mu == sig) || (mu ==
OPP_DIR(sig))){
1005 u_shift_mat(temp_mat,
Pmu,
OPP_DIR(mu), sitelink);
1010 u_shift_mat(
Pmu,
P3, sig, sitelink);
1013 add_force_to_momentum(
P3,
Qmu, sig, mThreeSt, mom);
1016 for(nu=0; nu < 8; nu++){
1017 if (nu == sig || nu ==
OPP_DIR(sig)
1018 || nu == mu || nu ==
OPP_DIR(mu)){
1037 u_shift_mat(
Pnumu,
P5, sig, sitelink);
1039 add_force_to_momentum(
P5,
Qnumu, sig, FiveSt, mom);
1042 for(rho =0; rho < 8; rho++){
1043 if (rho == sig || rho ==
OPP_DIR(sig)
1044 || rho == mu || rho ==
OPP_DIR(mu)
1045 || rho == nu || rho ==
OPP_DIR(nu)){
1059 add_force_to_momentum(
P7,
Qrhonumu, sig, mSevenSt, mom) ;
1062 u_shift_mat(
P7,
P7rho, rho, sitelink);
1064 if(FiveSt != 0)coeff = SevenSt/FiveSt ;
else coeff = 0;
1066 scalar_mult_add_su3_matrix(&
P5[i], &
P7rho[i], coeff, &
P5[i]);
1071 u_shift_mat(
P5,
P5nu, nu, sitelink);
1074 if(ThreeSt != 0)coeff = FiveSt/ThreeSt;
else coeff = 0;
1077 scalar_mult_add_su3_matrix(&
P3[i], &
P5nu[i], coeff, &
P3[i]);
1085 u_shift_mat(
Pnumu,
P5, sig, sitelink);
1087 add_force_to_momentum(
P5,
Qnumu, sig, Lepage, mom);
1090 u_shift_mat(
P5,
P5nu, mu, sitelink);
1094 if(ThreeSt != 0)coeff = Lepage/ThreeSt;
else coeff = 0;
1097 scalar_mult_add_su3_matrix(&
P3[i], &
P5nu[i], coeff, &
P3[i]);
1101 u_shift_mat(
P3,
P3mu, mu, sitelink);
1103 side_link_force(mu, sig, ThreeSt,
id,
P3,
Qmu,
P3mu, mom);
1107 for(mu=0; mu<9; mu++){
1140 void* act_path_coeff,
void* temp_x,
1141 void* sitelink,
void* mom)
1152 void* act_path_coeff,
void* temp_x,
1153 void* sitelink,
void* mom)
1164 void* act_path_coeff,
void* temp_xx,
1165 void* sitelink,
void* mom)
enum QudaPrecision_s QudaPrecision
void print_su3_matrix(su3_matrix *a)
__global__ void const RealA *const const RealA *const const RealA *const const RealB *const const RealB *const int int mu
void make_anti_hermitian(su3_matrix *m3, anti_hermitmat *ah3)
int neighborIndexFullLattice(int i, int dx4, int dx3, int dx2, int dx1)
void computeLinkOrderedOuterProduct(void *src, void *dst, QudaPrecision precision, int gauge_order)
void mat(void *out, void **fatlink, void **longlink, void *in, double kappa, int dagger_bit, QudaPrecision sPrecision, QudaPrecision gPrecision)
void halfwilson_hisq_force_reference(float eps, float weight, void *act_path_coeff, void *temp_x, void *sitelink, void *mom)
void su3_adjoint(su3_matrix *a, su3_matrix *b)
FloatingPoint< float > Float
for(int s=0;s< param.Ls;s++)
__constant__ double coeff
void do_color_matrix_hisq_force_reference(Real eps, Real weight, su3_matrix *temp_xx, Real *act_path_coeff, su3_matrix *sitelink, anti_hermitmat *mom)
void computeHisqOuterProduct(void *src, void *dest, QudaPrecision precision)
#define GOES_BACKWARDS(dir)
QudaGaugeFieldOrder gauge_order
Main header file for the QUDA library.
#define GOES_FORWARDS(dir)
__global__ void const RealA *const const RealA *const const RealA *const const RealB *const const RealB *const int sig
void do_halfwilson_hisq_force_reference(Real eps, Real weight, half_wilson_vector *temp_x, Real *act_path_coeff, su3_matrix *sitelink, anti_hermitmat *mom)
void color_matrix_hisq_force_reference(float eps, float weight, void *act_path_coeff, void *temp_xx, void *sitelink, void *mom)
su3_matrix * get_su3_matrix(int gauge_order, su3_matrix *p, int idx, int dir)