gather_sites(d.elem(), s0.elem(), i0, s1.elem(), i1, s2.elem(), i2, s3.elem(), i3);
d.elem(0) = s0.elem(i0); d.elem(1) = s1.elem(i1); d.elem(2) = s2.elem(i2); d.elem(3) = s3.elem(i3);
gather_sites(IScalar<T>& d, 	     const IScalar<T1>& s0, int i0, 	     const IScalar<T1>& s1, int i1,	     const IScalar<T1>& s2, int i2,	     const IScalar<T1>& s3, int i3){  gather_sites(d.elem(), 	       s0.elem(), i0, 	       s1.elem(), i1, 	       s2.elem(), i2, 	       s3.elem(), i3);}