static void over_func(NCPROT1 QLA_ColorMatrix(*m), int site) { if(QLA_Nc==1) { QLA_Complex z, zs, t; QLA_C_eq_elem_M(&z, m, 0, 0); QLA_c_eq_ca(zs, z); QLA_C_eq_C_divide_C(&t, &zs, &z); QLA_M_eq_elem_C(m, &t, 0, 0); } else { QLA_ColorMatrix(s); QLA_ColorMatrix(t); QLA_ColorMatrix(tt); QLA_Complex one; QLA_c_eq_r(one, 1); QLA_M_eq_c(&s, &one); /* Loop over SU(2) subgroup index */ for(int i = 0; i < QLA_Nc; ++i) { for(int j = i+1; j < QLA_Nc; ++j) { QLA_Real a[4], r[4], rn; su2_extract(NCARG r, m, i, j); rn = sqrt( r[0]*r[0] + r[1]*r[1] + r[2]*r[2] + r[3]*r[3] ); if(rn<1e-10) { a[0] = 1; a[1] = a[2] = a[3] = 0; } else { rn = 1/rn; a[0] = rn*r[0]; a[1] = -rn*r[1]; a[2] = -rn*r[2]; a[3] = -rn*r[3]; } r[0] = a[0]*a[0] - a[1]*a[1] - a[2]*a[2] - a[3]*a[3]; a[0] *= 2; r[1] = a[0]*a[1]; r[2] = a[0]*a[2]; r[3] = a[0]*a[3]; su2_fill(NCARG &t, r, i, j); QLA_M_eq_M_times_M(&tt, &t, &s); QLA_M_eq_M(&s, &tt); QLA_M_eq_M_times_M(&tt, &t, m); QLA_M_eq_M(m, &tt); } } QLA_M_eq_M(m, &s); } }
static void make_herm(NCPROT QLA_ColorMatrix(*m), int idx, void *args) { QLA_Complex tr; QLA_c_eq_r(tr, 0); for(int i=0; i<QLA_Nc; i++) { for(int j=i; j<QLA_Nc; j++) { QLA_Complex t1, t2; QLA_c_eq_c(t1, QLA_elem_M(*m,i,j)); QLA_c_eq_c(t2, QLA_elem_M(*m,j,i)); QLA_c_peq_ca(t1, t2); QLA_c_eq_r_times_c(t1, 0.5, t1); QLA_c_eq_c(QLA_elem_M(*m,i,j), t1); QLA_c_eq_ca(QLA_elem_M(*m,j,i), t1); } QLA_c_peq_c(tr, QLA_elem_M(*m,i,i)); } QLA_c_eq_r_times_c(tr, 1./QLA_Nc, tr); for(int i=0; i<QLA_Nc; i++) { QLA_c_meq_c(QLA_elem_M(*m,i,i), tr); } }