diff --git a/doc/src/pair_colloid.rst b/doc/src/pair_colloid.rst index eb02695aec..e60a326642 100644 --- a/doc/src/pair_colloid.rst +++ b/doc/src/pair_colloid.rst @@ -77,7 +77,7 @@ The colloid-solvent interaction energy is given by \left[ 1 - \frac{\left(5 ~ a^6+45~a^4~r^2+63~a^2~r^4+15~r^6\right) \sigma^6} {15 \left(a-r\right)^6 \left( a+r \right)^6} \right], \quad r < r_c -where :math:A_{cs}` is the Hamaker constant, *a* is the radius of the colloidal +where :math:`A_{cs}` is the Hamaker constant, *a* is the radius of the colloidal particle, and :math:`r_c` is the cutoff. This formula is derived from the colloid-colloid interaction, letting one of the particle sizes go to zero. diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index 7b75499b83..261b068997 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -1096,8 +1096,9 @@ void AtomVec::unpack_border(int n, int first, double *buf) m = 0; last = first + n; + while (last > nmax) grow(0); + for (i = first; i < last; i++) { - if (i == nmax) grow(0); x[i][0] = buf[m++]; x[i][1] = buf[m++]; x[i][2] = buf[m++]; @@ -1165,8 +1166,9 @@ void AtomVec::unpack_border_vel(int n, int first, double *buf) m = 0; last = first + n; + while (last > nmax) grow(0); + for (i = first; i < last; i++) { - if (i == nmax) grow(0); x[i][0] = buf[m++]; x[i][1] = buf[m++]; x[i][2] = buf[m++]; diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index b7878ea86a..9f0169568d 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -11,6 +11,11 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing author (multi and triclinic support): + Adrian Diaz (University of Florida) +------------------------------------------------------------------------- */ + #include "comm_tiled.h" #include #include @@ -42,6 +47,11 @@ CommTiled::CommTiled(LAMMPS *lmp) : Comm(lmp) style = 1; layout = Comm::LAYOUT_UNIFORM; pbc_flag = NULL; + buf_send = NULL; + buf_recv = NULL; + overlap = NULL; + rcbinfo = NULL; + cutghostmulti = NULL; init_buffers(); } @@ -69,6 +79,7 @@ CommTiled::~CommTiled() memory->destroy(overlap); deallocate_swap(maxswap); memory->sfree(rcbinfo); + memory->destroy(cutghostmulti); } /* ---------------------------------------------------------------------- @@ -84,11 +95,12 @@ void CommTiled::init_buffers() maxoverlap = 0; overlap = NULL; + rcbinfo = NULL; + cutghostmulti = NULL; + sendbox_multi = NULL; maxswap = 6; allocate_swap(maxswap); - - rcbinfo = NULL; } /* ---------------------------------------------------------------------- */ @@ -97,16 +109,18 @@ void CommTiled::init() { Comm::init(); - nswap = 2 * domain->dimension; + // cannot set nswap in init_buffers() b/c + // dimension command can be after comm_style command + + nswap = 2*domain->dimension; + + memory->destroy(cutghostmulti); + if (mode == Comm::MULTI) + memory->create(cutghostmulti,atom->ntypes+1,3,"comm:cutghostmulti"); int bufextra_old = bufextra; init_exchange(); if (bufextra > bufextra_old) grow_send(maxsend+bufextra,2); - - // temporary restrictions - - if (mode == Comm::MULTI) - error->all(FLERR,"Cannot yet use comm_style tiled with multi-mode comm"); } /* ---------------------------------------------------------------------- @@ -122,6 +136,7 @@ void CommTiled::setup() dimension = domain->dimension; int *periodicity = domain->periodicity; + int ntypes = atom->ntypes; if (triclinic == 0) { prd = domain->prd; @@ -158,6 +173,18 @@ void CommTiled::setup() // set cutoff for comm forward and comm reverse // check that cutoff < any periodic box length + if (mode == Comm::MULTI) { + double *cuttype = neighbor->cuttype; + double cut; + for (i = 1; i <= ntypes; i++) { + cut = 0.0; + if (cutusermulti) cut = cutusermulti[i]; + cutghostmulti[i][0] = MAX(cut,cuttype[i]); + cutghostmulti[i][1] = MAX(cut,cuttype[i]); + cutghostmulti[i][2] = MAX(cut,cuttype[i]); + } + } + double cut = get_comm_cutoff(); if ((cut == 0.0) && (me == 0)) error->warning(FLERR,"Communication cutoff is 0.0. No ghost atoms " @@ -173,6 +200,13 @@ void CommTiled::setup() cutghost[1] = cut * length1; length2 = h_inv[2]; cutghost[2] = cut * length2; + if (mode == Comm::MULTI){ + for (i = 1; i <= ntypes; i++) { + cutghostmulti[i][0] *= length0; + cutghostmulti[i][1] *= length1; + cutghostmulti[i][2] *= length2; + } + } } if ((periodicity[0] && cutghost[0] > prd[0]) || @@ -308,62 +342,140 @@ void CommTiled::setup() // = obox in other 2 dims // if sbox touches other proc's sub-box boundaries in lower dims, // extend sbox in those lower dims to include ghost atoms + // single mode and multi mode - double oboxlo[3],oboxhi[3],sbox[6]; + double oboxlo[3],oboxhi[3],sbox[6],sbox_multi[6]; - for (i = 0; i < noverlap; i++) { - pbc_flag[iswap][i] = 0; - pbc[iswap][i][0] = pbc[iswap][i][1] = pbc[iswap][i][2] = - pbc[iswap][i][3] = pbc[iswap][i][4] = pbc[iswap][i][5] = 0; + if (mode == Comm::SINGLE) { + for (i = 0; i < noverlap; i++) { + pbc_flag[iswap][i] = 0; + pbc[iswap][i][0] = pbc[iswap][i][1] = pbc[iswap][i][2] = + pbc[iswap][i][3] = pbc[iswap][i][4] = pbc[iswap][i][5] = 0; - (this->*box_other)(idim,idir,overlap[i],oboxlo,oboxhi); + (this->*box_other)(idim,idir,overlap[i],oboxlo,oboxhi); - if (i < noverlap1) { - sbox[0] = MAX(oboxlo[0],lo1[0]); - sbox[1] = MAX(oboxlo[1],lo1[1]); - sbox[2] = MAX(oboxlo[2],lo1[2]); - sbox[3] = MIN(oboxhi[0],hi1[0]); - sbox[4] = MIN(oboxhi[1],hi1[1]); - sbox[5] = MIN(oboxhi[2],hi1[2]); - - } else { - pbc_flag[iswap][i] = 1; - if (idir == 0) pbc[iswap][i][idim] = 1; - else pbc[iswap][i][idim] = -1; - if (triclinic) { - if (idim == 1) pbc[iswap][i][5] = pbc[iswap][i][idim]; - if (idim == 2) pbc[iswap][i][4] = pbc[iswap][i][3] = pbc[iswap][i][idim]; + if (i < noverlap1) { + sbox[0] = MAX(oboxlo[0],lo1[0]); + sbox[1] = MAX(oboxlo[1],lo1[1]); + sbox[2] = MAX(oboxlo[2],lo1[2]); + sbox[3] = MIN(oboxhi[0],hi1[0]); + sbox[4] = MIN(oboxhi[1],hi1[1]); + sbox[5] = MIN(oboxhi[2],hi1[2]); + } else { + pbc_flag[iswap][i] = 1; + if (idir == 0) pbc[iswap][i][idim] = 1; + else pbc[iswap][i][idim] = -1; + if (triclinic) { + if (idim == 1) pbc[iswap][i][5] = pbc[iswap][i][idim]; + if (idim == 2) pbc[iswap][i][4] = pbc[iswap][i][3] = pbc[iswap][i][idim]; + } + sbox[0] = MAX(oboxlo[0],lo2[0]); + sbox[1] = MAX(oboxlo[1],lo2[1]); + sbox[2] = MAX(oboxlo[2],lo2[2]); + sbox[3] = MIN(oboxhi[0],hi2[0]); + sbox[4] = MIN(oboxhi[1],hi2[1]); + sbox[5] = MIN(oboxhi[2],hi2[2]); } - sbox[0] = MAX(oboxlo[0],lo2[0]); - sbox[1] = MAX(oboxlo[1],lo2[1]); - sbox[2] = MAX(oboxlo[2],lo2[2]); - sbox[3] = MIN(oboxhi[0],hi2[0]); - sbox[4] = MIN(oboxhi[1],hi2[1]); - sbox[5] = MIN(oboxhi[2],hi2[2]); - } + if (idir == 0) { + sbox[idim] = sublo[idim]; + if (i < noverlap1) + sbox[3+idim] = MIN(sbox[3+idim]+cutghost[idim],subhi[idim]); + else + sbox[3+idim] = MIN(sbox[3+idim]-prd[idim]+cutghost[idim],subhi[idim]); + } else { + if (i < noverlap1) sbox[idim] = MAX(sbox[idim]-cutghost[idim],sublo[idim]); + else sbox[idim] = MAX(sbox[idim]+prd[idim]-cutghost[idim],sublo[idim]); + sbox[3+idim] = subhi[idim]; + } - if (idir == 0) { - sbox[idim] = sublo[idim]; - if (i < noverlap1) - sbox[3+idim] = MIN(sbox[3+idim]+cutghost[idim],subhi[idim]); - else sbox[3+idim] = MIN(sbox[3+idim]-prd[idim]+cutghost[idim],subhi[idim]); - } else { - if (i < noverlap1) sbox[idim] = MAX(sbox[idim]-cutghost[idim],sublo[idim]); - else sbox[idim] = MAX(sbox[idim]+prd[idim]-cutghost[idim],sublo[idim]); - sbox[3+idim] = subhi[idim]; - } + if (idim >= 1) { + if (sbox[0] == oboxlo[0]) sbox[0] -= cutghost[0]; + if (sbox[3] == oboxhi[0]) sbox[3] += cutghost[0]; + } + if (idim == 2) { + if (sbox[1] == oboxlo[1]) sbox[1] -= cutghost[1]; + if (sbox[4] == oboxhi[1]) sbox[4] += cutghost[1]; + } - if (idim >= 1) { - if (sbox[0] == oboxlo[0]) sbox[0] -= cutghost[0]; - if (sbox[3] == oboxhi[0]) sbox[3] += cutghost[0]; - } - if (idim == 2) { - if (sbox[1] == oboxlo[1]) sbox[1] -= cutghost[1]; - if (sbox[4] == oboxhi[1]) sbox[4] += cutghost[1]; + memcpy(sendbox[iswap][i],sbox,6*sizeof(double)); } + } - memcpy(sendbox[iswap][i],sbox,6*sizeof(double)); + if (mode == Comm::MULTI) { + for (i = 0; i < noverlap; i++) { + pbc_flag[iswap][i] = 0; + pbc[iswap][i][0] = pbc[iswap][i][1] = pbc[iswap][i][2] = + pbc[iswap][i][3] = pbc[iswap][i][4] = pbc[iswap][i][5] = 0; + + (this->*box_other)(idim,idir,overlap[i],oboxlo,oboxhi); + + if (i < noverlap1) { + sbox[0] = MAX(oboxlo[0],lo1[0]); + sbox[1] = MAX(oboxlo[1],lo1[1]); + sbox[2] = MAX(oboxlo[2],lo1[2]); + sbox[3] = MIN(oboxhi[0],hi1[0]); + sbox[4] = MIN(oboxhi[1],hi1[1]); + sbox[5] = MIN(oboxhi[2],hi1[2]); + } else { + pbc_flag[iswap][i] = 1; + if (idir == 0) pbc[iswap][i][idim] = 1; + else pbc[iswap][i][idim] = -1; + if (triclinic) { + if (idim == 1) pbc[iswap][i][5] = pbc[iswap][i][idim]; + if (idim == 2) pbc[iswap][i][4] = pbc[iswap][i][3] = pbc[iswap][i][idim]; + } + sbox[0] = MAX(oboxlo[0],lo2[0]); + sbox[1] = MAX(oboxlo[1],lo2[1]); + sbox[2] = MAX(oboxlo[2],lo2[2]); + sbox[3] = MIN(oboxhi[0],hi2[0]); + sbox[4] = MIN(oboxhi[1],hi2[1]); + sbox[5] = MIN(oboxhi[2],hi2[2]); + } + + for (int itype = 1; itype <= atom->ntypes; itype++) { + sbox_multi[0] = sbox[0]; + sbox_multi[1] = sbox[1]; + sbox_multi[2] = sbox[2]; + sbox_multi[3] = sbox[3]; + sbox_multi[4] = sbox[4]; + sbox_multi[5] = sbox[5]; + if (idir == 0) { + sbox_multi[idim] = sublo[idim]; + if (i < noverlap1) + sbox_multi[3+idim] = + MIN(sbox_multi[3+idim]+cutghostmulti[itype][idim],subhi[idim]); + else + sbox_multi[3+idim] = + MIN(sbox_multi[3+idim]-prd[idim]+cutghostmulti[itype][idim], + subhi[idim]); + } else { + if (i < noverlap1) + sbox_multi[idim] = + MAX(sbox_multi[idim]-cutghostmulti[itype][idim],sublo[idim]); + else + sbox_multi[idim] = + MAX(sbox_multi[idim]+prd[idim]-cutghostmulti[itype][idim], + sublo[idim]); + sbox_multi[3+idim] = subhi[idim]; + } + + if (idim >= 1) { + if (sbox_multi[0] == oboxlo[0]) + sbox_multi[0] -= cutghostmulti[itype][idim]; + if (sbox_multi[3] == oboxhi[0]) + sbox_multi[3] += cutghostmulti[itype][idim]; + } + if (idim == 2) { + if (sbox_multi[1] == oboxlo[1]) + sbox_multi[1] -= cutghostmulti[itype][idim]; + if (sbox_multi[4] == oboxhi[1]) + sbox_multi[4] += cutghostmulti[itype][idim]; + } + + memcpy(sendbox_multi[iswap][i][itype],sbox_multi,6*sizeof(double)); + } + } } iswap++; @@ -445,15 +557,15 @@ void CommTiled::setup() } } - // reallocate MPI Requests and Statuses as needed + // reallocate MPI Requests as needed int nmax = 0; for (i = 0; i < nswap; i++) nmax = MAX(nmax,nprocmax[i]); for (i = 0; i < dimension; i++) nmax = MAX(nmax,nexchprocmax[i]); - if (nmax > maxreqstat) { - maxreqstat = nmax; + if (nmax > maxrequest) { + maxrequest = nmax; delete [] requests; - requests = new MPI_Request[maxreqstat]; + requests = new MPI_Request[maxrequest]; } } @@ -815,7 +927,7 @@ void CommTiled::borders() // for x-dim swaps, check owned atoms // for yz-dim swaps, check owned and ghost atoms // store sent atom indices in sendlist for use in future timesteps - // NOTE: assume SINGLE mode, add logic for MULTI mode later + // single mode and multi mode x = atom->x; if (iswap % 2 == 0) nlast = atom->nlocal + atom->nghost; @@ -823,45 +935,100 @@ void CommTiled::borders() ncountall = 0; for (m = 0; m < nsendproc[iswap]; m++) { - bbox = sendbox[iswap][m]; - xlo = bbox[0]; ylo = bbox[1]; zlo = bbox[2]; - xhi = bbox[3]; yhi = bbox[4]; zhi = bbox[5]; - ncount = 0; + if (mode == Comm::SINGLE) { + bbox = sendbox[iswap][m]; + xlo = bbox[0]; ylo = bbox[1]; zlo = bbox[2]; + xhi = bbox[3]; yhi = bbox[4]; zhi = bbox[5]; - if (!bordergroup) { - for (i = 0; i < nlast; i++) { - if (x[i][0] >= xlo && x[i][0] < xhi && - x[i][1] >= ylo && x[i][1] < yhi && - x[i][2] >= zlo && x[i][2] < zhi) { - if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); - sendlist[iswap][m][ncount++] = i; + ncount = 0; + + if (!bordergroup) { + for (i = 0; i < nlast; i++) { + if (x[i][0] >= xlo && x[i][0] < xhi && + x[i][1] >= ylo && x[i][1] < yhi && + x[i][2] >= zlo && x[i][2] < zhi) { + if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); + sendlist[iswap][m][ncount++] = i; + } + } + } else { + ngroup = atom->nfirst; + for (i = 0; i < ngroup; i++) { + if (x[i][0] >= xlo && x[i][0] < xhi && + x[i][1] >= ylo && x[i][1] < yhi && + x[i][2] >= zlo && x[i][2] < zhi) { + if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); + sendlist[iswap][m][ncount++] = i; + } + } + for (i = atom->nlocal; i < nlast; i++) { + if (x[i][0] >= xlo && x[i][0] < xhi && + x[i][1] >= ylo && x[i][1] < yhi && + x[i][2] >= zlo && x[i][2] < zhi) { + if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); + sendlist[iswap][m][ncount++] = i; + } } } + + sendnum[iswap][m] = ncount; + smaxone = MAX(smaxone,ncount); + ncountall += ncount; + } else { - ngroup = atom->nfirst; - for (i = 0; i < ngroup; i++) { - if (x[i][0] >= xlo && x[i][0] < xhi && - x[i][1] >= ylo && x[i][1] < yhi && - x[i][2] >= zlo && x[i][2] < zhi) { - if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); - sendlist[iswap][m][ncount++] = i; - } - } - for (i = atom->nlocal; i < nlast; i++) { - if (x[i][0] >= xlo && x[i][0] < xhi && - x[i][1] >= ylo && x[i][1] < yhi && - x[i][2] >= zlo && x[i][2] < zhi) { - if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); - sendlist[iswap][m][ncount++] = i; - } - } - } - sendnum[iswap][m] = ncount; - smaxone = MAX(smaxone,ncount); - ncountall += ncount; + int* type=atom->type; + int itype; + ncount = 0; + + if (!bordergroup) { + for (i = 0; i < nlast; i++) { + itype=type[i]; + bbox = sendbox_multi[iswap][m][itype]; + xlo = bbox[0]; ylo = bbox[1]; zlo = bbox[2]; + xhi = bbox[3]; yhi = bbox[4]; zhi = bbox[5]; + if (x[i][0] >= xlo && x[i][0] < xhi && + x[i][1] >= ylo && x[i][1] < yhi && + x[i][2] >= zlo && x[i][2] < zhi) { + if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); + sendlist[iswap][m][ncount++] = i; + } + } + } else { + ngroup = atom->nfirst; + for (i = 0; i < ngroup; i++) { + itype=type[i]; + bbox = sendbox_multi[iswap][m][itype]; + xlo = bbox[0]; ylo = bbox[1]; zlo = bbox[2]; + xhi = bbox[3]; yhi = bbox[4]; zhi = bbox[5]; + if (x[i][0] >= xlo && x[i][0] < xhi && + x[i][1] >= ylo && x[i][1] < yhi && + x[i][2] >= zlo && x[i][2] < zhi) { + if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); + sendlist[iswap][m][ncount++] = i; + } + } + for (i = atom->nlocal; i < nlast; i++) { + itype=type[i]; + bbox = sendbox_multi[iswap][m][itype]; + xlo = bbox[0]; ylo = bbox[1]; zlo = bbox[2]; + xhi = bbox[3]; yhi = bbox[4]; zhi = bbox[5]; + if (x[i][0] >= xlo && x[i][0] < xhi && + x[i][1] >= ylo && x[i][1] < yhi && + x[i][2] >= zlo && x[i][2] < zhi) { + if (ncount == maxsendlist[iswap][m]) grow_list(iswap,m,ncount); + sendlist[iswap][m][ncount++] = i; + } + } + } + + sendnum[iswap][m] = ncount; + smaxone = MAX(smaxone,ncount); + ncountall += ncount; + } } + smaxall = MAX(smaxall,ncountall); // send sendnum counts to procs who recv from me except self @@ -914,9 +1081,8 @@ void CommTiled::borders() if (rmaxall*size_border > maxrecv) grow_recv(rmaxall*size_border); // swap atoms with other procs using pack_border(), unpack_border() - // use Waitall() instead of Waitany() because calls to unpack_border() - // must increment per-atom arrays in ascending order - // For the same reason, sendself unpacks must occur after recvother unpacks + // can use Waitany() because calls to unpack_border() + // increment per-atom arrays as much as needed if (ghost_velocity) { if (recvother[iswap]) { @@ -932,13 +1098,6 @@ void CommTiled::borders() MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap][m],0,world); } } - if (recvother[iswap]) { - MPI_Waitall(nrecv,requests,MPI_STATUS_IGNORE); - for (m = 0; m < nrecv; m++) - avec->unpack_border_vel(recvnum[iswap][m],firstrecv[iswap][m], - &buf_recv[size_border* - forward_recv_offset[iswap][m]]); - } if (sendself[iswap]) { avec->pack_border_vel(sendnum[iswap][nsend],sendlist[iswap][nsend], buf_send,pbc_flag[iswap][nsend], @@ -946,6 +1105,14 @@ void CommTiled::borders() avec->unpack_border_vel(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], buf_send); } + if (recvother[iswap]) { + for (i = 0; i < nrecv; i++) { + MPI_Waitany(nrecv,requests,&m,MPI_STATUS_IGNORE); + avec->unpack_border_vel(recvnum[iswap][m],firstrecv[iswap][m], + &buf_recv[size_border* + forward_recv_offset[iswap][m]]); + } + } } else { if (recvother[iswap]) { @@ -961,19 +1128,20 @@ void CommTiled::borders() MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap][m],0,world); } } - if (recvother[iswap]) { - MPI_Waitall(nrecv,requests,MPI_STATUS_IGNORE); - for (m = 0; m < nrecv; m++) - avec->unpack_border(recvnum[iswap][m],firstrecv[iswap][m], - &buf_recv[size_border* - forward_recv_offset[iswap][m]]); - } if (sendself[iswap]) { avec->pack_border(sendnum[iswap][nsend],sendlist[iswap][nsend], buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); avec->unpack_border(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], buf_send); } + if (recvother[iswap]) { + for (i = 0; i < nrecv; i++) { + MPI_Waitany(nrecv,requests,&m,MPI_STATUS_IGNORE); + avec->unpack_border(recvnum[iswap][m],firstrecv[iswap][m], + &buf_recv[size_border* + forward_recv_offset[iswap][m]]); + } + } } // increment ghost atoms @@ -1476,11 +1644,9 @@ int CommTiled::exchange_variable(int n, double * /*inbuf*/, double *& /*outbuf*/ void CommTiled::box_drop_brick(int idim, double *lo, double *hi, int &indexme) { - // NOTE: this is not triclinic compatible - // NOTE: these error messages are internal sanity checks - // should not occur, can be removed at some point + int dir; + int index = -1; - int index=-1,dir; if (hi[idim] == sublo[idim]) { index = myloc[idim] - 1; dir = -1; @@ -1913,6 +2079,7 @@ void CommTiled::allocate_swap(int n) pbc_flag = new int*[n]; pbc = new int**[n]; sendbox = new double**[n]; + sendbox_multi = new double***[n]; maxsendlist = new int*[n]; sendlist = new int**[n]; @@ -1926,11 +2093,12 @@ void CommTiled::allocate_swap(int n) pbc_flag[i] = NULL; pbc[i] = NULL; sendbox[i] = NULL; + sendbox_multi[i] = NULL; maxsendlist[i] = NULL; sendlist[i] = NULL; } - maxreqstat = 0; + maxrequest = 0; requests = NULL; for (int i = 0; i < n; i++) { @@ -1974,6 +2142,8 @@ void CommTiled::grow_swap_send(int i, int n, int nold) memory->create(pbc[i],n,6,"comm:pbc_flag"); memory->destroy(sendbox[i]); memory->create(sendbox[i],n,6,"comm:sendbox"); + memory->destroy(sendbox_multi[i]); + memory->create(sendbox_multi[i],n,atom->ntypes+1,6,"comm:sendbox_multi"); delete [] maxsendlist[i]; maxsendlist[i] = new int[n]; @@ -2032,6 +2202,8 @@ void CommTiled::deallocate_swap(int n) delete [] pbc_flag[i]; memory->destroy(pbc[i]); memory->destroy(sendbox[i]); + memory->destroy(sendbox_multi[i]); + delete [] maxsendlist[i]; for (int j = 0; j < nprocmax[i]; j++) memory->destroy(sendlist[i][j]); @@ -2052,6 +2224,7 @@ void CommTiled::deallocate_swap(int n) delete [] pbc_flag; delete [] pbc; delete [] sendbox; + delete [] sendbox_multi; delete [] maxsendlist; delete [] sendlist; diff --git a/src/comm_tiled.h b/src/comm_tiled.h index 6a0e2b82e3..aa8867b2c3 100644 --- a/src/comm_tiled.h +++ b/src/comm_tiled.h @@ -55,7 +55,7 @@ class CommTiled : public Comm { private: int nswap; // # of swaps to perform = 2*dim int maxswap; // largest nswap can be = 6 - + // forward/reverse comm info, proc lists include self int *nsendproc,*nrecvproc; // # of procs to send/recv to/from per swap @@ -70,7 +70,6 @@ class CommTiled : public Comm { int **size_reverse_recv; // # of values to recv in each reverse swap/proc int **forward_recv_offset; // forward comm offsets in buf_recv per swap/proc int **reverse_recv_offset; // reverse comm offsets in buf_recv per swap/proc - int ***sendlist; // list of atoms to send per swap/proc int **maxsendlist; // max size of send list per swap/proc int **pbc_flag; // general flag for sending atoms thru PBC @@ -78,6 +77,10 @@ class CommTiled : public Comm { double ***sendbox; // bounding box of atoms to send per swap/proc + double **cutghostmulti; // cutghost on a per-type basis + double ****sendbox_multi; // bounding box of atoms to send + // per swap/proc for multi comm + // exchange comm info, proc lists do not include self int *nexchproc; // # of procs to send/recv to/from in each dim @@ -92,7 +95,7 @@ class CommTiled : public Comm { int smaxall,rmaxall; // max size in atoms of any borders send/recv // for comm to all procs in one swap - int maxreqstat; // max size of Request and Status vectors + int maxrequest; // max size of Request vector MPI_Request *requests; struct RCBinfo { @@ -147,6 +150,7 @@ class CommTiled : public Comm { void grow_swap_send(int, int, int); // grow swap arrays for send and recv void grow_swap_recv(int, int); void deallocate_swap(int); // deallocate swap arrays + }; } diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index 6a5da31abd..f1ad5ce2e7 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -1101,9 +1101,12 @@ TEST(PairStyle, single) // The single function in EAM is different from what we assume // here, therefore we have to skip testing those pair styles. - if ((test_config.pair_style.substr(0, 3) == "eam") || + // Pair style colloid is also not compatible with this single tester + if ((test_config.pair_style.substr(0, 7) == "colloid") || + (test_config.pair_style.substr(0, 3) == "eam") || ((test_config.pair_style.substr(0, 6) == "hybrid") && - (test_config.pair_style.find("eam") != std::string::npos))) { + (test_config.pair_style.find("eam") != std::string::npos)) + ) { if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); if (!verbose) ::testing::internal::GetCapturedStdout(); diff --git a/unittest/force-styles/tests/atomic-pair-colloid.yaml b/unittest/force-styles/tests/atomic-pair-colloid.yaml new file mode 100644 index 0000000000..35e44cc54c --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-colloid.yaml @@ -0,0 +1,85 @@ +--- +lammps_version: 21 Jul 2020 +date_generated: Mon Aug 3 16:06:24 202 +epsilon: 5e-14 +prerequisites: ! | + pair colloid +pre_commands: ! | + variable units index lj +post_commands: ! | + neighbor 1.0 bin + comm_style brick + comm_modify mode single +input_file: in.colloid +pair_style: colloid 12.5 +pair_coeff: ! | + 1 1 1.0 1.0 5.0 5.0 12.5 + 1 2 5.0 1.0 5.0 0.0 7.0 + 2 2 10.0 1.0 0.0 0.0 2.5 +extract: ! "" +natoms: 27 +init_vdwl: -0.250265293649414 +init_coul: 0 +init_stress: ! |2- + 1.6693554149342897e+00 1.1752557173260264e+01 1.0084916384631697e+00 -5.5164068587184527e+00 3.4448938909043297e-01 2.8524984331506240e+00 +init_forces: ! |2 + 1 7.2698902368314028e-02 7.6228314794484830e-02 1.0726717051410481e-01 + 2 -4.1487528743785314e-02 -9.8021436494101673e-03 1.5709289685835706e-01 + 3 -6.4514052467860251e-03 -1.0256365723614392e-03 -6.5497018575823654e-04 + 4 -1.5879716299045554e-02 -1.3313626328419375e-02 -1.1960220488237115e-02 + 5 -3.6475105049685382e-02 -2.2992583864092243e-02 1.6166097759476125e-02 + 6 5.4769180740248721e-04 -2.4426732691233789e-02 -3.6444902428178980e-02 + 7 1.2006858444817004e-03 8.6089326153587114e-04 4.8033026817420977e-05 + 8 6.2576206692511894e-03 1.1942031910109577e-03 8.5598267089392085e-04 + 9 1.8304752931477772e+00 -4.3380838069003760e+00 -1.2763141904695217e+00 + 10 1.0456768773213965e-01 -2.8797785965171453e-02 -1.0768387599117879e-02 + 11 7.4457152913473112e-04 5.3043528596594623e-05 1.1848179655097060e-04 + 12 1.8275344545112628e-04 4.1948901318387846e-04 9.8529270880004928e-05 + 13 -1.1259391902077470e-01 1.6396787556459839e-02 -9.0455786475091124e-04 + 14 -2.4411189619188785e-04 -5.8284002050384879e-05 1.8046434825690733e-05 + 15 -2.9421019290851403e-03 -7.4831176382853144e-04 -1.2326238660052020e-03 + 16 2.2461127490925330e+00 -1.1352527056039741e+00 2.3679980564815390e+00 + 17 -1.8842133286566962e-02 1.7091738246445273e-02 -1.4247568288438442e-02 + 18 1.0304762560041125e-01 7.8062023784307467e-03 1.9257495383127633e-02 + 19 -4.3351162132476757e-02 -2.2995928402219718e-02 -1.1392806036292676e-02 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.2501672350519291e-02 6.8582908647593869e-03 -6.8677246013076093e-02 + 22 -2.2945818607502835e+00 1.1603382884260454e+00 -2.3594708301087310e+00 + 23 2.5606115583434265e-02 -1.0270997331622232e-01 -1.1451933998746673e-01 + 24 -8.0648597970214809e-04 1.1943689027481706e-04 -9.8441554909815322e-04 + 25 6.1663239781204479e-04 -2.9236784591333024e-04 3.5387752678593650e-03 + 26 -1.7197958284241512e+00 4.3707144027711022e+00 1.2977194913045051e+00 + 27 -1.4110864281012736e-01 4.2418795982941855e-02 -6.2606997884263993e-02 +run_vdwl: 0.0367090517931739 +run_coul: 0 +run_stress: ! |2- + 3.2547164843322682e+00 1.2822272288053410e+01 2.9381904014809601e+00 -6.5755478139675869e+00 2.3052669923975402e+00 1.5140903126232870e+00 +run_forces: ! |2 + 1 5.8196197291626200e-02 7.7034242946349835e-02 1.0456829776646272e-01 + 2 -4.1552988555246327e-02 -1.1540194679885485e-02 1.5467509805429100e-01 + 3 -6.6558201800471870e-03 -9.8090417095619679e-04 -4.5870088099424396e-04 + 4 -1.6184658518487705e-02 -1.2048418808706472e-02 -1.2190156970179262e-02 + 5 -3.3316803862839403e-02 -2.1131495092834619e-02 1.4963198384123102e-02 + 6 4.7038346343352116e-04 -3.0307837184768524e-02 -4.3608938525025766e-02 + 7 1.0396652127649081e-03 7.5317021954246196e-04 4.1930480907776011e-05 + 8 6.4423457305213877e-03 1.1468835414812518e-03 6.8526191116136061e-04 + 9 1.7585178109228492e+00 -4.3823551563819683e+00 -1.2468505588145766e+00 + 10 1.3392700382201897e-01 -2.9471624976996433e-02 -9.0915578208389906e-03 + 11 7.9839096035526878e-04 6.5881060273477888e-05 1.3840230606223551e-04 + 12 1.8540711169000120e-04 3.9935505493718929e-04 1.2187452986589205e-04 + 13 -1.4075050026169886e-01 1.8204883476184704e-02 -2.0674384501958810e-03 + 14 -2.4452271394244688e-04 -5.7393635529214755e-05 1.6908863929994165e-05 + 15 -3.4577717467029730e-03 -9.3350658134032588e-04 -1.5696623820874889e-03 + 16 5.4762334392971725e+00 -3.3427628201841180e+00 5.8008787111000641e+00 + 17 -1.7123087875076635e-02 1.5861563712562771e-02 -1.3049347364948664e-02 + 18 1.1434938302418582e-01 8.6112942994291432e-03 2.0292892978926169e-02 + 19 -3.8092989065812294e-02 -1.9963855292591683e-02 -9.8568020007968223e-03 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.1446743356056415e-02 8.4986882092498734e-03 -7.1565549648589480e-02 + 22 -5.5269240273286284e+00 3.3665609275390551e+00 -5.7932229791606380e+00 + 23 1.5450935830291834e-02 -1.0557581147017484e-01 -1.1539704280712981e-01 + 24 -7.5222270706101302e-04 1.1318969997713211e-04 -9.2841932954143037e-04 + 25 1.1778375109233723e-03 -7.1254208855309762e-05 3.8035457799329405e-03 + 26 -1.6497221843622811e+00 4.4233264004281976e+00 1.2763820593322663e+00 + 27 -1.3345796635606474e-01 3.6623792481486360e-02 -5.6711027332452278e-02 +... diff --git a/unittest/force-styles/tests/atomic-pair-colloid_multi.yaml b/unittest/force-styles/tests/atomic-pair-colloid_multi.yaml new file mode 100644 index 0000000000..3ee28958b1 --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-colloid_multi.yaml @@ -0,0 +1,85 @@ +--- +lammps_version: 21 Jul 2020 +date_generated: Mon Aug 3 16:06:24 202 +epsilon: 5e-14 +prerequisites: ! | + pair colloid +pre_commands: ! | + variable units index lj +post_commands: ! | + neighbor 1.0 multi + comm_style brick + comm_modify mode multi +input_file: in.colloid +pair_style: colloid 12.5 +pair_coeff: ! | + 1 1 1.0 1.0 5.0 5.0 12.5 + 1 2 5.0 1.0 5.0 0.0 7.0 + 2 2 10.0 1.0 0.0 0.0 2.5 +extract: ! "" +natoms: 27 +init_vdwl: -0.250265293649414 +init_coul: 0 +init_stress: ! |2- + 1.6693554149342913e+00 1.1752557173260270e+01 1.0084916384631617e+00 -5.5164068587184527e+00 3.4448938909043431e-01 2.8524984331506258e+00 +init_forces: ! |2 + 1 7.2698902368314056e-02 7.6228314794484775e-02 1.0726717051410484e-01 + 2 -4.1487528743785314e-02 -9.8021436494101673e-03 1.5709289685835706e-01 + 3 -6.4514052467860251e-03 -1.0256365723614392e-03 -6.5497018575823654e-04 + 4 -1.5879716299045554e-02 -1.3313626328419375e-02 -1.1960220488237115e-02 + 5 -3.6475105049685402e-02 -2.2992583864092257e-02 1.6166097759476136e-02 + 6 5.4769180740248721e-04 -2.4426732691233789e-02 -3.6444902428178980e-02 + 7 1.2006858444817004e-03 8.6089326153587114e-04 4.8033026817420977e-05 + 8 6.2576206692511894e-03 1.1942031910109577e-03 8.5598267089392085e-04 + 9 1.8304752931477772e+00 -4.3380838069003760e+00 -1.2763141904695217e+00 + 10 1.0456768773213965e-01 -2.8797785965171453e-02 -1.0768387599117879e-02 + 11 7.4457152913473112e-04 5.3043528596594623e-05 1.1848179655097060e-04 + 12 1.8275344545112628e-04 4.1948901318387846e-04 9.8529270880004928e-05 + 13 -1.1259391902077470e-01 1.6396787556459839e-02 -9.0455786475091124e-04 + 14 -2.4411189619188785e-04 -5.8284002050384879e-05 1.8046434825690733e-05 + 15 -2.9421019290851403e-03 -7.4831176382853144e-04 -1.2326238660052020e-03 + 16 2.2461127490925330e+00 -1.1352527056039741e+00 2.3679980564815386e+00 + 17 -1.8842133286566962e-02 1.7091738246445273e-02 -1.4247568288438442e-02 + 18 1.0304762560041125e-01 7.8062023784307467e-03 1.9257495383127633e-02 + 19 -4.3351162132476757e-02 -2.2995928402219718e-02 -1.1392806036292676e-02 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.2501672350519284e-02 6.8582908647593938e-03 -6.8677246013076107e-02 + 22 -2.2945818607502839e+00 1.1603382884260454e+00 -2.3594708301087310e+00 + 23 2.5606115583434265e-02 -1.0270997331622232e-01 -1.1451933998746673e-01 + 24 -8.0648597970214809e-04 1.1943689027481706e-04 -9.8441554909815322e-04 + 25 6.1663239781204458e-04 -2.9236784591333030e-04 3.5387752678593654e-03 + 26 -1.7197958284241512e+00 4.3707144027711022e+00 1.2977194913045054e+00 + 27 -1.4110864281012736e-01 4.2418795982941855e-02 -6.2606997884263993e-02 +run_vdwl: 0.0367090517931737 +run_coul: 0 +run_stress: ! |2- + 3.2547164843322691e+00 1.2822272288053391e+01 2.9381904014809663e+00 -6.5755478139675931e+00 2.3052669923975411e+00 1.5140903126232879e+00 +run_forces: ! |2 + 1 5.8196197291625715e-02 7.7034242946349946e-02 1.0456829776646254e-01 + 2 -4.1552988555246327e-02 -1.1540194679885485e-02 1.5467509805429100e-01 + 3 -6.6558201800471870e-03 -9.8090417095619679e-04 -4.5870088099424396e-04 + 4 -1.6184658518487705e-02 -1.2048418808706472e-02 -1.2190156970179262e-02 + 5 -3.3316803862839438e-02 -2.1131495092834646e-02 1.4963198384123119e-02 + 6 4.7038346343352116e-04 -3.0307837184768524e-02 -4.3608938525025766e-02 + 7 1.0396652127649081e-03 7.5317021954246196e-04 4.1930480907776011e-05 + 8 6.4423457305213877e-03 1.1468835414812518e-03 6.8526191116136061e-04 + 9 1.7585178109228492e+00 -4.3823551563819700e+00 -1.2468505588145766e+00 + 10 1.3392700382201897e-01 -2.9471624976996433e-02 -9.0915578208389906e-03 + 11 7.9839096035526857e-04 6.5881060273478105e-05 1.3840230606223543e-04 + 12 1.8540711169000120e-04 3.9935505493718929e-04 1.2187452986589205e-04 + 13 -1.4075050026169886e-01 1.8204883476184704e-02 -2.0674384501958810e-03 + 14 -2.4452271394244688e-04 -5.7393635529214755e-05 1.6908863929994165e-05 + 15 -3.4577717467029726e-03 -9.3350658134032599e-04 -1.5696623820874889e-03 + 16 5.4762334392971725e+00 -3.3427628201841184e+00 5.8008787111000641e+00 + 17 -1.7123087875076635e-02 1.5861563712562771e-02 -1.3049347364948664e-02 + 18 1.1434938302418582e-01 8.6112942994291432e-03 2.0292892978926169e-02 + 19 -3.8092989065812294e-02 -1.9963855292591683e-02 -9.8568020007968223e-03 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.1446743356056415e-02 8.4986882092498717e-03 -7.1565549648589466e-02 + 22 -5.5269240273286284e+00 3.3665609275390551e+00 -5.7932229791606371e+00 + 23 1.5450935830291834e-02 -1.0557581147017484e-01 -1.1539704280712981e-01 + 24 -7.5222270706101302e-04 1.1318969997713211e-04 -9.2841932954143037e-04 + 25 1.1778375109233736e-03 -7.1254208855308434e-05 3.8035457799329383e-03 + 26 -1.6497221843622811e+00 4.4233264004281976e+00 1.2763820593322663e+00 + 27 -1.3345796635606427e-01 3.6623792481486235e-02 -5.6711027332452084e-02 +... diff --git a/unittest/force-styles/tests/atomic-pair-colloid_multi_tri.yaml b/unittest/force-styles/tests/atomic-pair-colloid_multi_tri.yaml new file mode 100644 index 0000000000..0ef29011c8 --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-colloid_multi_tri.yaml @@ -0,0 +1,86 @@ +--- +lammps_version: 21 Jul 2020 +date_generated: Mon Aug 3 22:40:52 202 +epsilon: 5e-13 +prerequisites: ! | + pair colloid +pre_commands: ! | + variable units index lj +post_commands: ! | + neighbor 1.0 multi + comm_style brick + comm_modify mode multi + change_box all triclinic +input_file: in.colloid +pair_style: colloid 12.5 +pair_coeff: ! | + 1 1 1.0 1.0 5.0 5.0 12.5 + 1 2 5.0 1.0 5.0 0.0 7.0 + 2 2 10.0 1.0 0.0 0.0 2.5 +extract: ! "" +natoms: 27 +init_vdwl: -0.250265293649414 +init_coul: 0 +init_stress: ! |2- + 1.6693554149342911e+00 1.1752557173260259e+01 1.0084916384631786e+00 -5.5164068587184580e+00 3.4448938909043375e-01 2.8524984331506325e+00 +init_forces: ! |2 + 1 7.2698902368313792e-02 7.6228314794484928e-02 1.0726717051410495e-01 + 2 -4.1487528743785314e-02 -9.8021436494101673e-03 1.5709289685835706e-01 + 3 -6.4514052467860251e-03 -1.0256365723614392e-03 -6.5497018575823654e-04 + 4 -1.5879716299045554e-02 -1.3313626328419375e-02 -1.1960220488237115e-02 + 5 -3.6475105049685402e-02 -2.2992583864092257e-02 1.6166097759476136e-02 + 6 5.4769180740244731e-04 -2.4426732691233955e-02 -3.6444902428179146e-02 + 7 1.2006858444817004e-03 8.6089326153587114e-04 4.8033026817420977e-05 + 8 6.2576206692511894e-03 1.1942031910109575e-03 8.5598267089392129e-04 + 9 1.8304752931477772e+00 -4.3380838069003751e+00 -1.2763141904695217e+00 + 10 1.0456768773213966e-01 -2.8797785965171449e-02 -1.0768387599117872e-02 + 11 7.4457152913473068e-04 5.3043528596594895e-05 1.1848179655097051e-04 + 12 1.8275344545112628e-04 4.1948901318387846e-04 9.8529270880004928e-05 + 13 -1.1259391902077470e-01 1.6396787556459836e-02 -9.0455786475091167e-04 + 14 -2.4411189619188755e-04 -5.8284002050384791e-05 1.8046434825690706e-05 + 15 -2.9421019290851403e-03 -7.4831176382853144e-04 -1.2326238660052020e-03 + 16 2.2461127490925330e+00 -1.1352527056039741e+00 2.3679980564815390e+00 + 17 -1.8842133286566962e-02 1.7091738246445273e-02 -1.4247568288438442e-02 + 18 1.0304762560041145e-01 7.8062023784307155e-03 1.9257495383127543e-02 + 19 -4.3351162132476757e-02 -2.2995928402219718e-02 -1.1392806036292676e-02 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.2501672350519284e-02 6.8582908647593982e-03 -6.8677246013076107e-02 + 22 -2.2945818607502835e+00 1.1603382884260451e+00 -2.3594708301087310e+00 + 23 2.5606115583434334e-02 -1.0270997331622238e-01 -1.1451933998746676e-01 + 24 -8.0648597970214874e-04 1.1943689027481719e-04 -9.8441554909815452e-04 + 25 6.1663239781204458e-04 -2.9236784591333030e-04 3.5387752678593654e-03 + 26 -1.7197958284241512e+00 4.3707144027711022e+00 1.2977194913045054e+00 + 27 -1.4110864281012736e-01 4.2418795982941855e-02 -6.2606997884263993e-02 +run_vdwl: 0.0367090517931635 +run_coul: 0 +run_stress: ! |2- + 3.2547164843321998e+00 1.2822272288053016e+01 2.9381904014809583e+00 -6.5755478139674493e+00 2.3052669923975677e+00 1.5140903126232053e+00 +run_forces: ! |2 + 1 5.8196197291626575e-02 7.7034242946349710e-02 1.0456829776646283e-01 + 2 -4.1552988555246369e-02 -1.1540194679885474e-02 1.5467509805429086e-01 + 3 -6.6558201800471888e-03 -9.8090417095619570e-04 -4.5870088099424298e-04 + 4 -1.6184658518487716e-02 -1.2048418808706531e-02 -1.2190156970179285e-02 + 5 -3.3316803862839500e-02 -2.1131495092834723e-02 1.4963198384123161e-02 + 6 4.7038346343351856e-04 -3.0307837184768479e-02 -4.3608938525025828e-02 + 7 1.0396652127649044e-03 7.5317021954245870e-04 4.1930480907775929e-05 + 8 6.4423457305213851e-03 1.1468835414812505e-03 6.8526191116135909e-04 + 9 1.7585178109228026e+00 -4.3823551563818404e+00 -1.2468505588145364e+00 + 10 1.3392700382201883e-01 -2.9471624976996413e-02 -9.0915578208389941e-03 + 11 7.9839096035526651e-04 6.5881060273478051e-05 1.3840230606223500e-04 + 12 1.8540711168999979e-04 3.9935505493719320e-04 1.2187452986588761e-04 + 13 -1.4075050026169872e-01 1.8204883476184680e-02 -2.0674384501958849e-03 + 14 -2.4452271394244732e-04 -5.7393635529214925e-05 1.6908863929994199e-05 + 15 -3.4577717467029808e-03 -9.3350658134032805e-04 -1.5696623820874909e-03 + 16 5.4762334392971521e+00 -3.3427628201841029e+00 5.8008787111000384e+00 + 17 -1.7123087875076739e-02 1.5861563712562882e-02 -1.3049347364948762e-02 + 18 1.1434938302418579e-01 8.6112942994289246e-03 2.0292892978925857e-02 + 19 -3.8092989065812349e-02 -1.9963855292591714e-02 -9.8568020007968171e-03 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.1446743356056477e-02 8.4986882092497468e-03 -7.1565549648589286e-02 + 22 -5.5269240273286080e+00 3.3665609275390400e+00 -5.7932229791606122e+00 + 23 1.5450935830291862e-02 -1.0557581147017453e-01 -1.1539704280712934e-01 + 24 -7.5222270706101790e-04 1.1318969997713260e-04 -9.2841932954143699e-04 + 25 1.1778375109233756e-03 -7.1254208855309979e-05 3.8035457799329474e-03 + 26 -1.6497221843622341e+00 4.4233264004280688e+00 1.2763820593322264e+00 + 27 -1.3345796635606499e-01 3.6623792481486409e-02 -5.6711027332452466e-02 +... diff --git a/unittest/force-styles/tests/atomic-pair-colloid_tiled.yaml b/unittest/force-styles/tests/atomic-pair-colloid_tiled.yaml new file mode 100644 index 0000000000..5d2e3147de --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-colloid_tiled.yaml @@ -0,0 +1,85 @@ +--- +lammps_version: 21 Jul 2020 +date_generated: Mon Aug 3 16:06:24 202 +epsilon: 5e-14 +prerequisites: ! | + pair colloid +pre_commands: ! | + variable units index lj +post_commands: ! | + neighbor 1.0 multi + comm_style tiled + comm_modify mode multi +input_file: in.colloid +pair_style: colloid 12.5 +pair_coeff: ! | + 1 1 1.0 1.0 5.0 5.0 12.5 + 1 2 5.0 1.0 5.0 0.0 7.0 + 2 2 10.0 1.0 0.0 0.0 2.5 +extract: ! "" +natoms: 27 +init_vdwl: -0.250265293649414 +init_coul: 0 +init_stress: ! |2- + 1.6693554149342913e+00 1.1752557173260270e+01 1.0084916384631617e+00 -5.5164068587184527e+00 3.4448938909043431e-01 2.8524984331506258e+00 +init_forces: ! |2 + 1 7.2698902368314056e-02 7.6228314794484775e-02 1.0726717051410484e-01 + 2 -4.1487528743785314e-02 -9.8021436494101673e-03 1.5709289685835706e-01 + 3 -6.4514052467860251e-03 -1.0256365723614392e-03 -6.5497018575823654e-04 + 4 -1.5879716299045554e-02 -1.3313626328419375e-02 -1.1960220488237115e-02 + 5 -3.6475105049685402e-02 -2.2992583864092257e-02 1.6166097759476136e-02 + 6 5.4769180740248721e-04 -2.4426732691233789e-02 -3.6444902428178980e-02 + 7 1.2006858444817004e-03 8.6089326153587114e-04 4.8033026817420977e-05 + 8 6.2576206692511894e-03 1.1942031910109577e-03 8.5598267089392085e-04 + 9 1.8304752931477772e+00 -4.3380838069003760e+00 -1.2763141904695217e+00 + 10 1.0456768773213965e-01 -2.8797785965171453e-02 -1.0768387599117879e-02 + 11 7.4457152913473112e-04 5.3043528596594623e-05 1.1848179655097060e-04 + 12 1.8275344545112628e-04 4.1948901318387846e-04 9.8529270880004928e-05 + 13 -1.1259391902077470e-01 1.6396787556459839e-02 -9.0455786475091124e-04 + 14 -2.4411189619188785e-04 -5.8284002050384879e-05 1.8046434825690733e-05 + 15 -2.9421019290851403e-03 -7.4831176382853144e-04 -1.2326238660052020e-03 + 16 2.2461127490925330e+00 -1.1352527056039741e+00 2.3679980564815386e+00 + 17 -1.8842133286566962e-02 1.7091738246445273e-02 -1.4247568288438442e-02 + 18 1.0304762560041125e-01 7.8062023784307467e-03 1.9257495383127633e-02 + 19 -4.3351162132476757e-02 -2.2995928402219718e-02 -1.1392806036292676e-02 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.2501672350519284e-02 6.8582908647593938e-03 -6.8677246013076107e-02 + 22 -2.2945818607502839e+00 1.1603382884260454e+00 -2.3594708301087310e+00 + 23 2.5606115583434265e-02 -1.0270997331622232e-01 -1.1451933998746673e-01 + 24 -8.0648597970214809e-04 1.1943689027481706e-04 -9.8441554909815322e-04 + 25 6.1663239781204458e-04 -2.9236784591333030e-04 3.5387752678593654e-03 + 26 -1.7197958284241512e+00 4.3707144027711022e+00 1.2977194913045054e+00 + 27 -1.4110864281012736e-01 4.2418795982941855e-02 -6.2606997884263993e-02 +run_vdwl: 0.0367090517931737 +run_coul: 0 +run_stress: ! |2- + 3.2547164843322691e+00 1.2822272288053391e+01 2.9381904014809663e+00 -6.5755478139675931e+00 2.3052669923975411e+00 1.5140903126232879e+00 +run_forces: ! |2 + 1 5.8196197291625715e-02 7.7034242946349946e-02 1.0456829776646254e-01 + 2 -4.1552988555246327e-02 -1.1540194679885485e-02 1.5467509805429100e-01 + 3 -6.6558201800471870e-03 -9.8090417095619679e-04 -4.5870088099424396e-04 + 4 -1.6184658518487705e-02 -1.2048418808706472e-02 -1.2190156970179262e-02 + 5 -3.3316803862839438e-02 -2.1131495092834646e-02 1.4963198384123119e-02 + 6 4.7038346343352116e-04 -3.0307837184768524e-02 -4.3608938525025766e-02 + 7 1.0396652127649081e-03 7.5317021954246196e-04 4.1930480907776011e-05 + 8 6.4423457305213877e-03 1.1468835414812518e-03 6.8526191116136061e-04 + 9 1.7585178109228492e+00 -4.3823551563819700e+00 -1.2468505588145766e+00 + 10 1.3392700382201897e-01 -2.9471624976996433e-02 -9.0915578208389906e-03 + 11 7.9839096035526857e-04 6.5881060273478105e-05 1.3840230606223543e-04 + 12 1.8540711169000120e-04 3.9935505493718929e-04 1.2187452986589205e-04 + 13 -1.4075050026169886e-01 1.8204883476184704e-02 -2.0674384501958810e-03 + 14 -2.4452271394244688e-04 -5.7393635529214755e-05 1.6908863929994165e-05 + 15 -3.4577717467029726e-03 -9.3350658134032599e-04 -1.5696623820874889e-03 + 16 5.4762334392971725e+00 -3.3427628201841184e+00 5.8008787111000641e+00 + 17 -1.7123087875076635e-02 1.5861563712562771e-02 -1.3049347364948664e-02 + 18 1.1434938302418582e-01 8.6112942994291432e-03 2.0292892978926169e-02 + 19 -3.8092989065812294e-02 -1.9963855292591683e-02 -9.8568020007968223e-03 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.1446743356056415e-02 8.4986882092498717e-03 -7.1565549648589466e-02 + 22 -5.5269240273286284e+00 3.3665609275390551e+00 -5.7932229791606371e+00 + 23 1.5450935830291834e-02 -1.0557581147017484e-01 -1.1539704280712981e-01 + 24 -7.5222270706101302e-04 1.1318969997713211e-04 -9.2841932954143037e-04 + 25 1.1778375109233736e-03 -7.1254208855308434e-05 3.8035457799329383e-03 + 26 -1.6497221843622811e+00 4.4233264004281976e+00 1.2763820593322663e+00 + 27 -1.3345796635606427e-01 3.6623792481486235e-02 -5.6711027332452084e-02 +... diff --git a/unittest/force-styles/tests/atomic-pair-colloid_tiled_tri.yaml b/unittest/force-styles/tests/atomic-pair-colloid_tiled_tri.yaml new file mode 100644 index 0000000000..25c84a5938 --- /dev/null +++ b/unittest/force-styles/tests/atomic-pair-colloid_tiled_tri.yaml @@ -0,0 +1,86 @@ +--- +lammps_version: 21 Jul 2020 +date_generated: Mon Aug 3 22:40:52 202 +epsilon: 5e-13 +prerequisites: ! | + pair colloid +pre_commands: ! | + variable units index lj +post_commands: ! | + neighbor 1.0 multi + comm_style tiled + comm_modify mode multi + change_box all triclinic +input_file: in.colloid +pair_style: colloid 12.5 +pair_coeff: ! | + 1 1 1.0 1.0 5.0 5.0 12.5 + 1 2 5.0 1.0 5.0 0.0 7.0 + 2 2 10.0 1.0 0.0 0.0 2.5 +extract: ! "" +natoms: 27 +init_vdwl: -0.250265293649414 +init_coul: 0 +init_stress: ! |2- + 1.6693554149342911e+00 1.1752557173260259e+01 1.0084916384631786e+00 -5.5164068587184580e+00 3.4448938909043375e-01 2.8524984331506325e+00 +init_forces: ! |2 + 1 7.2698902368313792e-02 7.6228314794484928e-02 1.0726717051410495e-01 + 2 -4.1487528743785314e-02 -9.8021436494101673e-03 1.5709289685835706e-01 + 3 -6.4514052467860251e-03 -1.0256365723614392e-03 -6.5497018575823654e-04 + 4 -1.5879716299045554e-02 -1.3313626328419375e-02 -1.1960220488237115e-02 + 5 -3.6475105049685402e-02 -2.2992583864092257e-02 1.6166097759476136e-02 + 6 5.4769180740244731e-04 -2.4426732691233955e-02 -3.6444902428179146e-02 + 7 1.2006858444817004e-03 8.6089326153587114e-04 4.8033026817420977e-05 + 8 6.2576206692511894e-03 1.1942031910109575e-03 8.5598267089392129e-04 + 9 1.8304752931477772e+00 -4.3380838069003751e+00 -1.2763141904695217e+00 + 10 1.0456768773213966e-01 -2.8797785965171449e-02 -1.0768387599117872e-02 + 11 7.4457152913473068e-04 5.3043528596594895e-05 1.1848179655097051e-04 + 12 1.8275344545112628e-04 4.1948901318387846e-04 9.8529270880004928e-05 + 13 -1.1259391902077470e-01 1.6396787556459836e-02 -9.0455786475091167e-04 + 14 -2.4411189619188755e-04 -5.8284002050384791e-05 1.8046434825690706e-05 + 15 -2.9421019290851403e-03 -7.4831176382853144e-04 -1.2326238660052020e-03 + 16 2.2461127490925330e+00 -1.1352527056039741e+00 2.3679980564815390e+00 + 17 -1.8842133286566962e-02 1.7091738246445273e-02 -1.4247568288438442e-02 + 18 1.0304762560041145e-01 7.8062023784307155e-03 1.9257495383127543e-02 + 19 -4.3351162132476757e-02 -2.2995928402219718e-02 -1.1392806036292676e-02 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.2501672350519284e-02 6.8582908647593982e-03 -6.8677246013076107e-02 + 22 -2.2945818607502835e+00 1.1603382884260451e+00 -2.3594708301087310e+00 + 23 2.5606115583434334e-02 -1.0270997331622238e-01 -1.1451933998746676e-01 + 24 -8.0648597970214874e-04 1.1943689027481719e-04 -9.8441554909815452e-04 + 25 6.1663239781204458e-04 -2.9236784591333030e-04 3.5387752678593654e-03 + 26 -1.7197958284241512e+00 4.3707144027711022e+00 1.2977194913045054e+00 + 27 -1.4110864281012736e-01 4.2418795982941855e-02 -6.2606997884263993e-02 +run_vdwl: 0.0367090517931635 +run_coul: 0 +run_stress: ! |2- + 3.2547164843321998e+00 1.2822272288053016e+01 2.9381904014809583e+00 -6.5755478139674493e+00 2.3052669923975677e+00 1.5140903126232053e+00 +run_forces: ! |2 + 1 5.8196197291626575e-02 7.7034242946349710e-02 1.0456829776646283e-01 + 2 -4.1552988555246369e-02 -1.1540194679885474e-02 1.5467509805429086e-01 + 3 -6.6558201800471888e-03 -9.8090417095619570e-04 -4.5870088099424298e-04 + 4 -1.6184658518487716e-02 -1.2048418808706531e-02 -1.2190156970179285e-02 + 5 -3.3316803862839500e-02 -2.1131495092834723e-02 1.4963198384123161e-02 + 6 4.7038346343351856e-04 -3.0307837184768479e-02 -4.3608938525025828e-02 + 7 1.0396652127649044e-03 7.5317021954245870e-04 4.1930480907775929e-05 + 8 6.4423457305213851e-03 1.1468835414812505e-03 6.8526191116135909e-04 + 9 1.7585178109228026e+00 -4.3823551563818404e+00 -1.2468505588145364e+00 + 10 1.3392700382201883e-01 -2.9471624976996413e-02 -9.0915578208389941e-03 + 11 7.9839096035526651e-04 6.5881060273478051e-05 1.3840230606223500e-04 + 12 1.8540711168999979e-04 3.9935505493719320e-04 1.2187452986588761e-04 + 13 -1.4075050026169872e-01 1.8204883476184680e-02 -2.0674384501958849e-03 + 14 -2.4452271394244732e-04 -5.7393635529214925e-05 1.6908863929994199e-05 + 15 -3.4577717467029808e-03 -9.3350658134032805e-04 -1.5696623820874909e-03 + 16 5.4762334392971521e+00 -3.3427628201841029e+00 5.8008787111000384e+00 + 17 -1.7123087875076739e-02 1.5861563712562882e-02 -1.3049347364948762e-02 + 18 1.1434938302418579e-01 8.6112942994289246e-03 2.0292892978925857e-02 + 19 -3.8092989065812349e-02 -1.9963855292591714e-02 -9.8568020007968171e-03 + 20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 21 4.1446743356056477e-02 8.4986882092497468e-03 -7.1565549648589286e-02 + 22 -5.5269240273286080e+00 3.3665609275390400e+00 -5.7932229791606122e+00 + 23 1.5450935830291862e-02 -1.0557581147017453e-01 -1.1539704280712934e-01 + 24 -7.5222270706101790e-04 1.1318969997713260e-04 -9.2841932954143699e-04 + 25 1.1778375109233756e-03 -7.1254208855309979e-05 3.8035457799329474e-03 + 26 -1.6497221843622341e+00 4.4233264004280688e+00 1.2763820593322264e+00 + 27 -1.3345796635606499e-01 3.6623792481486409e-02 -5.6711027332452466e-02 +... diff --git a/unittest/force-styles/tests/data.colloid b/unittest/force-styles/tests/data.colloid new file mode 100644 index 0000000000..e5c87eee84 --- /dev/null +++ b/unittest/force-styles/tests/data.colloid @@ -0,0 +1,73 @@ +LAMMPS data file via write_data, version 21 Jul 2020, timestep = 5000 + +27 atoms +2 atom types + +-0.2436910920596036 13.743691092059596 xlo xhi +-0.2436910920596036 13.743691092059596 ylo yhi +-0.2436910920596036 13.743691092059596 zlo zhi + +Masses + +1 9 +2 1 + +Atoms # atomic + +21 1 8.218284363111994 3.8616496369708644 3.926644621675435 0 0 1 +14 2 3.971804908882051 12.196374430867266 11.800922980362827 1 -1 2 +4 2 12.749633950530594 0.2895775102974337 13.665118030342807 1 0 -4 +6 2 10.48479135210438 0.7314009568199128 0.20579559916130968 0 0 -1 +11 2 6.370393143436297 0.7506711988180665 11.228922122628624 -1 1 0 +16 2 1.781613249220567 9.315352564201742 13.003045928765761 1 -1 -1 +15 2 2.5907208520939946 7.092392808241224 9.564419981414446 -2 0 -1 +10 2 2.06473035593474 10.936583460926354 0.2143993310674837 1 -2 2 +17 2 10.89572436719935 1.4615862891785334 5.9966656418333475 -3 -2 0 +12 2 8.989180695332816 13.155343018320753 7.380136516456334 3 -2 -1 +23 2 9.679726091492721 5.587125576488552 0.5505405659916122 0 1 -1 +26 2 10.150200745369286 13.451068779020826 13.1305422632724 0 0 -2 +27 2 0.5854518735680864 3.3706426419449973 13.20338885987352 3 3 -4 +2 2 12.401535589626157 4.499183730038622 8.453939258351905 0 -2 0 +9 1 11.284839488845652 10.602811415241838 12.294336783300636 0 0 -1 +7 2 3.67365214779975 0.6031426192504774 3.744838163244472 -1 0 -3 +25 2 0.580286149741973 6.5570299426679615 8.204514419385035 2 -1 1 +5 2 0.4370415403230168 12.62671878288036 10.900794906743482 -3 1 -2 +20 2 0.5960686789505689 -0.03029382390167784 6.650651587937794 1 -1 -2 +3 2 2.4025882097830804 3.537273393359948 6.539574857512142 -1 1 -1 +8 2 0.2515454304433808 3.209093417679412 6.394794043739663 1 1 0 +24 2 0.8855320855058237 10.07143392738017 2.6866421503905222 0 0 0 +22 2 1.1569993715184617 9.633923152653242 12.34752906065215 -2 0 2 +1 1 11.516625939770336 4.289372112043943 11.847412277845446 -1 -1 -1 +13 2 3.4573289217000625 10.709357504995712 0.2070680620433607 -3 1 2 +18 2 8.388010639142333 4.8343459387085295 0.022914514686456666 0 2 2 +19 2 0.8904095150489832 6.178968410953466 12.739150191807628 -2 -2 1 + +Velocities + +21 0.5108629151801364 0.5071783225038178 0.038121513505701005 +14 0.04442371287433498 -0.9592694013198345 1.2892900869531516 +4 -0.2178346847645286 0.6098857389317441 -0.11034167964068448 +6 -0.1576695048262709 -1.2130499080058224 -1.532174167207837 +11 2.8099374837612547 -0.04484558137222933 -2.949735057364872 +16 -2.514269472184712 0.8600214136555172 -1.334072825855178 +15 -1.9716757999689132 0.34144027670649985 -1.289546613298351 +10 1.593221282752536 -1.4854596141900234 -0.5931052285995597 +17 0.30576221579017154 -1.7264461829362503 0.9151292837107401 +12 1.856996336103833 1.2171769820936116 0.7446116107611583 +23 0.6826664104612703 -1.2226601048696837 -0.575337461330738 +26 2.060350188652742 1.4611540801166607 -1.2802524060106233 +27 0.249900902388907 2.388571043902052 -1.8492601452320174 +2 0.2605802271656383 0.7180097106986123 0.23261242169201765 +9 -0.34764522027409256 0.3030477382656852 -0.27629534212658624 +7 -2.269133408440061 -3.1960327319813473 -0.148176086091223 +25 1.1175412259994884 -0.5507974421930979 1.1903914944413345 +5 0.20657924357863497 1.6144987892387104 -1.4640329026812684 +20 0.0590579871685183 -0.24749314593051103 -1.104019292812069 +3 -0.5186327771760407 0.5748836420503801 -1.1735732476681855 +8 -0.4437666044968981 1.7357347488421837 1.9514880021657892 +24 -0.28726920313585036 -0.13725286038541634 2.2362521378373943 +22 0.07031578857583798 2.4612824702440497 1.159670483206302 +1 -0.6115443594925424 -1.3770574953178165 0.6488398210995187 +13 -1.7087317711505776 1.2667666619290276 0.6879911689583401 +18 1.023336469072999 1.4409480361581861 0.7015199009707059 +19 1.783253733076145 -0.8055837104480024 0.5986765907881554 diff --git a/unittest/force-styles/tests/in.colloid b/unittest/force-styles/tests/in.colloid new file mode 100644 index 0000000000..69e62e6616 --- /dev/null +++ b/unittest/force-styles/tests/in.colloid @@ -0,0 +1,16 @@ +variable newton_pair index on +variable newton_bond index on +variable units index lj +variable input_dir index . +variable data_file index ${input_dir}/data.colloid +variable pair_style index 'zero 8.0' + +atom_style atomic +atom_modify map array +neigh_modify delay 2 every 2 check no +timestep 0.01 +units ${units} +newton ${newton_pair} ${newton_bond} + +pair_style ${pair_style} +read_data ${data_file}