#ifndef ASQTAD_INT_H #define ASQTAD_INT_H #include #ifdef SCIDAC #include #include #include #define USE_SCU #else //SCIDAC #include #include #include #ifndef USE_QMP #define USE_SCU #define USE_QALLOC #endif //USE_QMP #if TARGET == QCDOC #define USE_QALLOC #endif #endif //SCIDAC #ifdef USE_QALLOC #include #else //#include #endif #ifdef USE_QMP #include #endif class PTmatrix{ private: Float u[18]; public: PTmatrix(){}; ~PTmatrix(){}; void Dagger(const Float *a); void Negate(){ for(int i =0;i<18;i++) u[i] = -u[i]; } void fTimesV1Plus(Float f,PTmatrix &m){ for(int i =0;i<18;i++) u[i] += f*m.u[i]; } PTmatrix & operator= (Float x){ for(int i =0;i<18;i++) u[i] =0.; u[0]=x;u[8]=x;u[16]=x; return *this; } void TrLessAntiHermMatrix() { Float *p = (Float *)u; *p = *(p+8) = *(p+16)=0.; Float tmp = 0.5*(p[2] - p[6]); p[2]=tmp; p[6] = -tmp; tmp = 0.5*(p[3] + p[7]); p[3]=tmp; p[7] = tmp; tmp = 0.5*(p[4] - p[12]); p[4]=tmp; p[12] = -tmp; tmp = 0.5*(p[5] + p[13]); p[5]=tmp; p[13] = tmp; tmp = 0.5*(p[10] - p[14]); p[10]=tmp; p[14] = -tmp; tmp = 0.5*(p[11] + p[15]); p[11]=tmp; p[15] = tmp; static Float inv3 = 0.3333333333333333333333333; IFloat c = inv3 * (*(p+1) + *(p+9) + *(p+17)); p[1] -= c; p[9] -= c; p[17] -= c; } }; typedef Float PTvector; inline Float NormSqNode(PTvector *src,int size){ Float sum = 0.; for(int i = 0;i