From e384dfa424e790e8e2ae550d5813165bfc2a2858 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 6 Feb 2022 14:44:49 -0500 Subject: [PATCH 01/20] 'bondlist' option for replicate command generalizes the command to work for periodic systems --- src/atom_vec.cpp | 14 ++--- src/atom_vec.h | 2 +- src/read_restart.cpp | 8 +-- src/replicate.cpp | 120 ++++++++++++++++++++++++++++++++++--------- src/replicate.h | 7 +++ 5 files changed, 116 insertions(+), 35 deletions(-) diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index aa646ecabb..816d48e2b5 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -1534,16 +1534,16 @@ int AtomVec::pack_restart(int i, double *buf) unpack data for one atom from restart file including extra quantities ------------------------------------------------------------------------- */ -int AtomVec::unpack_restart(double *buf) +int AtomVec::unpack_restart(double *buf, Atom *&thisatom) { int mm,nn,datatype,cols,collength,ncols; void *pdata,*plength; - int nlocal = atom->nlocal; + int nlocal = thisatom->nlocal; if (nlocal == nmax) { grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); + if (thisatom->nextra_store) + memory->grow(thisatom->extra,nmax,thisatom->nextra_store,"atom:extra"); } int m = 1; @@ -1624,13 +1624,13 @@ int AtomVec::unpack_restart(double *buf) // store extra restart info which fixes can unpack when instantiated - double **extra = atom->extra; - if (atom->nextra_store) { + double **extra = thisatom->extra; + if (thisatom->nextra_store) { int size = static_cast (buf[0]) - m; for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; } - atom->nlocal++; + thisatom->nlocal++; return m; } diff --git a/src/atom_vec.h b/src/atom_vec.h index ad1c7f3315..caef3dc218 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -111,7 +111,7 @@ class AtomVec : protected Pointers { virtual int size_restart(); virtual int pack_restart(int, double *); - virtual int unpack_restart(double *); + virtual int unpack_restart(double *, Atom *&); virtual void pack_restart_pre(int) {} virtual void pack_restart_post(int) {} diff --git a/src/read_restart.cpp b/src/read_restart.cpp index f8ac14534b..a5d5e8e0cd 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -195,7 +195,7 @@ void ReadRestart::command(int narg, char **arg) } m = 0; - while (m < assignedChunkSize) m += avec->unpack_restart(&buf[m]); + while (m < assignedChunkSize) m += avec->unpack_restart(&buf[m],atom); } // input of single native file @@ -247,7 +247,7 @@ void ReadRestart::command(int narg, char **arg) if (coord[0] >= sublo[0] && coord[0] < subhi[0] && coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - m += avec->unpack_restart(&buf[m]); + m += avec->unpack_restart(&buf[m],atom); } else m += static_cast (buf[m]); } } @@ -292,7 +292,7 @@ void ReadRestart::command(int narg, char **arg) utils::sfread(FLERR,buf,sizeof(double),n,fp,nullptr,error); m = 0; - while (m < n) m += avec->unpack_restart(&buf[m]); + while (m < n) m += avec->unpack_restart(&buf[m],atom); } fclose(fp); @@ -385,7 +385,7 @@ void ReadRestart::command(int narg, char **arg) if (i % nclusterprocs == me - fileproc) { m = 0; - while (m < n) m += avec->unpack_restart(&buf[m]); + while (m < n) m += avec->unpack_restart(&buf[m],atom); } } diff --git a/src/replicate.cpp b/src/replicate.cpp index 80edd7bcbc..90ffe35baa 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -55,10 +55,16 @@ void Replicate::command(int narg, char **arg) int ny = utils::inumeric(FLERR,arg[1],false,lmp); int nz = utils::inumeric(FLERR,arg[2],false,lmp); int nrep = nx*ny*nz; + allnrep[0] = nx; + allnrep[1] = ny; + allnrep[2] = nz; int bbox_flag = 0; - if (narg == 4) + int bondlist_flag = 0; + if (narg == 4) { if (strcmp(arg[3],"bbox") == 0) bbox_flag = 1; + if (strcmp(arg[3],"bondlist") == 0) bondlist_flag = 1; + } // error and warning checks @@ -81,9 +87,9 @@ void Replicate::command(int narg, char **arg) MPI_Barrier(world); double time1 = platform::walltime(); - // maxtag = largest atom tag across all existing atoms + // maxtag = original largest atom tag across all existing atoms - tagint maxtag = 0; + maxtag = 0; if (atom->tag_enable) { for (i = 0; i < atom->nlocal; i++) maxtag = MAX(atom->tag[i],maxtag); tagint maxtag_all; @@ -154,7 +160,7 @@ void Replicate::command(int narg, char **arg) // atom = new replicated atom class // also set atomKK for Kokkos version of Atom class - Atom *old = atom; + old = atom; atomKK = nullptr; if (lmp->kokkos) atom = atomKK = new AtomKokkos(lmp); else atom = new Atom(lmp); @@ -229,6 +235,11 @@ void Replicate::command(int narg, char **arg) double old_xprd = domain->xprd; double old_yprd = domain->yprd; double old_zprd = domain->zprd; + double old_center[3]; + for (i = 0; i < 3; i++) { + old_prd_half[i] = domain->prd_half[i]; + old_center[i] = 0.5*(domain->boxlo[i]+domain->boxhi[i]); + } double old_xy = domain->xy; double old_xz = domain->xz; double old_yz = domain->yz; @@ -339,13 +350,13 @@ void Replicate::command(int narg, char **arg) AtomVec *avec = atom->avec; int ix,iy,iz; - tagint atom_offset,mol_offset; + tagint atom_offset,mol_offset,atom0tag; imageint image; - double x[3],lamda[3]; + double x[3],lamda[3],shiftsign[3]; double *coord; int tag_enable = atom->tag_enable; - if (bbox_flag) { + if (bbox_flag || bondlist_flag) { // allgather size of buf on each proc @@ -418,10 +429,23 @@ void Replicate::command(int narg, char **arg) int num_replicas_added = 0; + // let's repurpose the old atom class to allow atom->map for all atoms + // tag and x for the whole system (before replication) stored in 'old' + + m = 0; + old->nlocal = 0; + while (m < size_buf_all) m += old_avec->unpack_restart(&buf_all[m],old); + old->map_init(); + old->map_set(); + for (ix = 0; ix < nx; ix++) { for (iy = 0; iy < ny; iy++) { for (iz = 0; iz < nz; iz++) { + thisrep[0] = ix; + thisrep[1] = iy; + thisrep[2] = iz; + // domain->remap() overwrites coordinates, so always recompute here if (triclinic) { @@ -567,6 +591,10 @@ void Replicate::command(int narg, char **arg) m = 0; while (m < size_buf_all) { + for (j = 0; j < 3; j++) { + if (buf_all[m+j+1] > old_center[j]) shiftsign[j] = 1; + else shiftsign[j] = -1; + } image = ((imageint) IMGMAX << IMG2BITS) | ((imageint) IMGMAX << IMGBITS) | IMGMAX; if (triclinic == 0) { @@ -588,7 +616,7 @@ void Replicate::command(int narg, char **arg) coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - m += avec->unpack_restart(&buf_all[m]); + m += avec->unpack_restart(&buf_all[m],atom); i = atom->nlocal - 1; if (tag_enable) @@ -600,6 +628,7 @@ void Replicate::command(int narg, char **arg) atom->x[i][1] = x[1]; atom->x[i][2] = x[2]; + atom0tag = atom->tag[i]; atom->tag[i] += atom_offset; atom->image[i] = image; @@ -608,27 +637,50 @@ void Replicate::command(int narg, char **arg) atom->molecule[i] += mol_offset; if (atom->molecular == Atom::MOLECULAR) { if (atom->avec->bonds_allow) - for (j = 0; j < atom->num_bond[i]; j++) - atom->bond_atom[i][j] += atom_offset; + for (j = 0; j < atom->num_bond[i]; j++) { + if (bondlist_flag) + newtag(atom0tag,atom->bond_atom[i][j],shiftsign); + else atom->bond_atom[i][j] += atom_offset; + } if (atom->avec->angles_allow) for (j = 0; j < atom->num_angle[i]; j++) { - atom->angle_atom1[i][j] += atom_offset; - atom->angle_atom2[i][j] += atom_offset; - atom->angle_atom3[i][j] += atom_offset; + if (bondlist_flag) { + newtag(atom0tag,atom->angle_atom1[i][j],shiftsign); + newtag(atom0tag,atom->angle_atom2[i][j],shiftsign); + newtag(atom0tag,atom->angle_atom3[i][j],shiftsign); + } else { + atom->angle_atom1[i][j] += atom_offset; + atom->angle_atom2[i][j] += atom_offset; + atom->angle_atom3[i][j] += atom_offset; + } } if (atom->avec->dihedrals_allow) for (j = 0; j < atom->num_dihedral[i]; j++) { - atom->dihedral_atom1[i][j] += atom_offset; - atom->dihedral_atom2[i][j] += atom_offset; - atom->dihedral_atom3[i][j] += atom_offset; - atom->dihedral_atom4[i][j] += atom_offset; + if (bondlist_flag) { + newtag(atom0tag,atom->dihedral_atom1[i][j],shiftsign); + newtag(atom0tag,atom->dihedral_atom2[i][j],shiftsign); + newtag(atom0tag,atom->dihedral_atom3[i][j],shiftsign); + newtag(atom0tag,atom->dihedral_atom4[i][j],shiftsign); + } else { + atom->dihedral_atom1[i][j] += atom_offset; + atom->dihedral_atom2[i][j] += atom_offset; + atom->dihedral_atom3[i][j] += atom_offset; + atom->dihedral_atom4[i][j] += atom_offset; + } } if (atom->avec->impropers_allow) for (j = 0; j < atom->num_improper[i]; j++) { - atom->improper_atom1[i][j] += atom_offset; - atom->improper_atom2[i][j] += atom_offset; - atom->improper_atom3[i][j] += atom_offset; - atom->improper_atom4[i][j] += atom_offset; + if (bondlist_flag) { + newtag(atom0tag,atom->improper_atom1[i][j],shiftsign); + newtag(atom0tag,atom->improper_atom2[i][j],shiftsign); + newtag(atom0tag,atom->improper_atom3[i][j],shiftsign); + newtag(atom0tag,atom->improper_atom4[i][j],shiftsign); + } else { + atom->improper_atom1[i][j] += atom_offset; + atom->improper_atom2[i][j] += atom_offset; + atom->improper_atom3[i][j] += atom_offset; + atom->improper_atom4[i][j] += atom_offset; + } } } } @@ -689,7 +741,7 @@ void Replicate::command(int narg, char **arg) coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - m += avec->unpack_restart(&buf[m]); + m += avec->unpack_restart(&buf[m],atom); i = atom->nlocal - 1; if (tag_enable) @@ -739,7 +791,7 @@ void Replicate::command(int narg, char **arg) } } } - } // if (bbox_flag) + } // if (bbox_flag || bondlist_flag) // free communication buffer and old atom class @@ -801,3 +853,25 @@ void Replicate::command(int narg, char **arg) if (me == 0) utils::logmesg(lmp," replicate CPU = {:.3f} seconds\n",platform::walltime()-time1); } + +/* ---------------------------------------------------------------------- + find new tag for the atom 'atom2bond' bonded to atom 'atom0' + for bondlist option, useful for periodic loops or inconsistent image flags + reassign bond if > old boxlength / 2 +------------------------------------------------------------------------- */ + +void Replicate::newtag(int atom0tag, int &tag2bond, double shiftsign[]) { + double del[3]; + int rep2bond[3], repshift[3] = {0, 0, 0}; + int atom0 = old->map(atom0tag); + int atom2bond = old->map(tag2bond); + for (int i = 0; i < 3; i++) { + del[i] = fabs(old->x[atom0][i] - old->x[atom2bond][i]); + if (del[i] > old_prd_half[i]) repshift[i] = shiftsign[i]; + rep2bond[i] = thisrep[i] + repshift[i]; + if (rep2bond[i] >= allnrep[i]) rep2bond[i] = 0; + if (rep2bond[i] < 0) rep2bond[i] = allnrep[i]-1; + } + tag2bond = (tag2bond + rep2bond[2]*allnrep[1]*allnrep[0]*maxtag + + rep2bond[1]*allnrep[0]*maxtag + rep2bond[0]*maxtag); +} diff --git a/src/replicate.h b/src/replicate.h index 9eaae1d763..0edd7bf818 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -28,6 +28,13 @@ class Replicate : public Command { public: Replicate(class LAMMPS *); void command(int, char **) override; + + private: + Atom *old; + double old_prd_half[3]; + tagint maxtag; + int thisrep[3], allnrep[3]; + void newtag(tagint, tagint &, double[3]); }; } // namespace LAMMPS_NS From caafe2ff26f0cca2118563c5b0cffb7bc5cb0ecc Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 6 Feb 2022 15:31:02 -0500 Subject: [PATCH 02/20] bondlist option docs --- doc/src/replicate.rst | 53 +++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/doc/src/replicate.rst b/doc/src/replicate.rst index 24ec52cbb0..e5de48d96e 100644 --- a/doc/src/replicate.rst +++ b/doc/src/replicate.rst @@ -12,11 +12,12 @@ Syntax nx,ny,nz = replication factors in each dimension -* optional *keyword* = *bbox* +* optional *keyword* = *bbox* or *bondlist* .. parsed-literal:: *bbox* = only check atoms in replicas that overlap with a processor's sub-domain + *bondlist* = use a generalized algorithm that correctly replicates periodic loops Examples """""""" @@ -59,6 +60,33 @@ does require temporary use of more memory, specifically that each processor can store all atoms in the entire system before it is replicated. +The optional keyword *bondlist* correctly treats molecules that span +the box and are bonded to themselves across a periodic boundary, by +relying on self-consistent nearest-image assumptions (rather than +using image flags). Therefore, the *bondlist* keyword can also be +used in general for systems that may not have consistent image flags. +The *bondlist* algorithm builds off the *bbox* algorithm, so it is +fast when using a large number of processors, but does require +temporary use of more memory. Specifically, each processor must be +able to store arrays for all atoms in the entire system before it is +replicated. + +.. note:: + + For systems that contain a molecule that spans the box and is + bonded to itself across a periodic boundary (so that the molecule + is effectively a loop), the *bondlist* keyword must be used. A + simple example would be a linear polymer chain that spans the + simulation box and bonds back to itself across the periodic + boundary. More realistic examples would be a CNT (meant to be an + infinitely long CNT) or a graphene sheet or a bulk periodic crystal + where there are explicit bonds specified between near neighbors. + (Note that this restriction only applies to systems that have + permanent bonds as specified in the data file. A CNT that is just + atoms modeled with the :doc:`AIREBO potential ` has no + such permanent bonds, so it can be replicated without the + *bondlist* keyword.) + Restrictions """""""""""" @@ -68,29 +96,6 @@ If a simulation is non-periodic in a dimension, care should be used when replicating it in that dimension, as it may put atoms nearly on top of each other. -.. note:: - - You cannot use the replicate command on a system which has a - molecule that spans the box and is bonded to itself across a periodic - boundary, so that the molecule is effectively a loop. A simple - example would be a linear polymer chain that spans the simulation box - and bonds back to itself across the periodic boundary. More realistic - examples would be a CNT (meant to be an infinitely long CNT) or a - graphene sheet or a bulk periodic crystal where there are explicit - bonds specified between near neighbors. (Note that this only applies - to systems that have permanent bonds as specified in the data file. A - CNT that is just atoms modeled with the :doc:`AIREBO potential ` has no such permanent bonds, so it can be - replicated.) The reason replication does not work with those systems - is that the image flag settings described above cannot be made - consistent. I.e. it is not possible to define images flags so that - when every pair of bonded atoms is unwrapped (using the image flags), - they will be close to each other. The only way the replicate command - could work in this scenario is for it to break a bond, insert more - atoms, and re-connect the loop for the larger simulation box. But it - is not clever enough to do this. So you will have to construct a - larger version of your molecule as a pre-processing step and input a - new data file to LAMMPS. - If the current simulation was read in from a restart file (before a run is performed), there must not be any fix information stored in the file for individual atoms. Similarly, no fixes can be defined at From ac7db5041fa49bf6c15806a79355f1966f74cc01 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 6 Feb 2022 16:14:30 -0500 Subject: [PATCH 03/20] add example for bondlist option validation --- examples/replicate/in.replicate | 32 +++++ examples/replicate/log.7Jan22.replicate.g++.1 | 132 ++++++++++++++++++ examples/replicate/log.7Jan22.replicate.g++.4 | 132 ++++++++++++++++++ .../replicate/three_periodic_CNTs.data.gz | Bin 0 -> 328837 bytes 4 files changed, 296 insertions(+) create mode 100644 examples/replicate/in.replicate create mode 100644 examples/replicate/log.7Jan22.replicate.g++.1 create mode 100644 examples/replicate/log.7Jan22.replicate.g++.4 create mode 100644 examples/replicate/three_periodic_CNTs.data.gz diff --git a/examples/replicate/in.replicate b/examples/replicate/in.replicate new file mode 100644 index 0000000000..52140d4ce8 --- /dev/null +++ b/examples/replicate/in.replicate @@ -0,0 +1,32 @@ +# three orthogonal periodic CNTs +# demo for replicating triply looped system +# infinite loops in x, y, z +# includes bonded interactions across box corners +# includes bonds, angles, dihedrals, impropers (class2) + +units real + +boundary p p p + +atom_style full + +pair_style lj/class2 10 + +angle_style class2 + +bond_style class2 + +dihedral_style class2 + +improper_style class2 + +read_data three_periodic_CNTs.data.gz + +replicate 2 2 2 bondlist + +fix 1 all nve + +run 100 + +# write_restart replicate.restart +# write_data replicate.data diff --git a/examples/replicate/log.7Jan22.replicate.g++.1 b/examples/replicate/log.7Jan22.replicate.g++.1 new file mode 100644 index 0000000000..2933535ae8 --- /dev/null +++ b/examples/replicate/log.7Jan22.replicate.g++.1 @@ -0,0 +1,132 @@ +LAMMPS (7 Jan 2022) +# three orthogonal periodic CNTs +# demo for replicating triply looped system +# infinite loops in x, y, z +# includes bonded interactions across box corners +# includes bonds, angles, dihedrals, impropers (class2) + +units real + +boundary p p p + +atom_style full + +pair_style lj/class2 10 + +angle_style class2 + +bond_style class2 + +dihedral_style class2 + +improper_style class2 + +read_data three_periodic_CNTs.data.gz +Reading data file ... + orthogonal box = (0 0 0) to (80.96 80.96 80.96) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3168 atoms + reading velocities ... + 3168 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 3 = max angles/atom + scanning dihedrals ... + 12 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 4752 bonds + reading angles ... + 9504 angles + reading dihedrals ... + 19008 dihedrals + reading impropers ... + 3168 impropers +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 3 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 18 = max # of 1-4 neighbors + 18 = max # of special neighbors + special bonds CPU = 0.003 seconds + read_data CPU = 0.115 seconds + +replicate 2 2 2 bondlist +Replicating atoms ... + orthogonal box = (0 0 0) to (161.92 161.92 161.92) + 1 by 1 by 1 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 1.62 MB + average # of replicas added to proc = 8.00 out of 8 (100.00%) + 25344 atoms + 38016 bonds + 76032 angles + 152064 dihedrals + 25344 impropers +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 3 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 18 = max # of 1-4 neighbors + 18 = max # of special neighbors + special bonds CPU = 0.021 seconds + replicate CPU = 0.052 seconds + +fix 1 all nve + +run 100 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 27 27 27 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/class2, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +WARNING: Inconsistent image flags (../domain.cpp:814) +Per MPI rank memory allocation (min/avg/max) = 51.87 | 51.87 | 51.87 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -14266.189 1466925.5 1452659.3 -29908.753 + 100 2155.9128 -17224.188 1306769.8 1452409 1985.2082 +Loop time of 15.0972 on 1 procs for 100 steps with 25344 atoms + +Performance: 0.572 ns/day, 41.937 hours/ns, 6.624 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.7175 | 3.7175 | 3.7175 | 0.0 | 24.62 +Bond | 11.222 | 11.222 | 11.222 | 0.0 | 74.33 +Neigh | 0.1032 | 0.1032 | 0.1032 | 0.0 | 0.68 +Comm | 0.014487 | 0.014487 | 0.014487 | 0.0 | 0.10 +Output | 0.00010894 | 0.00010894 | 0.00010894 | 0.0 | 0.00 +Modify | 0.027112 | 0.027112 | 0.027112 | 0.0 | 0.18 +Other | | 0.01274 | | | 0.08 + +Nlocal: 25344 ave 25344 max 25344 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 22737 ave 22737 max 22737 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.89358e+06 ave 2.89358e+06 max 2.89358e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2893576 +Ave neighs/atom = 114.17203 +Ave special neighs/atom = 18 +Neighbor list builds = 1 +Dangerous builds = 0 + +# write_restart replicate.restart +# write_data replicate.data +Total wall time: 0:00:15 diff --git a/examples/replicate/log.7Jan22.replicate.g++.4 b/examples/replicate/log.7Jan22.replicate.g++.4 new file mode 100644 index 0000000000..79a13b1484 --- /dev/null +++ b/examples/replicate/log.7Jan22.replicate.g++.4 @@ -0,0 +1,132 @@ +LAMMPS (7 Jan 2022) +# three orthogonal periodic CNTs +# demo for replicating triply looped system +# infinite loops in x, y, z +# includes bonded interactions across box corners +# includes bonds, angles, dihedrals, impropers (class2) + +units real + +boundary p p p + +atom_style full + +pair_style lj/class2 10 + +angle_style class2 + +bond_style class2 + +dihedral_style class2 + +improper_style class2 + +read_data three_periodic_CNTs.data.gz +Reading data file ... + orthogonal box = (0 0 0) to (80.96 80.96 80.96) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 3168 atoms + reading velocities ... + 3168 velocities + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 3 = max angles/atom + scanning dihedrals ... + 12 = max dihedrals/atom + scanning impropers ... + 1 = max impropers/atom + reading bonds ... + 4752 bonds + reading angles ... + 9504 angles + reading dihedrals ... + 19008 dihedrals + reading impropers ... + 3168 impropers +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 3 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 18 = max # of 1-4 neighbors + 18 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.315 seconds + +replicate 2 2 2 bondlist +Replicating atoms ... + orthogonal box = (0 0 0) to (161.92 161.92 161.92) + 1 by 2 by 2 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 1.62 MB + average # of replicas added to proc = 4.50 out of 8 (56.25%) + 25344 atoms + 38016 bonds + 76032 angles + 152064 dihedrals + 25344 impropers +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 3 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 18 = max # of 1-4 neighbors + 18 = max # of special neighbors + special bonds CPU = 0.007 seconds + replicate CPU = 0.020 seconds + +fix 1 all nve + +run 100 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 27 27 27 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/class2, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +WARNING: Inconsistent image flags (../domain.cpp:814) +Per MPI rank memory allocation (min/avg/max) = 28.69 | 28.69 | 28.69 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -14266.189 1466925.5 1452659.3 -29908.753 + 100 2155.9128 -17224.188 1306769.8 1452409 1985.2082 +Loop time of 4.13195 on 4 procs for 100 steps with 25344 atoms + +Performance: 2.091 ns/day, 11.478 hours/ns, 24.202 timesteps/s +100.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.99372 | 1.014 | 1.0672 | 3.1 | 24.54 +Bond | 2.9449 | 2.9795 | 3.0136 | 2.0 | 72.11 +Neigh | 0.026695 | 0.026706 | 0.026716 | 0.0 | 0.65 +Comm | 0.012404 | 0.099546 | 0.15425 | 18.7 | 2.41 +Output | 4.3822e-05 | 5.0693e-05 | 7.0516e-05 | 0.0 | 0.00 +Modify | 0.0074219 | 0.0074887 | 0.0075411 | 0.1 | 0.18 +Other | | 0.004616 | | | 0.11 + +Nlocal: 6336 ave 6336 max 6336 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 10558 ave 10558 max 10558 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 723394 ave 723394 max 723394 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2893576 +Ave neighs/atom = 114.17203 +Ave special neighs/atom = 18 +Neighbor list builds = 1 +Dangerous builds = 0 + +# write_restart replicate.restart +# write_data replicate.data +Total wall time: 0:00:04 diff --git a/examples/replicate/three_periodic_CNTs.data.gz b/examples/replicate/three_periodic_CNTs.data.gz new file mode 100644 index 0000000000000000000000000000000000000000..718c91896a81d350c43a1296a30e05f15d89d3e6 GIT binary patch literal 328837 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 Date: Mon, 7 Feb 2022 18:02:17 -0500 Subject: [PATCH 04/20] typo --- src/replicate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index 90ffe35baa..69f04310e4 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -860,7 +860,7 @@ void Replicate::command(int narg, char **arg) reassign bond if > old boxlength / 2 ------------------------------------------------------------------------- */ -void Replicate::newtag(int atom0tag, int &tag2bond, double shiftsign[]) { +void Replicate::newtag(tagint atom0tag, tagint &tag2bond, double shiftsign[]) { double del[3]; int rep2bond[3], repshift[3] = {0, 0, 0}; int atom0 = old->map(atom0tag); From 2a4dbe5bbc8554a842dea8aee9bbd96534dc27da Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 13:51:20 -0500 Subject: [PATCH 05/20] bondlist_flag correction --- src/replicate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index 69f04310e4..aa4fc44c00 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -118,7 +118,7 @@ void Replicate::command(int narg, char **arg) _imagehi[1] = 0; _imagehi[2] = 0; - if (bbox_flag) { + if (bbox_flag || bondlist_flag) { for (i=0; inlocal; ++i) { imageint image = atom->image[i]; From 7288d78331ccd2be9db2470cf9aa978f1f94dd70 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 14:06:19 -0500 Subject: [PATCH 06/20] reset image flag for bondlist option --- src/replicate.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/replicate.cpp b/src/replicate.cpp index aa4fc44c00..df0e363840 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -107,6 +107,11 @@ void Replicate::command(int narg, char **arg) maxmol = maxmol_all; } + // reset image flags for bondlist option + if (bondlist_flag) + for (i=0; inlocal; ++i) + atom->image[i] = 0; + // check image flags maximum extent // only efficient small image flags compared to new system From 437e7829cc37d17fbfe0e4a30578c0b8aafe57c6 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 14:11:15 -0500 Subject: [PATCH 07/20] Update replicate.rst --- doc/src/replicate.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/replicate.rst b/doc/src/replicate.rst index e5de48d96e..9181f0e940 100644 --- a/doc/src/replicate.rst +++ b/doc/src/replicate.rst @@ -63,13 +63,13 @@ replicated. The optional keyword *bondlist* correctly treats molecules that span the box and are bonded to themselves across a periodic boundary, by relying on self-consistent nearest-image assumptions (rather than -using image flags). Therefore, the *bondlist* keyword can also be -used in general for systems that may not have consistent image flags. -The *bondlist* algorithm builds off the *bbox* algorithm, so it is -fast when using a large number of processors, but does require -temporary use of more memory. Specifically, each processor must be -able to store arrays for all atoms in the entire system before it is -replicated. +using image flags). The *bondlist* option resets all image flags to +zero. Therefore, the *bondlist* keyword can also be used in general +for systems that may not have consistent image flags. The *bondlist* +algorithm builds off the *bbox* algorithm, so it is fast when using a +large number of processors, but does require temporary use of more +memory. Specifically, each processor must be able to store arrays for +all atoms in the entire system before it is replicated. .. note:: From 44c3f4e5625c0843480a1609392c5664b2777023 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 14:51:23 -0500 Subject: [PATCH 08/20] fix for breaking kokkos --- src/atom_vec.cpp | 8 ++++++++ src/atom_vec.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index 816d48e2b5..1d64915a6a 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -1530,6 +1530,14 @@ int AtomVec::pack_restart(int i, double *buf) return m; } +/* ---------------------------------------------------------------------- + standard unpack_restart function using default atom instance +------------------------------------------------------------------------- */ +int AtomVec::unpack_restart(double *buf) +{ + return unpack_restart(buf, atom); +} + /* ---------------------------------------------------------------------- unpack data for one atom from restart file including extra quantities ------------------------------------------------------------------------- */ diff --git a/src/atom_vec.h b/src/atom_vec.h index caef3dc218..d7ea6b00d8 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -111,6 +111,7 @@ class AtomVec : protected Pointers { virtual int size_restart(); virtual int pack_restart(int, double *); + virtual int unpack_restart(double *); virtual int unpack_restart(double *, Atom *&); virtual void pack_restart_pre(int) {} From 5c1486661c5fc0d49e023af893885cffca2a1897 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 14:53:16 -0500 Subject: [PATCH 09/20] revert now unnecessary edits --- src/read_restart.cpp | 8 ++++---- src/replicate.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/read_restart.cpp b/src/read_restart.cpp index a5d5e8e0cd..f8ac14534b 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -195,7 +195,7 @@ void ReadRestart::command(int narg, char **arg) } m = 0; - while (m < assignedChunkSize) m += avec->unpack_restart(&buf[m],atom); + while (m < assignedChunkSize) m += avec->unpack_restart(&buf[m]); } // input of single native file @@ -247,7 +247,7 @@ void ReadRestart::command(int narg, char **arg) if (coord[0] >= sublo[0] && coord[0] < subhi[0] && coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - m += avec->unpack_restart(&buf[m],atom); + m += avec->unpack_restart(&buf[m]); } else m += static_cast (buf[m]); } } @@ -292,7 +292,7 @@ void ReadRestart::command(int narg, char **arg) utils::sfread(FLERR,buf,sizeof(double),n,fp,nullptr,error); m = 0; - while (m < n) m += avec->unpack_restart(&buf[m],atom); + while (m < n) m += avec->unpack_restart(&buf[m]); } fclose(fp); @@ -385,7 +385,7 @@ void ReadRestart::command(int narg, char **arg) if (i % nclusterprocs == me - fileproc) { m = 0; - while (m < n) m += avec->unpack_restart(&buf[m],atom); + while (m < n) m += avec->unpack_restart(&buf[m]); } } diff --git a/src/replicate.cpp b/src/replicate.cpp index df0e363840..45ecd3ec9a 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -621,7 +621,7 @@ void Replicate::command(int narg, char **arg) coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - m += avec->unpack_restart(&buf_all[m],atom); + m += avec->unpack_restart(&buf_all[m]); i = atom->nlocal - 1; if (tag_enable) @@ -746,7 +746,7 @@ void Replicate::command(int narg, char **arg) coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - m += avec->unpack_restart(&buf[m],atom); + m += avec->unpack_restart(&buf[m]); i = atom->nlocal - 1; if (tag_enable) From 2c0a9cf5724ba9a743c92e9b5e27b60eaa0b8aa5 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 15:06:10 -0500 Subject: [PATCH 10/20] better contain bondlist code --- src/replicate.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index 45ecd3ec9a..ae30814f68 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -437,11 +437,13 @@ void Replicate::command(int narg, char **arg) // let's repurpose the old atom class to allow atom->map for all atoms // tag and x for the whole system (before replication) stored in 'old' - m = 0; - old->nlocal = 0; - while (m < size_buf_all) m += old_avec->unpack_restart(&buf_all[m],old); - old->map_init(); - old->map_set(); + if (bondlist_flag) { + m = 0; + old->nlocal = 0; + while (m < size_buf_all) m += old_avec->unpack_restart(&buf_all[m],old); + old->map_init(); + old->map_set(); + } for (ix = 0; ix < nx; ix++) { for (iy = 0; iy < ny; iy++) { From 793cfe05f9773cd1ae0228251482890d83cf3bab Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 15:09:32 -0500 Subject: [PATCH 11/20] spacing --- src/replicate.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/replicate.h b/src/replicate.h index 0edd7bf818..f8425cdf65 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -29,12 +29,12 @@ class Replicate : public Command { Replicate(class LAMMPS *); void command(int, char **) override; - private: - Atom *old; - double old_prd_half[3]; - tagint maxtag; - int thisrep[3], allnrep[3]; - void newtag(tagint, tagint &, double[3]); + private: + Atom *old; + double old_prd_half[3]; + tagint maxtag; + int thisrep[3], allnrep[3]; + void newtag(tagint, tagint &, double[3]); }; } // namespace LAMMPS_NS From 200ea62fd3474de3232ad70a2f76c3d98f87302d Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 13 Feb 2022 15:22:13 -0500 Subject: [PATCH 12/20] simplify things --- src/replicate.cpp | 44 +++++++++++++++++++++----------------------- src/replicate.h | 4 ++-- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index ae30814f68..1eee50f49d 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -240,7 +240,6 @@ void Replicate::command(int narg, char **arg) double old_xprd = domain->xprd; double old_yprd = domain->yprd; double old_zprd = domain->zprd; - double old_center[3]; for (i = 0; i < 3; i++) { old_prd_half[i] = domain->prd_half[i]; old_center[i] = 0.5*(domain->boxlo[i]+domain->boxhi[i]); @@ -598,10 +597,6 @@ void Replicate::command(int narg, char **arg) m = 0; while (m < size_buf_all) { - for (j = 0; j < 3; j++) { - if (buf_all[m+j+1] > old_center[j]) shiftsign[j] = 1; - else shiftsign[j] = -1; - } image = ((imageint) IMGMAX << IMG2BITS) | ((imageint) IMGMAX << IMGBITS) | IMGMAX; if (triclinic == 0) { @@ -646,15 +641,15 @@ void Replicate::command(int narg, char **arg) if (atom->avec->bonds_allow) for (j = 0; j < atom->num_bond[i]; j++) { if (bondlist_flag) - newtag(atom0tag,atom->bond_atom[i][j],shiftsign); + newtag(atom0tag,atom->bond_atom[i][j]); else atom->bond_atom[i][j] += atom_offset; } if (atom->avec->angles_allow) for (j = 0; j < atom->num_angle[i]; j++) { if (bondlist_flag) { - newtag(atom0tag,atom->angle_atom1[i][j],shiftsign); - newtag(atom0tag,atom->angle_atom2[i][j],shiftsign); - newtag(atom0tag,atom->angle_atom3[i][j],shiftsign); + newtag(atom0tag,atom->angle_atom1[i][j]); + newtag(atom0tag,atom->angle_atom2[i][j]); + newtag(atom0tag,atom->angle_atom3[i][j]); } else { atom->angle_atom1[i][j] += atom_offset; atom->angle_atom2[i][j] += atom_offset; @@ -664,10 +659,10 @@ void Replicate::command(int narg, char **arg) if (atom->avec->dihedrals_allow) for (j = 0; j < atom->num_dihedral[i]; j++) { if (bondlist_flag) { - newtag(atom0tag,atom->dihedral_atom1[i][j],shiftsign); - newtag(atom0tag,atom->dihedral_atom2[i][j],shiftsign); - newtag(atom0tag,atom->dihedral_atom3[i][j],shiftsign); - newtag(atom0tag,atom->dihedral_atom4[i][j],shiftsign); + newtag(atom0tag,atom->dihedral_atom1[i][j]); + newtag(atom0tag,atom->dihedral_atom2[i][j]); + newtag(atom0tag,atom->dihedral_atom3[i][j]); + newtag(atom0tag,atom->dihedral_atom4[i][j]); } else { atom->dihedral_atom1[i][j] += atom_offset; atom->dihedral_atom2[i][j] += atom_offset; @@ -678,10 +673,10 @@ void Replicate::command(int narg, char **arg) if (atom->avec->impropers_allow) for (j = 0; j < atom->num_improper[i]; j++) { if (bondlist_flag) { - newtag(atom0tag,atom->improper_atom1[i][j],shiftsign); - newtag(atom0tag,atom->improper_atom2[i][j],shiftsign); - newtag(atom0tag,atom->improper_atom3[i][j],shiftsign); - newtag(atom0tag,atom->improper_atom4[i][j],shiftsign); + newtag(atom0tag,atom->improper_atom1[i][j]); + newtag(atom0tag,atom->improper_atom2[i][j]); + newtag(atom0tag,atom->improper_atom3[i][j]); + newtag(atom0tag,atom->improper_atom4[i][j]); } else { atom->improper_atom1[i][j] += atom_offset; atom->improper_atom2[i][j] += atom_offset; @@ -867,15 +862,18 @@ void Replicate::command(int narg, char **arg) reassign bond if > old boxlength / 2 ------------------------------------------------------------------------- */ -void Replicate::newtag(tagint atom0tag, tagint &tag2bond, double shiftsign[]) { - double del[3]; - int rep2bond[3], repshift[3] = {0, 0, 0}; +void Replicate::newtag(tagint atom0tag, tagint &tag2bond) { + double del; + int repshift,rep2bond[3]; int atom0 = old->map(atom0tag); int atom2bond = old->map(tag2bond); for (int i = 0; i < 3; i++) { - del[i] = fabs(old->x[atom0][i] - old->x[atom2bond][i]); - if (del[i] > old_prd_half[i]) repshift[i] = shiftsign[i]; - rep2bond[i] = thisrep[i] + repshift[i]; + del = fabs(old->x[atom0][i] - old->x[atom2bond][i]); + if (del > old_prd_half[i]) { + if (old->x[atom0][i] > old_center[i]) repshift = 1; + else repshift = -1; + } else repshift = 0; + rep2bond[i] = thisrep[i] + repshift; if (rep2bond[i] >= allnrep[i]) rep2bond[i] = 0; if (rep2bond[i] < 0) rep2bond[i] = allnrep[i]-1; } diff --git a/src/replicate.h b/src/replicate.h index f8425cdf65..938814e70b 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -31,10 +31,10 @@ class Replicate : public Command { private: Atom *old; - double old_prd_half[3]; + double old_prd_half[3], old_center[3]; tagint maxtag; int thisrep[3], allnrep[3]; - void newtag(tagint, tagint &, double[3]); + void newtag(tagint, tagint &); }; } // namespace LAMMPS_NS From be6c41a85a229e8d4953229b77af3f4c28863164 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Wed, 23 Feb 2022 00:44:39 -0500 Subject: [PATCH 13/20] delete now-unused variable --- src/replicate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index 1eee50f49d..bc9939ce2c 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -356,7 +356,7 @@ void Replicate::command(int narg, char **arg) int ix,iy,iz; tagint atom_offset,mol_offset,atom0tag; imageint image; - double x[3],lamda[3],shiftsign[3]; + double x[3],lamda[3]; double *coord; int tag_enable = atom->tag_enable; From 78458a214390a8e9a83e8220c6eb76eb62892219 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Wed, 23 Feb 2022 01:04:04 -0500 Subject: [PATCH 14/20] add mention of example in docs --- doc/src/replicate.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/replicate.rst b/doc/src/replicate.rst index 9181f0e940..f6c637b200 100644 --- a/doc/src/replicate.rst +++ b/doc/src/replicate.rst @@ -22,6 +22,8 @@ nx,ny,nz = replication factors in each dimension Examples """""""" +For an example of replicating periodically looped carbon nanotubes, see examples/replicate. + .. code-block:: LAMMPS replicate 2 3 2 From b4c58c98283003dbe6b1ffd22d2deced27ed5c20 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Fri, 22 Apr 2022 21:19:53 -0400 Subject: [PATCH 15/20] actually reset image flags --- src/replicate.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index bc9939ce2c..2f65aa7e46 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -110,7 +110,8 @@ void Replicate::command(int narg, char **arg) // reset image flags for bondlist option if (bondlist_flag) for (i=0; inlocal; ++i) - atom->image[i] = 0; + atom->image[i] = ((imageint) IMGMAX << IMG2BITS) | + ((imageint) IMGMAX << IMGBITS) | IMGMAX; // check image flags maximum extent // only efficient small image flags compared to new system From 5bc1fb1580c799f9c5fe1661bcad3b5f0778a8eb Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Tue, 7 Jun 2022 10:47:18 -0400 Subject: [PATCH 16/20] revert unneeded changes to atom_vec --- src/atom_vec.cpp | 21 ++++++--------------- src/atom_vec.h | 1 - 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index 266a774d6f..dbacf2237a 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -1482,28 +1482,19 @@ int AtomVec::pack_restart(int i, double *buf) return m; } -/* ---------------------------------------------------------------------- - standard unpack_restart function using default atom instance -------------------------------------------------------------------------- */ -int AtomVec::unpack_restart(double *buf) -{ - return unpack_restart(buf, atom); -} - /* ---------------------------------------------------------------------- unpack data for one atom from restart file including extra quantities ------------------------------------------------------------------------- */ -int AtomVec::unpack_restart(double *buf, Atom *&thisatom) +int AtomVec::unpack_restart(double *buf) { int mm, nn, datatype, cols, collength, ncols; void *pdata, *plength; - int nlocal = thisatom->nlocal; + int nlocal = atom->nlocal; if (nlocal == nmax) { grow(0); - if (thisatom->nextra_store) - memory->grow(thisatom->extra, nmax, thisatom->nextra_store, "atom:extra"); + if (atom->nextra_store) memory->grow(atom->extra, nmax, atom->nextra_store, "atom:extra"); } int m = 1; @@ -1584,13 +1575,13 @@ int AtomVec::unpack_restart(double *buf, Atom *&thisatom) // store extra restart info which fixes can unpack when instantiated - double **extra = thisatom->extra; - if (thisatom->nextra_store) { + double **extra = atom->extra; + if (atom->nextra_store) { int size = static_cast(buf[0]) - m; for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; } - thisatom->nlocal++; + atom->nlocal++; return m; } diff --git a/src/atom_vec.h b/src/atom_vec.h index e1959c6557..b8f6202e78 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -111,7 +111,6 @@ class AtomVec : protected Pointers { virtual int size_restart(); virtual int pack_restart(int, double *); virtual int unpack_restart(double *); - virtual int unpack_restart(double *, Atom *&); virtual void pack_restart_pre(int) {} virtual void pack_restart_post(int) {} From f024abfe34ffbd8b036e4024991cd031168a957a Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Tue, 7 Jun 2022 11:10:36 -0400 Subject: [PATCH 17/20] make simpler, faster, more self-contained (and fix bugs) --- src/replicate.cpp | 35 +++++++++++++++++++++++------------ src/replicate.h | 6 +++++- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index 2f65aa7e46..460bd75715 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -166,7 +166,7 @@ void Replicate::command(int narg, char **arg) // atom = new replicated atom class // also set atomKK for Kokkos version of Atom class - old = atom; + Atom *old = atom; atomKK = nullptr; if (lmp->kokkos) atom = atomKK = new AtomKokkos(lmp); else atom = new Atom(lmp); @@ -434,15 +434,22 @@ void Replicate::command(int narg, char **arg) int num_replicas_added = 0; - // let's repurpose the old atom class to allow atom->map for all atoms - // tag and x for the whole system (before replication) stored in 'old' + // store x and tag for the whole system (before replication) if (bondlist_flag) { - m = 0; - old->nlocal = 0; - while (m < size_buf_all) m += old_avec->unpack_restart(&buf_all[m],old); - old->map_init(); - old->map_set(); + memory->create(old_x,old->natoms,3,"replicate:old_x"); + memory->create(old_tag,old->natoms,"replicate:old_tag"); + + i = m = 0; + while (m < size_buf_all) { + old_x[i][0] = buf_all[m+1]; + old_x[i][1] = buf_all[m+2]; + old_x[i][2] = buf_all[m+3]; + old_tag[i] = (tagint) ubuf(buf_all[m+4]).i; + old_map.insert({old_tag[i],i}); + m += static_cast (buf_all[m]); + i++; + } } for (ix = 0; ix < nx; ix++) { @@ -698,6 +705,10 @@ void Replicate::command(int narg, char **arg) memory->destroy(size_buf_rnk); memory->destroy(disp_buf_rnk); memory->destroy(buf_all); + if (bondlist_flag) { + memory->destroy(old_x); + memory->destroy(old_tag); + } int sum = 0; MPI_Reduce(&num_replicas_added, &sum, 1, MPI_INT, MPI_SUM, 0, world); @@ -866,12 +877,12 @@ void Replicate::command(int narg, char **arg) void Replicate::newtag(tagint atom0tag, tagint &tag2bond) { double del; int repshift,rep2bond[3]; - int atom0 = old->map(atom0tag); - int atom2bond = old->map(tag2bond); + int atom0 = old_map.find(atom0tag)->second; + int atom2bond = old_map.find(tag2bond)->second; for (int i = 0; i < 3; i++) { - del = fabs(old->x[atom0][i] - old->x[atom2bond][i]); + del = fabs(old_x[atom0][i] - old_x[atom2bond][i]); if (del > old_prd_half[i]) { - if (old->x[atom0][i] > old_center[i]) repshift = 1; + if (old_x[atom0][i] > old_center[i]) repshift = 1; else repshift = -1; } else repshift = 0; rep2bond[i] = thisrep[i] + repshift; diff --git a/src/replicate.h b/src/replicate.h index 8a1d7f7fc6..33b273ddf4 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -22,6 +22,8 @@ CommandStyle(replicate,Replicate); #include "command.h" +#include + namespace LAMMPS_NS { class Replicate : public Command { @@ -30,8 +32,10 @@ class Replicate : public Command { void command(int, char **) override; private: - Atom *old; + std::unordered_map old_map; + double **old_x; double old_prd_half[3], old_center[3]; + tagint *old_tag; tagint maxtag; int thisrep[3], allnrep[3]; void newtag(tagint, tagint &); From a4449fb6ff038574ddb2cb8d89a411fbebee6d65 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 6 May 2024 16:44:45 -0600 Subject: [PATCH 18/20] modified doc page, added examples --- doc/src/replicate.rst | 170 +++-- examples/README | 1 + examples/replicate/README | 23 + examples/replicate/data.bond.x | 22 + examples/replicate/data.bond.x.noloop | 21 + examples/replicate/data.bond.x.y | 43 ++ examples/replicate/data.bond.xy | 22 + examples/replicate/in.replicate.bond.x | 34 + examples/replicate/in.replicate.bond.x.noloop | 34 + examples/replicate/in.replicate.bond.x.y | 34 + examples/replicate/in.replicate.bond.xy | 34 + .../{in.replicate => in.replicate.cnt} | 2 +- .../log.6May24.replicate.bond.x.g++.1 | 125 ++++ .../log.6May24.replicate.bond.x.g++.4 | 126 ++++ .../log.6May24.replicate.bond.x.noloop.g++.1 | 121 ++++ .../log.6May24.replicate.bond.x.noloop.g++.4 | 122 ++++ .../log.6May24.replicate.bond.x.y.g++.1 | 125 ++++ .../log.6May24.replicate.bond.x.y.g++.4 | 126 ++++ .../log.6May24.replicate.bond.xy.g++.1 | 125 ++++ .../log.6May24.replicate.bond.xy.g++.4 | 126 ++++ ...e.g++.1 => log.6May24.replicate.cnt.g++.1} | 48 +- ...e.g++.4 => log.6May24.replicate.cnt.g++.4} | 49 +- src/replicate.cpp | 625 ++++++++++++++++-- src/replicate.h | 20 +- 24 files changed, 2015 insertions(+), 163 deletions(-) create mode 100644 examples/replicate/README create mode 100644 examples/replicate/data.bond.x create mode 100644 examples/replicate/data.bond.x.noloop create mode 100644 examples/replicate/data.bond.x.y create mode 100644 examples/replicate/data.bond.xy create mode 100644 examples/replicate/in.replicate.bond.x create mode 100644 examples/replicate/in.replicate.bond.x.noloop create mode 100644 examples/replicate/in.replicate.bond.x.y create mode 100644 examples/replicate/in.replicate.bond.xy rename examples/replicate/{in.replicate => in.replicate.cnt} (94%) create mode 100644 examples/replicate/log.6May24.replicate.bond.x.g++.1 create mode 100644 examples/replicate/log.6May24.replicate.bond.x.g++.4 create mode 100644 examples/replicate/log.6May24.replicate.bond.x.noloop.g++.1 create mode 100644 examples/replicate/log.6May24.replicate.bond.x.noloop.g++.4 create mode 100644 examples/replicate/log.6May24.replicate.bond.x.y.g++.1 create mode 100644 examples/replicate/log.6May24.replicate.bond.x.y.g++.4 create mode 100644 examples/replicate/log.6May24.replicate.bond.xy.g++.1 create mode 100644 examples/replicate/log.6May24.replicate.bond.xy.g++.4 rename examples/replicate/{log.7Jan22.replicate.g++.1 => log.6May24.replicate.cnt.g++.1} (67%) rename examples/replicate/{log.7Jan22.replicate.g++.4 => log.6May24.replicate.cnt.g++.4} (65%) diff --git a/doc/src/replicate.rst b/doc/src/replicate.rst index cea38e1af0..64d87e525a 100644 --- a/doc/src/replicate.rst +++ b/doc/src/replicate.rst @@ -8,113 +8,149 @@ Syntax .. code-block:: LAMMPS - replicate nx ny nz *keyword* + replicate nx ny nz *keyword* ... nx,ny,nz = replication factors in each dimension -* optional *keyword* = *bbox* or *bondlist* +* zero or more keywords may be appended +* keyword = *bbox* or *bond/periodic* .. parsed-literal:: *bbox* = only check atoms in replicas that overlap with a processor's subdomain - *bondlist* = use a generalized algorithm that correctly replicates periodic loops + *bond/periodic* = use a different algorithm that correctly replicates periodic bond loops Examples """""""" -For an example of replicating periodically looped carbon nanotubes, see examples/replicate. +For examples of replicating simple linear polymer chains (periodic or +non-periodic) or periodic carbon nanotubes, see examples/replicate. .. code-block:: LAMMPS replicate 2 3 2 + replicate 2 3 2 bbox + replicate 2 3 2 bond/periodic Description """"""""""" -Replicate the current simulation one or more times in each dimension. -For example, replication factors of 2,2,2 will create a simulation -with 8x as many atoms by doubling the simulation domain in each -dimension. A replication factor of 1 in a dimension leaves the -simulation domain unchanged. When the new simulation box is created -it is also partitioned into a regular 3d grid of rectangular bricks, -one per processor, based on the number of processors being used and -the settings of the :doc:`processors ` command. The -partitioning can later be changed by the :doc:`balance ` or -:doc:`fix balance ` commands. +Replicate the current system one or more times in each dimension. For +example, replication factors of 2,2,2 will create a simulation with 8x +as many atoms by doubling the size of the simulation box in each +dimension. A replication factor of 1 leaves the simulation domain +unchanged in that dimension. -All properties of the atoms are replicated, including their -velocities, which may or may not be desirable. New atom IDs are -assigned to new atoms, as are molecule IDs. Bonds and other topology -interactions are created between pairs of new atoms as well as between -old and new atoms. This is done by using the image flag for each atom -to "unwrap" it out of the periodic box before replicating it. +When the new simulation box is created it is partitioned into a +regular 3d grid of rectangular bricks, one per processor, based on the +number of processors being used and the settings of the +:doc:`processors ` command. The partitioning can be +changed by subsequent :doc:`balance ` or :doc:`fix balance +` commands. -This means that any molecular bond you specify in the original data -file that crosses a periodic boundary should be between two atoms with -image flags that differ by 1. This will allow the bond to be -unwrapped appropriately. - -The optional keyword *bbox* uses a bounding box to only check atoms in -replicas that overlap with a processor's subdomain when assigning -atoms to processors. It typically results in a substantial speedup -when using the replicate command on a large number of processors. It -does require temporary use of more memory, specifically that each -processor can store all atoms in the entire system before it is -replicated. - -The optional keyword *bondlist* correctly treats molecules that span -the box and are bonded to themselves across a periodic boundary, by -relying on self-consistent nearest-image assumptions (rather than -using image flags). The *bondlist* option resets all image flags to -zero. Therefore, the *bondlist* keyword can also be used in general -for systems that may not have consistent image flags. The *bondlist* -algorithm builds off the *bbox* algorithm, so it is fast when using a -large number of processors, but does require temporary use of more -memory. Specifically, each processor must be able to store arrays for -all atoms in the entire system before it is replicated. +All properties of each atom are replicated (except per-atom fix data, +see the Restrictions section below). This includes their velocities, +which may or may not be desirable. New atom IDs are assigned to new +atoms, as are new molecule IDs. Bonds and other topology interactions +are created between pairs of new atoms as well as between old and new +atoms. .. note:: + + The bond discussion which follows only refers to models with + permanent covalent bonds typically defined in LAMMPS via a data + file. It is not relevant to sytems modeled with many-body + potentials which can define bonds on-the-fly, based on the current + positions of nearby atoms, e.g. models using the :doc:`AIREBO + ` or :doc:`ReaxFF ` potentials. - For systems that contain a molecule that spans the box and is - bonded to itself across a periodic boundary (so that the molecule - is effectively a loop), the *bondlist* keyword must be used. A - simple example would be a linear polymer chain that spans the - simulation box and bonds back to itself across the periodic - boundary. More realistic examples would be a CNT (meant to be an - infinitely long CNT) or a graphene sheet or a bulk periodic crystal - where there are explicit bonds specified between near neighbors. - (Note that this restriction only applies to systems that have - permanent bonds as specified in the data file. A CNT that is just - atoms modeled with the :doc:`AIREBO potential ` has no - such permanent bonds, so it can be replicated without the - *bondlist* keyword.) +If the *bond/periodic* keyword is not specified, bond replication is +done by using the image flag for each atom to "unwrap" it out of the +periodic box before replicating it. After replication is performed, +atoms outside the new periodic box are wrapped back into it. This +assigns correct images flags to all atoms in the system. For this to +work, all original atoms in the original simulation box must have +consistent image flags. This means that if two atoms have a bond +between them which crosses a periodic boundary, their respective image +flags will differ by 1 in that dimension. -Restrictions +Image flag consistency is not possible if a system has a periodic bond +loop, meaning there is a chain of bonds which crosses an entire +dimension and re-connects to itself across a periodic boundary. In +this case you MUST use the *bond/periodic* keyword to correctly +replicate the system. This option zeroes the image flags for all +atoms and uses a different algorithm to find new (nearby) bond +neighbors in the replicated system. In the final replicated system +all image flags are zero (in each dimension). + +-- note: + + LAMMPS does not check for image flag consistency before performing + the replication (it does issue a warning about this before a + simulation is run). If the original image flags are inconsistent, + the replicated system will also have inconsistent image flags, but + will otherwise be correctly replicated. This is NOT the case if + there is a periodic bond loop. See the next note. + +-- note: + + LAMMPS does not check for periodic bond loops. If you use the + *bond/periodic* option for a system without periodic bond loops, + the system will be correctly replicated, but image flag information + will be lost (which may or may not be important to your model). If + you do not use the *bond/periodic* option for a system with + periodic bond loops, the replicated system will have invalid bonds + (typically very long), resulting in bad dynamics. + +If possible, the *bbox* keyword should be used when running on a large +number of processors, as it can result in a substantial speed-up for +the replication operation. It uses a bounding box to only check atoms +in replicas that overlap with each processor's new subdomain when +assigning atoms to processors. It also preserves image flag +information. The only drawback to the *bbox* option is that it +requires a temporary use of more memory. Each processor must be able +to store all atoms (and their per-atom data) in the original system, +before it is replicated. + +-- note: + + The algorithm used by the *bond/periodic* keyword builds on the + algorithm used by the *bbox* keyword and thus has the same memory + requirements. If you specify only the *bond/peridoic* keyword it + will internally set the *bbox* keyword as well. + +---------- + + Restrictions """""""""""" A 2d simulation cannot be replicated in the z dimension. If a simulation is non-periodic in a dimension, care should be used -when replicating it in that dimension, as it may put atoms nearly on -top of each other. +when replicating it in that dimension, as it may generate atoms nearly +on top of each other. If the current simulation was read in from a restart file (before a -run is performed), there must not be any fix information stored in -the file for individual atoms. Similarly, no fixes can be defined at -the time the replicate command is used that require vectors of atom +run is performed), there must not be any fix information stored in the +file for individual atoms. Similarly, no fixes can be defined at the +time the replicate command is used that require vectors of atom information to be stored. This is because the replicate command does not know how to replicate that information for new atoms it creates. -To work around this restriction, restart files may be converted into -data files and fixes may be undefined via the :doc:`unfix ` -command before and redefined after the replicate command. + +To work around this restriction two options are possible. (1) Fixes +which use the stored data in the restart file can be defined before +replication and then deleted via the :doc:`unfix ` command and +re-defined after it. Or (2) the restart file can be converted to a +data file (which deletes the stored fix infomation) and fixes defined +after the replicate command. In both these scenarios, the per-atom +fix information in the restart file is lost. Related commands """""""""""""""" none - Default """"""" -none +No settings for using the *bbox* or *bond/periodic* algorithms. diff --git a/examples/README b/examples/README index 86d14e7078..90831b49f0 100644 --- a/examples/README +++ b/examples/README @@ -104,6 +104,7 @@ prd: parallel replica dynamics of vacancy diffusion in bulk Si python: use of PYTHON package to invoke Python code from input script qeq: use of QEQ package for charge equilibration reaxff: RDX and TATB and several other models using ReaxFF +replicate: use of replicate command rerun: use of rerun and read_dump commands rigid: rigid bodies modeled as independent or coupled shear: sideways shear applied to 2d solid, with and without a void diff --git a/examples/replicate/README b/examples/replicate/README new file mode 100644 index 0000000000..1363158b37 --- /dev/null +++ b/examples/replicate/README @@ -0,0 +1,23 @@ +This directory has input scripts which demonstrate how to use the +replicate command both for systems with and without periodic bond +loops. A periodic bond loop is where a chain of bonds spans a +periodic dimension of the box and includes one or more bonds which +cross the periodic boundary to close the loop. + +To run these scripts, LAMMPS should be built with the MOLECULE and +CLASS2 packages. The latter is only needed for the CNT example. + +These scripts are tiny examples which illustrate both kinds of +systems. Each produces a series of images which can be visualized. +If the 3 lines for a dump movie command are uncommented, a MPG movie +is produced, assuming LAMMPS is build with FFMPEG support. + +in.replicate.bond.x # linear chains in x direction, bond loop in x +in.replcate.bond.x.y # 2d grid of bonded atoms, bond loops in x and y +in.replicate.bond.xy # linear chains in diagonal direction, bond loop in x and y +in.replicate.bond.noloop # linear chains in x direction, no bond loop + +This script is for a complex system of 3 orthogonal CNTs which has +periodic bond loops in all 3 dimensions xyz. + +in.replicate.cnt diff --git a/examples/replicate/data.bond.x b/examples/replicate/data.bond.x new file mode 100644 index 0000000000..b5f4d49f2d --- /dev/null +++ b/examples/replicate/data.bond.x @@ -0,0 +1,22 @@ +# system with periodic bonds in x + +3 atoms +3 bonds + +1 atom types +1 bond types + +0 3 xlo xhi +0 1 ylo yhi + +Atoms + +1 1 1 0.5 0.5 0 +2 1 1 1.5 0.5 0 +3 1 1 2.5 0.5 0 + +Bonds + +1 1 1 2 +2 1 2 3 +3 1 3 1 diff --git a/examples/replicate/data.bond.x.noloop b/examples/replicate/data.bond.x.noloop new file mode 100644 index 0000000000..4c096724be --- /dev/null +++ b/examples/replicate/data.bond.x.noloop @@ -0,0 +1,21 @@ +# system with non-periodic bonds in x + +3 atoms +2 bonds + +1 atom types +1 bond types + +0 3 xlo xhi +0 1 ylo yhi + +Atoms + +1 1 1 0.5 0.5 0 0 0 0 +2 1 1 1.5 0.5 0 0 0 0 +3 1 1 2.5 0.5 0 -1 0 0 + +Bonds + +1 1 1 2 +2 1 3 1 diff --git a/examples/replicate/data.bond.x.y b/examples/replicate/data.bond.x.y new file mode 100644 index 0000000000..7eaf19a2ae --- /dev/null +++ b/examples/replicate/data.bond.x.y @@ -0,0 +1,43 @@ +# system with periodic bonds in both x and y + +9 atoms +18 bonds + +1 atom types +1 bond types + +0 3 xlo xhi +0 3 ylo yhi + +Atoms + +1 1 1 0.5 0.5 0 +2 1 1 1.5 0.5 0 +3 1 1 2.5 0.5 0 +4 1 1 0.5 1.5 0 +5 1 1 1.5 1.5 0 +6 1 1 2.5 1.5 0 +7 1 1 0.5 2.5 0 +8 1 1 1.5 2.5 0 +9 1 1 2.5 2.5 0 + +Bonds + +1 1 1 2 +2 1 2 3 +3 1 3 1 +4 1 4 5 +5 1 5 6 +6 1 6 4 +7 1 7 8 +8 1 8 9 +9 1 9 7 +10 1 1 4 +11 1 4 7 +12 1 7 1 +13 1 2 5 +14 1 5 8 +15 1 8 2 +16 1 3 6 +17 1 6 9 +18 1 9 3 diff --git a/examples/replicate/data.bond.xy b/examples/replicate/data.bond.xy new file mode 100644 index 0000000000..31e9d8785a --- /dev/null +++ b/examples/replicate/data.bond.xy @@ -0,0 +1,22 @@ +# system with periodic bonds in xy direction + +3 atoms +3 bonds + +1 atom types +1 bond types + +0 3 xlo xhi +0 3 ylo yhi + +Atoms + +1 1 1 0.5 0.5 0 +2 1 1 1.5 1.5 0 +3 1 1 2.5 2.5 0 + +Bonds + +1 1 1 2 +2 1 2 3 +3 1 3 1 diff --git a/examples/replicate/in.replicate.bond.x b/examples/replicate/in.replicate.bond.x new file mode 100644 index 0000000000..868e05f177 --- /dev/null +++ b/examples/replicate/in.replicate.bond.x @@ -0,0 +1,34 @@ +# test of replicating system with periodic bonds in x + +dimension 2 +atom_style molecular + +read_data data.bond.x + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene + +fix 1 all nve + +write_data tmp.data.x + +dump 1 all image 100 tmp.image.x.*.ppm type type & + adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.mpg type type & +# adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 diff --git a/examples/replicate/in.replicate.bond.x.noloop b/examples/replicate/in.replicate.bond.x.noloop new file mode 100644 index 0000000000..b9862f844d --- /dev/null +++ b/examples/replicate/in.replicate.bond.x.noloop @@ -0,0 +1,34 @@ +# test of replicating system with periodic bonds in x + +dimension 2 +atom_style molecular + +read_data data.bond.x.noloop + +replicate 3 3 1 +#replicate 3 3 1 bond/periodic + +mass 1 1.0 +velocity all create 0.001 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene + +fix 1 all nve + +write_data tmp.data.x.non + +dump 1 all image 100 tmp.image.x.non.*.ppm type type & + adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.non.mpg type type & +# adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 diff --git a/examples/replicate/in.replicate.bond.x.y b/examples/replicate/in.replicate.bond.x.y new file mode 100644 index 0000000000..100350dc18 --- /dev/null +++ b/examples/replicate/in.replicate.bond.x.y @@ -0,0 +1,34 @@ +# test of replicating system with periodic bonds in both x and y + +dimension 2 +atom_style molecular + +read_data data.bond.x.y + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene + +fix 1 all nve + +write_data tmp.data.x.y + +dump 1 all image 100 tmp.image.x.y.*.ppm type type & + adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.y.mpg type type & +# adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 diff --git a/examples/replicate/in.replicate.bond.xy b/examples/replicate/in.replicate.bond.xy new file mode 100644 index 0000000000..52ca79ace7 --- /dev/null +++ b/examples/replicate/in.replicate.bond.xy @@ -0,0 +1,34 @@ +# test of replicating system with periodic bonds in xy diagonal direction + +dimension 2 +atom_style molecular + +read_data data.bond.xy + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.5 + +bond_style harmonic +bond_coeff 1 50.0 1.414 + +special_bonds fene + +fix 1 all nve + +write_data tmp.data.xy + +dump 1 all image 100 tmp.image.xy.*.ppm type type & + adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.xy.mpg type type & +# adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 diff --git a/examples/replicate/in.replicate b/examples/replicate/in.replicate.cnt similarity index 94% rename from examples/replicate/in.replicate rename to examples/replicate/in.replicate.cnt index 52140d4ce8..0b8b384bbb 100644 --- a/examples/replicate/in.replicate +++ b/examples/replicate/in.replicate.cnt @@ -22,7 +22,7 @@ improper_style class2 read_data three_periodic_CNTs.data.gz -replicate 2 2 2 bondlist +replicate 2 2 2 bond/periodic fix 1 all nve diff --git a/examples/replicate/log.6May24.replicate.bond.x.g++.1 b/examples/replicate/log.6May24.replicate.bond.x.g++.1 new file mode 100644 index 0000000000..3f65d11c15 --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.x.g++.1 @@ -0,0 +1,125 @@ +LAMMPS (17 Apr 2024) +# test of replicating system with periodic bonds in x + +dimension 2 +atom_style molecular + +read_data data.bond.x +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3 atoms + scanning bonds ... + 1 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 1 by 1 by 1 MPI processor grid + reading bonds ... + 3 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.004 seconds + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 3 0.5) + 1 by 1 by 1 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 0.00 MB + average # of replicas added to proc = 9.00 out of 9 (100.00%) + 27 atoms + 27 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.001 seconds + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 2 = max # of 1-2 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.x +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 3 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.x.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Inconsistent image flags (../domain.cpp:1051) +Per MPI rank memory allocation (min/avg/max) = 6.302 | 6.302 | 6.302 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.02 -1.1250229 0 -1.1057636 9.028122 + 5000 0.54111971 -1.9054641 0.29066874 -1.0937172 3.4346743 +Loop time of 0.0764878 on 1 procs for 5000 steps with 27 atoms + +Performance: 28239805.842 tau/day, 65369.921 timesteps/s, 1.765 Matom-step/s +66.5% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0048837 | 0.0048837 | 0.0048837 | 0.0 | 6.38 +Bond | 0.00065879 | 0.00065879 | 0.00065879 | 0.0 | 0.86 +Neigh | 0.0019897 | 0.0019897 | 0.0019897 | 0.0 | 2.60 +Comm | 0.0012815 | 0.0012815 | 0.0012815 | 0.0 | 1.68 +Output | 0.066351 | 0.066351 | 0.066351 | 0.0 | 86.75 +Modify | 0.00069789 | 0.00069789 | 0.00069789 | 0.0 | 0.91 +Other | | 0.0006247 | | | 0.82 + +Nlocal: 27 ave 27 max 27 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 108 ave 108 max 108 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 284 ave 284 max 284 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 284 +Ave neighs/atom = 10.518519 +Ave special neighs/atom = 2 +Neighbor list builds = 287 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.6May24.replicate.bond.x.g++.4 b/examples/replicate/log.6May24.replicate.bond.x.g++.4 new file mode 100644 index 0000000000..9e4423d5f6 --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.x.g++.4 @@ -0,0 +1,126 @@ +LAMMPS (17 Apr 2024) +WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551) +# test of replicating system with periodic bonds in x + +dimension 2 +atom_style molecular + +read_data data.bond.x +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 4 by 1 by 1 MPI processor grid + reading atoms ... + 3 atoms + scanning bonds ... + 1 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 4 by 1 by 1 MPI processor grid + reading bonds ... + 3 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.003 seconds + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 3 0.5) + 4 by 1 by 1 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 0.00 MB + average # of replicas added to proc = 5.25 out of 9 (58.33%) + 27 atoms + 27 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.002 seconds + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 2 = max # of 1-2 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.x +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 3 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.x.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Inconsistent image flags (../domain.cpp:1051) +Per MPI rank memory allocation (min/avg/max) = 6.309 | 6.309 | 6.309 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.02 -1.1250229 0 -1.1057636 9.028122 + 5000 0.50911963 -1.7968226 0.21209852 -1.0944607 4.1676488 +Loop time of 0.21682 on 4 procs for 5000 steps with 27 atoms + +Performance: 9962160.612 tau/day, 23060.557 timesteps/s, 622.635 katom-step/s +93.9% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.001787 | 0.0021247 | 0.0028772 | 1.0 | 0.98 +Bond | 0.00039682 | 0.00045617 | 0.00059887 | 0.0 | 0.21 +Neigh | 0.0013626 | 0.0014006 | 0.0014798 | 0.1 | 0.65 +Comm | 0.017009 | 0.01791 | 0.018656 | 0.5 | 8.26 +Output | 0.06892 | 0.12188 | 0.18918 | 13.7 | 56.21 +Modify | 0.00060336 | 0.00072159 | 0.00088047 | 0.0 | 0.33 +Other | | 0.07233 | | | 33.36 + +Nlocal: 6.75 ave 7 max 6 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Nghost: 64.5 ave 65 max 63 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Neighs: 70.25 ave 77 max 60 min +Histogram: 1 0 0 0 0 1 0 0 1 1 + +Total # of neighbors = 281 +Ave neighs/atom = 10.407407 +Ave special neighs/atom = 2 +Neighbor list builds = 287 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.6May24.replicate.bond.x.noloop.g++.1 b/examples/replicate/log.6May24.replicate.bond.x.noloop.g++.1 new file mode 100644 index 0000000000..54893b449a --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.x.noloop.g++.1 @@ -0,0 +1,121 @@ +LAMMPS (17 Apr 2024) +# test of replicating system with periodic bonds in x + +dimension 2 +atom_style molecular + +read_data data.bond.x.non +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3 atoms + scanning bonds ... + 1 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 1 by 1 by 1 MPI processor grid + reading bonds ... + 2 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.004 seconds + +replicate 3 3 1 +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 3 0.5) + 1 by 1 by 1 MPI processor grid + 27 atoms + 18 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.001 seconds +#replicate 3 3 1 bond/periodic + +mass 1 1.0 +velocity all create 0.001 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.x.non +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 3 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.x.non.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.non.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 6.052 | 6.052 | 6.052 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.001 -1.1250229 0 -1.1240599 13.009826 + 5000 0.62003692 -2.0147214 0.30861545 -1.1090334 8.0279226 +Loop time of 0.0734456 on 1 procs for 5000 steps with 27 atoms + +Performance: 29409520.548 tau/day, 68077.594 timesteps/s, 1.838 Matom-step/s +94.4% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0051444 | 0.0051444 | 0.0051444 | 0.0 | 7.00 +Bond | 0.00048789 | 0.00048789 | 0.00048789 | 0.0 | 0.66 +Neigh | 0.0019333 | 0.0019333 | 0.0019333 | 0.0 | 2.63 +Comm | 0.001332 | 0.001332 | 0.001332 | 0.0 | 1.81 +Output | 0.063139 | 0.063139 | 0.063139 | 0.0 | 85.97 +Modify | 0.00077014 | 0.00077014 | 0.00077014 | 0.0 | 1.05 +Other | | 0.0006387 | | | 0.87 + +Nlocal: 27 ave 27 max 27 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 101 ave 101 max 101 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 288 ave 288 max 288 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 288 +Ave neighs/atom = 10.666667 +Ave special neighs/atom = 1.3333333 +Neighbor list builds = 322 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.6May24.replicate.bond.x.noloop.g++.4 b/examples/replicate/log.6May24.replicate.bond.x.noloop.g++.4 new file mode 100644 index 0000000000..54d9741781 --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.x.noloop.g++.4 @@ -0,0 +1,122 @@ +LAMMPS (17 Apr 2024) +WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551) +# test of replicating system with periodic bonds in x + +dimension 2 +atom_style molecular + +read_data data.bond.x.non +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 4 by 1 by 1 MPI processor grid + reading atoms ... + 3 atoms + scanning bonds ... + 1 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 1 0.5) + 4 by 1 by 1 MPI processor grid + reading bonds ... + 2 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.004 seconds + +replicate 3 3 1 +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 3 0.5) + 4 by 1 by 1 MPI processor grid + 27 atoms + 18 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.002 seconds +#replicate 3 3 1 bond/periodic + +mass 1 1.0 +velocity all create 0.001 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 2 = max # of 1-2 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.x.non +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 3 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.x.non.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.non.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 6.059 | 6.059 | 6.059 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.001 -1.1250229 0 -1.1240599 13.009826 + 5000 0.74931971 -2.233724 0.40158766 -1.1105692 5.6354701 +Loop time of 0.197835 on 4 procs for 5000 steps with 27 atoms + +Performance: 10918214.594 tau/day, 25273.645 timesteps/s, 682.388 katom-step/s +88.8% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0018771 | 0.0021131 | 0.0027188 | 0.8 | 1.07 +Bond | 0.00032659 | 0.00038248 | 0.00049555 | 0.0 | 0.19 +Neigh | 0.001385 | 0.0014211 | 0.0014704 | 0.1 | 0.72 +Comm | 0.017163 | 0.017405 | 0.017805 | 0.2 | 8.80 +Output | 0.070971 | 0.11052 | 0.17112 | 12.1 | 55.87 +Modify | 0.00058993 | 0.00067708 | 0.00075608 | 0.0 | 0.34 +Other | | 0.06532 | | | 33.02 + +Nlocal: 6.75 ave 7 max 6 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Nghost: 59.75 ave 60 max 59 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Neighs: 72 ave 79 max 63 min +Histogram: 1 0 0 0 0 0 2 0 0 1 + +Total # of neighbors = 288 +Ave neighs/atom = 10.666667 +Ave special neighs/atom = 1.3333333 +Neighbor list builds = 323 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.6May24.replicate.bond.x.y.g++.1 b/examples/replicate/log.6May24.replicate.bond.x.y.g++.1 new file mode 100644 index 0000000000..45308d9a90 --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.x.y.g++.1 @@ -0,0 +1,125 @@ +LAMMPS (17 Apr 2024) +# test of replicating system with periodic bonds in both x and y + +dimension 2 +atom_style molecular + +read_data data.bond.x.y +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 9 atoms + scanning bonds ... + 2 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 1 by 1 by 1 MPI processor grid + reading bonds ... + 18 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 4 = max # of 1-2 neighbors + 12 = max # of 1-3 neighbors + 48 = max # of 1-4 neighbors + 8 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.004 seconds + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 9 0.5) + 1 by 1 by 1 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 0.00 MB + average # of replicas added to proc = 9.00 out of 9 (100.00%) + 81 atoms + 162 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 4 = max # of 1-2 neighbors + 12 = max # of 1-3 neighbors + 48 = max # of 1-4 neighbors + 24 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.001 seconds + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 4 = max # of 1-2 neighbors + 24 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.x.y +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 7 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.x.y.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.y.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Inconsistent image flags (../domain.cpp:1051) +Per MPI rank memory allocation (min/avg/max) = 7.555 | 7.555 | 7.555 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.02 -1.1250229 0 -1.1052698 -2.9713842 + 5000 0.046175679 -1.2280388 0.080003864 -1.1024293 -4.1097897 +Loop time of 0.212344 on 1 procs for 5000 steps with 81 atoms + +Performance: 10172161.526 tau/day, 23546.670 timesteps/s, 1.907 Matom-step/s +93.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.01283 | 0.01283 | 0.01283 | 0.0 | 6.04 +Bond | 0.0032785 | 0.0032785 | 0.0032785 | 0.0 | 1.54 +Neigh | 0.0018379 | 0.0018379 | 0.0018379 | 0.0 | 0.87 +Comm | 0.0016247 | 0.0016247 | 0.0016247 | 0.0 | 0.77 +Output | 0.18991 | 0.18991 | 0.18991 | 0.0 | 89.44 +Modify | 0.0018198 | 0.0018198 | 0.0018198 | 0.0 | 0.86 +Other | | 0.001039 | | | 0.49 + +Nlocal: 81 ave 81 max 81 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 144 ave 144 max 144 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 714 ave 714 max 714 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 714 +Ave neighs/atom = 8.8148148 +Ave special neighs/atom = 4 +Neighbor list builds = 72 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.6May24.replicate.bond.x.y.g++.4 b/examples/replicate/log.6May24.replicate.bond.x.y.g++.4 new file mode 100644 index 0000000000..f232a4e428 --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.x.y.g++.4 @@ -0,0 +1,126 @@ +LAMMPS (17 Apr 2024) +WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551) +# test of replicating system with periodic bonds in both x and y + +dimension 2 +atom_style molecular + +read_data data.bond.x.y +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 9 atoms + scanning bonds ... + 2 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 2 by 2 by 1 MPI processor grid + reading bonds ... + 18 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 4 = max # of 1-2 neighbors + 12 = max # of 1-3 neighbors + 48 = max # of 1-4 neighbors + 8 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.003 seconds + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 9 0.5) + 2 by 2 by 1 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 0.00 MB + average # of replicas added to proc = 6.25 out of 9 (69.44%) + 81 atoms + 162 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 4 = max # of 1-2 neighbors + 12 = max # of 1-3 neighbors + 48 = max # of 1-4 neighbors + 24 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.001 seconds + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +bond_style harmonic +bond_coeff 1 50.0 1.0 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 4 = max # of 1-2 neighbors + 24 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.x.y +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 7 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.x.y.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.x.y.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Inconsistent image flags (../domain.cpp:1051) +Per MPI rank memory allocation (min/avg/max) = 7.552 | 7.552 | 7.552 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.02 -1.1250229 0 -1.1052698 -2.9713842 + 5000 0.046175679 -1.2280388 0.080003864 -1.1024293 -4.1097897 +Loop time of 0.273847 on 4 procs for 5000 steps with 81 atoms + +Performance: 7887622.810 tau/day, 18258.386 timesteps/s, 1.479 Matom-step/s +92.4% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0039465 | 0.0042593 | 0.0046129 | 0.4 | 1.56 +Bond | 0.0011489 | 0.001207 | 0.0012757 | 0.2 | 0.44 +Neigh | 0.00079819 | 0.0008044 | 0.00081324 | 0.0 | 0.29 +Comm | 0.024107 | 0.024703 | 0.025269 | 0.3 | 9.02 +Output | 0.14406 | 0.18123 | 0.23779 | 8.7 | 66.18 +Modify | 0.00089401 | 0.00095321 | 0.0010422 | 0.0 | 0.35 +Other | | 0.06069 | | | 22.16 + +Nlocal: 20.25 ave 22 max 19 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 81.5 ave 82 max 80 min +Histogram: 1 0 0 0 0 0 0 0 0 3 +Neighs: 178.5 ave 195 max 165 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 714 +Ave neighs/atom = 8.8148148 +Ave special neighs/atom = 4 +Neighbor list builds = 72 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.6May24.replicate.bond.xy.g++.1 b/examples/replicate/log.6May24.replicate.bond.xy.g++.1 new file mode 100644 index 0000000000..207b65ef9b --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.xy.g++.1 @@ -0,0 +1,125 @@ +LAMMPS (17 Apr 2024) +# test of replicating system with periodic bonds in xy diagonal direction + +dimension 2 +atom_style molecular + +read_data data.bond.xy +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3 atoms + scanning bonds ... + 1 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 1 by 1 by 1 MPI processor grid + reading bonds ... + 3 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.004 seconds + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 9 0.5) + 1 by 1 by 1 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 0.00 MB + average # of replicas added to proc = 9.00 out of 9 (100.00%) + 27 atoms + 27 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.001 seconds + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.5 + +bond_style harmonic +bond_coeff 1 50.0 1.414 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 2 = max # of 1-2 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.xy +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 7 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.xy.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.xy.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Inconsistent image flags (../domain.cpp:1051) +Per MPI rank memory allocation (min/avg/max) = 6.302 | 6.302 | 6.302 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.02 -0.66256987 2.2804444e-06 -0.64330834 -0.59475371 + 5000 0.43110862 -1.1484506 0.16888799 -0.56442095 -0.3683968 +Loop time of 0.124095 on 1 procs for 5000 steps with 27 atoms + +Performance: 17406010.885 tau/day, 40291.692 timesteps/s, 1.088 Matom-step/s +82.3% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0013734 | 0.0013734 | 0.0013734 | 0.0 | 1.11 +Bond | 0.00064058 | 0.00064058 | 0.00064058 | 0.0 | 0.52 +Neigh | 0.00090424 | 0.00090424 | 0.00090424 | 0.0 | 0.73 +Comm | 0.00081732 | 0.00081732 | 0.00081732 | 0.0 | 0.66 +Output | 0.11905 | 0.11905 | 0.11905 | 0.0 | 95.93 +Modify | 0.0007252 | 0.0007252 | 0.0007252 | 0.0 | 0.58 +Other | | 0.0005888 | | | 0.47 + +Nlocal: 27 ave 27 max 27 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 45 ave 45 max 45 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 66 ave 66 max 66 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 66 +Ave neighs/atom = 2.4444444 +Ave special neighs/atom = 2 +Neighbor list builds = 244 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.6May24.replicate.bond.xy.g++.4 b/examples/replicate/log.6May24.replicate.bond.xy.g++.4 new file mode 100644 index 0000000000..a8ef944ec7 --- /dev/null +++ b/examples/replicate/log.6May24.replicate.bond.xy.g++.4 @@ -0,0 +1,126 @@ +LAMMPS (17 Apr 2024) +WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551) +# test of replicating system with periodic bonds in xy diagonal direction + +dimension 2 +atom_style molecular + +read_data data.bond.xy +Reading data file ... + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 3 atoms + scanning bonds ... + 1 = max bonds/atom + orthogonal box = (0 0 -0.5) to (3 3 0.5) + 2 by 2 by 1 MPI processor grid + reading bonds ... + 3 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.003 seconds + +#replicate 3 3 1 +replicate 3 3 1 bond/periodic +Replication is creating a 3x3x1 = 9 times larger system... + orthogonal box = (0 0 -0.5) to (9 9 0.5) + 2 by 2 by 1 MPI processor grid + bounding box image = (0 0 0) to (0 0 0) + bounding box extra memory = 0.00 MB + average # of replicas added to proc = 6.25 out of 9 (69.44%) + 27 atoms + 27 bonds +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + replicate CPU = 0.001 seconds + +mass 1 1.0 +velocity all create 0.02 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.5 + +bond_style harmonic +bond_coeff 1 50.0 1.414 + +special_bonds fene +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 2 = max # of 1-2 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + +fix 1 all nve + +write_data tmp.data.xy +System init for write_data ... +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 7 7 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard + +dump 1 all image 100 tmp.image.xy.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6 +dump_modify 1 pad 5 + +#dump 2 all movie 100 tmp.movie.xy.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6 +#dump_modify 2 pad 5 + +run 5000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Inconsistent image flags (../domain.cpp:1051) +Per MPI rank memory allocation (min/avg/max) = 6.301 | 6.301 | 6.301 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0.02 -0.66256988 2.2804444e-06 -0.64330834 -0.59475371 + 5000 0.43110877 -1.1484507 0.168888 -0.56442093 -0.36839692 +Loop time of 0.286423 on 4 procs for 5000 steps with 27 atoms + +Performance: 7541285.935 tau/day, 17456.680 timesteps/s, 471.330 katom-step/s +92.9% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00054941 | 0.00084836 | 0.0013689 | 0.0 | 0.30 +Bond | 0.00034068 | 0.00045816 | 0.00068461 | 0.0 | 0.16 +Neigh | 0.00092076 | 0.00098494 | 0.0010463 | 0.0 | 0.34 +Comm | 0.018151 | 0.018737 | 0.019531 | 0.4 | 6.54 +Output | 0.13261 | 0.19363 | 0.2596 | 10.7 | 67.60 +Modify | 0.00053153 | 0.00071381 | 0.0010268 | 0.0 | 0.25 +Other | | 0.07105 | | | 24.81 + +Nlocal: 6.75 ave 9 max 5 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 26.25 ave 28 max 25 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 16.5 ave 23 max 10 min +Histogram: 1 1 0 0 0 0 0 0 1 1 + +Total # of neighbors = 66 +Ave neighs/atom = 2.4444444 +Ave special neighs/atom = 2 +Neighbor list builds = 244 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/replicate/log.7Jan22.replicate.g++.1 b/examples/replicate/log.6May24.replicate.cnt.g++.1 similarity index 67% rename from examples/replicate/log.7Jan22.replicate.g++.1 rename to examples/replicate/log.6May24.replicate.cnt.g++.1 index 2933535ae8..f44032e723 100644 --- a/examples/replicate/log.7Jan22.replicate.g++.1 +++ b/examples/replicate/log.6May24.replicate.cnt.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (7 Jan 2022) +LAMMPS (17 Apr 2024) # three orthogonal periodic CNTs # demo for replicating triply looped system # infinite loops in x, y, z @@ -37,6 +37,8 @@ Reading data file ... 12 = max dihedrals/atom scanning impropers ... 1 = max impropers/atom + orthogonal box = (0 0 0) to (80.96 80.96 80.96) + 1 by 1 by 1 MPI processor grid reading bonds ... 4752 bonds reading angles ... @@ -52,11 +54,11 @@ Finding 1-2 1-3 1-4 neighbors ... 6 = max # of 1-3 neighbors 18 = max # of 1-4 neighbors 18 = max # of special neighbors - special bonds CPU = 0.003 seconds - read_data CPU = 0.115 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.056 seconds -replicate 2 2 2 bondlist -Replicating atoms ... +replicate 2 2 2 bond/periodic +Replication is creating a 2x2x2 = 8 times larger system... orthogonal box = (0 0 0) to (161.92 161.92 161.92) 1 by 1 by 1 MPI processor grid bounding box image = (0 0 0) to (0 0 0) @@ -74,15 +76,15 @@ Finding 1-2 1-3 1-4 neighbors ... 6 = max # of 1-3 neighbors 18 = max # of 1-4 neighbors 18 = max # of special neighbors - special bonds CPU = 0.021 seconds - replicate CPU = 0.052 seconds + special bonds CPU = 0.012 seconds + replicate CPU = 0.027 seconds fix 1 all nve run 100 - generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Generated 0 of 0 mixed pair_coeff terms from sixthpower/geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 @@ -93,26 +95,26 @@ Neighbor list info ... pair build: half/bin/newton stencil: half/bin/3d bin: standard -WARNING: Inconsistent image flags (../domain.cpp:814) +WARNING: Inconsistent image flags (../domain.cpp:1051) Per MPI rank memory allocation (min/avg/max) = 51.87 | 51.87 | 51.87 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -14266.189 1466925.5 1452659.3 -29908.753 - 100 2155.9128 -17224.188 1306769.8 1452409 1985.2082 -Loop time of 15.0972 on 1 procs for 100 steps with 25344 atoms + Step Temp E_pair E_mol TotEng Press + 0 0 -14266.189 1466925.5 1452659.3 -29908.753 + 100 2155.9128 -17224.188 1306769.8 1452409 1985.2082 +Loop time of 5.0155 on 1 procs for 100 steps with 25344 atoms -Performance: 0.572 ns/day, 41.937 hours/ns, 6.624 timesteps/s +Performance: 1.723 ns/day, 13.932 hours/ns, 19.938 timesteps/s, 505.314 katom-step/s 100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.7175 | 3.7175 | 3.7175 | 0.0 | 24.62 -Bond | 11.222 | 11.222 | 11.222 | 0.0 | 74.33 -Neigh | 0.1032 | 0.1032 | 0.1032 | 0.0 | 0.68 -Comm | 0.014487 | 0.014487 | 0.014487 | 0.0 | 0.10 -Output | 0.00010894 | 0.00010894 | 0.00010894 | 0.0 | 0.00 -Modify | 0.027112 | 0.027112 | 0.027112 | 0.0 | 0.18 -Other | | 0.01274 | | | 0.08 +Pair | 1.6557 | 1.6557 | 1.6557 | 0.0 | 33.01 +Bond | 3.2813 | 3.2813 | 3.2813 | 0.0 | 65.42 +Neigh | 0.047025 | 0.047025 | 0.047025 | 0.0 | 0.94 +Comm | 0.0085317 | 0.0085317 | 0.0085317 | 0.0 | 0.17 +Output | 7.8551e-05 | 7.8551e-05 | 7.8551e-05 | 0.0 | 0.00 +Modify | 0.014635 | 0.014635 | 0.014635 | 0.0 | 0.29 +Other | | 0.008159 | | | 0.16 Nlocal: 25344 ave 25344 max 25344 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -129,4 +131,4 @@ Dangerous builds = 0 # write_restart replicate.restart # write_data replicate.data -Total wall time: 0:00:15 +Total wall time: 0:00:05 diff --git a/examples/replicate/log.7Jan22.replicate.g++.4 b/examples/replicate/log.6May24.replicate.cnt.g++.4 similarity index 65% rename from examples/replicate/log.7Jan22.replicate.g++.4 rename to examples/replicate/log.6May24.replicate.cnt.g++.4 index 79a13b1484..57abdf767d 100644 --- a/examples/replicate/log.7Jan22.replicate.g++.4 +++ b/examples/replicate/log.6May24.replicate.cnt.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (7 Jan 2022) +LAMMPS (17 Apr 2024) +WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551) # three orthogonal periodic CNTs # demo for replicating triply looped system # infinite loops in x, y, z @@ -37,6 +38,8 @@ Reading data file ... 12 = max dihedrals/atom scanning impropers ... 1 = max impropers/atom + orthogonal box = (0 0 0) to (80.96 80.96 80.96) + 1 by 2 by 2 MPI processor grid reading bonds ... 4752 bonds reading angles ... @@ -53,10 +56,10 @@ Finding 1-2 1-3 1-4 neighbors ... 18 = max # of 1-4 neighbors 18 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.315 seconds + read_data CPU = 0.064 seconds -replicate 2 2 2 bondlist -Replicating atoms ... +replicate 2 2 2 bond/periodic +Replication is creating a 2x2x2 = 8 times larger system... orthogonal box = (0 0 0) to (161.92 161.92 161.92) 1 by 2 by 2 MPI processor grid bounding box image = (0 0 0) to (0 0 0) @@ -74,15 +77,15 @@ Finding 1-2 1-3 1-4 neighbors ... 6 = max # of 1-3 neighbors 18 = max # of 1-4 neighbors 18 = max # of special neighbors - special bonds CPU = 0.007 seconds - replicate CPU = 0.020 seconds + special bonds CPU = 0.004 seconds + replicate CPU = 0.012 seconds fix 1 all nve run 100 - generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Generated 0 of 0 mixed pair_coeff terms from sixthpower/geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 12 ghost atom cutoff = 12 @@ -93,26 +96,26 @@ Neighbor list info ... pair build: half/bin/newton stencil: half/bin/3d bin: standard -WARNING: Inconsistent image flags (../domain.cpp:814) +WARNING: Inconsistent image flags (../domain.cpp:1051) Per MPI rank memory allocation (min/avg/max) = 28.69 | 28.69 | 28.69 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -14266.189 1466925.5 1452659.3 -29908.753 - 100 2155.9128 -17224.188 1306769.8 1452409 1985.2082 -Loop time of 4.13195 on 4 procs for 100 steps with 25344 atoms + Step Temp E_pair E_mol TotEng Press + 0 0 -14266.189 1466925.5 1452659.3 -29908.753 + 100 2155.9128 -17224.188 1306769.8 1452409 1985.2082 +Loop time of 1.3667 on 4 procs for 100 steps with 25344 atoms -Performance: 2.091 ns/day, 11.478 hours/ns, 24.202 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 6.322 ns/day, 3.796 hours/ns, 73.169 timesteps/s, 1.854 Matom-step/s +99.8% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.99372 | 1.014 | 1.0672 | 3.1 | 24.54 -Bond | 2.9449 | 2.9795 | 3.0136 | 2.0 | 72.11 -Neigh | 0.026695 | 0.026706 | 0.026716 | 0.0 | 0.65 -Comm | 0.012404 | 0.099546 | 0.15425 | 18.7 | 2.41 -Output | 4.3822e-05 | 5.0693e-05 | 7.0516e-05 | 0.0 | 0.00 -Modify | 0.0074219 | 0.0074887 | 0.0075411 | 0.1 | 0.18 -Other | | 0.004616 | | | 0.11 +Pair | 0.43424 | 0.43539 | 0.43741 | 0.2 | 31.86 +Bond | 0.88613 | 0.89013 | 0.90094 | 0.7 | 65.13 +Neigh | 0.013198 | 0.013199 | 0.013201 | 0.0 | 0.97 +Comm | 0.010742 | 0.020522 | 0.02546 | 4.1 | 1.50 +Output | 3.2788e-05 | 3.6302e-05 | 4.4556e-05 | 0.0 | 0.00 +Modify | 0.0042029 | 0.0042366 | 0.004267 | 0.0 | 0.31 +Other | | 0.003188 | | | 0.23 Nlocal: 6336 ave 6336 max 6336 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -129,4 +132,4 @@ Dangerous builds = 0 # write_restart replicate.restart # write_data replicate.data -Total wall time: 0:00:04 +Total wall time: 0:00:01 diff --git a/src/replicate.cpp b/src/replicate.cpp index ca432b32a8..e232160842 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -12,6 +12,12 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing authors: + Chris Knight (ANL) for bbox option + Jake Gissinger (Stevens Institute of Technology) for bond/periodic option +------------------------------------------------------------------------- */ + #include "replicate.h" #include "accelerator_kokkos.h" @@ -70,13 +76,24 @@ void Replicate::command(int narg, char **arg) utils::logmesg(lmp, "Replication is creating a {}x{}x{} = {} times larger system...\n", nx, ny, nz, nrep); - int bbox_flag = 0; - int bondlist_flag = 0; - if (narg == 4) { - if (strcmp(arg[3],"bbox") == 0) bbox_flag = 1; - if (strcmp(arg[3],"bondlist") == 0) bondlist_flag = 1; + // optional keywords + + bbox_flag = 0; + bond_flag = 0; + + int iarg = 3; + while (iarg < narg) { + if (strcmp(arg[iarg],"bbox") == 0) { + bbox_flag = 1; + iarg++; + } else if (strcmp(arg[iarg],"bond/periodic") == 0) { + bond_flag = 1; + iarg++; + } else error->all(FLERR,"Illegal replicate command"); } + if (bond_flag) bbox_flag = 1; + // error and warning checks if (nx <= 0 || ny <= 0 || nz <= 0) @@ -91,7 +108,7 @@ void Replicate::command(int narg, char **arg) } if (atom->nextra_grow || atom->nextra_restart || atom->nextra_store) - error->all(FLERR,"Cannot replicate with fixes that store atom quantities"); + error->all(FLERR,"Cannot replicate with fixes that store per-atom quantities"); // record wall time for atom replication @@ -110,24 +127,24 @@ void Replicate::command(int narg, char **arg) // maxmol = largest molecule tag across all existing atoms - tagint maxmol = 0; + maxmol = 0; if (atom->molecule_flag) { for (i = 0; i < atom->nlocal; i++) maxmol = MAX(atom->molecule[i],maxmol); tagint maxmol_all; MPI_Allreduce(&maxmol,&maxmol_all,1,MPI_LMP_TAGINT,MPI_MAX,world); maxmol = maxmol_all; } - - // reset image flags for bondlist option - if (bondlist_flag) + + // reset image flags to zero for bond/periodic option + + if (bond_flag) for (i=0; inlocal; ++i) atom->image[i] = ((imageint) IMGMAX << IMG2BITS) | ((imageint) IMGMAX << IMGBITS) | IMGMAX; - // check image flags maximum extent + // _imagelo/hi = maximum extent of image flags in each dimension // only efficient small image flags compared to new system - int _imagelo[3], _imagehi[3]; _imagelo[0] = 0; _imagelo[1] = 0; _imagelo[2] = 0; @@ -135,7 +152,7 @@ void Replicate::command(int narg, char **arg) _imagehi[1] = 0; _imagehi[2] = 0; - if (bbox_flag || bondlist_flag) { + if (bbox_flag || bond_flag) { for (i=0; inlocal; ++i) { imageint image = atom->image[i]; @@ -157,14 +174,14 @@ void Replicate::command(int narg, char **arg) } // unmap existing atoms via image flags + // no-op for bond/periodic option for (i = 0; i < atom->nlocal; i++) domain->unmap(atom->x[i],atom->image[i]); - + // communication buffer for all my atom's info // max_size = largest buffer needed by any proc - // must do before new Atom class created, - // since size_restart() uses atom->nlocal + // must do before new Atom class created, since size_restart() uses atom->nlocal int max_size; int send_size = atom->avec->size_restart(); @@ -177,7 +194,7 @@ void Replicate::command(int narg, char **arg) // atom = new replicated atom class // also set atomKK for Kokkos version of Atom class - Atom *old = atom; + old = atom; atomKK = nullptr; if (lmp->kokkos) atom = atomKK = new AtomKokkos(lmp); else atom = new Atom(lmp); @@ -216,7 +233,7 @@ void Replicate::command(int narg, char **arg) nrep*old->nimpropers < 0 || nrep*old->nimpropers >= MAXBIGINT) error->all(FLERR,"Replicated system is too big"); - // assign atom and topology counts in new class from old one + // assign atom and topology counts in new Atom class from old Atom class atom->natoms = old->natoms * nrep; atom->nbonds = old->nbonds * nrep; @@ -258,18 +275,18 @@ void Replicate::command(int narg, char **arg) // store old simulation box int triclinic = domain->triclinic; - double old_xprd = domain->xprd; - double old_yprd = domain->yprd; - double old_zprd = domain->zprd; + old_xprd = domain->xprd; + old_yprd = domain->yprd; + old_zprd = domain->zprd; for (i = 0; i < 3; i++) { old_prd_half[i] = domain->prd_half[i]; old_center[i] = 0.5*(domain->boxlo[i]+domain->boxhi[i]); } - double old_xy = domain->xy; - double old_xz = domain->xz; - double old_yz = domain->yz; + old_xy = domain->xy; + old_xz = domain->xz; + old_yz = domain->yz; - // setup new simulation box + // define new simulation box domain->boxhi[0] = domain->boxlo[0] + nx*old_xprd; domain->boxhi[1] = domain->boxlo[1] + ny*old_yprd; @@ -280,15 +297,14 @@ void Replicate::command(int narg, char **arg) domain->yz *= nz; } - // new problem setup using new box boundaries + // setup of new system using new atom counts and new box boundaries + // allocate atom arrays to size N, rounded up by AtomVec->DELTA if (nprocs == 1) n = static_cast (atom->natoms); else n = static_cast (LB_FACTOR * atom->natoms / nprocs); atom->allocate_type_arrays(); - // allocate atom arrays to size N, rounded up by AtomVec->DELTA - bigint nbig = n; nbig = atom->avec->roundup(nbig); n = static_cast (nbig); @@ -362,15 +378,23 @@ void Replicate::command(int narg, char **arg) } } - // loop over all procs - // if this iteration of loop is me: - // pack my unmapped atom data into buf - // bcast it to all other procs - // performs 3d replicate loop with while loop over atoms in buf - // x = new replicated position, remapped into simulation box - // unpack atom into new atom class from buf if I own it - // adjust tag, mol #, coord, topology info as needed + // use + if (!bbox_flag) { + replicate_by_proc(nx,ny,nz,sublo,subhi,buf); + } else { + replicate_by_bbox(nx,ny,nz,sublo,subhi,buf); + } + + + + + + + + + + /* AtomVec *old_avec = old->avec; AtomVec *avec = atom->avec; @@ -381,7 +405,7 @@ void Replicate::command(int narg, char **arg) double *coord; int tag_enable = atom->tag_enable; - if (bbox_flag || bondlist_flag) { + if (bbox_flag || bond_flag) { // allgather size of buf on each proc @@ -456,7 +480,7 @@ void Replicate::command(int narg, char **arg) // store x and tag for the whole system (before replication) - if (bondlist_flag) { + if (bond_flag) { memory->create(old_x,old->natoms,3,"replicate:old_x"); memory->create(old_tag,old->natoms,"replicate:old_tag"); @@ -668,13 +692,13 @@ void Replicate::command(int narg, char **arg) if (atom->molecular == Atom::MOLECULAR) { if (atom->avec->bonds_allow) for (j = 0; j < atom->num_bond[i]; j++) { - if (bondlist_flag) + if (bond_flag) newtag(atom0tag,atom->bond_atom[i][j]); else atom->bond_atom[i][j] += atom_offset; } if (atom->avec->angles_allow) for (j = 0; j < atom->num_angle[i]; j++) { - if (bondlist_flag) { + if (bond_flag) { newtag(atom0tag,atom->angle_atom1[i][j]); newtag(atom0tag,atom->angle_atom2[i][j]); newtag(atom0tag,atom->angle_atom3[i][j]); @@ -686,7 +710,7 @@ void Replicate::command(int narg, char **arg) } if (atom->avec->dihedrals_allow) for (j = 0; j < atom->num_dihedral[i]; j++) { - if (bondlist_flag) { + if (bond_flag) { newtag(atom0tag,atom->dihedral_atom1[i][j]); newtag(atom0tag,atom->dihedral_atom2[i][j]); newtag(atom0tag,atom->dihedral_atom3[i][j]); @@ -700,7 +724,7 @@ void Replicate::command(int narg, char **arg) } if (atom->avec->impropers_allow) for (j = 0; j < atom->num_improper[i]; j++) { - if (bondlist_flag) { + if (bond_flag) { newtag(atom0tag,atom->improper_atom1[i][j]); newtag(atom0tag,atom->improper_atom2[i][j]); newtag(atom0tag,atom->improper_atom3[i][j]); @@ -725,7 +749,7 @@ void Replicate::command(int narg, char **arg) memory->destroy(size_buf_rnk); memory->destroy(disp_buf_rnk); memory->destroy(buf_all); - if (bondlist_flag) { + if (bond_flag) { memory->destroy(old_x); memory->destroy(old_tag); } @@ -825,8 +849,14 @@ void Replicate::command(int narg, char **arg) } } } - } // if (bbox_flag || bondlist_flag) + } // if (bbox_flag || bond_flag) + */ + + + + + // free communication buffer and old atom class memory->destroy(buf); @@ -889,8 +919,511 @@ void Replicate::command(int narg, char **arg) } /* ---------------------------------------------------------------------- - find new tag for the atom 'atom2bond' bonded to atom 'atom0' - for bondlist option, useful for periodic loops or inconsistent image flags + simple replication algorithm, suitable for small proc count +------------------------------------------------------------------------- */ + +void Replicate::replicate_by_proc(int nx, int ny, int nz, + double *sublo, double *subhi, double *buf) +{ + int i,j,m,n; + int ix,iy,iz; + + int me = comm->me; + int nprocs = comm->nprocs; + int triclinic = domain->triclinic; + int tag_enable = atom->tag_enable; + + AtomVec *old_avec = old->avec; + AtomVec *avec = atom->avec; + + tagint atom_offset,mol_offset; + imageint image; + double x[3],lamda[3]; + double *coord; + + // loop over all procs + // if this iteration of loop is me: + // pack my unmapped atom data into buf + // bcast it to all other procs + + for (int iproc = 0; iproc < nprocs; iproc++) { + if (me == iproc) { + n = 0; + for (i = 0; i < old->nlocal; i++) n += old_avec->pack_restart(i,&buf[n]); + } + MPI_Bcast(&n,1,MPI_INT,iproc,world); + MPI_Bcast(buf,n,MPI_DOUBLE,iproc,world); + + for (ix = 0; ix < nx; ix++) { + for (iy = 0; iy < ny; iy++) { + for (iz = 0; iz < nz; iz++) { + + // while loop over one proc's atom list + // x = new replicated position, remapped into new simulation box + // if atom is within my new subdomain, unpack it into new atom class + // adjust tag, mol #, coord, topology info as needed + + m = 0; + while (m < n) { + image = ((imageint) IMGMAX << IMG2BITS) | + ((imageint) IMGMAX << IMGBITS) | IMGMAX; + if (triclinic == 0) { + x[0] = buf[m+1] + ix*old_xprd; + x[1] = buf[m+2] + iy*old_yprd; + x[2] = buf[m+3] + iz*old_zprd; + } else { + x[0] = buf[m+1] + ix*old_xprd + iy*old_xy + iz*old_xz; + x[1] = buf[m+2] + iy*old_yprd + iz*old_yz; + x[2] = buf[m+3] + iz*old_zprd; + } + domain->remap(x,image); + if (triclinic) { + domain->x2lamda(x,lamda); + coord = lamda; + } else coord = x; + + if (coord[0] >= sublo[0] && coord[0] < subhi[0] && + coord[1] >= sublo[1] && coord[1] < subhi[1] && + coord[2] >= sublo[2] && coord[2] < subhi[2]) { + + m += avec->unpack_restart(&buf[m]); + + i = atom->nlocal - 1; + if (tag_enable) atom_offset = iz*ny*nx*maxtag + iy*nx*maxtag + ix*maxtag; + else atom_offset = 0; + mol_offset = iz*ny*nx*maxmol + iy*nx*maxmol + ix*maxmol; + + atom->x[i][0] = x[0]; + atom->x[i][1] = x[1]; + atom->x[i][2] = x[2]; + + atom->tag[i] += atom_offset; + atom->image[i] = image; + + if (atom->molecular != Atom::ATOMIC) { + if (atom->molecule[i] > 0) + atom->molecule[i] += mol_offset; + if (atom->molecular == Atom::MOLECULAR) { + if (atom->avec->bonds_allow) + for (j = 0; j < atom->num_bond[i]; j++) + atom->bond_atom[i][j] += atom_offset; + if (atom->avec->angles_allow) + for (j = 0; j < atom->num_angle[i]; j++) { + atom->angle_atom1[i][j] += atom_offset; + atom->angle_atom2[i][j] += atom_offset; + atom->angle_atom3[i][j] += atom_offset; + } + if (atom->avec->dihedrals_allow) + for (j = 0; j < atom->num_dihedral[i]; j++) { + atom->dihedral_atom1[i][j] += atom_offset; + atom->dihedral_atom2[i][j] += atom_offset; + atom->dihedral_atom3[i][j] += atom_offset; + atom->dihedral_atom4[i][j] += atom_offset; + } + if (atom->avec->impropers_allow) + for (j = 0; j < atom->num_improper[i]; j++) { + atom->improper_atom1[i][j] += atom_offset; + atom->improper_atom2[i][j] += atom_offset; + atom->improper_atom3[i][j] += atom_offset; + atom->improper_atom4[i][j] += atom_offset; + } + } + } + } else m += static_cast (buf[m]); + } + } + } + } + } +} + +/* ---------------------------------------------------------------------- + more complex replication algorithm + uses bounding box of each proc's subdomain to avoid checking individual atoms + faster for large processor counts + required for bond/periodic option +------------------------------------------------------------------------- */ + +void Replicate::replicate_by_bbox(int nx, int ny, int nz, + double *sublo, double *subhi, double *buf) +{ + int i,j,m,n; + int ix,iy,iz; + + int me = comm->me; + int nprocs = comm->nprocs; + int triclinic = domain->triclinic; + int tag_enable = atom->tag_enable; + + AtomVec *old_avec = old->avec; + AtomVec *avec = atom->avec; + + tagint atom_offset,mol_offset,atom0tag; + imageint image; + double x[3],lamda[3]; + double *coord; + + // allgather size of buf on each proc + + n = 0; + for (i = 0; i < old->nlocal; i++) n += old_avec->pack_restart(i,&buf[n]); + + int * size_buf_rnk; + memory->create(size_buf_rnk, nprocs, "replicate:size_buf_rnk"); + + MPI_Allgather(&n, 1, MPI_INT, size_buf_rnk, 1, MPI_INT, world); + + // size of buf_all + + int size_buf_all = 0; + MPI_Allreduce(&n, &size_buf_all, 1, MPI_INT, MPI_SUM, world); + + if (me == 0) { + auto mesg = fmt::format(" bounding box image = ({} {} {}) " + "to ({} {} {})\n", + _imagelo[0],_imagelo[1],_imagelo[2], + _imagehi[0],_imagehi[1],_imagehi[2]); + mesg += fmt::format(" bounding box extra memory = {:.2f} MB\n", + (double)size_buf_all*sizeof(double)/1024/1024); + utils::logmesg(lmp,mesg); + } + + // rnk offsets + + int *disp_buf_rnk; + memory->create(disp_buf_rnk, nprocs, "replicate:disp_buf_rnk"); + disp_buf_rnk[0] = 0; + for (i = 1; i < nprocs; i++) + disp_buf_rnk[i] = disp_buf_rnk[i-1] + size_buf_rnk[i-1]; + + // allgather buf_all + + double *buf_all; + memory->create(buf_all, size_buf_all, "replicate:buf_all"); + + MPI_Allgatherv(buf,n,MPI_DOUBLE,buf_all,size_buf_rnk,disp_buf_rnk, + MPI_DOUBLE,world); + + // bounding box of original unwrapped system + + double _orig_lo[3], _orig_hi[3]; + if (triclinic) { + _orig_lo[0] = domain->boxlo[0] + + _imagelo[0] * old_xprd + _imagelo[1] * old_xy + _imagelo[2] * old_xz; + _orig_lo[1] = domain->boxlo[1] + + _imagelo[1] * old_yprd + _imagelo[2] * old_yz; + _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd; + + _orig_hi[0] = domain->boxlo[0] + + (_imagehi[0]+1) * old_xprd + + (_imagehi[1]+1) * old_xy + (_imagehi[2]+1) * old_xz; + _orig_hi[1] = domain->boxlo[1] + + (_imagehi[1]+1) * old_yprd + (_imagehi[2]+1) * old_yz; + _orig_hi[2] = domain->boxlo[2] + (_imagehi[2]+1) * old_zprd; + } else { + _orig_lo[0] = domain->boxlo[0] + _imagelo[0] * old_xprd; + _orig_lo[1] = domain->boxlo[1] + _imagelo[1] * old_yprd; + _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd; + + _orig_hi[0] = domain->boxlo[0] + (_imagehi[0]+1) * old_xprd; + _orig_hi[1] = domain->boxlo[1] + (_imagehi[1]+1) * old_yprd; + _orig_hi[2] = domain->boxlo[2] + (_imagehi[2]+1) * old_zprd; + } + + double _lo[3], _hi[3]; + + int num_replicas_added = 0; + + // if bond/periodic option + // store old_x and old_tag for the entire original system + + if (bond_flag) { + memory->create(old_x,old->natoms,3,"replicate:old_x"); + memory->create(old_tag,old->natoms,"replicate:old_tag"); + + i = m = 0; + while (m < size_buf_all) { + old_x[i][0] = buf_all[m+1]; + old_x[i][1] = buf_all[m+2]; + old_x[i][2] = buf_all[m+3]; + old_tag[i] = (tagint) ubuf(buf_all[m+4]).i; + old_map.insert({old_tag[i],i}); + m += static_cast (buf_all[m]); + i++; + } + } + + // replication loop + + for (ix = 0; ix < nx; ix++) { + for (iy = 0; iy < ny; iy++) { + for (iz = 0; iz < nz; iz++) { + + thisrep[0] = ix; + thisrep[1] = iy; + thisrep[2] = iz; + + // domain->remap() overwrites coordinates, so always recompute here + + if (triclinic) { + _lo[0] = _orig_lo[0] + ix * old_xprd + iy * old_xy + iz * old_xz; + _hi[0] = _orig_hi[0] + ix * old_xprd + iy * old_xy + iz * old_xz; + + _lo[1] = _orig_lo[1] + iy * old_yprd + iz * old_yz; + _hi[1] = _orig_hi[1] + iy * old_yprd + iz * old_yz; + + _lo[2] = _orig_lo[2] + iz * old_zprd; + _hi[2] = _orig_hi[2] + iz * old_zprd; + } else { + _lo[0] = _orig_lo[0] + ix * old_xprd; + _hi[0] = _orig_hi[0] + ix * old_xprd; + + _lo[1] = _orig_lo[1] + iy * old_yprd; + _hi[1] = _orig_hi[1] + iy * old_yprd; + + _lo[2] = _orig_lo[2] + iz * old_zprd; + _hi[2] = _orig_hi[2] + iz * old_zprd; + } + + // test if bounding box of shifted replica overlaps sub-domain of proc + // if not, then can skip testing of any individual atoms + + int xoverlap = 1; + int yoverlap = 1; + int zoverlap = 1; + if (triclinic) { + double _llo[3]; + domain->x2lamda(_lo,_llo); + double _lhi[3]; + domain->x2lamda(_hi,_lhi); + + if (_llo[0] > (subhi[0] - EPSILON) + || _lhi[0] < (sublo[0] + EPSILON) ) xoverlap = 0; + if (_llo[1] > (subhi[1] - EPSILON) + || _lhi[1] < (sublo[1] + EPSILON) ) yoverlap = 0; + if (_llo[2] > (subhi[2] - EPSILON) + || _lhi[2] < (sublo[2] + EPSILON) ) zoverlap = 0; + } else { + if (_lo[0] > (subhi[0] - EPSILON) + || _hi[0] < (sublo[0] + EPSILON) ) xoverlap = 0; + if (_lo[1] > (subhi[1] - EPSILON) + || _hi[1] < (sublo[1] + EPSILON) ) yoverlap = 0; + if (_lo[2] > (subhi[2] - EPSILON) + || _hi[2] < (sublo[2] + EPSILON) ) zoverlap = 0; + } + + int overlap = 0; + if (xoverlap && yoverlap && zoverlap) overlap = 1; + + // if no overlap, test if bounding box wrapped back into new system + + if (!overlap) { + + // wrap back into cell + + imageint imagelo = ((imageint) IMGMAX << IMG2BITS) | + ((imageint) IMGMAX << IMGBITS) | IMGMAX; + domain->remap(&(_lo[0]), imagelo); + int xboxlo = (imagelo & IMGMASK) - IMGMAX; + int yboxlo = (imagelo >> IMGBITS & IMGMASK) - IMGMAX; + int zboxlo = (imagelo >> IMG2BITS) - IMGMAX; + + imageint imagehi = ((imageint) IMGMAX << IMG2BITS) | + ((imageint) IMGMAX << IMGBITS) | IMGMAX; + domain->remap(&(_hi[0]), imagehi); + int xboxhi = (imagehi & IMGMASK) - IMGMAX; + int yboxhi = (imagehi >> IMGBITS & IMGMASK) - IMGMAX; + int zboxhi = (imagehi >> IMG2BITS) - IMGMAX; + + if (triclinic) { + double _llo[3]; + _llo[0] = _lo[0]; _llo[1] = _lo[1]; _llo[2] = _lo[2]; + domain->x2lamda(_llo,_lo); + + double _lhi[3]; + _lhi[0] = _hi[0]; _lhi[1] = _hi[1]; _lhi[2] = _hi[2]; + domain->x2lamda(_lhi,_hi); + } + + // test all fragments for any overlap; ok to include false positives + + int _xoverlap1 = 0; + int _xoverlap2 = 0; + if (!xoverlap) { + if (xboxlo < 0) { + _xoverlap1 = 1; + if (_lo[0] > (subhi[0] - EPSILON)) _xoverlap1 = 0; + } + + if (xboxhi > 0) { + _xoverlap2 = 1; + if (_hi[0] < (sublo[0] + EPSILON)) _xoverlap2 = 0; + } + + if (_xoverlap1 || _xoverlap2) xoverlap = 1; + } + + int _yoverlap1 = 0; + int _yoverlap2 = 0; + if (!yoverlap) { + if (yboxlo < 0) { + _yoverlap1 = 1; + if (_lo[1] > (subhi[1] - EPSILON)) _yoverlap1 = 0; + } + + if (yboxhi > 0) { + _yoverlap2 = 1; + if (_hi[1] < (sublo[1] + EPSILON)) _yoverlap2 = 0; + } + + if (_yoverlap1 || _yoverlap2) yoverlap = 1; + } + + + int _zoverlap1 = 0; + int _zoverlap2 = 0; + if (!zoverlap) { + if (zboxlo < 0) { + _zoverlap1 = 1; + if (_lo[2] > (subhi[2] - EPSILON)) _zoverlap1 = 0; + } + + if (zboxhi > 0) { + _zoverlap2 = 1; + if (_hi[2] < (sublo[2] + EPSILON)) _zoverlap2 = 0; + } + + if (_zoverlap1 || _zoverlap2) zoverlap = 1; + } + + // does either fragment overlap w/ sub-domain + + if (xoverlap && yoverlap && zoverlap) overlap = 1; + } + + // while loop over one proc's atom list + + if (overlap) { + num_replicas_added++; + + m = 0; + while (m < size_buf_all) { + image = ((imageint) IMGMAX << IMG2BITS) | + ((imageint) IMGMAX << IMGBITS) | IMGMAX; + if (triclinic == 0) { + x[0] = buf_all[m+1] + ix*old_xprd; + x[1] = buf_all[m+2] + iy*old_yprd; + x[2] = buf_all[m+3] + iz*old_zprd; + } else { + x[0] = buf_all[m+1] + ix*old_xprd + iy*old_xy + iz*old_xz; + x[1] = buf_all[m+2] + iy*old_yprd + iz*old_yz; + x[2] = buf_all[m+3] + iz*old_zprd; + } + domain->remap(x,image); + if (triclinic) { + domain->x2lamda(x,lamda); + coord = lamda; + } else coord = x; + + if (coord[0] >= sublo[0] && coord[0] < subhi[0] && + coord[1] >= sublo[1] && coord[1] < subhi[1] && + coord[2] >= sublo[2] && coord[2] < subhi[2]) { + + m += avec->unpack_restart(&buf_all[m]); + + i = atom->nlocal - 1; + if (tag_enable) + atom_offset = iz*ny*nx*maxtag + iy*nx*maxtag + ix*maxtag; + else atom_offset = 0; + mol_offset = iz*ny*nx*maxmol + iy*nx*maxmol + ix*maxmol; + + atom->x[i][0] = x[0]; + atom->x[i][1] = x[1]; + atom->x[i][2] = x[2]; + + atom0tag = atom->tag[i]; + atom->tag[i] += atom_offset; + atom->image[i] = image; + + if (atom->molecular != Atom::ATOMIC) { + if (atom->molecule[i] > 0) + atom->molecule[i] += mol_offset; + if (atom->molecular == Atom::MOLECULAR) { + if (atom->avec->bonds_allow) + for (j = 0; j < atom->num_bond[i]; j++) { + if (bond_flag) + newtag(atom0tag,atom->bond_atom[i][j]); + else atom->bond_atom[i][j] += atom_offset; + } + if (atom->avec->angles_allow) + for (j = 0; j < atom->num_angle[i]; j++) { + if (bond_flag) { + newtag(atom0tag,atom->angle_atom1[i][j]); + newtag(atom0tag,atom->angle_atom2[i][j]); + newtag(atom0tag,atom->angle_atom3[i][j]); + } else { + atom->angle_atom1[i][j] += atom_offset; + atom->angle_atom2[i][j] += atom_offset; + atom->angle_atom3[i][j] += atom_offset; + } + } + if (atom->avec->dihedrals_allow) + for (j = 0; j < atom->num_dihedral[i]; j++) { + if (bond_flag) { + newtag(atom0tag,atom->dihedral_atom1[i][j]); + newtag(atom0tag,atom->dihedral_atom2[i][j]); + newtag(atom0tag,atom->dihedral_atom3[i][j]); + newtag(atom0tag,atom->dihedral_atom4[i][j]); + } else { + atom->dihedral_atom1[i][j] += atom_offset; + atom->dihedral_atom2[i][j] += atom_offset; + atom->dihedral_atom3[i][j] += atom_offset; + atom->dihedral_atom4[i][j] += atom_offset; + } + } + if (atom->avec->impropers_allow) + for (j = 0; j < atom->num_improper[i]; j++) { + if (bond_flag) { + newtag(atom0tag,atom->improper_atom1[i][j]); + newtag(atom0tag,atom->improper_atom2[i][j]); + newtag(atom0tag,atom->improper_atom3[i][j]); + newtag(atom0tag,atom->improper_atom4[i][j]); + } else { + atom->improper_atom1[i][j] += atom_offset; + atom->improper_atom2[i][j] += atom_offset; + atom->improper_atom3[i][j] += atom_offset; + atom->improper_atom4[i][j] += atom_offset; + } + } + } + } + } else m += static_cast (buf_all[m]); + } + } + } + } + } + + memory->destroy(size_buf_rnk); + memory->destroy(disp_buf_rnk); + memory->destroy(buf_all); + if (bond_flag) { + memory->destroy(old_x); + memory->destroy(old_tag); + } + + int sum = 0; + MPI_Reduce(&num_replicas_added, &sum, 1, MPI_INT, MPI_SUM, 0, world); + double avg = (double) sum / nprocs; + if (me == 0) + utils::logmesg(lmp," average # of replicas added to proc = {:.2f} out " + "of {} ({:.2f}%)\n",avg,nx*ny*nz,avg/(nx*ny*nz)*100.0); +} + +/* ---------------------------------------------------------------------- + find new tag for atom 'atom2bond' bonded to atom 'atom0' + for bond/periodic option + useful for periodic loops or inconsistent image flags reassign bond if > old boxlength / 2 ------------------------------------------------------------------------- */ diff --git a/src/replicate.h b/src/replicate.h index ae314d6a82..3877d2d720 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -31,13 +31,27 @@ class Replicate : public Command { Replicate(class LAMMPS *); void command(int, char **) override; - private: - std::unordered_map old_map; +private: + int bbox_flag, bond_flag; + + class Atom *old; + + double old_xprd, old_yprd, old_zprd; + double old_xy, old_xz, old_yz; + + int _imagelo[3], _imagehi[3]; + double **old_x; double old_prd_half[3], old_center[3]; tagint *old_tag; - tagint maxtag; + tagint maxtag, maxmol; int thisrep[3], allnrep[3]; + + std::unordered_map old_map; + + void replicate_by_proc(int, int, int, double *, double *, double *); + void replicate_by_bbox(int, int, int, double *, double *, double *); + void newtag(tagint, tagint &); }; From 1c11de8a64e42df23defad9041e372c9f8daa847 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 6 May 2024 16:47:38 -0600 Subject: [PATCH 19/20] comment tweak --- src/replicate.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/replicate.cpp b/src/replicate.cpp index e232160842..3b6704f734 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -920,6 +920,8 @@ void Replicate::command(int narg, char **arg) /* ---------------------------------------------------------------------- simple replication algorithm, suitable for small proc count + loop over procs, then over replication factors + check each atom to see if in my subdomain ------------------------------------------------------------------------- */ void Replicate::replicate_by_proc(int nx, int ny, int nz, From 3028b6f34c9db9e0345cc62237da01bec7f856e7 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 6 May 2024 19:16:06 -0600 Subject: [PATCH 20/20] clean up of docs and code --- doc/src/replicate.rst | 20 +- examples/replicate/README | 9 + src/replicate.cpp | 621 +++++--------------------------------- src/replicate.h | 4 +- 4 files changed, 96 insertions(+), 558 deletions(-) diff --git a/doc/src/replicate.rst b/doc/src/replicate.rst index 64d87e525a..eb62fbfa21 100644 --- a/doc/src/replicate.rst +++ b/doc/src/replicate.rst @@ -8,7 +8,7 @@ Syntax .. code-block:: LAMMPS - replicate nx ny nz *keyword* ... + replicate nx ny nz keyword ... nx,ny,nz = replication factors in each dimension @@ -17,8 +17,8 @@ nx,ny,nz = replication factors in each dimension .. parsed-literal:: - *bbox* = only check atoms in replicas that overlap with a processor's subdomain - *bond/periodic* = use a different algorithm that correctly replicates periodic bond loops + *bbox* = use a bounding-box algorithm which is faster for large proc counts + *bond/periodic* = use an algorithm that correctly replicates periodic bond loops Examples """""""" @@ -56,7 +56,7 @@ are created between pairs of new atoms as well as between old and new atoms. .. note:: - + The bond discussion which follows only refers to models with permanent covalent bonds typically defined in LAMMPS via a data file. It is not relevant to sytems modeled with many-body @@ -83,7 +83,7 @@ atoms and uses a different algorithm to find new (nearby) bond neighbors in the replicated system. In the final replicated system all image flags are zero (in each dimension). --- note: +.. note:: LAMMPS does not check for image flag consistency before performing the replication (it does issue a warning about this before a @@ -92,13 +92,13 @@ all image flags are zero (in each dimension). will otherwise be correctly replicated. This is NOT the case if there is a periodic bond loop. See the next note. --- note: +.. note:: LAMMPS does not check for periodic bond loops. If you use the - *bond/periodic* option for a system without periodic bond loops, + *bond/periodic* keyword for a system without periodic bond loops, the system will be correctly replicated, but image flag information will be lost (which may or may not be important to your model). If - you do not use the *bond/periodic* option for a system with + you do not use the *bond/periodic* keyword for a system with periodic bond loops, the replicated system will have invalid bonds (typically very long), resulting in bad dynamics. @@ -112,7 +112,7 @@ requires a temporary use of more memory. Each processor must be able to store all atoms (and their per-atom data) in the original system, before it is replicated. --- note: +.. note:: The algorithm used by the *bond/periodic* keyword builds on the algorithm used by the *bbox* keyword and thus has the same memory @@ -121,7 +121,7 @@ before it is replicated. ---------- - Restrictions +Restrictions """""""""""" A 2d simulation cannot be replicated in the z dimension. diff --git a/examples/replicate/README b/examples/replicate/README index 1363158b37..e33739672c 100644 --- a/examples/replicate/README +++ b/examples/replicate/README @@ -7,6 +7,8 @@ cross the periodic boundary to close the loop. To run these scripts, LAMMPS should be built with the MOLECULE and CLASS2 packages. The latter is only needed for the CNT example. +-------- + These scripts are tiny examples which illustrate both kinds of systems. Each produces a series of images which can be visualized. If the 3 lines for a dump movie command are uncommented, a MPG movie @@ -17,6 +19,13 @@ in.replcate.bond.x.y # 2d grid of bonded atoms, bond loops in x and y in.replicate.bond.xy # linear chains in diagonal direction, bond loop in x and y in.replicate.bond.noloop # linear chains in x direction, no bond loop +If you do not use the bond/periodic keyword with the replicate command +in the first 3 of these scripts (which have periodic bond loops), and +visualize the dynamics of hee simulation, you will see how the +replication creates a bogus system. + +-------- + This script is for a complex system of 3 orthogonal CNTs which has periodic bond loops in all 3 dimensions xyz. diff --git a/src/replicate.cpp b/src/replicate.cpp index 3b6704f734..e07c7d9a26 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -13,7 +13,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing authors: + Contributing authors: Chris Knight (ANL) for bbox option Jake Gissinger (Stevens Institute of Technology) for bond/periodic option ------------------------------------------------------------------------- */ @@ -77,7 +77,7 @@ void Replicate::command(int narg, char **arg) nx, ny, nz, nrep); // optional keywords - + bbox_flag = 0; bond_flag = 0; @@ -134,9 +134,9 @@ void Replicate::command(int narg, char **arg) MPI_Allreduce(&maxmol,&maxmol_all,1,MPI_LMP_TAGINT,MPI_MAX,world); maxmol = maxmol_all; } - + // reset image flags to zero for bond/periodic option - + if (bond_flag) for (i=0; inlocal; ++i) atom->image[i] = ((imageint) IMGMAX << IMG2BITS) | @@ -178,7 +178,7 @@ void Replicate::command(int narg, char **arg) for (i = 0; i < atom->nlocal; i++) domain->unmap(atom->x[i],atom->image[i]); - + // communication buffer for all my atom's info // max_size = largest buffer needed by any proc // must do before new Atom class created, since size_restart() uses atom->nlocal @@ -378,485 +378,14 @@ void Replicate::command(int narg, char **arg) } } - // use + // use one of two algorithms for replication if (!bbox_flag) { replicate_by_proc(nx,ny,nz,sublo,subhi,buf); } else { replicate_by_bbox(nx,ny,nz,sublo,subhi,buf); } - - - - - - - - - /* - AtomVec *old_avec = old->avec; - AtomVec *avec = atom->avec; - - int ix,iy,iz; - tagint atom_offset,mol_offset,atom0tag; - imageint image; - double x[3],lamda[3]; - double *coord; - int tag_enable = atom->tag_enable; - - if (bbox_flag || bond_flag) { - - // allgather size of buf on each proc - - n = 0; - for (i = 0; i < old->nlocal; i++) n += old_avec->pack_restart(i,&buf[n]); - - int * size_buf_rnk; - memory->create(size_buf_rnk, nprocs, "replicate:size_buf_rnk"); - - MPI_Allgather(&n, 1, MPI_INT, size_buf_rnk, 1, MPI_INT, world); - - // size of buf_all - - int size_buf_all = 0; - MPI_Allreduce(&n, &size_buf_all, 1, MPI_INT, MPI_SUM, world); - - if (me == 0) { - auto mesg = fmt::format(" bounding box image = ({} {} {}) " - "to ({} {} {})\n", - _imagelo[0],_imagelo[1],_imagelo[2], - _imagehi[0],_imagehi[1],_imagehi[2]); - mesg += fmt::format(" bounding box extra memory = {:.2f} MB\n", - (double)size_buf_all*sizeof(double)/1024/1024); - utils::logmesg(lmp,mesg); - } - - // rnk offsets - - int *disp_buf_rnk; - memory->create(disp_buf_rnk, nprocs, "replicate:disp_buf_rnk"); - disp_buf_rnk[0] = 0; - for (i = 1; i < nprocs; i++) - disp_buf_rnk[i] = disp_buf_rnk[i-1] + size_buf_rnk[i-1]; - - // allgather buf_all - - double * buf_all; - memory->create(buf_all, size_buf_all, "replicate:buf_all"); - - MPI_Allgatherv(buf,n,MPI_DOUBLE,buf_all,size_buf_rnk,disp_buf_rnk, - MPI_DOUBLE,world); - - // bounding box of original unwrapped system - - double _orig_lo[3], _orig_hi[3]; - if (triclinic) { - _orig_lo[0] = domain->boxlo[0] + - _imagelo[0] * old_xprd + _imagelo[1] * old_xy + _imagelo[2] * old_xz; - _orig_lo[1] = domain->boxlo[1] + - _imagelo[1] * old_yprd + _imagelo[2] * old_yz; - _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd; - - _orig_hi[0] = domain->boxlo[0] + - (_imagehi[0]+1) * old_xprd + - (_imagehi[1]+1) * old_xy + (_imagehi[2]+1) * old_xz; - _orig_hi[1] = domain->boxlo[1] + - (_imagehi[1]+1) * old_yprd + (_imagehi[2]+1) * old_yz; - _orig_hi[2] = domain->boxlo[2] + (_imagehi[2]+1) * old_zprd; - } else { - _orig_lo[0] = domain->boxlo[0] + _imagelo[0] * old_xprd; - _orig_lo[1] = domain->boxlo[1] + _imagelo[1] * old_yprd; - _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd; - - _orig_hi[0] = domain->boxlo[0] + (_imagehi[0]+1) * old_xprd; - _orig_hi[1] = domain->boxlo[1] + (_imagehi[1]+1) * old_yprd; - _orig_hi[2] = domain->boxlo[2] + (_imagehi[2]+1) * old_zprd; - } - - double _lo[3], _hi[3]; - - int num_replicas_added = 0; - - // store x and tag for the whole system (before replication) - - if (bond_flag) { - memory->create(old_x,old->natoms,3,"replicate:old_x"); - memory->create(old_tag,old->natoms,"replicate:old_tag"); - - i = m = 0; - while (m < size_buf_all) { - old_x[i][0] = buf_all[m+1]; - old_x[i][1] = buf_all[m+2]; - old_x[i][2] = buf_all[m+3]; - old_tag[i] = (tagint) ubuf(buf_all[m+4]).i; - old_map.insert({old_tag[i],i}); - m += static_cast (buf_all[m]); - i++; - } - } - - for (ix = 0; ix < nx; ix++) { - for (iy = 0; iy < ny; iy++) { - for (iz = 0; iz < nz; iz++) { - - thisrep[0] = ix; - thisrep[1] = iy; - thisrep[2] = iz; - - // domain->remap() overwrites coordinates, so always recompute here - - if (triclinic) { - _lo[0] = _orig_lo[0] + ix * old_xprd + iy * old_xy + iz * old_xz; - _hi[0] = _orig_hi[0] + ix * old_xprd + iy * old_xy + iz * old_xz; - - _lo[1] = _orig_lo[1] + iy * old_yprd + iz * old_yz; - _hi[1] = _orig_hi[1] + iy * old_yprd + iz * old_yz; - - _lo[2] = _orig_lo[2] + iz * old_zprd; - _hi[2] = _orig_hi[2] + iz * old_zprd; - } else { - _lo[0] = _orig_lo[0] + ix * old_xprd; - _hi[0] = _orig_hi[0] + ix * old_xprd; - - _lo[1] = _orig_lo[1] + iy * old_yprd; - _hi[1] = _orig_hi[1] + iy * old_yprd; - - _lo[2] = _orig_lo[2] + iz * old_zprd; - _hi[2] = _orig_hi[2] + iz * old_zprd; - } - - // test if bounding box of shifted replica overlaps sub-domain of proc - // if not, then skip testing atoms - - int xoverlap = 1; - int yoverlap = 1; - int zoverlap = 1; - if (triclinic) { - double _llo[3]; - domain->x2lamda(_lo,_llo); - double _lhi[3]; - domain->x2lamda(_hi,_lhi); - - if (_llo[0] > (subhi[0] - EPSILON) - || _lhi[0] < (sublo[0] + EPSILON) ) xoverlap = 0; - if (_llo[1] > (subhi[1] - EPSILON) - || _lhi[1] < (sublo[1] + EPSILON) ) yoverlap = 0; - if (_llo[2] > (subhi[2] - EPSILON) - || _lhi[2] < (sublo[2] + EPSILON) ) zoverlap = 0; - } else { - if (_lo[0] > (subhi[0] - EPSILON) - || _hi[0] < (sublo[0] + EPSILON) ) xoverlap = 0; - if (_lo[1] > (subhi[1] - EPSILON) - || _hi[1] < (sublo[1] + EPSILON) ) yoverlap = 0; - if (_lo[2] > (subhi[2] - EPSILON) - || _hi[2] < (sublo[2] + EPSILON) ) zoverlap = 0; - } - - int overlap = 0; - if (xoverlap && yoverlap && zoverlap) overlap = 1; - - // if no overlap, test if bounding box wrapped back into new system - - if (!overlap) { - - // wrap back into cell - - imageint imagelo = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - domain->remap(&(_lo[0]), imagelo); - int xboxlo = (imagelo & IMGMASK) - IMGMAX; - int yboxlo = (imagelo >> IMGBITS & IMGMASK) - IMGMAX; - int zboxlo = (imagelo >> IMG2BITS) - IMGMAX; - - imageint imagehi = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - domain->remap(&(_hi[0]), imagehi); - int xboxhi = (imagehi & IMGMASK) - IMGMAX; - int yboxhi = (imagehi >> IMGBITS & IMGMASK) - IMGMAX; - int zboxhi = (imagehi >> IMG2BITS) - IMGMAX; - - if (triclinic) { - double _llo[3]; - _llo[0] = _lo[0]; _llo[1] = _lo[1]; _llo[2] = _lo[2]; - domain->x2lamda(_llo,_lo); - - double _lhi[3]; - _lhi[0] = _hi[0]; _lhi[1] = _hi[1]; _lhi[2] = _hi[2]; - domain->x2lamda(_lhi,_hi); - } - - // test all fragments for any overlap; ok to include false positives - - int _xoverlap1 = 0; - int _xoverlap2 = 0; - if (!xoverlap) { - if (xboxlo < 0) { - _xoverlap1 = 1; - if (_lo[0] > (subhi[0] - EPSILON)) _xoverlap1 = 0; - } - - if (xboxhi > 0) { - _xoverlap2 = 1; - if (_hi[0] < (sublo[0] + EPSILON)) _xoverlap2 = 0; - } - - if (_xoverlap1 || _xoverlap2) xoverlap = 1; - } - - int _yoverlap1 = 0; - int _yoverlap2 = 0; - if (!yoverlap) { - if (yboxlo < 0) { - _yoverlap1 = 1; - if (_lo[1] > (subhi[1] - EPSILON)) _yoverlap1 = 0; - } - - if (yboxhi > 0) { - _yoverlap2 = 1; - if (_hi[1] < (sublo[1] + EPSILON)) _yoverlap2 = 0; - } - - if (_yoverlap1 || _yoverlap2) yoverlap = 1; - } - - - int _zoverlap1 = 0; - int _zoverlap2 = 0; - if (!zoverlap) { - if (zboxlo < 0) { - _zoverlap1 = 1; - if (_lo[2] > (subhi[2] - EPSILON)) _zoverlap1 = 0; - } - - if (zboxhi > 0) { - _zoverlap2 = 1; - if (_hi[2] < (sublo[2] + EPSILON)) _zoverlap2 = 0; - } - - if (_zoverlap1 || _zoverlap2) zoverlap = 1; - } - - // does either fragment overlap w/ sub-domain - - if (xoverlap && yoverlap && zoverlap) overlap = 1; - } - - // while loop over one proc's atom list - - if (overlap) { - num_replicas_added++; - - m = 0; - while (m < size_buf_all) { - image = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - if (triclinic == 0) { - x[0] = buf_all[m+1] + ix*old_xprd; - x[1] = buf_all[m+2] + iy*old_yprd; - x[2] = buf_all[m+3] + iz*old_zprd; - } else { - x[0] = buf_all[m+1] + ix*old_xprd + iy*old_xy + iz*old_xz; - x[1] = buf_all[m+2] + iy*old_yprd + iz*old_yz; - x[2] = buf_all[m+3] + iz*old_zprd; - } - domain->remap(x,image); - if (triclinic) { - domain->x2lamda(x,lamda); - coord = lamda; - } else coord = x; - - if (coord[0] >= sublo[0] && coord[0] < subhi[0] && - coord[1] >= sublo[1] && coord[1] < subhi[1] && - coord[2] >= sublo[2] && coord[2] < subhi[2]) { - - m += avec->unpack_restart(&buf_all[m]); - - i = atom->nlocal - 1; - if (tag_enable) - atom_offset = iz*ny*nx*maxtag + iy*nx*maxtag + ix*maxtag; - else atom_offset = 0; - mol_offset = iz*ny*nx*maxmol + iy*nx*maxmol + ix*maxmol; - - atom->x[i][0] = x[0]; - atom->x[i][1] = x[1]; - atom->x[i][2] = x[2]; - - atom0tag = atom->tag[i]; - atom->tag[i] += atom_offset; - atom->image[i] = image; - - if (atom->molecular != Atom::ATOMIC) { - if (atom->molecule[i] > 0) - atom->molecule[i] += mol_offset; - if (atom->molecular == Atom::MOLECULAR) { - if (atom->avec->bonds_allow) - for (j = 0; j < atom->num_bond[i]; j++) { - if (bond_flag) - newtag(atom0tag,atom->bond_atom[i][j]); - else atom->bond_atom[i][j] += atom_offset; - } - if (atom->avec->angles_allow) - for (j = 0; j < atom->num_angle[i]; j++) { - if (bond_flag) { - newtag(atom0tag,atom->angle_atom1[i][j]); - newtag(atom0tag,atom->angle_atom2[i][j]); - newtag(atom0tag,atom->angle_atom3[i][j]); - } else { - atom->angle_atom1[i][j] += atom_offset; - atom->angle_atom2[i][j] += atom_offset; - atom->angle_atom3[i][j] += atom_offset; - } - } - if (atom->avec->dihedrals_allow) - for (j = 0; j < atom->num_dihedral[i]; j++) { - if (bond_flag) { - newtag(atom0tag,atom->dihedral_atom1[i][j]); - newtag(atom0tag,atom->dihedral_atom2[i][j]); - newtag(atom0tag,atom->dihedral_atom3[i][j]); - newtag(atom0tag,atom->dihedral_atom4[i][j]); - } else { - atom->dihedral_atom1[i][j] += atom_offset; - atom->dihedral_atom2[i][j] += atom_offset; - atom->dihedral_atom3[i][j] += atom_offset; - atom->dihedral_atom4[i][j] += atom_offset; - } - } - if (atom->avec->impropers_allow) - for (j = 0; j < atom->num_improper[i]; j++) { - if (bond_flag) { - newtag(atom0tag,atom->improper_atom1[i][j]); - newtag(atom0tag,atom->improper_atom2[i][j]); - newtag(atom0tag,atom->improper_atom3[i][j]); - newtag(atom0tag,atom->improper_atom4[i][j]); - } else { - atom->improper_atom1[i][j] += atom_offset; - atom->improper_atom2[i][j] += atom_offset; - atom->improper_atom3[i][j] += atom_offset; - atom->improper_atom4[i][j] += atom_offset; - } - } - } - } - } else m += static_cast (buf_all[m]); - } - } // if (overlap) - - } - } - } - - memory->destroy(size_buf_rnk); - memory->destroy(disp_buf_rnk); - memory->destroy(buf_all); - if (bond_flag) { - memory->destroy(old_x); - memory->destroy(old_tag); - } - - int sum = 0; - MPI_Reduce(&num_replicas_added, &sum, 1, MPI_INT, MPI_SUM, 0, world); - double avg = (double) sum / nprocs; - if (me == 0) - utils::logmesg(lmp," average # of replicas added to proc = {:.2f} out " - "of {} ({:.2f}%)\n",avg,nx*ny*nz,avg/(nx*ny*nz)*100.0); - } else { - - for (int iproc = 0; iproc < nprocs; iproc++) { - if (me == iproc) { - n = 0; - for (i = 0; i < old->nlocal; i++) n += old_avec->pack_restart(i,&buf[n]); - } - MPI_Bcast(&n,1,MPI_INT,iproc,world); - MPI_Bcast(buf,n,MPI_DOUBLE,iproc,world); - - for (ix = 0; ix < nx; ix++) { - for (iy = 0; iy < ny; iy++) { - for (iz = 0; iz < nz; iz++) { - - // while loop over one proc's atom list - - m = 0; - while (m < n) { - image = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - if (triclinic == 0) { - x[0] = buf[m+1] + ix*old_xprd; - x[1] = buf[m+2] + iy*old_yprd; - x[2] = buf[m+3] + iz*old_zprd; - } else { - x[0] = buf[m+1] + ix*old_xprd + iy*old_xy + iz*old_xz; - x[1] = buf[m+2] + iy*old_yprd + iz*old_yz; - x[2] = buf[m+3] + iz*old_zprd; - } - domain->remap(x,image); - if (triclinic) { - domain->x2lamda(x,lamda); - coord = lamda; - } else coord = x; - - if (coord[0] >= sublo[0] && coord[0] < subhi[0] && - coord[1] >= sublo[1] && coord[1] < subhi[1] && - coord[2] >= sublo[2] && coord[2] < subhi[2]) { - - m += avec->unpack_restart(&buf[m]); - - i = atom->nlocal - 1; - if (tag_enable) - atom_offset = iz*ny*nx*maxtag + iy*nx*maxtag + ix*maxtag; - else atom_offset = 0; - mol_offset = iz*ny*nx*maxmol + iy*nx*maxmol + ix*maxmol; - - atom->x[i][0] = x[0]; - atom->x[i][1] = x[1]; - atom->x[i][2] = x[2]; - - atom->tag[i] += atom_offset; - atom->image[i] = image; - - if (atom->molecular != Atom::ATOMIC) { - if (atom->molecule[i] > 0) - atom->molecule[i] += mol_offset; - if (atom->molecular == Atom::MOLECULAR) { - if (atom->avec->bonds_allow) - for (j = 0; j < atom->num_bond[i]; j++) - atom->bond_atom[i][j] += atom_offset; - if (atom->avec->angles_allow) - for (j = 0; j < atom->num_angle[i]; j++) { - atom->angle_atom1[i][j] += atom_offset; - atom->angle_atom2[i][j] += atom_offset; - atom->angle_atom3[i][j] += atom_offset; - } - if (atom->avec->dihedrals_allow) - for (j = 0; j < atom->num_dihedral[i]; j++) { - atom->dihedral_atom1[i][j] += atom_offset; - atom->dihedral_atom2[i][j] += atom_offset; - atom->dihedral_atom3[i][j] += atom_offset; - atom->dihedral_atom4[i][j] += atom_offset; - } - if (atom->avec->impropers_allow) - for (j = 0; j < atom->num_improper[i]; j++) { - atom->improper_atom1[i][j] += atom_offset; - atom->improper_atom2[i][j] += atom_offset; - atom->improper_atom3[i][j] += atom_offset; - atom->improper_atom4[i][j] += atom_offset; - } - } - } - } else m += static_cast (buf[m]); - } - } - } - } - } - } // if (bbox_flag || bond_flag) - - */ - - - - - // free communication buffer and old atom class memory->destroy(buf); @@ -955,16 +484,16 @@ void Replicate::replicate_by_proc(int nx, int ny, int nz, } MPI_Bcast(&n,1,MPI_INT,iproc,world); MPI_Bcast(buf,n,MPI_DOUBLE,iproc,world); - + for (ix = 0; ix < nx; ix++) { for (iy = 0; iy < ny; iy++) { for (iz = 0; iz < nz; iz++) { - + // while loop over one proc's atom list // x = new replicated position, remapped into new simulation box // if atom is within my new subdomain, unpack it into new atom class // adjust tag, mol #, coord, topology info as needed - + m = 0; while (m < n) { image = ((imageint) IMGMAX << IMG2BITS) | @@ -983,25 +512,25 @@ void Replicate::replicate_by_proc(int nx, int ny, int nz, domain->x2lamda(x,lamda); coord = lamda; } else coord = x; - + if (coord[0] >= sublo[0] && coord[0] < subhi[0] && coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - + m += avec->unpack_restart(&buf[m]); - + i = atom->nlocal - 1; if (tag_enable) atom_offset = iz*ny*nx*maxtag + iy*nx*maxtag + ix*maxtag; else atom_offset = 0; mol_offset = iz*ny*nx*maxmol + iy*nx*maxmol + ix*maxmol; - + atom->x[i][0] = x[0]; atom->x[i][1] = x[1]; atom->x[i][2] = x[2]; - + atom->tag[i] += atom_offset; atom->image[i] = image; - + if (atom->molecular != Atom::ATOMIC) { if (atom->molecule[i] > 0) atom->molecule[i] += mol_offset; @@ -1072,14 +601,14 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, int * size_buf_rnk; memory->create(size_buf_rnk, nprocs, "replicate:size_buf_rnk"); - + MPI_Allgather(&n, 1, MPI_INT, size_buf_rnk, 1, MPI_INT, world); // size of buf_all - + int size_buf_all = 0; MPI_Allreduce(&n, &size_buf_all, 1, MPI_INT, MPI_SUM, world); - + if (me == 0) { auto mesg = fmt::format(" bounding box image = ({} {} {}) " "to ({} {} {})\n", @@ -1089,25 +618,25 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, (double)size_buf_all*sizeof(double)/1024/1024); utils::logmesg(lmp,mesg); } - + // rnk offsets - + int *disp_buf_rnk; memory->create(disp_buf_rnk, nprocs, "replicate:disp_buf_rnk"); disp_buf_rnk[0] = 0; for (i = 1; i < nprocs; i++) disp_buf_rnk[i] = disp_buf_rnk[i-1] + size_buf_rnk[i-1]; - + // allgather buf_all - + double *buf_all; memory->create(buf_all, size_buf_all, "replicate:buf_all"); - + MPI_Allgatherv(buf,n,MPI_DOUBLE,buf_all,size_buf_rnk,disp_buf_rnk, MPI_DOUBLE,world); - + // bounding box of original unwrapped system - + double _orig_lo[3], _orig_hi[3]; if (triclinic) { _orig_lo[0] = domain->boxlo[0] + @@ -1115,7 +644,7 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, _orig_lo[1] = domain->boxlo[1] + _imagelo[1] * old_yprd + _imagelo[2] * old_yz; _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd; - + _orig_hi[0] = domain->boxlo[0] + (_imagehi[0]+1) * old_xprd + (_imagehi[1]+1) * old_xy + (_imagehi[2]+1) * old_xz; @@ -1126,23 +655,23 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, _orig_lo[0] = domain->boxlo[0] + _imagelo[0] * old_xprd; _orig_lo[1] = domain->boxlo[1] + _imagelo[1] * old_yprd; _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd; - + _orig_hi[0] = domain->boxlo[0] + (_imagehi[0]+1) * old_xprd; _orig_hi[1] = domain->boxlo[1] + (_imagehi[1]+1) * old_yprd; _orig_hi[2] = domain->boxlo[2] + (_imagehi[2]+1) * old_zprd; } - + double _lo[3], _hi[3]; - + int num_replicas_added = 0; - + // if bond/periodic option // store old_x and old_tag for the entire original system - + if (bond_flag) { memory->create(old_x,old->natoms,3,"replicate:old_x"); memory->create(old_tag,old->natoms,"replicate:old_tag"); - + i = m = 0; while (m < size_buf_all) { old_x[i][0] = buf_all[m+1]; @@ -1156,40 +685,40 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, } // replication loop - + for (ix = 0; ix < nx; ix++) { for (iy = 0; iy < ny; iy++) { for (iz = 0; iz < nz; iz++) { - + thisrep[0] = ix; thisrep[1] = iy; thisrep[2] = iz; - + // domain->remap() overwrites coordinates, so always recompute here - + if (triclinic) { _lo[0] = _orig_lo[0] + ix * old_xprd + iy * old_xy + iz * old_xz; _hi[0] = _orig_hi[0] + ix * old_xprd + iy * old_xy + iz * old_xz; - + _lo[1] = _orig_lo[1] + iy * old_yprd + iz * old_yz; _hi[1] = _orig_hi[1] + iy * old_yprd + iz * old_yz; - + _lo[2] = _orig_lo[2] + iz * old_zprd; _hi[2] = _orig_hi[2] + iz * old_zprd; } else { _lo[0] = _orig_lo[0] + ix * old_xprd; _hi[0] = _orig_hi[0] + ix * old_xprd; - + _lo[1] = _orig_lo[1] + iy * old_yprd; _hi[1] = _orig_hi[1] + iy * old_yprd; - + _lo[2] = _orig_lo[2] + iz * old_zprd; _hi[2] = _orig_hi[2] + iz * old_zprd; } - + // test if bounding box of shifted replica overlaps sub-domain of proc // if not, then can skip testing of any individual atoms - + int xoverlap = 1; int yoverlap = 1; int zoverlap = 1; @@ -1198,7 +727,7 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, domain->x2lamda(_lo,_llo); double _lhi[3]; domain->x2lamda(_hi,_lhi); - + if (_llo[0] > (subhi[0] - EPSILON) || _lhi[0] < (sublo[0] + EPSILON) ) xoverlap = 0; if (_llo[1] > (subhi[1] - EPSILON) @@ -1213,42 +742,42 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, if (_lo[2] > (subhi[2] - EPSILON) || _hi[2] < (sublo[2] + EPSILON) ) zoverlap = 0; } - + int overlap = 0; if (xoverlap && yoverlap && zoverlap) overlap = 1; - + // if no overlap, test if bounding box wrapped back into new system - + if (!overlap) { - + // wrap back into cell - + imageint imagelo = ((imageint) IMGMAX << IMG2BITS) | ((imageint) IMGMAX << IMGBITS) | IMGMAX; domain->remap(&(_lo[0]), imagelo); int xboxlo = (imagelo & IMGMASK) - IMGMAX; int yboxlo = (imagelo >> IMGBITS & IMGMASK) - IMGMAX; int zboxlo = (imagelo >> IMG2BITS) - IMGMAX; - + imageint imagehi = ((imageint) IMGMAX << IMG2BITS) | ((imageint) IMGMAX << IMGBITS) | IMGMAX; domain->remap(&(_hi[0]), imagehi); int xboxhi = (imagehi & IMGMASK) - IMGMAX; int yboxhi = (imagehi >> IMGBITS & IMGMASK) - IMGMAX; int zboxhi = (imagehi >> IMG2BITS) - IMGMAX; - + if (triclinic) { double _llo[3]; _llo[0] = _lo[0]; _llo[1] = _lo[1]; _llo[2] = _lo[2]; domain->x2lamda(_llo,_lo); - + double _lhi[3]; _lhi[0] = _hi[0]; _lhi[1] = _hi[1]; _lhi[2] = _hi[2]; domain->x2lamda(_lhi,_hi); } - + // test all fragments for any overlap; ok to include false positives - + int _xoverlap1 = 0; int _xoverlap2 = 0; if (!xoverlap) { @@ -1256,15 +785,15 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, _xoverlap1 = 1; if (_lo[0] > (subhi[0] - EPSILON)) _xoverlap1 = 0; } - + if (xboxhi > 0) { _xoverlap2 = 1; if (_hi[0] < (sublo[0] + EPSILON)) _xoverlap2 = 0; } - + if (_xoverlap1 || _xoverlap2) xoverlap = 1; } - + int _yoverlap1 = 0; int _yoverlap2 = 0; if (!yoverlap) { @@ -1272,16 +801,16 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, _yoverlap1 = 1; if (_lo[1] > (subhi[1] - EPSILON)) _yoverlap1 = 0; } - + if (yboxhi > 0) { _yoverlap2 = 1; if (_hi[1] < (sublo[1] + EPSILON)) _yoverlap2 = 0; } - + if (_yoverlap1 || _yoverlap2) yoverlap = 1; } - - + + int _zoverlap1 = 0; int _zoverlap2 = 0; if (!zoverlap) { @@ -1289,25 +818,25 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, _zoverlap1 = 1; if (_lo[2] > (subhi[2] - EPSILON)) _zoverlap1 = 0; } - + if (zboxhi > 0) { _zoverlap2 = 1; if (_hi[2] < (sublo[2] + EPSILON)) _zoverlap2 = 0; } - + if (_zoverlap1 || _zoverlap2) zoverlap = 1; } - + // does either fragment overlap w/ sub-domain - + if (xoverlap && yoverlap && zoverlap) overlap = 1; } - + // while loop over one proc's atom list - + if (overlap) { num_replicas_added++; - + m = 0; while (m < size_buf_all) { image = ((imageint) IMGMAX << IMG2BITS) | @@ -1326,27 +855,27 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, domain->x2lamda(x,lamda); coord = lamda; } else coord = x; - + if (coord[0] >= sublo[0] && coord[0] < subhi[0] && coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { - + m += avec->unpack_restart(&buf_all[m]); - + i = atom->nlocal - 1; if (tag_enable) atom_offset = iz*ny*nx*maxtag + iy*nx*maxtag + ix*maxtag; else atom_offset = 0; mol_offset = iz*ny*nx*maxmol + iy*nx*maxmol + ix*maxmol; - + atom->x[i][0] = x[0]; atom->x[i][1] = x[1]; atom->x[i][2] = x[2]; - + atom0tag = atom->tag[i]; atom->tag[i] += atom_offset; atom->image[i] = image; - + if (atom->molecular != Atom::ATOMIC) { if (atom->molecule[i] > 0) atom->molecule[i] += mol_offset; @@ -1405,7 +934,7 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, } } } - + memory->destroy(size_buf_rnk); memory->destroy(disp_buf_rnk); memory->destroy(buf_all); @@ -1413,7 +942,7 @@ void Replicate::replicate_by_bbox(int nx, int ny, int nz, memory->destroy(old_x); memory->destroy(old_tag); } - + int sum = 0; MPI_Reduce(&num_replicas_added, &sum, 1, MPI_INT, MPI_SUM, 0, world); double avg = (double) sum / nprocs; diff --git a/src/replicate.h b/src/replicate.h index 3877d2d720..defb35d1c6 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -33,7 +33,7 @@ class Replicate : public Command { private: int bbox_flag, bond_flag; - + class Atom *old; double old_xprd, old_yprd, old_zprd; @@ -51,7 +51,7 @@ private: void replicate_by_proc(int, int, int, double *, double *, double *); void replicate_by_bbox(int, int, int, double *, double *, double *); - + void newtag(tagint, tagint &); };