diff --git a/src/read_data.cpp b/src/read_data.cpp index 9d9d7139a5..31289cdd82 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -551,6 +551,8 @@ void ReadData::command(int narg, char **arg) // only done if firstpass and not first data file if (firstpass && addflag != NONE) { + double oldboxlo[3] = { domain->boxlo[0], domain->boxlo[1] , domain->boxlo[2]}; + double oldboxhi[3] = { domain->boxhi[0], domain->boxhi[1] , domain->boxhi[2]}; domain->boxlo[0] = MIN(domain->boxlo[0], boxlo[0] + shift[0]); domain->boxhi[0] = MAX(domain->boxhi[0], boxhi[0] + shift[0]); domain->boxlo[1] = MIN(domain->boxlo[1], boxlo[1] + shift[1]); @@ -558,6 +560,25 @@ void ReadData::command(int narg, char **arg) domain->boxlo[2] = MIN(domain->boxlo[2], boxlo[2] + shift[2]); domain->boxhi[2] = MAX(domain->boxhi[2], boxhi[2] + shift[2]); + // check of box has changed. If yes, warn about non-zero image flags + if ((oldboxlo[0] != domain->boxlo[0]) || (oldboxlo[1] != domain->boxlo[1]) || + (oldboxlo[2] != domain->boxlo[2]) || (oldboxhi[0] != domain->boxhi[0]) || + (oldboxhi[1] != domain->boxhi[1]) || (oldboxhi[2] != domain->boxhi[2])) { + int iflag = 1; + for (int i=0; i < atom->nlocal; ++i) { + int xbox = (atom->image[i] & IMGMASK) - IMGMAX; + int ybox = (atom->image[i] >> IMGBITS & IMGMASK) - IMGMAX; + int zbox = (atom->image[i] >> IMG2BITS) - IMGMAX; + if (xbox != 0) iflag = 1; + if (ybox != 0) iflag = 1; + if (zbox != 0) iflag = 1; + } + int flag_all; + MPI_Allreduce(&iflag,&flag_all, 1, MPI_INT, MPI_SUM, world); + if ((flag_all > 0) && (comm->me == 0)) + error->warning(FLERR,"Non-zero image flags with growing box leads to bad coordinates"); + } + // NOTE: not sure what to do about tilt value in subsequent data files //if (triclinic) { // domain->xy = xy; domain->xz = xz; domain->yz = yz;