for(int site=0, xsite2=0; site < Layout::vol(); site += xinc) { if (Layout::primaryNode()) bfread((void *)(data.slice() + xsite2), sizeof(typename WordType<T>::Type_t), xinc*sizeof(T)/sizeof(typename WordType<T>::Type_t), bin.get());  xsite2 = QMP_shift((site + xinc) % Layout::vol(), (unsigned char*)(data.slice()), sizeof(T), xinc); }  for(int site=0; site < Layout::subgridVol(); ++site) {  d.elem(site) = data[site]; }
Internal::broadcast(d);
BinaryReader& read(BinaryReader& bin, OLattice<T>& d){  // Twice the subgrid vol - intermediate array we flip-flop reading data  multi1d<T> data(2*Layout::subgridVol());  const int xinc = Layout::subgridLattSize()[0];  // Assume lexicographic for the moment...  for(int site=0, xsite2=0; site < Layout::vol(); site += xinc)  {    if (Layout::primaryNode())      bfread((void *)(data.slice() + xsite2),	     sizeof(typename WordType<T>::Type_t), 	     xinc*sizeof(T)/sizeof(typename WordType<T>::Type_t), bin.get());    xsite2 = QMP_shift((site + xinc) % Layout::vol(),		       (unsigned char*)(data.slice()), sizeof(T), xinc);  }  for(int site=0; site < Layout::subgridVol(); ++site)  {//    int i = Layout::linearSiteIndex(site);    d.elem(site) = data[site];  }  return bin;}