From 3ffa5908ca8fd1fcb8369c7f66bbc78027f23c06 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 27 Feb 2024 10:16:34 -0500 Subject: [PATCH 01/16] add get_bitmask_by_id() accessor to Group class --- src/group.cpp | 15 +++++++++++++++ src/group.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/src/group.cpp b/src/group.cpp index a586c33ed9..b438e8fede 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -623,6 +623,21 @@ int Group::find_unused() return -1; } +/* ---------------------------------------------------------------------- + return group bitmask for given group id. Error out if group is not found. +------------------------------------------------------------------------- */ + +int Group::get_bitmask_by_id(const std::string &file, int line, const std::string &name, + const std::string &caller) +{ + int igroup = 0; + while (igroup < MAX_GROUP) + if (names[igroup] && (name == names[igroup])) break; + if (igroup == MAX_GROUP) + error->all(file, line, "Group ID {} requested by {} does not exist", name, caller); + return bitmask[igroup]; +} + /* ---------------------------------------------------------------------- add atoms to group that are in same molecules as atoms already in group do not include molID = 0 diff --git a/src/group.h b/src/group.h index 0820c7d4b2..728b0a1d02 100644 --- a/src/group.h +++ b/src/group.h @@ -31,11 +31,13 @@ class Group : protected Pointers { Group(class LAMMPS *); ~Group() override; + void assign(int, char **); // assign atoms to a group void assign(const std::string &); // convenience function void create(const std::string &, int *); // add flagged atoms to a group int find(const std::string &); // lookup name in list of groups int find_or_create(const char *); // lookup name or create new group + int get_bitmask_by_id(const std::string &, int, const std::string &, const std::string &); void write_restart(FILE *); void read_restart(FILE *); From 279b218af188793b7662df764f12c12a6a303be0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 1 Jun 2024 16:45:39 -0400 Subject: [PATCH 02/16] fix logic bug --- src/group.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/group.cpp b/src/group.cpp index b438e8fede..55f6ae2969 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -631,8 +631,9 @@ int Group::get_bitmask_by_id(const std::string &file, int line, const std::strin const std::string &caller) { int igroup = 0; - while (igroup < MAX_GROUP) + for (; igroup < MAX_GROUP; ++igroup) { if (names[igroup] && (name == names[igroup])) break; + } if (igroup == MAX_GROUP) error->all(file, line, "Group ID {} requested by {} does not exist", name, caller); return bitmask[igroup]; From 5f2c81804d8e136eb98c369a1d8b46da442d648f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 1 Jun 2024 16:45:53 -0400 Subject: [PATCH 03/16] add unit test for bitmap accessor --- unittest/commands/test_groups.cpp | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/unittest/commands/test_groups.cpp b/unittest/commands/test_groups.cpp index 7f0a054c40..94b828df60 100644 --- a/unittest/commands/test_groups.cpp +++ b/unittest/commands/test_groups.cpp @@ -255,6 +255,41 @@ TEST_F(GroupTest, Molecular) command("group three include xxx");); } +TEST_F(GroupTest, Bitmap) +{ + atomic_system(); + + BEGIN_HIDE_OUTPUT(); + command("group one region left"); + command("group two region right"); + command("group three empty"); + command("group four region left"); + command("group four region right"); + command("group six subtract four one"); + END_HIDE_OUTPUT(); + + int bm_one = group->get_bitmask_by_id(FLERR, "one", "unittest 1"); + int bm_two = group->get_bitmask_by_id(FLERR, "two", "unittest 2"); + int bm_three = group->get_bitmask_by_id(FLERR, "three", "unittest 3"); + int bm_four = group->get_bitmask_by_id(FLERR, "four", "unittest 4"); + int bm_six = group->get_bitmask_by_id(FLERR, "six", "unittest 6"); + int nlocal = lmp->atom->natoms; + auto mask = lmp->atom->mask; + + for (int i = 0; i < nlocal; ++i) { + if ((mask[i] & bm_one) && (mask[i] & bm_two)) { + EXPECT_NE((mask[i] & bm_four), 0); + } + if (mask[i] & bm_two) { + EXPECT_NE((mask[i] & bm_six), 0); + } + EXPECT_EQ((mask[i] & bm_three), 0); + } + + TEST_FAILURE(".*ERROR: Group ID five requested by unittest 5 does not exist.*", + group->get_bitmask_by_id(FLERR, "five", "unittest 5");); +} + TEST_F(GroupTest, Dynamic) { atomic_system(); From a0939c4fcc82bf908f18f4e99a34118ad06f110e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 1 Jun 2024 17:57:31 -0400 Subject: [PATCH 04/16] use new bitmap accessor function and simplify code --- src/atom.cpp | 2 +- src/change_box.cpp | 4 +--- src/compute.cpp | 6 +++--- src/compute_coord_atom.cpp | 8 +++----- src/compute_coord_atom.h | 2 +- src/compute_group_group.cpp | 8 ++------ src/compute_group_group.h | 2 +- src/create_bonds.cpp | 8 ++------ src/create_bonds.h | 2 +- src/delete_atoms.cpp | 25 ++++++------------------- src/delete_bonds.cpp | 6 ++---- 11 files changed, 23 insertions(+), 50 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index 866a52e25a..865f9f4e3b 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -2284,7 +2284,7 @@ void Atom::first_reorder() // nfirst = index of first atom not in firstgroup // when find firstgroup atom out of place, swap it with atom nfirst - int bitmask = group->bitmask[firstgroup]; + const int bitmask = group->get_bitmask_by_id(FLERR, firstgroupname, "Atom::first_reorder"); nfirst = 0; while (nfirst < nlocal && mask[nfirst] & bitmask) nfirst++; diff --git a/src/change_box.cpp b/src/change_box.cpp index eb7ce7f136..ce122bc75b 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -52,9 +52,7 @@ void ChangeBox::command(int narg, char **arg) // group - int igroup = group->find(arg[0]); - if (igroup == -1) error->all(FLERR,"Could not find change_box group ID {}", arg[0]); - int groupbit = group->bitmask[igroup]; + int groupbit = group->get_bitmask_by_id(FLERR, arg[0], "change_box"); // parse operation arguments // allocate ops to max possible length diff --git a/src/compute.cpp b/src/compute.cpp index d703cbfe6a..ddacca50e6 100644 --- a/src/compute.cpp +++ b/src/compute.cpp @@ -48,11 +48,11 @@ Compute::Compute(LAMMPS *lmp, int narg, char **arg) : id = utils::strdup(arg[0]); if (!utils::is_id(id)) - error->all(FLERR,"Compute ID must be alphanumeric or underscore characters"); + error->all(FLERR,"Compute ID {} must only have alphanumeric or underscore characters", id); + groupbit = group->get_bitmask_by_id(FLERR, arg[1], fmt::format("compute {}", arg[2])); igroup = group->find(arg[1]); - if (igroup == -1) error->all(FLERR,"Could not find compute group ID"); - groupbit = group->bitmask[igroup]; + if (igroup == -1) error->all(FLERR,"Could not find compute group ID {}", arg[1]); style = utils::strdup(arg[2]); diff --git a/src/compute_coord_atom.cpp b/src/compute_coord_atom.cpp index ea19f01b91..2426767263 100644 --- a/src/compute_coord_atom.cpp +++ b/src/compute_coord_atom.cpp @@ -39,8 +39,7 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) : { if (narg < 5) error->all(FLERR, "Illegal compute coord/atom command"); - jgroup = group->find("all"); - jgroupbit = group->bitmask[jgroup]; + jgroupbit = group->get_bitmask_by_id(FLERR, "all", "compute coord/atom"); cstyle = NONE; if (strcmp(arg[3], "cutoff") == 0) { @@ -50,11 +49,10 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) : int iarg = 5; if ((narg > 6) && (strcmp(arg[5], "group") == 0)) { + delete[] group2; group2 = utils::strdup(arg[6]); iarg += 2; - jgroup = group->find(group2); - if (jgroup == -1) error->all(FLERR, "Compute coord/atom group2 ID does not exist"); - jgroupbit = group->bitmask[jgroup]; + jgroupbit = group->get_bitmask_by_id(FLERR, group2, "compute coord/atom"); } ncol = narg - iarg + 1; diff --git a/src/compute_coord_atom.h b/src/compute_coord_atom.h index 6aed13dd59..89311d71e0 100644 --- a/src/compute_coord_atom.h +++ b/src/compute_coord_atom.h @@ -46,7 +46,7 @@ class ComputeCoordAtom : public Compute { double **carray; char *group2; - int jgroup, jgroupbit; + int jgroupbit; class ComputeOrientOrderAtom *c_orientorder; char *id_orientorder; diff --git a/src/compute_group_group.cpp b/src/compute_group_group.cpp index afc825ac3c..c88b9c7ca5 100644 --- a/src/compute_group_group.cpp +++ b/src/compute_group_group.cpp @@ -54,9 +54,7 @@ ComputeGroupGroup::ComputeGroupGroup(LAMMPS *lmp, int narg, char **arg) : extvector = 1; group2 = utils::strdup(arg[3]); - jgroup = group->find(group2); - if (jgroup == -1) error->all(FLERR, "Compute group/group group ID does not exist"); - jgroupbit = group->bitmask[jgroup]; + jgroupbit = group->get_bitmask_by_id(FLERR, group2, "compute group/group"); pairflag = 1; kspaceflag = 0; @@ -147,9 +145,7 @@ void ComputeGroupGroup::init() // recheck that group 2 has not been deleted - jgroup = group->find(group2); - if (jgroup == -1) error->all(FLERR, "Compute group/group group ID does not exist"); - jgroupbit = group->bitmask[jgroup]; + jgroupbit = group->get_bitmask_by_id(FLERR, group2, "compute group/group"); // need an occasional half neighbor list diff --git a/src/compute_group_group.h b/src/compute_group_group.h index 3e66484368..a7be4890ca 100644 --- a/src/compute_group_group.h +++ b/src/compute_group_group.h @@ -35,7 +35,7 @@ class ComputeGroupGroup : public Compute { private: char *group2; - int jgroup, jgroupbit, othergroupbit; + int jgroupbit; double **cutsq; double e_self, e_correction; int pairflag, kspaceflag, boundaryflag, molflag; diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index 13a99a182f..fe9d98a82d 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -59,12 +59,8 @@ void CreateBonds::command(int narg, char **arg) if (strcmp(arg[0], "many") == 0) { style = MANY; if (narg != 6) error->all(FLERR, "No optional keywords allowed with create_bonds many"); - igroup = group->find(arg[1]); - if (igroup == -1) error->all(FLERR, "Cannot find create_bonds first group ID {}", arg[1]); - group1bit = group->bitmask[igroup]; - igroup = group->find(arg[2]); - if (igroup == -1) error->all(FLERR, "Cannot find create_bonds second group ID {}", arg[2]); - group2bit = group->bitmask[igroup]; + group1bit = group->get_bitmask_by_id(FLERR, arg[1], "create_bonds"); + group2bit = group->get_bitmask_by_id(FLERR, arg[2], "create_bonds"); btype = utils::inumeric(FLERR, arg[3], false, lmp); rmin = utils::numeric(FLERR, arg[4], false, lmp); rmax = utils::numeric(FLERR, arg[5], false, lmp); diff --git a/src/create_bonds.h b/src/create_bonds.h index 03cbea5ccc..bd3d9defba 100644 --- a/src/create_bonds.h +++ b/src/create_bonds.h @@ -30,7 +30,7 @@ class CreateBonds : public Command { void command(int, char **) override; private: - int igroup, group1bit, group2bit; + int group1bit, group2bit; int btype, atype, dtype; tagint batom1, batom2, aatom1, aatom2, aatom3, datom1, datom2, datom3, datom4; double rmin, rmax; diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index 6e14964a35..321a891dfe 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -86,8 +86,8 @@ void DeleteAtoms::command(int narg, char **arg) error->all(FLERR, "Unknown delete_atoms sub-command: {}", arg[0]); if (allflag) { - int igroup = group->find("all"); - if ((igroup >= 0) && modify->check_rigid_group_overlap(group->bitmask[igroup])) + int igroupbit = group->get_bitmask_by_id(FLERR, "all", "delete_atoms"); + if (modify->check_rigid_group_overlap(igroupbit)) error->warning(FLERR, "Attempting to delete atoms in rigid bodies"); } else { if (modify->check_rigid_list_overlap(dlist)) @@ -215,8 +215,7 @@ void DeleteAtoms::delete_group(int narg, char **arg) { if (narg < 2) utils::missing_cmd_args(FLERR, "delete_atoms group", error); - int igroup = group->find(arg[1]); - if (igroup == -1) error->all(FLERR, "Could not find delete_atoms group ID {}", arg[1]); + int groupbit = group->get_bitmask_by_id(FLERR, arg[1], "delete_atoms"); options(narg - 2, &arg[2]); // check for special case of group = all @@ -233,8 +232,6 @@ void DeleteAtoms::delete_group(int narg, char **arg) for (int i = 0; i < nlocal; i++) dlist[i] = 0; int *mask = atom->mask; - int groupbit = group->bitmask[igroup]; - for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) dlist[i] = 1; } @@ -280,18 +277,11 @@ void DeleteAtoms::delete_overlap(int narg, char **arg) const double cut = utils::numeric(FLERR, arg[1], false, lmp); const double cutsq = cut * cut; + const int group1bit = group->get_bitmask_by_id(FLERR, arg[2], "delete_atoms"); + const int group2bit = group->get_bitmask_by_id(FLERR, arg[3], "delete_atoms"); - int igroup1 = group->find(arg[2]); - if (igroup1 < 0) - error->all(FLERR, "Could not find delete_atoms overlap first group ID {}", arg[2]); - int igroup2 = group->find(arg[3]); - if (igroup2 < 0) - error->all(FLERR, "Could not find delete_atoms overlap second group ID {}", arg[3]); options(narg - 4, &arg[4]); - const int group1bit = group->bitmask[igroup1]; - const int group2bit = group->bitmask[igroup2]; - if (comm->me == 0) utils::logmesg(lmp, "System init for delete_atoms ...\n"); // request a full neighbor list for use by this command @@ -453,9 +443,7 @@ void DeleteAtoms::delete_random(int narg, char **arg) error->all(FLERR, "Unknown delete_atoms random style: {}", arg[1]); } - int igroup = group->find(arg[4]); - if (igroup == -1) error->all(FLERR, "Could not find delete_atoms random group ID {}", arg[4]); - + int groupbit = group->get_bitmask_by_id(FLERR, arg[4], "delete_atoms"); auto region = domain->get_region_by_id(arg[5]); if (!region && (strcmp(arg[5], "NULL") != 0)) error->all(FLERR, "Could not find delete_atoms random region ID {}", arg[5]); @@ -476,7 +464,6 @@ void DeleteAtoms::delete_random(int narg, char **arg) double **x = atom->x; int *mask = atom->mask; - int groupbit = group->bitmask[igroup]; if (region) region->prematch(); // delete approximate fraction of atoms in both group and region diff --git a/src/delete_bonds.cpp b/src/delete_bonds.cpp index 1f8fe71bff..bce297d839 100644 --- a/src/delete_bonds.cpp +++ b/src/delete_bonds.cpp @@ -56,11 +56,9 @@ void DeleteBonds::command(int narg, char **arg) if (comm->me == 0) utils::logmesg(lmp,"Deleting bonds ...\n"); - // identify group + // get group bitmask - int igroup = group->find(arg[0]); - if (igroup == -1) error->all(FLERR,"Cannot find delete_bonds group ID"); - int groupbit = group->bitmask[igroup]; + int groupbit = group->get_bitmask_by_id(FLERR, arg[0], "delete_bonds"); // set style and which = type value From 12b6b797b8f16e2dfe721feac03e8732bf296376 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Jan 2025 14:47:20 -0500 Subject: [PATCH 05/16] simplify --- src/group.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/group.cpp b/src/group.cpp index 5d87ef39b6..d19b802b24 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -656,11 +656,8 @@ int Group::find_unused() int Group::get_bitmask_by_id(const std::string &file, int line, const std::string &name, const std::string &caller) { - int igroup = 0; - for (; igroup < MAX_GROUP; ++igroup) { - if (names[igroup] && (name == names[igroup])) break; - } - if (igroup == MAX_GROUP) + int igroup = find(name); + if (igroup < 0) error->all(file, line, "Group ID {} requested by {} does not exist", name, caller); return bitmask[igroup]; } From 195f8a9670e8e1c764c42e5238f76ab59e7c0663 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Jan 2025 19:30:34 -0500 Subject: [PATCH 06/16] a couple more updates to use the new API --- src/displace_atoms.cpp | 3 +-- src/dump.cpp | 3 ++- src/fix.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/displace_atoms.cpp b/src/displace_atoms.cpp index 5ecf5a2c9e..d5b6c1b9af 100644 --- a/src/displace_atoms.cpp +++ b/src/displace_atoms.cpp @@ -74,8 +74,7 @@ void DisplaceAtoms::command(int narg, char **arg) // group and style igroup = group->find(arg[0]); - if (igroup == -1) error->all(FLERR,"Could not find displace_atoms group ID"); - groupbit = group->bitmask[igroup]; + groupbit = group->get_bitmask_by_id(FLERR, arg[0], "displace_atoms"); if (modify->check_rigid_group_overlap(groupbit)) error->warning(FLERR,"Attempting to displace atoms in rigid bodies"); diff --git a/src/dump.cpp b/src/dump.cpp index 3425b6d441..b6d8cf535a 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -58,7 +58,7 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : id = utils::strdup(arg[0]); igroup = group->find(arg[1]); - groupbit = group->bitmask[igroup]; + groupbit = group->get_bitmask_by_id(FLERR, arg[1], fmt::format("dump {}", arg[2])); style = utils::strdup(arg[2]); @@ -311,6 +311,7 @@ void Dump::init() int Dump::count() { + // group all if (igroup == 0) return atom->nlocal; int *mask = atom->mask; diff --git a/src/fix.cpp b/src/fix.cpp index 8678706347..3f3b585e0a 100644 --- a/src/fix.cpp +++ b/src/fix.cpp @@ -48,8 +48,8 @@ Fix::Fix(LAMMPS *lmp, int /*narg*/, char **arg) : error->all(FLERR,"Fix ID must be alphanumeric or underscore characters"); igroup = group->find(arg[1]); - if (igroup == -1) error->all(FLERR,"Could not find fix group ID"); - groupbit = group->bitmask[igroup]; + if (igroup == -1) error->all(FLERR,"Could not find fix {} group ID {}", arg[2], arg[1]); + groupbit = group->get_bitmask_by_id(FLERR, arg[1], fmt::format("fix {}",arg[2])); style = utils::strdup(arg[2]); From ac68f70e20ed64bf13ae4910f8b4572731c67fee Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 Jan 2025 21:23:56 -0500 Subject: [PATCH 07/16] three more --- src/fix_nh.cpp | 10 +++------- src/fix_recenter.cpp | 13 +++++-------- src/fix_spring.cpp | 10 +++------- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index b56033d6d6..73f3908a6f 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -271,7 +271,7 @@ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : delete[] id_dilate; id_dilate = utils::strdup(arg[iarg+1]); int idilate = group->find(id_dilate); - if (idilate == -1) + if (idilate < 0) error->all(FLERR,"Fix {} dilate group ID {} does not exist", style, id_dilate); } iarg += 2; @@ -629,12 +629,8 @@ void FixNH::init() { // recheck that dilate group has not been deleted - if (allremap == 0) { - int idilate = group->find(id_dilate); - if (idilate == -1) - error->all(FLERR,"Fix {} dilate group ID {} does not exist", style, id_dilate); - dilate_group_bit = group->bitmask[idilate]; - } + if (allremap == 0) + dilate_group_bit = group->get_bitmask_by_id(FLERR, id_dilate, fmt::format("fix {}", style)); // ensure no conflict with fix deform diff --git a/src/fix_recenter.cpp b/src/fix_recenter.cpp index 4da8c4787b..2e9803870a 100644 --- a/src/fix_recenter.cpp +++ b/src/fix_recenter.cpp @@ -41,7 +41,7 @@ enum{BOX,LATTICE,FRACTION}; FixRecenter::FixRecenter(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (narg < 6) error->all(FLERR,"Illegal fix recenter command"); + if (narg < 6) utils::missing_cmd_args(FLERR,"fix recenter", error); xcom = ycom = zcom = 0.0; xflag = yflag = zflag = 1; @@ -74,17 +74,15 @@ FixRecenter::FixRecenter(LAMMPS *lmp, int narg, char **arg) : int iarg = 6; while (iarg < narg) { if (strcmp(arg[iarg],"shift") == 0) { - int igroup2 = group->find(arg[iarg+1]); - if (igroup2 < 0) error->all(FLERR,"Could not find fix recenter group ID"); - group2bit = group->bitmask[igroup2]; + group2bit = group->get_bitmask_by_id(FLERR, arg[iarg+1], "fix recenter"); iarg += 2; } else if (strcmp(arg[iarg],"units") == 0) { if (strcmp(arg[iarg+1],"box") == 0) scaleflag = BOX; else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = LATTICE; else if (strcmp(arg[iarg+1],"fraction") == 0) scaleflag = FRACTION; - else error->all(FLERR,"Illegal fix recenter command"); + else error->all(FLERR,"Unknown fix recenter units argument {}", arg[iarg+1]); iarg += 2; - } else error->all(FLERR,"Illegal fix recenter command"); + } else error->all(FLERR,"Unknown fix recenter keyword {}", arg[iarg]); } // scale xcom,ycom,zcom @@ -103,8 +101,7 @@ FixRecenter::FixRecenter(LAMMPS *lmp, int narg, char **arg) : // cannot have 0 atoms in group - if (group->count(igroup) == 0) - error->all(FLERR,"Fix recenter group has no atoms"); + if (group->count(igroup) == 0) error->all(FLERR,"Fix recenter group {} has no atoms", arg[1]); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_spring.cpp b/src/fix_spring.cpp index 93c1f7867d..829073179d 100644 --- a/src/fix_spring.cpp +++ b/src/fix_spring.cpp @@ -73,11 +73,9 @@ FixSpring::FixSpring(LAMMPS *lmp, int narg, char **arg) : group2 = utils::strdup(arg[4]); igroup2 = group->find(arg[4]); - if (igroup2 == -1) - error->all(FLERR,"Fix spring couple group ID does not exist"); if (igroup2 == igroup) - error->all(FLERR,"Two groups cannot be the same in fix spring couple"); - group2bit = group->bitmask[igroup2]; + error->all(FLERR,"The two groups cannot be the same in fix spring couple"); + group2bit = group->get_bitmask_by_id(FLERR, arg[4], "fix spring"); k_spring = utils::numeric(FLERR,arg[5],false,lmp); xflag = yflag = zflag = 1; @@ -121,9 +119,7 @@ void FixSpring::init() if (group2) { igroup2 = group->find(group2); - if (igroup2 == -1) - error->all(FLERR,"Fix spring couple group ID does not exist"); - group2bit = group->bitmask[igroup2]; + group2bit = group->get_bitmask_by_id(FLERR, group2, "fix spring"); } masstotal = group->mass(igroup); From 6700a3bed1c081b39bad929c7b9effff4d534788 Mon Sep 17 00:00:00 2001 From: Andrew Jewett Date: Wed, 19 Mar 2025 13:36:09 -0400 Subject: [PATCH 08/16] Fixed the Moltemplate HowTo docs. (I also added a very simple polymer example.) This needed to be done because the file names and @atom types in the old version of this HowTo are no longer accurate. OPLSAA has changed. Now this HowTo is compatible with the latest version of OPLSAA. More importantly, after this update, the HowTo documentation should never need to be updated again because OPLSAA force field files are named according to the OPLSAA version/date. For example, the "oplsaa.lt" file has been renamed to "oplsaa2024.lt". Future OPLSAA updates will go in other files with different names. So the @atom types in this HowTo example should never need to be updated in the future, regardless what happens with OPLSAA. --- doc/src/Howto_moltemplate.rst | 266 ++++-- doc/src/JPG/PolyNIPAM.jpg | Bin 41505 -> 96641 bytes doc/src/JPG/butane.jpg | Bin 0 -> 22449 bytes tools/moltemplate/tutorial-files/PolyNIPAM.lt | 792 +++++++++--------- tools/moltemplate/tutorial-files/formamide.lt | 33 +- tools/moltemplate/tutorial-files/sample01.lt | 44 +- tools/moltemplate/tutorial-files/solv_01.lt | 88 +- 7 files changed, 692 insertions(+), 531 deletions(-) create mode 100644 doc/src/JPG/butane.jpg diff --git a/doc/src/Howto_moltemplate.rst b/doc/src/Howto_moltemplate.rst index 1b34169a4f..a1c3b06a1e 100644 --- a/doc/src/Howto_moltemplate.rst +++ b/doc/src/Howto_moltemplate.rst @@ -1,30 +1,33 @@ Moltemplate Tutorial ==================== -In this tutorial, we are going to use the tool :ref:`Moltemplate -` to set up a classical molecular dynamic simulation using -the :ref:`OPLS-AA force field `. The first +In this tutorial, we are going to use the tool :ref:`Moltemplate` +to set up a classical molecular dynamic simulation using +the :ref:`OPLS-AA force field `. The first task is to describe an organic compound and create a complete input deck -for LAMMPS. The second task is to map the OPLS-AA force field to a +for LAMMPS. The second task is to use moltemplate to build a polymer. +The third task is to map the OPLS-AA force field to a molecular sample created with an external tool, e.g. PACKMOL, and exported as a PDB file. The files used in this tutorial can be found in the ``tools/moltemplate/tutorial-files`` folder of the LAMMPS source code distribution. +Many more examples can be found here: https://moltemplate.org/examples.html + + Simulating an organic solvent """"""""""""""""""""""""""""" This example aims to create a cubic box of the organic solvent formamide. -The first step is to create a molecular topology in the -LAMMPS-template (LT) file format representing a single molecule, which -will be stored in a Moltemplate object called ``_FAM inherits OPLSAA {}``. +The first step is to create a molecular topology in the LAMMPS-template +(LT) file format representing a single molecule, which will be +stored in a Moltemplate object called ``_FAM inherits OPLSAA {}``. This command states that the object ``_FAM`` is based on an existing object called ``OPLSAA``, which contains OPLS-AA parameters, atom type definitions, partial charges, masses and bond-angle rules for many organic and biological compounds. - The atomic structure is the starting point to populate the command ``write('Data Atoms') {}``, which will write the ``Atoms`` section in the LAMMPS data file. The OPLS-AA force field uses the ``atom_style full``, @@ -36,21 +39,23 @@ to the ``molID``, except that the same variable is used for the whole molecule. The atom types are assigned using ``@``-type variables. The assignment of atom types (e.g. ``@atom:177``, ``@atom:178``) is done using the OPLS-AA atom types defined in the "In Charges" section of the file -``oplsaa.lt``, looking for a reasonable match with the description of the atom. +``oplsaa2024.lt``, looking for a reasonable match with the description of the atom. The resulting file (``formamide.lt``) follows: .. code-block:: bash + import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt # defines OPLSAA + _FAM inherits OPLSAA { # atomID molID atomType charge coordX coordY coordZ write('Data Atoms') { - $atom:C00 $mol @atom:177 0.00 0.100 0.490 0.0 - $atom:O01 $mol @atom:178 0.00 1.091 -0.250 0.0 - $atom:N02 $mol @atom:179 0.00 -1.121 -0.181 0.0 - $atom:H03 $mol @atom:182 0.00 -2.013 0.272 0.0 - $atom:H04 $mol @atom:182 0.00 -1.056 -1.190 0.0 - $atom:H05 $mol @atom:221 0.00 0.144 1.570 0.0 + $atom:C00 $mol @atom:235 0.00 0.100 0.490 0.0 + $atom:O01 $mol @atom:236 0.00 1.091 -0.250 0.0 + $atom:N02 $mol @atom:237 0.00 -1.121 -0.181 0.0 + $atom:H03 $mol @atom:240 0.00 -2.013 0.272 0.0 + $atom:H04 $mol @atom:240 0.00 -1.056 -1.190 0.0 + $atom:H05 $mol @atom:279 0.00 0.144 1.570 0.0 } # A list of the bonds in the molecule: @@ -64,16 +69,17 @@ The resulting file (``formamide.lt``) follows: } } -You don't have to specify the charge in this example because they will -be assigned according to the atom type. Analogously, only a -"Data Bond List" section is needed as the atom type will determine the -bond type. The other bonded interactions (e.g. angles, -dihedrals, and impropers) will be automatically generated by +You don't have to specify the charge in this example because the OPLSAA +force-field assigns charge according to the atom type. (This is not true +when using other force fields.) A "Data Bond List" section is needed as +the atom type will determine the bond type. The other bonded interactions +(e.g. angles, dihedrals, and impropers) will be automatically generated by Moltemplate. If the simulation is non-neutral, or Moltemplate complains that you have -missing bond, angle, or dihedral types, this means at least one of your -atom types is incorrect. +missing bond, angle, or dihedral types, this probably means at least one +of your atom types is incorrect (or perhaps there is no suitable atom +type currently defined in the ``oplsaa2024.lt`` file). The second step is to create a master file with instructions to build a starting structure and the LAMMPS commands to run an NPT simulation. The @@ -81,14 +87,12 @@ master file (``solv_01.lt``) follows: .. code-block:: bash - # Import the force field. - import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt - import formamide.lt # after oplsaa.lt, as it depends on it. + import formamide.lt # Defines "_FAM" and OPLSAA - # Create the input sample. + # Distribute the molecules on a 5x5x5 cubic grid with spacing 4.6 solv = new _FAM [5].move( 4.6, 0, 0) - [5].move( 0, 4.6, 0) - [5].move( 0, 0, 4.6) + [5].move( 0, 4.6, 0) + [5].move( 0, 0, 4.6) solv[*][*][*].move(-11.5, -11.5, -11.5) # Set the simulation box. @@ -98,8 +102,11 @@ master file (``solv_01.lt``) follows: -11.5 11.5 zlo zhi } - # Create an input deck for LAMMPS. - write_once("In Init"){ + # Note: The lines below in the "In Run" section are often omitted. + + write_once("In Run"){ + # Create an input deck for LAMMPS. + # Run an NPT simulation. # Input variables. variable run string solv_01 # output name variable ts equal 1 # timestep @@ -109,12 +116,6 @@ master file (``solv_01.lt``) follows: variable equi equal 5000 # Equilibration steps variable prod equal 30000 # Production steps - # PBC (set them before the creation of the box). - boundary p p p - } - - # Run an NPT simulation. - write_once("In Run"){ # Derived variables. variable tcouple equal \$\{ts\}*100 variable pcouple equal \$\{ts\}*1000 @@ -143,7 +144,7 @@ master file (``solv_01.lt``) follows: unfix NPT } -The first two commands insert the content of files ``oplsaa.lt`` and +The first two commands insert the content of files ``oplsaa2024.lt`` and ``formamide.lt`` into the master file. At this point, we can use the command ``solv = new _FAM [N]`` to create N copies of a molecule of type ``_FAM``. In this case, we create an array of 5*5*5 molecules on a cubic @@ -153,21 +154,37 @@ the sample was created from scratch, we also specify the simulation box size in the "Data Boundary" section. The LAMMPS setting for the force field are specified in the file -``oplsaa.lt`` and are written automatically in the input deck. We also +``oplsaa2024.lt`` and are written automatically in the input deck. We also specify the boundary conditions and a set of variables in -the "In Init" section. The remaining commands to run an NPT simulation +the "In Init" section. + +The remaining commands to run an NPT simulation are written in the "In Run" section. Note that in this script, LAMMPS variables are protected with the escape character ``\`` to distinguish them from Moltemplate variables, e.g. ``\$\{run\}`` is a LAMMPS variable that is written in the input deck as ``${run}``. +(Note: Moltemplate can be slow to run, so you need to change you run +settings frequently, I recommended moving those commands (from "In Run") +out of your .lt files and into a separate file. Moltemplate creates a +file named ``run.in.EXAMPLE`` for this purpose. You can put your run +settings and fixes that file and then invoke LAMMPS using +``mpirun -np 4 lmp -in run.in.EXAMPLE`` instead.) + + Compile the master file with: .. code-block:: bash - moltemplate.sh -overlay-all solv_01.lt + moltemplate.sh solv_01.lt + cleanup_moltemplate.sh # <-- optional: see below -And execute the simulation with the following: +(Note: The optioinal "cleanup_moltemplate.sh" command deletes +unused atom types, which sometimes makes LAMMPS run faster. +But it does not work with many-body pair styles or dreiding-style h-bonds. +Fortunately most force fields, including OPLSAA, don't use those features.) + +Then execute the simulation with the following: .. code-block:: bash @@ -180,15 +197,116 @@ And execute the simulation with the following: Snapshot of the sample at the beginning and end of the simulation. Rendered with Ovito. + +Building a simple polymer +""""""""""""""""""""""""" +Moltemplate is particularly useful for building polymers (and other molecules +with subunits). As an simple example, consider butane: + +.. figure:: JPG/butane.jpg + +The ``butane.lt`` file below defines Butane as a polymer containing +4 monomers (of type ``CH3``, ``CH2``, ``CH2``, ``CH3``). + +.. code-block:: bash + + import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt # defines OPLSAA + + CH3 inherits OPLSAA { + + # atomID molID atomType charge coordX coordY coordZ + write("Data Atoms") { + $atom:c $mol:... @atom:54 0.0 0.000000 0.4431163 0.000000 + $atom:h1 $mol:... @atom:60 0.0 0.000000 1.0741603 0.892431 + $atom:h2 $mol:... @atom:60 0.0 0.000000 1.0741603 -0.892431 + $atom:h3 $mol:... @atom:60 0.0 -0.892431 -0.1879277 0.000000 + } + # (Using "$mol:..." indicates this object ("CH3") is part of a larger + # molecule. Moltemplate will share the molecule-ID with that molecule.) + + # A list of the bonds within the "CH3" molecular subunit: + # BondID AtomID1 AtomID2 + write('Data Bond List') { + $bond:ch1 $atom:c $atom:h1 + $bond:ch2 $atom:c $atom:h2 + $bond:ch3 $atom:c $atom:h3 + } + } + + CH2 inherits OPLSAA { + + # atomID molID atomType charge coordX coordY coordZ + write("Data Atoms") { + $atom:c $mol:... @atom:57 0.0 0.000000 0.4431163 0.000000 + $atom:h1 $mol:... @atom:60 0.0 0.000000 1.0741603 0.892431 + $atom:h2 $mol:... @atom:60 0.0 0.000000 1.0741603 -0.892431 + } + + # A list of the bonds within the "CH2" molecular subunit: + # BondID AtomID1 AtomID2 + write('Data Bond List') { + $bond:ch1 $atom:c $atom:h1 + $bond:ch2 $atom:c $atom:h2 + } + } + + Butane inherits OPLSAA { + + create_var {$mol} # optional:force all monomers to share the same molecule-ID + + # - Create 4 monomers + # - Move them along the X axis using ".move()", + # - Rotate them 180 degrees with respect to the previous monomer + monomer1 = new CH3 + monomer2 = new CH2.rot(180,1,0,0).move(1.2533223,0,0) + monomer3 = new CH2.move(2.5066446,0,0) + monomer4 = new CH3.rot(180,0,0,1).move(3.7599669,0,0) + + # A list of the bonds connecting different monomers together: + write('Data Bond List') { + $bond:b1 $atom:monomer1/c $atom:monomer2/c + $bond:b2 $atom:monomer2/c $atom:monomer3/c + $bond:b3 $atom:monomer3/c $atom:monomer4/c + } + } + +Again, you don't have to specify the charge in this example because OPLSAA +assigns charges according to the atom type. + +This ``Butane`` object is a molecule which can be used anywhere other molecules +can be used. (You can arrange ``Butane`` molecules on a lattice, as we did previously. +You can also modify individual butane molecules by adding or deleting atoms or bonds. +You can add bonds between specific butane molecules or use ``Butane`` as a +subunit to define even larger molecules. See the moltemplate manual for details.) + + + + + + +How to build a complex polymer +"""""""""""""""""""""""""""""""""""""""""" +A similar procedure can be used to create more complicated polymers, +such as the NIPAM polymer example shown below. For details, see: + +https://github.com/jewettaij/moltemplate/tree/master/examples/all_atom/force_field_OPLSAA/NIPAM_polymer+water+ions + + + + Mapping an existing structure """"""""""""""""""""""""""""" Another helpful way to use Moltemplate is mapping an existing molecular -sample to a force field. This is useful when a complex sample is -assembled from different simulations or created with specialized -software (e.g. PACKMOL). As in the previous example, all molecular -species in the sample must be defined using single-molecule Moltemplate -objects. For this example, we use a short polymer in a box containing +sample to a force field. This is useful when a complex sample is assembled +from different simulations or created with specialized software (e.g. PACKMOL). +(Note: The previous link shows how to build this entire system from scratch +using only moltemplate. However here we will assume instead that we obtained +a PDB file for this system using PACKMOL.) + +As in the previous examples, all molecular species in the sample +are defined using single-molecule Moltemplate objects. +For this example, we use a short polymer in a box containing water molecules and ions in the PDB file ``model.pdb``. It is essential to understand that the order of atoms in the PDB file @@ -246,25 +364,25 @@ The resulting master LT file defining short annealing at a fixed volume .. code-block:: bash # Use the OPLS-AA force field for all species. - import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt + import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt import PolyNIPAM.lt # Define the SPC water and ions as in the OPLS-AA Ca inherits OPLSAA { write("Data Atoms"){ - $atom:a1 $mol:. @atom:354 0.0 0.00000 0.00000 0.000000 + $atom:a1 $mol:. @atom:412 0.0 0.00000 0.00000 0.000000 } } Cl inherits OPLSAA { write("Data Atoms"){ - $atom:a1 $mol:. @atom:344 0.0 0.00000 0.00000 0.000000 + $atom:a1 $mol:. @atom:401 0.0 0.00000 0.00000 0.000000 } } SPC inherits OPLSAA { write("Data Atoms"){ - $atom:O $mol:. @atom:76 0. 0.0000000 0.00000 0.000000 - $atom:H1 $mol:. @atom:77 0. 0.8164904 0.00000 0.5773590 - $atom:H2 $mol:. @atom:77 0. -0.8164904 0.00000 0.5773590 + $atom:O $mol:. @atom:9991 0. 0.0000000 0.00000 0.0000000 + $atom:H1 $mol:. @atom:9990 0. 0.8164904 0.00000 0.5773590 + $atom:H2 $mol:. @atom:9990 0. -0.8164904 0.00000 0.5773590 } write("Data Bond List") { $bond:OH1 $atom:O $atom:H1 @@ -285,8 +403,15 @@ The resulting master LT file defining short annealing at a fixed volume 0 26 zlo zhi } - # Define the input variables. write_once("In Init"){ + boundary p p p # "p p p" is the default. This line is optional. + neighbor 3 bin # (This line is also optional in this example.) + } + + # Note: The lines below in the "In Run" section are often omitted. + + # Run an NVT simulation. + write_once("In Run"){ # Input variables. variable run string sample01 # output name variable ts equal 2 # timestep @@ -294,13 +419,6 @@ The resulting master LT file defining short annealing at a fixed volume variable p equal 1. # equilibrium pressure variable equi equal 30000 # equilibration steps - # PBC (set them before the creation of the box). - boundary p p p - neighbor 3 bin - } - - # Run an NVT simulation. - write_once("In Run"){ # Set the output. thermo 1000 thermo_style custom step etotal evdwl ecoul elong ebond eangle & @@ -314,8 +432,8 @@ The resulting master LT file defining short annealing at a fixed volume write_data \$\{run\}.min # Set the constrains. - group watergroup type @atom:76 @atom:77 - fix 0 watergroup shake 0.0001 10 0 b @bond:042_043 a @angle:043_042_043 + group watergroup type @atom:9991 @atom:9990 + fix 0 watergroup shake 0.0001 10 0 b @bond:spcO_spcH a @angle:spcH_spcO_spcH # Short annealing. timestep \$\{ts\} @@ -327,7 +445,7 @@ The resulting master LT file defining short annealing at a fixed volume In this example, the water model is SPC and it is defined in the -``oplsaa.lt`` file with atom types ``@atom:76`` and ``@atom:77``. For +``oplsaa2024.lt`` file with atom types ``@atom:9991`` and ``@atom:9990``. For water we also use the ``group`` and ``fix shake`` commands with Moltemplate ``@``-type variables, to ensure consistency with the numerical values assigned during compilation. To identify the bond and @@ -336,19 +454,20 @@ are: .. code-block:: bash - replace{ @atom:76 @atom:76_b042_a042_d042_i042 } - replace{ @atom:77 @atom:77_b043_a043_d043_i043 } + replace{ @atom:9991 @atom:9991_bspcO_aspcO_dspcO_ispcO } + replace{ @atom:9990 @atom:9990_bspcH_aspcH_dspcH_ispcH } From which we can identify the following "Data Bonds By Type": -``@bond:042_043 @atom:*_b042*_a*_d*_i* @atom:*_b043*_a*_d*_i*`` and -"Data Angles By Type": ``@angle:043_042_043 @atom:*_b*_a043*_d*_i* -@atom:*_b*_a042*_d*_i* @atom:*_b*_a043*_d*_i*`` +``@bond:spcO_spcH @atom:*_bspcO*_a*_d*_i* @atom:*_bspcH*_a*_d*_i*`` +and "Data Angles By Type": +``@angle:spcH_spcO_spcH @atom:*_b*_aspcH*_d*_i* @atom:*_b*_aspcO*_d*_i* @atom:*_b*_aspcH*_d*_i*`` Compile the master file with: .. code-block:: bash - moltemplate.sh -overlay-all -pdb model.pdb sample01.lt + moltemplate.sh -pdb model.pdb sample01.lt + cleanup_moltemplate.sh And execute the simulation with the following: @@ -363,8 +482,13 @@ And execute the simulation with the following: Sample visualized with Ovito loading the trajectory into the DATA file written after minimization. + ------------ -.. _OPLSAA96: +.. _oplsaa2024: -**(OPLS-AA)** Jorgensen, Maxwell, Tirado-Rives, J Am Chem Soc, 118(45), 11225-11236 (1996). +**(OPLS-AA)** Jorgensen, W.L., Ghahremanpour, M.M., Saar, A., Tirado-Rives, J., J. Phys. Chem. B, 128(1), 250-262 (2024). + +.. _Moltemplate: + +**(Moltemplate)** Jewett et al., J. Mol. Biol., 433(11), 166841 (2021) diff --git a/doc/src/JPG/PolyNIPAM.jpg b/doc/src/JPG/PolyNIPAM.jpg index 4ad3ce82746d1d56c1ecd17afe9ecabc2d80ca1b..372a712de10a47d7d8d753ebdfaf703c1e74925d 100644 GIT binary patch literal 96641 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 Date: Wed, 19 Mar 2025 13:58:46 -0400 Subject: [PATCH 09/16] tried to minimize the differences between my version and the existing version --- doc/src/Howto_moltemplate.rst | 16 ++--- tools/moltemplate/tutorial-files/formamide.lt | 16 ++--- tools/moltemplate/tutorial-files/solv_01.lt | 70 +++++++++---------- 3 files changed, 51 insertions(+), 51 deletions(-) diff --git a/doc/src/Howto_moltemplate.rst b/doc/src/Howto_moltemplate.rst index a1c3b06a1e..97294f629b 100644 --- a/doc/src/Howto_moltemplate.rst +++ b/doc/src/Howto_moltemplate.rst @@ -50,12 +50,12 @@ The resulting file (``formamide.lt``) follows: # atomID molID atomType charge coordX coordY coordZ write('Data Atoms') { - $atom:C00 $mol @atom:235 0.00 0.100 0.490 0.0 - $atom:O01 $mol @atom:236 0.00 1.091 -0.250 0.0 - $atom:N02 $mol @atom:237 0.00 -1.121 -0.181 0.0 - $atom:H03 $mol @atom:240 0.00 -2.013 0.272 0.0 - $atom:H04 $mol @atom:240 0.00 -1.056 -1.190 0.0 - $atom:H05 $mol @atom:279 0.00 0.144 1.570 0.0 + $atom:C00 $mol @atom:235 0.00 0.100 0.490 0.0 + $atom:O01 $mol @atom:236 0.00 1.091 -0.250 0.0 + $atom:N02 $mol @atom:237 0.00 -1.121 -0.181 0.0 + $atom:H03 $mol @atom:240 0.00 -2.013 0.272 0.0 + $atom:H04 $mol @atom:240 0.00 -1.056 -1.190 0.0 + $atom:H05 $mol @atom:279 0.00 0.144 1.570 0.0 } # A list of the bonds in the molecule: @@ -91,8 +91,8 @@ master file (``solv_01.lt``) follows: # Distribute the molecules on a 5x5x5 cubic grid with spacing 4.6 solv = new _FAM [5].move( 4.6, 0, 0) - [5].move( 0, 4.6, 0) - [5].move( 0, 0, 4.6) + [5].move( 0, 4.6, 0) + [5].move( 0, 0, 4.6) solv[*][*][*].move(-11.5, -11.5, -11.5) # Set the simulation box. diff --git a/tools/moltemplate/tutorial-files/formamide.lt b/tools/moltemplate/tutorial-files/formamide.lt index a78e0f0e89..60924b0593 100644 --- a/tools/moltemplate/tutorial-files/formamide.lt +++ b/tools/moltemplate/tutorial-files/formamide.lt @@ -15,21 +15,21 @@ import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt _FAM inherits OPLSAA { - # atomID molID atomType charge coordX coordY coordZ + # atomID molID atomType charge coordX coordY coordZ write('Data Atoms') { - $atom:C00 $mol @atom:235 0.00 0.100 0.490 0.0 - $atom:O01 $mol @atom:236 0.00 1.091 -0.250 0.0 - $atom:N02 $mol @atom:237 0.00 -1.121 -0.181 0.0 - $atom:H03 $mol @atom:240 0.00 -2.013 0.272 0.0 - $atom:H04 $mol @atom:240 0.00 -1.056 -1.190 0.0 - $atom:H05 $mol @atom:279 0.00 0.144 1.570 0.0 + $atom:C00 $mol @atom:235 0.00 0.100014490 0.490422099 0.0 + $atom:O01 $mol @atom:236 0.00 1.091153187 -0.250749643 0.0 + $atom:N02 $mol @atom:237 0.00 -1.121616690 -0.181085754 0.0 + $atom:H03 $mol @atom:240 0.00 -2.013715893 0.272535813 0.0 + $atom:H04 $mol @atom:240 0.00 -1.056768463 -1.190185868 0.0 + $atom:H05 $mol @atom:279 0.00 0.144676387 1.570292021 0.0 } # Note: You don't have to specify the charge in this example because we are # using the OPLSAA force-field which assigns charge according to # atom-type. Just leave these numbers as 0.00 for now. # Note: LAMMPS expects an integer in the 2nd column (the Molecule-ID number). - # If we put "$mol:." there, moltemplate will generate this integer for you + # If we put "$mol" there, moltemplate will generate this integer for you # A list of the bonds in the molecule: # BondID AtomID1 AtomID2 diff --git a/tools/moltemplate/tutorial-files/solv_01.lt b/tools/moltemplate/tutorial-files/solv_01.lt index 9d39e94b8d..42fd239d17 100644 --- a/tools/moltemplate/tutorial-files/solv_01.lt +++ b/tools/moltemplate/tutorial-files/solv_01.lt @@ -2,8 +2,8 @@ import formamide.lt # Defines "_FAM" and OPLSAA # Distribute the molecules on a 5x5x5 cubic grid with spacing 4.6 solv = new _FAM [5].move( 4.6, 0, 0) - [5].move( 0, 4.6, 0) - [5].move( 0, 0, 4.6) + [5].move( 0, 4.6, 0) + [5].move( 0, 0, 4.6) solv[*][*][*].move(-11.5, -11.5, -11.5) # Set the simulation box. @@ -16,42 +16,42 @@ write_once("Data Boundary") { # Note: The lines below in the "In Run" section are often omitted. write_once("In Run"){ - # Create an input deck for LAMMPS. - # Run an NPT simulation. - # Input variables. - variable run string solv_01 # output name - variable ts equal 1 # timestep - variable temp equal 300 # equilibrium temperature - variable p equal 1. # equilibrium pressure - variable d equal 1000 # output frequency - variable equi equal 5000 # Equilibration steps - variable prod equal 30000 # Production steps + # Create an input deck for LAMMPS. + # Run an NPT simulation. + # Input variables. + variable run string solv_01 # output name + variable ts equal 1 # timestep + variable temp equal 300 # equilibrium temperature + variable p equal 1. # equilibrium pressure + variable d equal 1000 # output frequency + variable equi equal 5000 # Equilibration steps + variable prod equal 30000 # Production steps - # Derived variables. - variable tcouple equal \$\{ts\}*100 - variable pcouple equal \$\{ts\}*1000 + # Derived variables. + variable tcouple equal \$\{ts\}*100 + variable pcouple equal \$\{ts\}*1000 - # Output. - thermo \$d - thermo_style custom step etotal evdwl ecoul elong ebond eangle & - edihed eimp ke pe temp press vol density cpu - thermo_modify flush yes + # Output. + thermo \$d + thermo_style custom step etotal evdwl ecoul elong ebond eangle & + edihed eimp ke pe temp press vol density cpu + thermo_modify flush yes - # Trajectory. - dump TRJ all dcd \$d \$\{run\}.dcd - dump_modify TRJ unwrap yes + # Trajectory. + dump TRJ all dcd \$d \$\{run\}.dcd + dump_modify TRJ unwrap yes - # Thermalisation and relaxation, NPT ensemble. - timestep \$\{ts\} - fix NPT all npt temp \$\{temp\} \$\{temp\} \$\{tcouple\} iso \$p \$p \$\{pcouple\} - velocity all create \$\{temp\} 858096 dist gaussian - # Short runs to update the PPPM settings as the box shinks. - run \$\{equi\} post no - run \$\{equi\} post no - run \$\{equi\} post no - run \$\{equi\} - # From now on, the density shouldn't change too much. - run \$\{prod\} - unfix NPT + # Thermalisation and relaxation, NPT ensemble. + timestep \$\{ts\} + fix NPT all npt temp \$\{temp\} \$\{temp\} \$\{tcouple\} iso \$p \$p \$\{pcouple\} + velocity all create \$\{temp\} 858096 dist gaussian + # Short runs to update the PPPM settings as the box shinks. + run \$\{equi\} post no + run \$\{equi\} post no + run \$\{equi\} post no + run \$\{equi\} + # From now on, the density shouldn't change too much. + run \$\{prod\} + unfix NPT } From 37248a011e2dd2e9239e9e0c5c62e6b739075275 Mon Sep 17 00:00:00 2001 From: Andrew Jewett Date: Wed, 19 Mar 2025 15:30:06 -0400 Subject: [PATCH 10/16] deleted trailing whitespace in the Howto_moltemplate.rst file (for PR #4508) --- doc/src/Howto_moltemplate.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Howto_moltemplate.rst b/doc/src/Howto_moltemplate.rst index 97294f629b..b8c021ceef 100644 --- a/doc/src/Howto_moltemplate.rst +++ b/doc/src/Howto_moltemplate.rst @@ -182,7 +182,7 @@ Compile the master file with: (Note: The optioinal "cleanup_moltemplate.sh" command deletes unused atom types, which sometimes makes LAMMPS run faster. But it does not work with many-body pair styles or dreiding-style h-bonds. -Fortunately most force fields, including OPLSAA, don't use those features.) +Fortunately most force fields, including OPLSAA, don't use those features.) Then execute the simulation with the following: @@ -251,7 +251,7 @@ The ``butane.lt`` file below defines Butane as a polymer containing } Butane inherits OPLSAA { - + create_var {$mol} # optional:force all monomers to share the same molecule-ID # - Create 4 monomers @@ -287,7 +287,7 @@ subunit to define even larger molecules. See the moltemplate manual for details How to build a complex polymer """""""""""""""""""""""""""""""""""""""""" A similar procedure can be used to create more complicated polymers, -such as the NIPAM polymer example shown below. For details, see: +such as the NIPAM polymer example shown below. For details, see: https://github.com/jewettaij/moltemplate/tree/master/examples/all_atom/force_field_OPLSAA/NIPAM_polymer+water+ions From ca575e395e875d59300e11520cc8e634cf1d1283 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 19 Mar 2025 20:39:06 -0400 Subject: [PATCH 11/16] fix spelling and duplicate references issues --- doc/src/Howto_moltemplate.rst | 30 ++++++++++----------- doc/utils/sphinx-config/false_positives.txt | 1 + 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/doc/src/Howto_moltemplate.rst b/doc/src/Howto_moltemplate.rst index b8c021ceef..470f76ded0 100644 --- a/doc/src/Howto_moltemplate.rst +++ b/doc/src/Howto_moltemplate.rst @@ -1,16 +1,16 @@ Moltemplate Tutorial ==================== -In this tutorial, we are going to use the tool :ref:`Moltemplate` -to set up a classical molecular dynamic simulation using -the :ref:`OPLS-AA force field `. The first -task is to describe an organic compound and create a complete input deck -for LAMMPS. The second task is to use moltemplate to build a polymer. -The third task is to map the OPLS-AA force field to a -molecular sample created with an external tool, e.g. PACKMOL, and -exported as a PDB file. The files used in this tutorial can be found -in the ``tools/moltemplate/tutorial-files`` folder of the LAMMPS -source code distribution. +In this tutorial, we are going to use the tool :ref:`Moltemplate +` from https://moltemplate.org/ to set up a classical +molecular dynamic simulation using the :ref:`OPLS-AA force field +`. The first task is to describe an organic compound and +create a complete input deck for LAMMPS. The second task is to use +moltemplate to build a polymer. The third task is to map the OPLS-AA +force field to a molecular sample created with an external tool, +e.g. PACKMOL, and exported as a PDB file. The files used in this +tutorial can be found in the ``tools/moltemplate/tutorial-files`` folder +of the LAMMPS source code distribution. Many more examples can be found here: https://moltemplate.org/examples.html @@ -179,7 +179,7 @@ Compile the master file with: moltemplate.sh solv_01.lt cleanup_moltemplate.sh # <-- optional: see below -(Note: The optioinal "cleanup_moltemplate.sh" command deletes +(Note: The optional "cleanup_moltemplate.sh" command deletes unused atom types, which sometimes makes LAMMPS run faster. But it does not work with many-body pair styles or dreiding-style h-bonds. Fortunately most force fields, including OPLSAA, don't use those features.) @@ -201,7 +201,7 @@ Then execute the simulation with the following: Building a simple polymer """"""""""""""""""""""""" Moltemplate is particularly useful for building polymers (and other molecules -with subunits). As an simple example, consider butane: +with sub-units). As an simple example, consider butane: .. figure:: JPG/butane.jpg @@ -224,7 +224,7 @@ The ``butane.lt`` file below defines Butane as a polymer containing # (Using "$mol:..." indicates this object ("CH3") is part of a larger # molecule. Moltemplate will share the molecule-ID with that molecule.) - # A list of the bonds within the "CH3" molecular subunit: + # A list of the bonds within the "CH3" molecular sub-unit: # BondID AtomID1 AtomID2 write('Data Bond List') { $bond:ch1 $atom:c $atom:h1 @@ -242,7 +242,7 @@ The ``butane.lt`` file below defines Butane as a polymer containing $atom:h2 $mol:... @atom:60 0.0 0.000000 1.0741603 -0.892431 } - # A list of the bonds within the "CH2" molecular subunit: + # A list of the bonds within the "CH2" molecular sub-unit: # BondID AtomID1 AtomID2 write('Data Bond List') { $bond:ch1 $atom:c $atom:h1 @@ -489,6 +489,6 @@ And execute the simulation with the following: **(OPLS-AA)** Jorgensen, W.L., Ghahremanpour, M.M., Saar, A., Tirado-Rives, J., J. Phys. Chem. B, 128(1), 250-262 (2024). -.. _Moltemplate: +.. _Moltemplate1: **(Moltemplate)** Jewett et al., J. Mol. Biol., 433(11), 166841 (2021) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 084f7c0ec1..baf20a8ebf 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1336,6 +1336,7 @@ Gflop gfortran ghostneigh ghostwhite +Ghahremanpour Giacomo GiB gif From bbd057891abe4bdf8428bac71086e39975da798d Mon Sep 17 00:00:00 2001 From: Eddy Barraud Date: Mon, 24 Mar 2025 15:35:34 +0100 Subject: [PATCH 12/16] wrong qi*qj cuda code correction of cutsq[mtype].z instead of extra[j].x ! --- lib/gpu/lal_dpd_coul_slater_long.cu | 22 +++++++++++----------- lib/gpu/lal_dpd_coul_slater_long.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/gpu/lal_dpd_coul_slater_long.cu b/lib/gpu/lal_dpd_coul_slater_long.cu index 4835b8777b..44931195ee 100644 --- a/lib/gpu/lal_dpd_coul_slater_long.cu +++ b/lib/gpu/lal_dpd_coul_slater_long.cu @@ -287,16 +287,16 @@ __kernel void k_dpd_coul_slater_long(const __global numtyp4 *restrict x_, // apply Slater electrostatic force if distance below Slater cutoff // and the two species have a slater coeff - // cutsq[mtype].z -> Coulombic squared cutoff - if ( cutsq[mtype].z != 0.0 && rsq < cutsq[mtype].z){ + // cutsq[mtype].z -> Slater cutoff + // extra[j].x -> q[j] ; particle j charge + if ( rsq < cutsq[mtype].z ){ numtyp r2inv=ucl_recip(rsq); numtyp _erfc; numtyp grij = g_ewald * r; numtyp expm2 = ucl_exp(-grij*grij); numtyp t = ucl_recip((numtyp)1.0 + EWALD_P*grij); _erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - numtyp prefactor = extra[j].x; - prefactor *= qqrd2e * cutsq[mtype].z * qtmp/r; + numtyp prefactor = qqrd2e * extra[j].x * qtmp / r; numtyp rlamdainv = r * lamdainv; numtyp exprlmdainv = ucl_exp((numtyp)-2.0*rlamdainv); numtyp slater_term = exprlmdainv*((numtyp)1.0 + ((numtyp)2.0*rlamdainv*((numtyp)1.0+rlamdainv))); @@ -306,9 +306,9 @@ __kernel void k_dpd_coul_slater_long(const __global numtyp4 *restrict x_, if (EVFLAG && eflag) { numtyp e_slater = ((numtyp)1.0 + rlamdainv)*exprlmdainv; - numtyp e = prefactor*(_erfc-e_slater); - if (factor_coul > (numtyp)0) e -= factor_coul*prefactor*((numtyp)1.0 - e_slater); - e_coul += e; + numtyp e_sf = prefactor*(_erfc-e_slater); + if (factor_coul > (numtyp)0) e_sf -= factor_coul*prefactor*((numtyp)1.0 - e_slater); + e_coul += e_sf; } } // if cut_coulsq @@ -471,16 +471,16 @@ __kernel void k_dpd_coul_slater_long_fast(const __global numtyp4 *restrict x_, // apply Slater electrostatic force if distance below Slater cutoff // and the two species have a slater coeff - // cutsq[mtype].z -> Coulombic squared cutoff - if ( cutsq[mtype].z != 0.0 && rsq < cutsq[mtype].z){ + // cutsq[mtype].z -> Slater cutoff + // extra[j].x -> q[j] ; particle j charge + if ( rsq < cutsq[mtype].z ){ numtyp r2inv=ucl_recip(rsq); numtyp _erfc; numtyp grij = g_ewald * r; numtyp expm2 = ucl_exp(-grij*grij); numtyp t = ucl_recip((numtyp)1.0 + EWALD_P*grij); _erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - numtyp prefactor = extra[j].x; - prefactor *= qqrd2e * cutsq[mtype].z * qtmp/r; + numtyp prefactor = qqrd2e * extra[j].x * qtmp / r; numtyp rlamdainv = r * lamdainv; numtyp exprlmdainv = ucl_exp((numtyp)-2.0*rlamdainv); numtyp slater_term = exprlmdainv*((numtyp)1.0 + ((numtyp)2.0*rlamdainv*((numtyp)1.0+rlamdainv))); diff --git a/lib/gpu/lal_dpd_coul_slater_long.h b/lib/gpu/lal_dpd_coul_slater_long.h index 1870255998..007e7a2e00 100644 --- a/lib/gpu/lal_dpd_coul_slater_long.h +++ b/lib/gpu/lal_dpd_coul_slater_long.h @@ -65,7 +65,7 @@ class DPDCoulSlaterLong : public BaseDPD { /// coeff.x = a0, coeff.y = gamma, coeff.z = sigma, coeff.w = cut_dpd UCL_D_Vec coeff; - /// cutsq.x = cutsq, cutsq.y = cut_dpdsq, cutsq.w = cut_slatersq + /// cutsq.x = cutsq, cutsq.y = cut_dpdsq, cutsq.z = cut_slatersq UCL_D_Vec cutsq; /// Special LJ values From d83041222868537fbfdae824c6939e13db985103 Mon Sep 17 00:00:00 2001 From: Eddy Barraud Date: Mon, 24 Mar 2025 16:04:40 +0100 Subject: [PATCH 13/16] added boolean the read_data is not reading slater boolean of pair_coeff --- .../dpd_coul_slater_long/in.dpd_coul_slater_long | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long index bd405aad37..e683855b0d 100644 --- a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long +++ b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long @@ -30,11 +30,16 @@ comm_modify vel yes # store info of ghost atoms btw processors # Define pair style and coefficients pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul} -read_data data.dpd_coul_slater_long - # Enable long range electrostatics solver kspace_style pppm 1e-04 + +read_data data.dpd_coul_slater_long + +pair_coeff * * 78.0 4.5 +pair_coeff 2*3 2*3 78.0 4.5 yes + + # Construct neighbors every steps neighbor 1.0 bin neigh_modify every 1 delay 0 check yes From 5a62d0a129a0174e10d17fe278e1b05d1b91ddea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 Mar 2025 03:01:38 -0400 Subject: [PATCH 14/16] correct data in data file and pair_coeff changes are no longer needed also re-create reference log files --- .../data.dpd_coul_slater_long | 12 +- .../in.dpd_coul_slater_long | 51 +++--- .../log.19Jun24.dpd_coul_slater.g++.1 | 147 ------------------ .../log.19Jun24.dpd_coul_slater.g++.4 | 147 ------------------ .../log.25Mar25.dpd_coul_slater.g++.1 | 145 +++++++++++++++++ .../log.25Mar25.dpd_coul_slater.g++.4 | 145 +++++++++++++++++ 6 files changed, 318 insertions(+), 329 deletions(-) delete mode 100644 examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.1 delete mode 100644 examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.4 create mode 100644 examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.1 create mode 100644 examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.4 diff --git a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/data.dpd_coul_slater_long b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/data.dpd_coul_slater_long index 91ddddf4ec..29315a5901 100644 --- a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/data.dpd_coul_slater_long +++ b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/data.dpd_coul_slater_long @@ -15,12 +15,12 @@ Masses PairIJ Coeffs # dpd/coul/slater/long -1 1 78 4.5 yes 1 -1 2 78 4.5 yes 1 -1 3 78 4.5 yes 1 -2 2 78 4.5 no 1 -2 3 78 4.5 no 1 -3 3 78 4.5 no 1 +1 1 78 4.5 no 1 +1 2 78 4.5 no 1 +1 3 78 4.5 no 1 +2 2 78 4.5 yes 1 +2 3 78 4.5 yes 1 +3 3 78 4.5 yes 1 Atoms # full diff --git a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long index e683855b0d..dc73aa887b 100644 --- a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long +++ b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/in.dpd_coul_slater_long @@ -10,54 +10,47 @@ variable cut_coul equal 2.0 # Initialize LAMMPS run for 3-d periodic #------------------------------------------------------------------------------- -units lj -boundary p p p # periodic at all axes -atom_style full -dimension 3 +units lj +boundary p p p # periodic at all axes +atom_style full +dimension 3 -bond_style none -angle_style none -dihedral_style none -improper_style none +bond_style none +angle_style none +dihedral_style none +improper_style none -newton on -comm_modify vel yes # store info of ghost atoms btw processors +newton on +comm_modify vel yes # store info of ghost atoms btw processors #------------------------------------------------------------------------------- # Box creation and configuration #------------------------------------------------------------------------------- # Define pair style and coefficients -pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul} # Enable long range electrostatics solver -kspace_style pppm 1e-04 - - -read_data data.dpd_coul_slater_long - -pair_coeff * * 78.0 4.5 -pair_coeff 2*3 2*3 78.0 4.5 yes +kspace_style pppm 1e-04 +read_data data.dpd_coul_slater_long # Construct neighbors every steps -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes #------------------------------------------------------------------------------- # Run the simulation #------------------------------------------------------------------------------- -thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax -thermo_modify norm no -thermo 100 +thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax +thermo_modify norm no +thermo 100 -timestep 0.01 -run_style verlet +timestep 0.01 +run_style verlet -fix 1 all nve +fix 1 all nve -run 1000 - -unfix 1 +run 1000 diff --git a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.1 b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.1 deleted file mode 100644 index 39c0ded481..0000000000 --- a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.1 +++ /dev/null @@ -1,147 +0,0 @@ -LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-262-g0aff26705c-modified) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -# DPD Ionic Fluid - -variable T equal 1.0 -variable cut_DPD equal 1.0 -variable seed equal 165412 -variable lambda equal 0.25 -variable cut_coul equal 2.0 - -#------------------------------------------------------------------------------- -# Initialize LAMMPS run for 3-d periodic -#------------------------------------------------------------------------------- - -units lj -boundary p p p # periodic at all axes -atom_style full -dimension 3 - -bond_style none -angle_style none -dihedral_style none -improper_style none - -newton on -comm_modify vel yes # store info of ghost atoms btw processors - -#------------------------------------------------------------------------------- -# Box creation and configuration -#------------------------------------------------------------------------------- - -# Define pair style and coefficients -pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul} -pair_style dpd/coul/slater/long 1 1 165412 0.25 2 - -read_data data.dpd_coul_slater_long -Reading data file ... - orthogonal box = (0 0 0) to (5 5 5) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 375 atoms - reading velocities ... - 375 velocities -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 0 0 - special bond factors coul: 0 0 0 - 0 = max # of 1-2 neighbors - 0 = max # of 1-3 neighbors - 0 = max # of 1-4 neighbors - 1 = max # of special neighbors - special bonds CPU = 0.000 seconds - read_data CPU = 0.003 seconds - -# Enable long range electrostatics solver -kspace_style pppm 1e-04 - -# Construct neighbors every steps -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -#------------------------------------------------------------------------------- -# Run the simulation -#------------------------------------------------------------------------------- - -thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax -thermo_modify norm no -thermo 100 - -timestep 0.01 -run_style verlet - -fix 1 all nve - -run 1000 -PPPM initialization ... - using 12-bit tables for long-range coulomb (src/kspace.cpp:342) - G vector (1/distance) = 1.4828454 - grid = 20 20 20 - stencil order = 5 - estimated absolute RMS force accuracy = 7.7240141e-05 - estimated relative force accuracy = 7.7240141e-05 - using double precision FFTW3 - 3d grid and FFT values/proc = 24389 8000 -Generated 0 of 3 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 = 3 - ghost atom cutoff = 3 - binsize = 1.5, bins = 4 4 4 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair dpd/coul/slater/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 8.359 | 8.359 | 8.359 Mbytes - Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax - 0 0.9849949 69.271905 125 4673.0443 0 -30.365103 4642.6792 552.58214 646.76798 65.851035 - 100 1.0614027 69.794624 125 4659.0139 0 -31.906319 4627.1075 595.44692 612.94396 60.338653 - 200 0.9422517 68.721098 125 4687.8862 0 -33.81531 4654.0709 528.6032 620.25627 62.726994 - 300 0.8956649 69.323482 125 4721.0824 0 -33.854275 4687.2281 502.46801 670.22699 73.087908 - 400 0.99584547 69.670416 125 4713.9086 0 -30.783633 4683.125 558.66931 607.65881 59.224652 - 500 1.0565931 69.497816 125 4701.2584 0 -26.80545 4674.4529 592.74873 646.18907 71.398122 - 600 1.0071523 70.26222 125 4659.2061 0 -29.98909 4629.217 565.01243 630.00244 58.264115 - 700 1.0507355 67.920078 125 4695.255 0 -32.649209 4662.6058 589.46259 651.80459 70.573524 - 800 0.98561942 68.279591 125 4745.7603 0 -28.98491 4716.7754 552.9325 627.14371 67.196483 - 900 0.96470105 70.742864 125 4706.3605 0 -30.271633 4676.0889 541.19729 644.43036 79.474998 - 1000 1.0204819 70.164419 125 4654.6077 0 -27.797433 4626.8103 572.49035 624.19728 71.825307 -Loop time of 2.10153 on 1 procs for 1000 steps with 375 atoms - -Performance: 411128.483 tau/day, 475.843 timesteps/s, 178.441 katom-step/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1779 | 1.1779 | 1.1779 | 0.0 | 56.05 -Bond | 6.507e-05 | 6.507e-05 | 6.507e-05 | 0.0 | 0.00 -Kspace | 0.74636 | 0.74636 | 0.74636 | 0.0 | 35.51 -Neigh | 0.12903 | 0.12903 | 0.12903 | 0.0 | 6.14 -Comm | 0.039726 | 0.039726 | 0.039726 | 0.0 | 1.89 -Output | 0.00027587 | 0.00027587 | 0.00027587 | 0.0 | 0.01 -Modify | 0.0037596 | 0.0037596 | 0.0037596 | 0.0 | 0.18 -Other | | 0.004451 | | | 0.21 - -Nlocal: 375 ave 375 max 375 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 3613 ave 3613 max 3613 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 62354 ave 62354 max 62354 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 62354 -Ave neighs/atom = 166.27733 -Ave special neighs/atom = 0 -Neighbor list builds = 65 -Dangerous builds = 0 - -unfix 1 - -Total wall time: 0:00:02 diff --git a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.4 b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.4 deleted file mode 100644 index 445baac0f7..0000000000 --- a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.19Jun24.dpd_coul_slater.g++.4 +++ /dev/null @@ -1,147 +0,0 @@ -LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-262-g0aff26705c-modified) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) - using 1 OpenMP thread(s) per MPI task -# DPD Ionic Fluid - -variable T equal 1.0 -variable cut_DPD equal 1.0 -variable seed equal 165412 -variable lambda equal 0.25 -variable cut_coul equal 2.0 - -#------------------------------------------------------------------------------- -# Initialize LAMMPS run for 3-d periodic -#------------------------------------------------------------------------------- - -units lj -boundary p p p # periodic at all axes -atom_style full -dimension 3 - -bond_style none -angle_style none -dihedral_style none -improper_style none - -newton on -comm_modify vel yes # store info of ghost atoms btw processors - -#------------------------------------------------------------------------------- -# Box creation and configuration -#------------------------------------------------------------------------------- - -# Define pair style and coefficients -pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul} -pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul} -pair_style dpd/coul/slater/long 1 1 165412 0.25 2 - -read_data data.dpd_coul_slater_long -Reading data file ... - orthogonal box = (0 0 0) to (5 5 5) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 375 atoms - reading velocities ... - 375 velocities -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 0 0 - special bond factors coul: 0 0 0 - 0 = max # of 1-2 neighbors - 0 = max # of 1-3 neighbors - 0 = max # of 1-4 neighbors - 1 = max # of special neighbors - special bonds CPU = 0.000 seconds - read_data CPU = 0.003 seconds - -# Enable long range electrostatics solver -kspace_style pppm 1e-04 - -# Construct neighbors every steps -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -#------------------------------------------------------------------------------- -# Run the simulation -#------------------------------------------------------------------------------- - -thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax -thermo_modify norm no -thermo 100 - -timestep 0.01 -run_style verlet - -fix 1 all nve - -run 1000 -PPPM initialization ... - using 12-bit tables for long-range coulomb (src/kspace.cpp:342) - G vector (1/distance) = 1.4828454 - grid = 20 20 20 - stencil order = 5 - estimated absolute RMS force accuracy = 7.7240141e-05 - estimated relative force accuracy = 7.7240141e-05 - using double precision FFTW3 - 3d grid and FFT values/proc = 10469 2000 -Generated 0 of 3 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 = 3 - ghost atom cutoff = 3 - binsize = 1.5, bins = 4 4 4 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair dpd/coul/slater/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.208 | 7.208 | 7.209 Mbytes - Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax - 0 0.9849949 69.076433 125 4673.0443 0 -30.365103 4642.6792 552.58214 613.18374 70.700582 - 100 0.95374867 69.110009 125 4681.1097 0 -31.260804 4649.8489 535.053 629.95109 62.05418 - 200 1.0076152 69.824904 125 4670.7458 0 -28.382203 4642.3636 565.27213 656.8501 72.049813 - 300 1.0014752 69.666331 125 4696.454 0 -26.943577 4669.5105 561.8276 631.49861 74.737274 - 400 0.98863876 69.731774 125 4700.7552 0 -23.816077 4676.9391 554.62634 637.74742 68.928573 - 500 0.95782852 68.588075 125 4698.588 0 -29.249543 4669.3385 537.3418 646.31897 68.800569 - 600 0.97443232 70.864079 125 4674.8821 0 -26.415644 4648.4664 546.65653 606.50755 78.664429 - 700 0.98783988 68.908299 125 4692.5536 0 -28.092022 4664.4616 554.17817 638.98401 69.691814 - 800 0.98000145 69.83977 125 4706.6365 0 -29.648365 4676.9881 549.78082 626.84362 73.133934 - 900 1.0526251 69.466078 125 4671.9648 0 -30.941117 4641.0237 590.52269 618.1049 62.333546 - 1000 0.98340746 69.527121 125 4728.2894 0 -31.869907 4696.4195 551.69159 630.14208 61.392611 -Loop time of 0.928543 on 4 procs for 1000 steps with 375 atoms - -Performance: 930490.137 tau/day, 1076.956 timesteps/s, 403.859 katom-step/s -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.30761 | 0.34974 | 0.38864 | 4.9 | 37.67 -Bond | 8.4633e-05 | 9.0539e-05 | 9.9184e-05 | 0.0 | 0.01 -Kspace | 0.39038 | 0.42976 | 0.47215 | 4.4 | 46.28 -Neigh | 0.033986 | 0.035576 | 0.036791 | 0.5 | 3.83 -Comm | 0.10247 | 0.10324 | 0.10481 | 0.3 | 11.12 -Output | 0.00024145 | 0.00027404 | 0.00036867 | 0.0 | 0.03 -Modify | 0.0022402 | 0.0025068 | 0.0026343 | 0.3 | 0.27 -Other | | 0.007356 | | | 0.79 - -Nlocal: 93.75 ave 96 max 93 min -Histogram: 3 0 0 0 0 0 0 0 0 1 -Nghost: 2289.75 ave 2317 max 2271 min -Histogram: 1 1 0 0 1 0 0 0 0 1 -Neighs: 15590.2 ave 16765 max 14540 min -Histogram: 1 0 1 0 0 1 0 0 0 1 - -Total # of neighbors = 62361 -Ave neighs/atom = 166.296 -Ave special neighs/atom = 0 -Neighbor list builds = 64 -Dangerous builds = 0 - -unfix 1 - -Total wall time: 0:00:00 diff --git a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.1 b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.1 new file mode 100644 index 0000000000..4b2509550f --- /dev/null +++ b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.1 @@ -0,0 +1,145 @@ +LAMMPS (4 Feb 2025 - Development - patch_4Feb2025-468-gd830412228-modified) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:99) + using 1 OpenMP thread(s) per MPI task +# DPD Ionic Fluid + +variable T equal 1.0 +variable cut_DPD equal 1.0 +variable seed equal 165412 +variable lambda equal 0.25 +variable cut_coul equal 2.0 + +#------------------------------------------------------------------------------- +# Initialize LAMMPS run for 3-d periodic +#------------------------------------------------------------------------------- + +units lj +boundary p p p # periodic at all axes +atom_style full +dimension 3 + +bond_style none +angle_style none +dihedral_style none +improper_style none + +newton on +comm_modify vel yes # store info of ghost atoms btw processors + +#------------------------------------------------------------------------------- +# Box creation and configuration +#------------------------------------------------------------------------------- + +# Define pair style and coefficients +pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul} +pair_style dpd/coul/slater/long 1 1 165412 0.25 2 + +# Enable long range electrostatics solver +kspace_style pppm 1e-04 + +read_data data.dpd_coul_slater_long +Reading data file ... + orthogonal box = (0 0 0) to (5 5 5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 375 atoms + reading velocities ... + 375 velocities +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.004 seconds + +# Construct neighbors every steps +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +#------------------------------------------------------------------------------- +# Run the simulation +#------------------------------------------------------------------------------- + +thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax +thermo_modify norm no +thermo 100 + +timestep 0.01 +run_style verlet + +fix 1 all nve + +run 1000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 1.4828454 + grid = 20 20 20 + stencil order = 5 + estimated absolute RMS force accuracy = 7.7240141e-05 + estimated relative force accuracy = 7.7240141e-05 + using double precision KISS FFT + 3d grid and FFT values/proc = 24389 8000 +Generated 0 of 3 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 = 3 + ghost atom cutoff = 3 + binsize = 1.5, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair dpd/coul/slater/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 8.359 | 8.359 | 8.359 Mbytes + Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax + 0 0.9849949 69.242343 125 4673.0443 -3.2653869 -30.365103 4639.4138 552.58214 646.89929 65.851035 + 100 1.023885 69.716134 125 4676.9465 -4.9878506 -34.092864 4637.8658 574.39949 663.35845 94.350026 + 200 1.0286646 69.674249 125 4636.201 -4.6314926 -33.406897 4598.1626 577.08087 614.52805 62.295431 + 300 0.9745797 69.689534 125 4679.9157 -4.3964184 -30.560567 4644.9588 546.73921 603.46282 60.56253 + 400 0.99487931 69.17085 125 4678.0362 -4.9518269 -34.446596 4638.6378 558.12729 656.99738 88.090014 + 500 0.97732377 69.551562 125 4684.3709 -5.0851581 -33.863212 4645.4226 548.27864 647.12533 75.851935 + 600 0.95396337 68.358297 125 4706.824 -4.269168 -33.634096 4668.9207 535.17345 604.31276 63.41042 + 700 0.99397324 68.365109 125 4669.1062 -4.700146 -35.014001 4629.3921 557.61899 633.29262 74.300913 + 800 1.0157864 69.263686 125 4664.1398 -4.0142381 -34.372669 4625.7529 569.85616 595.81462 67.046561 + 900 0.9925779 70.008922 125 4652.3023 -2.7845751 -33.095293 4616.4224 556.8362 620.13154 82.785317 + 1000 0.97336501 68.973657 125 4688.8002 -5.5239266 -36.42345 4646.8529 546.05777 625.66451 64.948859 +Loop time of 0.755094 on 1 procs for 1000 steps with 375 atoms + +Performance: 1144228.093 tau/day, 1324.338 timesteps/s, 496.627 katom-step/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.14421 | 0.14421 | 0.14421 | 0.0 | 19.10 +Bond | 3.8885e-05 | 3.8885e-05 | 3.8885e-05 | 0.0 | 0.01 +Kspace | 0.53292 | 0.53292 | 0.53292 | 0.0 | 70.58 +Neigh | 0.056741 | 0.056741 | 0.056741 | 0.0 | 7.51 +Comm | 0.017676 | 0.017676 | 0.017676 | 0.0 | 2.34 +Output | 0.00024925 | 0.00024925 | 0.00024925 | 0.0 | 0.03 +Modify | 0.0016688 | 0.0016688 | 0.0016688 | 0.0 | 0.22 +Other | | 0.001588 | | | 0.21 + +Nlocal: 375 ave 375 max 375 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3570 ave 3570 max 3570 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19729 ave 19729 max 19729 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19729 +Ave neighs/atom = 52.610667 +Ave special neighs/atom = 0 +Neighbor list builds = 66 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.4 b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.4 new file mode 100644 index 0000000000..52d50716c9 --- /dev/null +++ b/examples/PACKAGES/dpd-basic/dpd_coul_slater_long/log.25Mar25.dpd_coul_slater.g++.4 @@ -0,0 +1,145 @@ +LAMMPS (4 Feb 2025 - Development - patch_4Feb2025-468-gd830412228-modified) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:99) + using 1 OpenMP thread(s) per MPI task +# DPD Ionic Fluid + +variable T equal 1.0 +variable cut_DPD equal 1.0 +variable seed equal 165412 +variable lambda equal 0.25 +variable cut_coul equal 2.0 + +#------------------------------------------------------------------------------- +# Initialize LAMMPS run for 3-d periodic +#------------------------------------------------------------------------------- + +units lj +boundary p p p # periodic at all axes +atom_style full +dimension 3 + +bond_style none +angle_style none +dihedral_style none +improper_style none + +newton on +comm_modify vel yes # store info of ghost atoms btw processors + +#------------------------------------------------------------------------------- +# Box creation and configuration +#------------------------------------------------------------------------------- + +# Define pair style and coefficients +pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul} +pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul} +pair_style dpd/coul/slater/long 1 1 165412 0.25 2 + +# Enable long range electrostatics solver +kspace_style pppm 1e-04 + +read_data data.dpd_coul_slater_long +Reading data file ... + orthogonal box = (0 0 0) to (5 5 5) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 375 atoms + reading velocities ... + 375 velocities +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000 seconds + read_data CPU = 0.004 seconds + +# Construct neighbors every steps +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +#------------------------------------------------------------------------------- +# Run the simulation +#------------------------------------------------------------------------------- + +thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax +thermo_modify norm no +thermo 100 + +timestep 0.01 +run_style verlet + +fix 1 all nve + +run 1000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 1.4828454 + grid = 20 20 20 + stencil order = 5 + estimated absolute RMS force accuracy = 7.7240141e-05 + estimated relative force accuracy = 7.7240141e-05 + using double precision KISS FFT + 3d grid and FFT values/proc = 10469 2000 +Generated 0 of 3 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 = 3 + ghost atom cutoff = 3 + binsize = 1.5, bins = 4 4 4 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair dpd/coul/slater/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.208 | 7.208 | 7.209 Mbytes + Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax + 0 0.9849949 69.04687 125 4673.0443 -3.2653869 -30.365103 4639.4138 552.58214 613.14254 70.700582 + 100 1.0206537 69.308834 125 4676.3153 -4.5693306 -33.647673 4638.0983 572.58672 630.70953 76.020236 + 200 0.99990746 68.572978 125 4707.1556 -3.4977853 -33.275671 4670.3821 560.94809 633.00167 77.040049 + 300 0.91055241 69.390592 125 4685.5268 -2.9764038 -29.986737 4652.5637 510.8199 614.61006 62.799933 + 400 1.0080135 69.442971 125 4677.3078 -4.8740989 -32.908722 4639.525 565.49557 649.20121 61.033612 + 500 0.99500653 68.275189 125 4718.6774 -4.2475783 -35.206868 4679.223 558.19867 657.3073 74.738502 + 600 1.052925 70.601712 125 4703.6749 -2.8511316 -34.085418 4666.7383 590.69094 641.70441 59.043346 + 700 0.96467445 69.502018 125 4720.4257 -4.3345734 -34.310005 4681.7811 541.18237 656.24965 72.433637 + 800 1.0657358 70.960958 125 4685.5637 -5.8903418 -35.207202 4644.4661 597.87781 595.54446 61.462159 + 900 1.0273388 68.735518 125 4693.5106 -2.4175829 -28.602387 4662.4906 576.33707 598.80294 71.747886 + 1000 0.9702835 69.885576 125 4701.4385 -3.6513555 -29.487331 4668.2999 544.32904 666.55262 73.231425 +Loop time of 0.270344 on 4 procs for 1000 steps with 375 atoms + +Performance: 3195929.791 tau/day, 3698.993 timesteps/s, 1.387 Matom-step/s +99.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.031268 | 0.035485 | 0.039491 | 1.6 | 13.13 +Bond | 3.3378e-05 | 3.4848e-05 | 3.5667e-05 | 0.0 | 0.01 +Kspace | 0.18632 | 0.19083 | 0.19556 | 0.8 | 70.59 +Neigh | 0.012413 | 0.012991 | 0.013598 | 0.4 | 4.81 +Comm | 0.028195 | 0.028407 | 0.028626 | 0.1 | 10.51 +Output | 0.00013369 | 0.00015738 | 0.00022498 | 0.0 | 0.06 +Modify | 0.00055373 | 0.00059062 | 0.00068807 | 0.0 | 0.22 +Other | | 0.001846 | | | 0.68 + +Nlocal: 93.75 ave 95 max 92 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Nghost: 2286 ave 2307 max 2269 min +Histogram: 1 0 1 0 0 1 0 0 0 1 +Neighs: 4945 ave 5443 max 4513 min +Histogram: 1 0 1 0 0 1 0 0 0 1 + +Total # of neighbors = 19780 +Ave neighs/atom = 52.746667 +Ave special neighs/atom = 0 +Neighbor list builds = 66 +Dangerous builds = 0 + +Total wall time: 0:00:00 From 7fba02f8655aa85dd8eac7380e0088cea0a57b07 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 Mar 2025 03:02:17 -0400 Subject: [PATCH 15/16] fix logic bug when writing coeffs to data file --- src/DPD-BASIC/pair_dpd_coul_slater_long.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp b/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp index 4c4a62f157..40730036de 100644 --- a/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp +++ b/src/DPD-BASIC/pair_dpd_coul_slater_long.cpp @@ -473,7 +473,8 @@ void PairDPDCoulSlaterLong::read_restart_settings(FILE *fp) void PairDPDCoulSlaterLong::write_data(FILE *fp) { for (int i = 1; i <= atom->ntypes; i++) - fprintf(fp,"%d %g %g\n",i,a0[i][i],gamma[i][i]); + fprintf(fp,"%d %g %g %s %g\n",i,a0[i][i],gamma[i][i], + (cut_slatersq[i][i] == 0.0) ? "no" : "yes", cut_dpd[i][i]); } /* ---------------------------------------------------------------------- @@ -485,7 +486,7 @@ void PairDPDCoulSlaterLong::write_data_all(FILE *fp) for (int i = 1; i <= atom->ntypes; i++) for (int j = i; j <= atom->ntypes; j++) fprintf(fp,"%d %d %g %g %s %g\n",i,j,a0[i][j],gamma[i][j], - (cut_slatersq[i][j] == 0.0) ? "yes" : "no", cut_dpd[i][j]); + (cut_slatersq[i][j] == 0.0) ? "no" : "yes", cut_dpd[i][j]); } /* ---------------------------------------------------------------------- */ From 183486d8135ae6340beb644723bdbc2224cbd9e3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 Mar 2025 11:27:19 -0400 Subject: [PATCH 16/16] implement suggestions from @ndtrung81 --- doc/src/Howto_moltemplate.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/Howto_moltemplate.rst b/doc/src/Howto_moltemplate.rst index 470f76ded0..c4f89a4e26 100644 --- a/doc/src/Howto_moltemplate.rst +++ b/doc/src/Howto_moltemplate.rst @@ -76,10 +76,10 @@ the atom type will determine the bond type. The other bonded interactions (e.g. angles, dihedrals, and impropers) will be automatically generated by Moltemplate. -If the simulation is non-neutral, or Moltemplate complains that you have -missing bond, angle, or dihedral types, this probably means at least one -of your atom types is incorrect (or perhaps there is no suitable atom -type currently defined in the ``oplsaa2024.lt`` file). +If the simulation is not charge-neutral, or Moltemplate complains that +you have missing bond, angle, or dihedral types, this probably means that +at least one of your atom types is incorrect (or that perhaps there is no +suitable atom type currently defined in the ``oplsaa2024.lt`` file). The second step is to create a master file with instructions to build a starting structure and the LAMMPS commands to run an NPT simulation. The