d.elem() += l.elem() * r.elem(k,k);
d.elem() += l.elem(0,k) * r.elem(k,0);  for(int j=1; j < N; ++j) for(int k=0; k < N; ++k) d.elem() += l.elem(j,k) * r.elem(k,j);
traceSpinMultiply(const PScalar<T1>& l, const PSpinMatrix<T2,N>& r){  typename BinaryReturn<PScalar<T1>, PSpinMatrix<T2,N>, FnTraceSpinMultiply>::Type_t  d;  // The traceSpin is eaten here  d.elem() = l.elem() * r.elem(0,0);  for(int k=1; k < N; ++k)    d.elem() += l.elem() * r.elem(k,k);  return d;}