Merge pull request #3756 from stanmoore1/triclinic_sort

Fix bug in atom sorting with triclinic boxes
This commit is contained in:
Axel Kohlmeyer
2023-04-27 17:53:44 -04:00
committed by GitHub
2 changed files with 18 additions and 1 deletions

View File

@ -165,8 +165,11 @@ void AtomKokkos::sort()
if (nlocal == nmax) avec->grow(0);
// for triclinic, atoms must be in box coords (not lamda) to match bbox
if (domain->triclinic) domain->lamda2x(nlocal);
sync(Host, ALL_MASK);
modified(Host, ALL_MASK);
// bin atoms in reverse order so linked list will be in forward order
@ -233,6 +236,12 @@ void AtomKokkos::sort()
//int flagall;
//MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
//if (flagall) errorX->all(FLERR,"Atom sort did not operate correctly");
modified(Host, ALL_MASK);
// convert back to lamda coords
if (domain->triclinic) domain->x2lamda(nlocal);
}
/* ----------------------------------------------------------------------

View File

@ -2271,6 +2271,10 @@ void Atom::sort()
for (i = 0; i < nbins; i++) binhead[i] = -1;
// for triclinic, atoms must be in box coords (not lamda) to match bbox
if (domain->triclinic) domain->lamda2x(nlocal);
for (i = nlocal-1; i >= 0; i--) {
ix = static_cast<int> ((x[i][0]-bboxlo[0])*bininvx);
iy = static_cast<int> ((x[i][1]-bboxlo[1])*bininvy);
@ -2286,6 +2290,10 @@ void Atom::sort()
binhead[ibin] = i;
}
// convert back to lamda coords
if (domain->triclinic) domain->x2lamda(nlocal);
// permute = desired permutation of atoms
// permute[I] = J means Ith new atom will be Jth old atom