/***************** wvec_rdot.c (in su3.a) ****************************** * * * float wvec_rdot( wilson_vector *a, wilson_vector *b ) * * return real part of dot product of two wilson_vectors * */ #include "complex.h" #include "su3.h" float wvec_rdot( wilson_vector *a, wilson_vector *b ){ #ifndef NATIVEDOUBLE register float temp1,temp2; register int i; temp2=0.0; for(i=0;i<4;i++){ temp1 = a->d[i].c[0].real * b->d[i].c[0].real; temp2 += temp1; temp1 = a->d[i].c[0].imag * b->d[i].c[0].imag; temp2 += temp1; temp1 = a->d[i].c[1].real * b->d[i].c[1].real; temp2 += temp1; temp1 = a->d[i].c[1].imag * b->d[i].c[1].imag; temp2 += temp1; temp1 = a->d[i].c[2].real * b->d[i].c[2].real; temp2 += temp1; temp1 = a->d[i].c[2].imag * b->d[i].c[2].imag; temp2 += temp1; } return(temp2); #else /* RS6000 version */ register double ar,ai,br,bi,ss; ar=a->d[0].c[0].real; ai=a->d[0].c[0].imag; br=b->d[0].c[0].real; bi=b->d[0].c[0].imag; ss = ar*br + ai*bi; ar=a->d[0].c[1].real; ai=a->d[0].c[1].imag; br=b->d[0].c[1].real; bi=b->d[0].c[1].imag; ss += ar*br + ai*bi; ar=a->d[0].c[2].real; ai=a->d[0].c[2].imag; br=b->d[0].c[2].real; bi=b->d[0].c[2].imag; ss += ar*br + ai*bi; ar=a->d[1].c[0].real; ai=a->d[1].c[0].imag; br=b->d[1].c[0].real; bi=b->d[1].c[0].imag; ss += ar*br + ai*bi; ar=a->d[1].c[1].real; ai=a->d[1].c[1].imag; br=b->d[1].c[1].real; bi=b->d[1].c[1].imag; ss += ar*br + ai*bi; ar=a->d[1].c[2].real; ai=a->d[1].c[2].imag; br=b->d[1].c[2].real; bi=b->d[1].c[2].imag; ss += ar*br + ai*bi; ar=a->d[2].c[0].real; ai=a->d[2].c[0].imag; br=b->d[2].c[0].real; bi=b->d[2].c[0].imag; ss += ar*br + ai*bi; ar=a->d[2].c[1].real; ai=a->d[2].c[1].imag; br=b->d[2].c[1].real; bi=b->d[2].c[1].imag; ss += ar*br + ai*bi; ar=a->d[2].c[2].real; ai=a->d[2].c[2].imag; br=b->d[2].c[2].real; bi=b->d[2].c[2].imag; ss += ar*br + ai*bi; ar=a->d[3].c[0].real; ai=a->d[3].c[0].imag; br=b->d[3].c[0].real; bi=b->d[3].c[0].imag; ss += ar*br + ai*bi; ar=a->d[3].c[1].real; ai=a->d[3].c[1].imag; br=b->d[3].c[1].real; bi=b->d[3].c[1].imag; ss += ar*br + ai*bi; ar=a->d[3].c[2].real; ai=a->d[3].c[2].imag; br=b->d[3].c[2].real; bi=b->d[3].c[2].imag; ss += ar*br + ai*bi; return(ss); #endif }