Merge remote-tracking branch 'akohlmey/unit-test-updates' into refactor-table-reading

This commit is contained in:
Richard Berger 2020-06-02 18:24:23 -04:00
commit 18bb4bfdc2
No known key found for this signature in database
GPG Key ID: A9E83994E0BA0CAB
24 changed files with 18911 additions and 106 deletions

View File

@ -1,4 +1,4 @@
.TH LAMMPS "5 May 2020" "2020-05-5" .TH LAMMPS "2 June 2020" "2020-06-02"
.SH NAME .SH NAME
.B LAMMPS .B LAMMPS
\- Molecular Dynamics Simulator. \- Molecular Dynamics Simulator.

View File

@ -2064,7 +2064,7 @@ molecules, and chiral-sensitive reactions.
* examples/USER/reaction * examples/USER/reaction
* `2017 LAMMPS Workshop <https://lammps.sandia.gov/workshops/Aug17/pdf/gissinger.pdf>`_ * `2017 LAMMPS Workshop <https://lammps.sandia.gov/workshops/Aug17/pdf/gissinger.pdf>`_
* `2019 LAMMPS Workshop <https://lammps.sandia.gov/workshops/Aug19/talk_gissinger.pdf>`_ * `2019 LAMMPS Workshop <https://lammps.sandia.gov/workshops/Aug19/talk_gissinger.pdf>`_
* disarmmd.org * reacter.org
---------- ----------

View File

@ -300,7 +300,8 @@ either 'none' or 'charges.' Further details are provided in the
discussion of the 'update_edges' keyword. The fifth optional section discussion of the 'update_edges' keyword. The fifth optional section
begins with the keyword 'Constraints' and lists additional criteria begins with the keyword 'Constraints' and lists additional criteria
that must be satisfied in order for the reaction to occur. Currently, that must be satisfied in order for the reaction to occur. Currently,
there are four types of constraints available, as discussed below. there are four types of constraints available, as discussed below:
'distance', 'angle', 'dihedral', and 'arrhenius'.
A sample map file is given below: A sample map file is given below:
@ -353,8 +354,9 @@ has syntax as follows:
distance *ID1* *ID2* *rmin* *rmax* distance *ID1* *ID2* *rmin* *rmax*
where 'distance' is the required keyword, *ID1* and *ID2* are where 'distance' is the required keyword, *ID1* and *ID2* are
pre-reaction atom IDs, and these two atoms must be separated by a pre-reaction atom IDs (or molecule-fragment IDs, see below), and these
distance between *rmin* and *rmax* for the reaction to occur. two atoms must be separated by a distance between *rmin* and *rmax*
for the reaction to occur.
The constraint of type 'angle' has the following syntax: The constraint of type 'angle' has the following syntax:
@ -363,11 +365,11 @@ The constraint of type 'angle' has the following syntax:
angle *ID1* *ID2* *ID3* *amin* *amax* angle *ID1* *ID2* *ID3* *amin* *amax*
where 'angle' is the required keyword, *ID1*\ , *ID2* and *ID3* are where 'angle' is the required keyword, *ID1*\ , *ID2* and *ID3* are
pre-reaction atom IDs, and these three atoms must form an angle pre-reaction atom IDs (or molecule-fragment IDs, see below), and these
between *amin* and *amax* for the reaction to occur (where *ID2* is three atoms must form an angle between *amin* and *amax* for the
the central atom). Angles must be specified in degrees. This reaction to occur (where *ID2* is the central atom). Angles must be
constraint can be used to enforce a certain orientation between specified in degrees. This constraint can be used to enforce a certain
reacting molecules. orientation between reacting molecules.
The constraint of type 'dihedral' has the following syntax: The constraint of type 'dihedral' has the following syntax:
@ -376,15 +378,23 @@ The constraint of type 'dihedral' has the following syntax:
dihedral *ID1* *ID2* *ID3* *ID4* *amin* *amax* *amin2* *amax2* dihedral *ID1* *ID2* *ID3* *ID4* *amin* *amax* *amin2* *amax2*
where 'dihedral' is the required keyword, and *ID1*\ , *ID2*\ , *ID3* where 'dihedral' is the required keyword, and *ID1*\ , *ID2*\ , *ID3*
and *ID4* are pre-reaction atom IDs. Dihedral angles are calculated in and *ID4* are pre-reaction atom IDs (or molecule-fragment IDs, see
the interval (-180,180]. Refer to the :doc:`dihedral style <dihedral_style>` below). Dihedral angles are calculated in the interval (-180,180].
documentation for further details on convention. If *amin* is less Refer to the :doc:`dihedral style <dihedral_style>` documentation for
than *amax*, these four atoms must form a dihedral angle greater than further details on convention. If *amin* is less than *amax*, these
*amin* **and** less than *amax* for the reaction to occur. If *amin* four atoms must form a dihedral angle greater than *amin* **and** less
is greater than *amax*, these four atoms must form a dihedral angle than *amax* for the reaction to occur. If *amin* is greater than
greater than *amin* **or** less than *amax* for the reaction to occur. *amax*, these four atoms must form a dihedral angle greater than
Angles must be specified in degrees. Optionally, a second range of *amin* **or** less than *amax* for the reaction to occur. Angles must
permissible angles *amin2*-*amax2* can be specified. be specified in degrees. Optionally, a second range of permissible
angles *amin2*-*amax2* can be specified.
For the 'distance', 'angle', and 'dihedral' constraints (explained
above), atom IDs can be replaced by pre-reaction molecule-fragment
IDs. The molecule-fragment ID must begin with a letter. The location
of the ID is the geometric center of all atom positions in the
fragment. The molecule fragment must have been defined in the
:doc:`molecule <molecule>` command for the pre-reaction template.
The constraint of type 'arrhenius' imposes an additional reaction The constraint of type 'arrhenius' imposes an additional reaction
probability according to the temperature-dependent Arrhenius equation: probability according to the temperature-dependent Arrhenius equation:

View File

@ -629,7 +629,6 @@ dipolar
dir dir
Direc Direc
dirname dirname
disarmmd
discoverable discoverable
discretization discretization
discretized discretized
@ -2457,6 +2456,7 @@ rdc
rdf rdf
RDideal RDideal
rdx rdx
reacter
README README
realtime realtime
reamin reamin

View File

@ -1,4 +1,4 @@
This package implements the DisARMMD protocol (disarmmd.org) as This package implements the REACTER protocol (reacter.org) as
"fix bond/react." This fix allows for complex topology changes "fix bond/react." This fix allows for complex topology changes
during a running MD simulation, when using classical force fields. during a running MD simulation, when using classical force fields.
Topology changes are defined in pre- and post-reaction molecule Topology changes are defined in pre- and post-reaction molecule
@ -6,7 +6,7 @@ templates and can include creation and deletion of bonds, angles,
dihedrals, impropers, atom types, bond types, angle types, dihedrals, impropers, atom types, bond types, angle types,
dihedral types, improper types, and/or atomic charges. dihedral types, improper types, and/or atomic charges.
The DisARMMD protocol is a method for modeling chemical reactions in The REACTER protocol is a method for modeling chemical reactions in
classical molecular dynamics simulations. It was developed to build classical molecular dynamics simulations. It was developed to build
physically-realistic initial configurations for amorphous or physically-realistic initial configurations for amorphous or
crosslinked materials. Any number of competing or reversible reaction crosslinked materials. Any number of competing or reversible reaction
@ -15,9 +15,9 @@ advanced options currently available include reaction constraints
(e.g. angle and Arrhenius constraints), deletion of reaction (e.g. angle and Arrhenius constraints), deletion of reaction
byproducts or other small molecules, and chiral-sensitive reactions. byproducts or other small molecules, and chiral-sensitive reactions.
The DisARMMD methodology is detailed in: The REACTER methodology is detailed in:
Gissinger et al., Polymer 128, 211-217 (2017) Gissinger et al., Polymer 128, 211-217 (2017)
https://doi.org/10.1016/j.polymer.2017.09.038 https://doi.org/10.1016/j.polymer.2017.09.038
This package was created by Jacob Gissinger (info@disarmmd.org), This package was created by Jacob Gissinger (jrgiss05@gmail.com),
while at the NASA Langley Research Center. while at the NASA Langley Research Center.

View File

@ -62,7 +62,7 @@ static const char cite_fix_bond_react[] =
#define BIG 1.0e20 #define BIG 1.0e20
#define DELTA 16 #define DELTA 16
#define MAXGUESS 20 // max # of guesses allowed by superimpose algorithm #define MAXGUESS 20 // max # of guesses allowed by superimpose algorithm
#define MAXCONARGS 10 // max # of arguments for any type of constraint + rxnID #define MAXCONARGS 14 // max # of arguments for any type of constraint + rxnID
#define NUMVARVALS 4 // max # of keyword values that have variables as input #define NUMVARVALS 4 // max # of keyword values that have variables as input
// various statuses of superimpose algorithm: // various statuses of superimpose algorithm:
@ -1756,7 +1756,7 @@ evaluate constraints: return 0 if any aren't satisfied
int FixBondReact::check_constraints() int FixBondReact::check_constraints()
{ {
tagint atom1,atom2,atom3,atom4; double x1[3],x2[3],x3[3],x4[3];
double delx,dely,delz,rsq; double delx,dely,delz,rsq;
double delx1,dely1,delz1,delx2,dely2,delz2; double delx1,dely1,delz1,delx2,dely2,delz2;
double rsq1,rsq2,r1,r2,c,t,prrhob; double rsq1,rsq2,r1,r2,c,t,prrhob;
@ -1766,36 +1766,37 @@ int FixBondReact::check_constraints()
double s,phi; double s,phi;
int ANDgate; int ANDgate;
tagint atom1,atom2;
double **x = atom->x; double **x = atom->x;
for (int i = 0; i < nconstraints; i++) { for (int i = 0; i < nconstraints; i++) {
if (constraints[i][0] == rxnID) { if (constraints[i][0] == rxnID) {
if (constraints[i][1] == DISTANCE) { if (constraints[i][1] == DISTANCE) {
atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); get_IDcoords((int) constraints[i][2], (int) constraints[i][3], x1);
atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); get_IDcoords((int) constraints[i][4], (int) constraints[i][5], x2);
delx = x[atom1][0] - x[atom2][0]; delx = x1[0] - x2[0];
dely = x[atom1][1] - x[atom2][1]; dely = x1[1] - x2[1];
delz = x[atom1][2] - x[atom2][2]; delz = x1[2] - x2[2];
domain->minimum_image(delx,dely,delz); // ghost location fix domain->minimum_image(delx,dely,delz); // ghost location fix
rsq = delx*delx + dely*dely + delz*delz; rsq = delx*delx + dely*dely + delz*delz;
if (rsq < constraints[i][4] || rsq > constraints[i][5]) return 0; if (rsq < constraints[i][6] || rsq > constraints[i][7]) return 0;
} else if (constraints[i][1] == ANGLE) { } else if (constraints[i][1] == ANGLE) {
atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); get_IDcoords((int) constraints[i][2], (int) constraints[i][3], x1);
atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); get_IDcoords((int) constraints[i][4], (int) constraints[i][5], x2);
atom3 = atom->map(glove[(int) constraints[i][4]-1][1]); get_IDcoords((int) constraints[i][6], (int) constraints[i][7], x3);
// 1st bond // 1st bond
delx1 = x[atom1][0] - x[atom2][0]; delx1 = x1[0] - x2[0];
dely1 = x[atom1][1] - x[atom2][1]; dely1 = x1[1] - x2[1];
delz1 = x[atom1][2] - x[atom2][2]; delz1 = x1[2] - x2[2];
domain->minimum_image(delx1,dely1,delz1); // ghost location fix domain->minimum_image(delx1,dely1,delz1); // ghost location fix
rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1;
r1 = sqrt(rsq1); r1 = sqrt(rsq1);
// 2nd bond // 2nd bond
delx2 = x[atom3][0] - x[atom2][0]; delx2 = x3[0] - x2[0];
dely2 = x[atom3][1] - x[atom2][1]; dely2 = x3[1] - x2[1];
delz2 = x[atom3][2] - x[atom2][2]; delz2 = x3[2] - x2[2];
domain->minimum_image(delx2,dely2,delz2); // ghost location fix domain->minimum_image(delx2,dely2,delz2); // ghost location fix
rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2;
r2 = sqrt(rsq2); r2 = sqrt(rsq2);
@ -1805,22 +1806,22 @@ int FixBondReact::check_constraints()
c /= r1*r2; c /= r1*r2;
if (c > 1.0) c = 1.0; if (c > 1.0) c = 1.0;
if (c < -1.0) c = -1.0; if (c < -1.0) c = -1.0;
if (acos(c) < constraints[i][5] || acos(c) > constraints[i][6]) return 0; if (acos(c) < constraints[i][8] || acos(c) > constraints[i][9]) return 0;
} else if (constraints[i][1] == DIHEDRAL) { } else if (constraints[i][1] == DIHEDRAL) {
// phi calculation from dihedral style harmonic // phi calculation from dihedral style harmonic
atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); get_IDcoords((int) constraints[i][2], (int) constraints[i][3], x1);
atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); get_IDcoords((int) constraints[i][4], (int) constraints[i][5], x2);
atom3 = atom->map(glove[(int) constraints[i][4]-1][1]); get_IDcoords((int) constraints[i][6], (int) constraints[i][7], x3);
atom4 = atom->map(glove[(int) constraints[i][5]-1][1]); get_IDcoords((int) constraints[i][8], (int) constraints[i][9], x4);
vb1x = x[atom1][0] - x[atom2][0]; vb1x = x1[0] - x2[0];
vb1y = x[atom1][1] - x[atom2][1]; vb1y = x1[1] - x2[1];
vb1z = x[atom1][2] - x[atom2][2]; vb1z = x1[2] - x2[2];
domain->minimum_image(vb1x,vb1y,vb1z); domain->minimum_image(vb1x,vb1y,vb1z);
vb2x = x[atom3][0] - x[atom2][0]; vb2x = x3[0] - x2[0];
vb2y = x[atom3][1] - x[atom2][1]; vb2y = x3[1] - x2[1];
vb2z = x[atom3][2] - x[atom2][2]; vb2z = x3[2] - x2[2];
domain->minimum_image(vb2x,vb2y,vb2z); domain->minimum_image(vb2x,vb2y,vb2z);
vb2xm = -vb2x; vb2xm = -vb2x;
@ -1828,9 +1829,9 @@ int FixBondReact::check_constraints()
vb2zm = -vb2z; vb2zm = -vb2z;
domain->minimum_image(vb2xm,vb2ym,vb2zm); domain->minimum_image(vb2xm,vb2ym,vb2zm);
vb3x = x[atom4][0] - x[atom3][0]; vb3x = x4[0] - x3[0];
vb3y = x[atom4][1] - x[atom3][1]; vb3y = x4[1] - x3[1];
vb3z = x[atom4][2] - x[atom3][2]; vb3z = x4[2] - x3[2];
domain->minimum_image(vb3x,vb3y,vb3z); domain->minimum_image(vb3x,vb3y,vb3z);
ax = vb1y*vb2zm - vb1z*vb2ym; ax = vb1y*vb2zm - vb1z*vb2ym;
@ -1858,15 +1859,15 @@ int FixBondReact::check_constraints()
phi = atan2(s,c); phi = atan2(s,c);
ANDgate = 0; ANDgate = 0;
if (constraints[i][6] < constraints[i][7]) { if (constraints[i][10] < constraints[i][11]) {
if (phi > constraints[i][6] && phi < constraints[i][7]) ANDgate = 1; if (phi > constraints[i][10] && phi < constraints[i][11]) ANDgate = 1;
} else { } else {
if (phi > constraints[i][6] || phi < constraints[i][7]) ANDgate = 1; if (phi > constraints[i][10] || phi < constraints[i][11]) ANDgate = 1;
} }
if (constraints[i][8] < constraints[i][9]) { if (constraints[i][12] < constraints[i][13]) {
if (phi > constraints[i][8] && phi < constraints[i][9]) ANDgate = 1; if (phi > constraints[i][12] && phi < constraints[i][13]) ANDgate = 1;
} else { } else {
if (phi > constraints[i][8] || phi < constraints[i][9]) ANDgate = 1; if (phi > constraints[i][12] || phi < constraints[i][13]) ANDgate = 1;
} }
if (ANDgate != 1) return 0; if (ANDgate != 1) return 0;
} else if (constraints[i][1] == ARRHENIUS) { } else if (constraints[i][1] == ARRHENIUS) {
@ -1904,6 +1905,42 @@ int FixBondReact::check_constraints()
return 1; return 1;
} }
/* ----------------------------------------------------------------------
return pre-reaction atom or fragment location
fragment: given pre-reacted molID (onemol) and fragID,
return geometric center (of mapped simulation atoms)
------------------------------------------------------------------------- */
void FixBondReact::get_IDcoords(int mode, int myID, double *center)
{
double **x = atom->x;
if (mode == 1) {
int iatom = atom->map(glove[myID-1][1]);
for (int i = 0; i < 3; i++)
center[i] = x[iatom][i];
} else {
int iref = -1; // choose first atom as reference
int iatom;
int nfragatoms = 0;
for (int i = 0; i < 3; i++)
center[i] = 0;
for (int i = 0; i < onemol->natoms; i++) {
if (onemol->fragmentmask[myID][i]) {
if (iref == -1)
iref = atom->map(glove[i][1]);
iatom = atom->map(glove[i][1]);
iatom = domain->closest_image(iref,iatom);
for (int j = 0; j < 3; j++)
center[j] += x[iatom][j];
nfragatoms++;
}
}
for (int i = 0; i < 3; i++)
center[i] /= nfragatoms;
}
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
compute local temperature: average over all atoms in reaction template compute local temperature: average over all atoms in reaction template
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
@ -3255,48 +3292,43 @@ void FixBondReact::ChiralCenters(char *line, int myrxn)
void FixBondReact::Constraints(char *line, int myrxn) void FixBondReact::Constraints(char *line, int myrxn)
{ {
double tmp[MAXCONARGS]; double tmp[MAXCONARGS];
int n = strlen("distance") + 1; char **strargs;
char *constraint_type = new char[n]; memory->create(strargs,MAXCONARGS,MAXLINE,"bond/react:strargs");
char *constraint_type = new char[MAXLINE];
for (int i = 0; i < nconstr; i++) { for (int i = 0; i < nconstr; i++) {
readline(line); readline(line);
sscanf(line,"%s",constraint_type); sscanf(line,"%s",constraint_type);
constraints[nconstraints][0] = myrxn; constraints[nconstraints][0] = myrxn;
if (strcmp(constraint_type,"distance") == 0) { if (strcmp(constraint_type,"distance") == 0) {
constraints[nconstraints][1] = DISTANCE; constraints[nconstraints][1] = DISTANCE;
sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]); sscanf(line,"%*s %s %s %lg %lg",strargs[0],strargs[1],&tmp[0],&tmp[1]);
if (tmp[0] > onemol->natoms || tmp[1] > onemol->natoms) readID(strargs[0], nconstraints, 2, 3);
error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); readID(strargs[1], nconstraints, 4, 5);
constraints[nconstraints][2] = tmp[0]; // cutoffs
constraints[nconstraints][3] = tmp[1]; constraints[nconstraints][6] = tmp[0]*tmp[0]; // using square of distance
constraints[nconstraints][4] = tmp[2]*tmp[2]; // using square of distance constraints[nconstraints][7] = tmp[1]*tmp[1];
constraints[nconstraints][5] = tmp[3]*tmp[3];
} else if (strcmp(constraint_type,"angle") == 0) { } else if (strcmp(constraint_type,"angle") == 0) {
constraints[nconstraints][1] = ANGLE; constraints[nconstraints][1] = ANGLE;
sscanf(line,"%*s %lg %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3],&tmp[4]); sscanf(line,"%*s %s %s %s %lg %lg",strargs[0],strargs[1],strargs[2],&tmp[0],&tmp[1]);
if (tmp[0] > onemol->natoms || tmp[1] > onemol->natoms || tmp[2] > onemol->natoms) readID(strargs[0], nconstraints, 2, 3);
error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); readID(strargs[1], nconstraints, 4, 5);
constraints[nconstraints][2] = tmp[0]; readID(strargs[2], nconstraints, 6, 7);
constraints[nconstraints][3] = tmp[1]; constraints[nconstraints][8] = tmp[0]/180.0 * MY_PI;
constraints[nconstraints][4] = tmp[2]; constraints[nconstraints][9] = tmp[1]/180.0 * MY_PI;
constraints[nconstraints][5] = tmp[3]/180.0 * MY_PI;
constraints[nconstraints][6] = tmp[4]/180.0 * MY_PI;
} else if (strcmp(constraint_type,"dihedral") == 0) { } else if (strcmp(constraint_type,"dihedral") == 0) {
constraints[nconstraints][1] = DIHEDRAL; constraints[nconstraints][1] = DIHEDRAL;
tmp[6] = 181.0; // impossible range tmp[2] = 181.0; // impossible range
tmp[7] = 182.0; tmp[3] = 182.0;
sscanf(line,"%*s %lg %lg %lg %lg %lg %lg %lg %lg",&tmp[0],&tmp[1], sscanf(line,"%*s %s %s %s %s %lg %lg %lg %lg",strargs[0],strargs[1],
&tmp[2],&tmp[3],&tmp[4],&tmp[5],&tmp[6],&tmp[7]); strargs[2],strargs[3],&tmp[0],&tmp[1],&tmp[2],&tmp[3]);
if (tmp[0] > onemol->natoms || tmp[1] > onemol->natoms || readID(strargs[0], nconstraints, 2, 3);
tmp[2] > onemol->natoms || tmp[3] > onemol->natoms) readID(strargs[1], nconstraints, 4, 5);
error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); readID(strargs[2], nconstraints, 6, 7);
constraints[nconstraints][2] = tmp[0]; readID(strargs[3], nconstraints, 8, 9);
constraints[nconstraints][3] = tmp[1]; constraints[nconstraints][10] = tmp[0]/180.0 * MY_PI;
constraints[nconstraints][4] = tmp[2]; constraints[nconstraints][11] = tmp[1]/180.0 * MY_PI;
constraints[nconstraints][5] = tmp[3]; constraints[nconstraints][12] = tmp[2]/180.0 * MY_PI;
constraints[nconstraints][6] = tmp[4]/180.0 * MY_PI; constraints[nconstraints][13] = tmp[3]/180.0 * MY_PI;
constraints[nconstraints][7] = tmp[5]/180.0 * MY_PI;
constraints[nconstraints][8] = tmp[6]/180.0 * MY_PI;
constraints[nconstraints][9] = tmp[7]/180.0 * MY_PI;
} else if (strcmp(constraint_type,"arrhenius") == 0) { } else if (strcmp(constraint_type,"arrhenius") == 0) {
constraints[nconstraints][1] = ARRHENIUS; constraints[nconstraints][1] = ARRHENIUS;
constraints[nconstraints][2] = narrhenius++; constraints[nconstraints][2] = narrhenius++;
@ -3310,6 +3342,27 @@ void FixBondReact::Constraints(char *line, int myrxn)
nconstraints++; nconstraints++;
} }
delete [] constraint_type; delete [] constraint_type;
memory->destroy(strargs);
}
/* ----------------------------------------------------------------------
if ID starts with character, assume it is a pre-reaction molecule fragment ID
otherwise, it is a pre-reaction atom ID
---------------------------------------------------------------------- */
void FixBondReact::readID(char *strarg, int iconstr, int mode, int myID)
{
if (isalpha(strarg[0])) {
constraints[iconstr][mode] = 0; // fragment vs. atom ID flag
int ifragment = onemol->findfragment(strarg);
if (ifragment < 0) error->one(FLERR,"Bond/react: Molecule fragment does not exist");
constraints[iconstr][myID] = ifragment;
} else {
constraints[iconstr][mode] = 1; // fragment vs. atom ID flag
int iatom = atoi(strarg);
if (iatom > onemol->natoms) error->one(FLERR,"Bond/react: Invalid template atom ID in map file");
constraints[iconstr][myID] = iatom;
}
} }
void FixBondReact::open(char *file) void FixBondReact::open(char *file)

View File

@ -147,12 +147,13 @@ class FixBondReact : public Fix {
int glove_counter; // used to determine when to terminate Superimpose Algorithm int glove_counter; // used to determine when to terminate Superimpose Algorithm
void read(int); void read(int);
void EdgeIDs(char *,int); void EdgeIDs(char *, int);
void Equivalences(char *,int); void Equivalences(char *, int);
void CustomEdges(char *,int); void CustomEdges(char *, int);
void DeleteAtoms(char *,int); void DeleteAtoms(char *, int);
void ChiralCenters(char *,int); void ChiralCenters(char *, int);
void Constraints(char *,int); void Constraints(char *, int);
void readID(char *, int, int, int);
void make_a_guess (); void make_a_guess ();
void neighbor_loop(); void neighbor_loop();
@ -161,6 +162,7 @@ class FixBondReact : public Fix {
void inner_crosscheck_loop(); void inner_crosscheck_loop();
void ring_check(); void ring_check();
int check_constraints(); int check_constraints();
void get_IDcoords(int, int, double *);
double get_temperature(); double get_temperature();
int get_chirality(double[12]); // get handedness given an ordered set of coordinates int get_chirality(double[12]); // get handedness given an ordered set of coordinates
@ -288,4 +290,8 @@ E: Bond/react: Variable is not equal-style
Self-explanatory. Self-explanatory.
E: Bond/react: Molecule fragment does not exist
Self-explanatory.
*/ */

View File

@ -1 +1 @@
#define LAMMPS_VERSION "5 May 2020" #define LAMMPS_VERSION "2 Jun 2020"

View File

@ -288,7 +288,7 @@ void generate_yaml_file(const char *outfile, const TestConfig &config)
// equilibrium angle // equilibrium angle
std::stringstream eqstr; std::stringstream eqstr;
eqstr << lmp->atom->nangletypes; eqstr << lmp->atom->nangletypes;
for (std::size_t i=0; i < lmp->atom->nangletypes; ++i) { for (int i=0; i < lmp->atom->nangletypes; ++i) {
eqstr << " " << lmp->force->angle->equilibrium_angle(i+1); eqstr << " " << lmp->force->angle->equilibrium_angle(i+1);
} }
writer.emit("equilibrium", eqstr.str()); writer.emit("equilibrium", eqstr.str());

View File

@ -288,7 +288,7 @@ void generate_yaml_file(const char *outfile, const TestConfig &config)
// equilibrium distance // equilibrium distance
std::stringstream eqstr; std::stringstream eqstr;
eqstr << lmp->atom->nbondtypes; eqstr << lmp->atom->nbondtypes;
for (std::size_t i=0; i < lmp->atom->nbondtypes; ++i) { for (int i=0; i < lmp->atom->nbondtypes; ++i) {
eqstr << " " << lmp->force->bond->equilibrium_distance(i+1); eqstr << " " << lmp->force->bond->equilibrium_distance(i+1);
} }
writer.emit("equilibrium", eqstr.str()); writer.emit("equilibrium", eqstr.str());

View File

@ -0,0 +1,89 @@
---
lammps_version: 2 Jun 2020
date_generated: Tue Jun 2 16:53:15 202
epsilon: 5e-13
prerequisites: ! |
pair table
pre_commands: ! ""
post_commands: ! ""
input_file: in.metal
pair_style: table bitmap 10
pair_coeff: ! |
* * ${input_dir}/pair_table_bitmap.txt beck_1_1
extract: ! ""
natoms: 32
init_vdwl: 1.66863069929167
init_coul: 0
init_stress: ! |2-
6.1952827280949752e+00 6.0616458078803026e+00 5.8879068387604203e+00 2.0730193733654706e-01 -2.1217457971568116e-02 -8.9424946009241696e-02
init_forces: ! |2
1 1.3462021756359327e-02 6.5546484939056501e-02 1.4239378405106444e-02
2 -2.2007228833976065e-02 -7.7589845112095546e-02 4.8902697347770523e-02
3 -3.8360617077969741e-02 1.9000610721085417e-01 -4.8543675419659094e-02
4 2.0909689528763566e-02 -9.9051714348463316e-03 -5.2627007649843807e-02
5 5.6017317782444738e-02 1.4268372317778771e-01 3.5492113737546842e-02
6 4.1557359610043018e-02 2.9641106441236388e-02 -6.9666505508374872e-03
7 -6.4166646403998925e-02 8.9315602328966931e-02 -1.0227283854625933e-02
8 -6.8596281778498247e-02 -6.0833941051629016e-02 4.4682109809175953e-02
9 1.4368972530624599e-02 -5.5197060731424975e-02 -2.8201433919835286e-02
10 -3.2703871825595171e-02 -1.4474456554468246e-01 -1.1516819202560430e-01
11 -4.0405247666710227e-02 -5.0409352470214198e-02 4.2972316829875207e-02
12 3.0916743299077298e-02 -8.8133140512779831e-02 -3.9753798941002949e-03
13 -1.8590365196257386e-02 2.4575364499331190e-02 -4.7077193181172067e-02
14 5.6675408248286062e-02 -1.8711344187186302e-02 7.0130262965183210e-02
15 -3.1926591760213181e-02 3.1641397846490678e-02 -2.8162923341260547e-02
16 1.1005724174097668e-01 -9.1797768313712017e-02 3.7455099430156756e-02
17 4.3878459411519591e-02 1.3059623784047278e-01 -1.6097155896137277e-03
18 -1.4777439020699670e-01 -3.5658427272011572e-02 -7.0718736029538459e-02
19 -1.5580794194082498e-01 -8.1567700677555310e-02 3.7488943756308291e-02
20 2.4266515940572463e-02 1.9762354212930246e-02 -3.4097639624214998e-02
21 1.6277874455848959e-01 5.0800476849828920e-02 4.3314810824989737e-03
22 2.9893704848344602e-03 -8.1978960608305021e-02 -1.1775536941431530e-02
23 4.6993698780955703e-02 1.2309490227999968e-01 -8.0573799329662799e-02
24 1.2797425247184574e-01 9.4738372709908938e-02 8.3761735780926952e-02
25 6.9930077496344431e-02 4.2200999537168552e-03 -4.6754566887666743e-02
26 -5.1872497435892714e-02 -1.5107287052733298e-01 1.2864569803094950e-01
27 4.6175201131873622e-02 -4.7147053051923900e-03 -2.1152042044204553e-04
28 1.1139415424523944e-02 5.7577179243740957e-02 7.3714500884676210e-02
29 4.8901565126232033e-02 1.0736209516268529e-01 -3.2125425217601846e-03
30 -4.2584465166652936e-02 -3.0054615946788474e-02 -8.4428957096643942e-02
31 -2.0649926244740491e-02 -1.1590442114762316e-01 7.4794527710849712e-02
32 -1.9354598378544019e-01 -6.3287613853627508e-02 -2.2278111493111191e-02
run_vdwl: 1.66741314145205
run_coul: 0
run_stress: ! |2-
6.1931374572792954e+00 6.0579168006450157e+00 5.8831944925174655e+00 2.0546568651742717e-01 -2.2310825568610582e-02 -9.0786598388712531e-02
run_forces: ! |2
1 1.0245582840443836e-02 6.5151854710940468e-02 1.3361955389177321e-02
2 -2.2314027604621318e-02 -7.7535528641419729e-02 4.9002169116395371e-02
3 -3.9051836443840873e-02 1.8729640241706769e-01 -5.0368800191922920e-02
4 2.1556848319449432e-02 -9.6560257281038397e-03 -5.2226270227499996e-02
5 5.5692513794487093e-02 1.4100131039803696e-01 3.6433829498680612e-02
6 4.2104114940438239e-02 2.9061099461956740e-02 -8.0757486645345530e-03
7 -6.4974396400004103e-02 9.0834827653364231e-02 -1.1497303228903639e-02
8 -6.9891945210390563e-02 -6.1365585968288172e-02 4.5058971443054034e-02
9 1.5494788785065767e-02 -5.6313873741252601e-02 -2.9239516346795842e-02
10 -3.0025791257554668e-02 -1.4356984394446920e-01 -1.1248096343757182e-01
11 -4.0162199915935268e-02 -5.1244062549941558e-02 4.2120428458812920e-02
12 3.2219067015055440e-02 -8.8023947653775636e-02 -4.0000605662452050e-03
13 -1.9322021317182518e-02 2.3705996957186400e-02 -4.6458078927757253e-02
14 5.7515188139881337e-02 -1.5720861856457415e-02 6.8903466211661560e-02
15 -3.1550376834563972e-02 3.2004964657920229e-02 -2.7509931415147928e-02
16 1.0690614440695038e-01 -9.0850865144888507e-02 3.6425761956666795e-02
17 4.4576246121271583e-02 1.3023640557355332e-01 -7.6587762084134013e-04
18 -1.4790335009012934e-01 -3.4561193108141076e-02 -7.1476252590456105e-02
19 -1.5517474793926253e-01 -8.1735148865468926e-02 3.6534263240961207e-02
20 2.3564800733902859e-02 2.0130469558539449e-02 -3.4093822740206496e-02
21 1.6267868459547039e-01 4.8910520011812009e-02 4.9415963505101621e-03
22 3.9143651683370253e-03 -8.1172695145679000e-02 -1.0834230526190378e-02
23 4.9870311913370033e-02 1.2420611623040828e-01 -7.7833840076172459e-02
24 1.2773385871506515e-01 9.4431969129075782e-02 8.4509868356579518e-02
25 7.0376169719190279e-02 4.4792786930559310e-03 -4.6803763947891978e-02
26 -5.0364526911511179e-02 -1.4929711058338557e-01 1.2850817811267942e-01
27 4.6472580366719141e-02 -4.1923069078539394e-03 -1.3401923595724521e-03
28 1.1441857387906706e-02 5.8173904345736008e-02 7.3370361778840071e-02
29 4.7811159682183739e-02 1.0733827504367408e-01 -1.9879309433676450e-03
30 -4.2511930547412778e-02 -2.9916695214642831e-02 -8.4066745720912481e-02
31 -2.1952102296720562e-02 -1.1662029578060293e-01 7.4721379144302519e-02
32 -1.9497502987605872e-01 -6.5187354007956666e-02 -2.2832899526331281e-02
...

View File

@ -0,0 +1,91 @@
---
lammps_version: 2 Jun 2020
date_generated: Tue Jun 2 16:46:19 202
epsilon: 5e-13
prerequisites: ! |
pair table
pre_commands: ! ""
post_commands: ! ""
input_file: in.metal
pair_style: table linear 10000
pair_coeff: ! |
1 1 ${input_dir}/pair_table_beck.txt beck_1_1
1 2 ${input_dir}/pair_table_beck.txt beck_1_1
2 2 ${input_dir}/pair_table_beck.txt beck_2_2
extract: ! ""
natoms: 32
init_vdwl: 1.66849758741132
init_coul: 0
init_stress: ! |2-
6.1946715433684973e+00 6.0610621944595691e+00 5.8874237884568794e+00 2.0726669272562587e-01 -2.1210093847498168e-02 -8.9416411707758034e-02
init_forces: ! |2
1 1.3461768519573423e-02 6.5534109919214642e-02 1.4238046153935983e-02
2 -2.2001532385230976e-02 -7.7578110900587721e-02 4.8895494306522291e-02
3 -3.8355274675308998e-02 1.8998944460354011e-01 -4.8534579158997129e-02
4 2.0908450525723498e-02 -9.9065259851936448e-03 -5.2618638347233404e-02
5 5.6008845819212463e-02 1.4266708026293753e-01 3.5487913450023841e-02
6 4.1552575164020243e-02 2.9642511828555394e-02 -6.9641129743398126e-03
7 -6.4155910069342403e-02 8.9302215279040434e-02 -1.0225629221330955e-02
8 -6.8587774765165088e-02 -6.0829429175094735e-02 4.4680410492059397e-02
9 1.4366115666253289e-02 -5.5193010436797592e-02 -2.8199868469874739e-02
10 -3.2696772118295803e-02 -1.4472907530040827e-01 -1.1516096653547711e-01
11 -4.0401292979786972e-02 -5.0403260261100417e-02 4.2969363549390502e-02
12 3.0908963526062479e-02 -8.8120722839359025e-02 -3.9792237714215200e-03
13 -1.8590586442952396e-02 2.4570524680954029e-02 -4.7073976129125013e-02
14 5.6668681846789561e-02 -1.8708035295572849e-02 7.0129732306455847e-02
15 -3.1927433330968973e-02 3.1638369787962112e-02 -2.8162497777685959e-02
16 1.1004266778296544e-01 -9.1785066871052839e-02 3.7455063670217288e-02
17 4.3874209968260171e-02 1.3058176120978526e-01 -1.6077990215935685e-03
18 -1.4775183032052960e-01 -3.5651338364660598e-02 -7.0714213256030112e-02
19 -1.5579450123857666e-01 -8.1557435871161682e-02 3.7491976413329374e-02
20 2.4262106793077946e-02 1.9762251986969553e-02 -3.4094105051678786e-02
21 1.6276246770534447e-01 5.0791644250007900e-02 4.3248360141969555e-03
22 2.9904687035853137e-03 -8.1967139210456882e-02 -1.1772377300447360e-02
23 4.6987794141318706e-02 1.2308604930197996e-01 -8.0566882858205235e-02
24 1.2795930744437653e-01 9.4726737159825200e-02 8.3749152147737538e-02
25 6.9925482162420033e-02 4.2199513301063160e-03 -4.6743912320864334e-02
26 -5.1856917641538880e-02 -1.5105261662137287e-01 1.2862943385759271e-01
27 4.6163997109484788e-02 -4.7144533487617334e-03 -2.0769859565411553e-04
28 1.1137606033726113e-02 5.7570749823347561e-02 7.3702486316706894e-02
29 4.8892603764312044e-02 1.0734444862695605e-01 -3.2133899506260749e-03
30 -4.2587368463202192e-02 -3.0047436022746527e-02 -8.4421201266270535e-02
31 -2.0646231349659299e-02 -1.1590205379082782e-01 7.4785818423894770e-02
32 -1.9352068689594826e-01 -6.3282139756026798e-02 -2.2278655095207611e-02
run_vdwl: 1.66727802356891
run_coul: 0
run_stress: ! |2-
6.1925738027578641e+00 6.0573149352705613e+00 5.8826519662480035e+00 2.0544288354756310e-01 -2.2314569036134008e-02 -9.0767397150969681e-02
run_forces: ! |2
1 1.0239417972012135e-02 6.5143936411888370e-02 1.3356763777998637e-02
2 -2.2314835701632570e-02 -7.7524477122967728e-02 4.8999346575662309e-02
3 -3.9043638693828556e-02 1.8727196361074283e-01 -5.0358906369839446e-02
4 2.1555046910191538e-02 -9.6562479880345862e-03 -5.2220025740068080e-02
5 5.5684458879600447e-02 1.4098102798381096e-01 3.6430504994586173e-02
6 4.2104147709418713e-02 2.9055058600247489e-02 -8.0778112152718948e-03
7 -6.4963866924303920e-02 9.0824824870264262e-02 -1.1492621439859574e-02
8 -6.9888106386663568e-02 -6.1362238801327997e-02 4.5061669154972568e-02
9 1.5493057273285156e-02 -5.6307006366398599e-02 -2.9234755420043165e-02
10 -3.0006706586658188e-02 -1.4355133290296190e-01 -1.1246538976169368e-01
11 -4.0156699765253455e-02 -5.1238883202820718e-02 4.2112202625462891e-02
12 3.2215165580774301e-02 -8.8013396380619557e-02 -4.0047290710007333e-03
13 -1.9322767417550984e-02 2.3711197649086194e-02 -4.6454058795633212e-02
14 5.7508424194302507e-02 -1.5717730349026085e-02 6.8892268883266869e-02
15 -3.1552192265302363e-02 3.2002449140037137e-02 -2.7508481800674743e-02
16 1.0688955089657577e-01 -9.0842508916126788e-02 3.6418887829925486e-02
17 4.4577236329712736e-02 1.3022532646095397e-01 -7.5825494000398793e-04
18 -1.4789247023417521e-01 -3.4554869410601124e-02 -7.1472651306375229e-02
19 -1.5516659799350990e-01 -8.1733259734237992e-02 3.6528023380248152e-02
20 2.3565292501585497e-02 2.0131963706666492e-02 -3.4090460756558867e-02
21 1.6266349958385409e-01 4.8905943278807026e-02 4.9357951969207243e-03
22 3.9108463662172284e-03 -8.1159914942901146e-02 -1.0833213112554453e-02
23 4.9862761614696910e-02 1.2418695431753196e-01 -7.7818580582703634e-02
24 1.2773299190190621e-01 9.4426552636226180e-02 8.4500013220674824e-02
25 7.0366190135544543e-02 4.4772942266913711e-03 -4.6793931216364631e-02
26 -5.0367407305875939e-02 -1.4928033291926532e-01 1.2849353197675831e-01
27 4.6468146723438429e-02 -4.1892634838488693e-03 -1.3380548635599163e-03
28 1.1447706368862415e-02 5.8175438626723523e-02 7.3359635688296038e-02
29 4.7807434863290775e-02 1.0732112842460283e-01 -1.9886348252873588e-03
30 -4.2515720470887731e-02 -2.9914625470396135e-02 -8.4056579797267661e-02
31 -2.1956047762899965e-02 -1.1661348485300055e-01 7.4709459326432123e-02
32 -1.9494431829672756e-01 -6.5181487099745139e-02 -2.2830961616444944e-02
...

View File

@ -0,0 +1,91 @@
---
lammps_version: 2 Jun 2020
date_generated: Tue Jun 2 16:45:40 202
epsilon: 5e-13
prerequisites: ! |
pair table
pre_commands: ! ""
post_commands: ! ""
input_file: in.metal
pair_style: table lookup 10000
pair_coeff: ! |
1 1 ${input_dir}/pair_table_beck.txt beck_1_1
1 2 ${input_dir}/pair_table_beck.txt beck_1_1
2 2 ${input_dir}/pair_table_beck.txt beck_2_2
extract: ! ""
natoms: 32
init_vdwl: 1.66822081098814
init_coul: 0
init_stress: ! |2-
6.1925708391090373e+00 6.0607873158796632e+00 5.8866502515961283e+00 2.0635047994864009e-01 -2.2304749096038870e-02 -8.9977381381968910e-02
init_forces: ! |2
1 1.3652870615947011e-02 6.5292578314726832e-02 1.4401786849082793e-02
2 -2.2075986500789631e-02 -7.7530344175629484e-02 4.8918295738716797e-02
3 -3.8548065982306853e-02 1.9049129535293563e-01 -4.8497042796395010e-02
4 2.0883993795891603e-02 -9.8004460881346168e-03 -5.2544284235507610e-02
5 5.6473535558532267e-02 1.4259381967545881e-01 3.5283580728998398e-02
6 4.1436803654676703e-02 2.9757415671595559e-02 -6.9441568265177812e-03
7 -6.4342009716857218e-02 8.9407090045572943e-02 -1.0076354375758356e-02
8 -6.8438588566627351e-02 -6.0719143235589357e-02 4.4375134570496459e-02
9 1.4267631647248345e-02 -5.5225493516036783e-02 -2.8235579582748780e-02
10 -3.2874735468490235e-02 -1.4496018410464423e-01 -1.1522122672190530e-01
11 -4.0439244564162688e-02 -5.0797057909291822e-02 4.2990522799705479e-02
12 3.1118238818285009e-02 -8.8117800460577142e-02 -4.0963549347812021e-03
13 -1.8421701898180837e-02 2.4603479320682679e-02 -4.6953330610188748e-02
14 5.6779946032995847e-02 -1.8997405137617097e-02 7.0084749782857475e-02
15 -3.1872432338948091e-02 3.1520110382368773e-02 -2.8177989701802592e-02
16 1.1013395678084995e-01 -9.1707318824236786e-02 3.7083770573599802e-02
17 4.3975078896704253e-02 1.3054106752514974e-01 -1.5760211066586478e-03
18 -1.4753246799540981e-01 -3.5398540009504140e-02 -7.0784984645480470e-02
19 -1.5562703896771166e-01 -8.1533158870799177e-02 3.7998367628389429e-02
20 2.4120555351187806e-02 1.9895957059386932e-02 -3.4031571261011077e-02
21 1.6241181372756625e-01 5.0567395846590979e-02 4.0311135803611352e-03
22 3.0847862699784918e-03 -8.2082703890837161e-02 -1.1813933267531539e-02
23 4.6631319964723403e-02 1.2294704911631910e-01 -8.0759997950587623e-02
24 1.2784615418643658e-01 9.4570579283427048e-02 8.4136049252381967e-02
25 6.9854637188683621e-02 4.3796329364953045e-03 -4.6383679169275639e-02
26 -5.1672371161515490e-02 -1.5093773642419464e-01 1.2890155107784523e-01
27 4.6418514479134469e-02 -4.8647715941130543e-03 -3.3400893593061448e-04
28 1.0837875140475392e-02 5.7768778789330170e-02 7.3335429938361563e-02
29 4.8424486534314935e-02 1.0705191088477574e-01 -3.4221430692390835e-03
30 -4.2678491461167409e-02 -3.0167096740169222e-02 -8.4323491798094938e-02
31 -2.0446963122925290e-02 -1.1577119295225209e-01 7.4834425292344492e-02
32 -1.9338210089853922e-01 -6.2777766271189708e-02 -2.2198626823726184e-02
run_vdwl: 1.66790120138923
run_coul: 0
run_stress: ! |2-
6.1954399052539300e+00 6.0597796933663810e+00 5.8839846490596770e+00 2.0464958122047128e-01 -2.2990948428733799e-02 -9.0561388880444543e-02
run_forces: ! |2
1 1.0357196419898495e-02 6.5372257333873959e-02 1.3514409758410917e-02
2 -2.2518946587964585e-02 -7.7700478129363010e-02 4.8980708027650338e-02
3 -3.9187350884245992e-02 1.8746598368586515e-01 -5.0095509280450985e-02
4 2.1505122391926864e-02 -9.8121998835355474e-03 -5.2197325168546041e-02
5 5.6368397082486393e-02 1.4115837375527868e-01 3.6749677569935905e-02
6 4.2042380520510882e-02 2.9049092654418140e-02 -8.0059207630978693e-03
7 -6.5262053410956963e-02 9.1189712395790753e-02 -1.1162106417995799e-02
8 -6.9823982763573419e-02 -6.1642359327017858e-02 4.5148186601411129e-02
9 1.5581717631005403e-02 -5.6464988109373171e-02 -2.9179373549110328e-02
10 -2.9936010364121191e-02 -1.4403347574591194e-01 -1.1249323547874966e-01
11 -4.0279718641423851e-02 -5.1267663186455890e-02 4.2308426648069226e-02
12 3.2548290765190446e-02 -8.8360090934889973e-02 -4.1059424850670304e-03
13 -1.9100876563736404e-02 2.3923943182546592e-02 -4.6654992572323889e-02
14 5.7003886104469645e-02 -1.5977942426948746e-02 6.9080947733147463e-02
15 -3.1419200863690128e-02 3.2134894708585104e-02 -2.7460582419399034e-02
16 1.0678077169426231e-01 -9.0718758218836820e-02 3.6086450730476470e-02
17 4.4432206292973897e-02 1.3053785119638170e-01 -8.8349832217821166e-04
18 -1.4847693210486995e-01 -3.4770804844180284e-02 -7.1598050906370336e-02
19 -1.5584406172770648e-01 -8.1902850262455335e-02 3.6401901739187829e-02
20 2.3632828687886766e-02 2.0210640568054113e-02 -3.3962375402201296e-02
21 1.6251200328353549e-01 4.8509762572667509e-02 4.6262805117567836e-03
22 3.9297251786593766e-03 -8.1271664355599668e-02 -1.0814196256901271e-02
23 4.9681279655079395e-02 1.2435597457773782e-01 -7.8146336899556537e-02
24 1.2830345267622284e-01 9.4849763681645619e-02 8.4755594763442382e-02
25 7.0574066259719931e-02 4.7738855789510749e-03 -4.6746928071330643e-02
26 -5.0012323977413009e-02 -1.4919205052782003e-01 1.2835423785227032e-01
27 4.6693855278230161e-02 -4.3926905018267671e-03 -1.5097765818073844e-03
28 1.1103730609808571e-02 5.8020761280684265e-02 7.3177666578219974e-02
29 4.8063412527103180e-02 1.0769074559895483e-01 -1.8637969627234715e-03
30 -4.2307197338881525e-02 -2.9602719505751475e-02 -8.4192072289735478e-02
31 -2.2008710097816863e-02 -1.1651727431063712e-01 7.4819836125210509e-02
32 -1.9493695773256986e-01 -6.5615632500831411e-02 -2.2932304811643992e-02
...

View File

@ -0,0 +1,91 @@
---
lammps_version: 2 Jun 2020
date_generated: Tue Jun 2 16:47:29 202
epsilon: 5e-13
prerequisites: ! |
pair table
pre_commands: ! ""
post_commands: ! ""
input_file: in.metal
pair_style: table spline 10000
pair_coeff: ! |
1 1 ${input_dir}/pair_table_beck.txt beck_1_1
1 2 ${input_dir}/pair_table_beck.txt beck_1_1
2 2 ${input_dir}/pair_table_beck.txt beck_2_2
extract: ! ""
natoms: 32
init_vdwl: 1.66849237317226
init_coul: 0
init_stress: ! |2-
6.1946491697735437e+00 6.0610401365658024e+00 5.8874025724620429e+00 2.0726580316940962e-01 -2.1210361695457737e-02 -8.9415208770840096e-02
init_forces: ! |2
1 1.3461900166603218e-02 6.5533756921056424e-02 1.4237872357245411e-02
2 -2.2001295274018444e-02 -7.7577892895343906e-02 4.8895379860549121e-02
3 -3.8355321598214184e-02 1.8998901399717005e-01 -4.8534413942792565e-02
4 2.0908396793481509e-02 -9.9066117521727070e-03 -5.2618403012712124e-02
5 5.6008413316644114e-02 1.4266663667152152e-01 3.5487859843299545e-02
6 4.1552391358114872e-02 2.9642295673519448e-02 -6.9640527234652461e-03
7 -6.4155546133542837e-02 8.9301753561023003e-02 -1.0225594515349757e-02
8 -6.8587453028246703e-02 -6.0829070542048190e-02 4.4680193619080481e-02
9 1.4366068063822880e-02 -5.5192738935146854e-02 -2.8199665411938767e-02
10 -3.2697019980711756e-02 -1.4472840813665638e-01 -1.1516072254520793e-01
11 -4.0401272804121854e-02 -5.0402863668631913e-02 4.2969197904076183e-02
12 3.0908680631425673e-02 -8.8120244487072494e-02 -3.9791730686956463e-03
13 -1.8590573588915013e-02 2.4570208722629043e-02 -4.7073683697064536e-02
14 5.6668374919472228e-02 -1.8707913260279440e-02 7.0129358194749039e-02
15 -3.1927219149443416e-02 3.1638287874549260e-02 -2.8162304610562044e-02
16 1.1004228625210850e-01 -9.1784876878925489e-02 3.7455203664712555e-02
17 4.3874110434413707e-02 1.3058123184332987e-01 -1.6078470938548138e-03
18 -1.4775126775856298e-01 -3.5651201719208082e-02 -7.0713629953624360e-02
19 -1.5579381073821677e-01 -8.1556836647145553e-02 3.7492096227633373e-02
20 2.4262149455103726e-02 1.9762082500828778e-02 -3.4093995317030654e-02
21 1.6276229493138114e-01 5.0791551859706734e-02 4.3245301958938116e-03
22 2.9902891288209246e-03 -8.1966958449035843e-02 -1.1772410092696793e-02
23 4.6987757268038249e-02 1.2308546657800162e-01 -8.0566592682958557e-02
24 1.2795842291296708e-01 9.4726040785926641e-02 8.3748524809472952e-02
25 6.9925310941154381e-02 4.2197730528178625e-03 -4.6744097166442150e-02
26 -5.1856965388326640e-02 -1.5105237092347160e-01 1.2862892445018109e-01
27 4.6163842732722504e-02 -4.7145326827103505e-03 -2.0770802868259192e-04
28 1.1137379858917107e-02 5.7570783215990615e-02 7.3702487792676769e-02
29 4.8892657028303636e-02 1.0734409425986763e-01 -3.2134995127967849e-03
30 -4.2587398133307960e-02 -3.0047443784418228e-02 -8.4420705386072381e-02
31 -2.0646215207926085e-02 -1.1590108886476506e-01 7.4785520470549566e-02
32 -1.9351936740994052e-01 -6.3281923890906297e-02 -2.2278650628172247e-02
run_vdwl: 1.667273130413
run_coul: 0
run_stress: ! |2-
6.1925535687585693e+00 6.0572952105271769e+00 5.8826298841000604e+00 2.0544338949977917e-01 -2.2313078114848450e-02 -9.0766976514897041e-02
run_forces: ! |2
1 1.0239633061502058e-02 6.5143827221595174e-02 1.3356826587515483e-02
2 -2.2314719792140746e-02 -7.7524048417887792e-02 4.8999119168703323e-02
3 -3.9043356307568236e-02 1.8727112901323323e-01 -5.0358319574288206e-02
4 2.1555031522153656e-02 -9.6560578347078038e-03 -5.2219714561247452e-02
5 5.5684799810960112e-02 1.4098076857747269e-01 3.6430385068854737e-02
6 4.2103921190025241e-02 2.9054969033758940e-02 -8.0777612807259296e-03
7 -6.4964007703587665e-02 9.0824767825338215e-02 -1.1492723720965943e-02
8 -6.9887912879430303e-02 -6.1361831723537673e-02 4.5061147281770325e-02
9 1.5493100733112084e-02 -5.6306897360260899e-02 -2.9234346339233039e-02
10 -3.0007119234870205e-02 -1.4355108819988596e-01 -1.1246502096182201e-01
11 -4.0156584042997157e-02 -5.1238608709860869e-02 4.2111943089822509e-02
12 3.2215137999640264e-02 -8.8013573068877235e-02 -4.0049314316609446e-03
13 -1.9322692643690253e-02 2.3710729865779583e-02 -4.6453771618837091e-02
14 5.7508119522746703e-02 -1.5717550954823703e-02 6.8891636524075137e-02
15 -3.1551853579254628e-02 3.2002270904692251e-02 -2.7508263221790400e-02
16 1.0688913506500985e-01 -9.0842063672437995e-02 3.6419114766505958e-02
17 4.4576981599750799e-02 1.3022472720372444e-01 -7.5802573483000615e-04
18 -1.4789239369554841e-01 -3.4554795916705260e-02 -7.1472573328781749e-02
19 -1.5516657008010420e-01 -8.1733453599869749e-02 3.6527707427395764e-02
20 2.3565108550513952e-02 2.0131835710028016e-02 -3.4090223278000355e-02
21 1.6266310434046480e-01 4.8905845083266029e-02 4.9357148091662226e-03
22 3.9108125555495730e-03 -8.1159764595007206e-02 -1.0833146565530810e-02
23 4.9862133358188218e-02 1.2418637371342198e-01 -7.7818397024808514e-02
24 1.2773306535829987e-01 9.4426378198700950e-02 8.4499926668801975e-02
25 7.0365780658878857e-02 4.4772437288752168e-03 -4.6793953502009267e-02
26 -5.0367468278612715e-02 -1.4927976307827082e-01 1.2849283634143213e-01
27 4.6468158385616867e-02 -4.1893770730035470e-03 -1.3381218640924168e-03
28 1.1447647509745237e-02 5.8175457185785213e-02 7.3359279966104529e-02
29 4.7807504512594315e-02 1.0732100993527130e-01 -1.9887010850049803e-03
30 -4.2515398596597830e-02 -2.9914524234883048e-02 -8.4055979568242525e-02
31 -2.1955840630845491e-02 -1.1661294434426502e-01 7.4709133379083956e-02
32 -1.9494325826950429e-01 -6.5180990416658327e-02 -2.2830796417360581e-02
...

View File

@ -0,0 +1,98 @@
---
lammps_version: 2 Jun 2020
date_generated: Tue Jun 2 17:07:52 202
epsilon: 5e-14
prerequisites: ! |
atom full
pair table
pre_commands: ! ""
post_commands: ! ""
input_file: in.fourmol
pair_style: table linear 1000
pair_coeff: ! |
1 1 ${input_dir}/pair_table_lj_cut.txt lj_1_1
1 2 ${input_dir}/pair_table_lj_cut.txt lj_1_2
1 3 ${input_dir}/pair_table_lj_cut.txt lj_1_3
1 4 ${input_dir}/pair_table_lj_cut.txt lj_1_4
1 5 ${input_dir}/pair_table_lj_cut.txt lj_1_5
2 2 ${input_dir}/pair_table_lj_cut.txt lj_2_2
2 3 ${input_dir}/pair_table_lj_cut.txt lj_2_3
2 4 ${input_dir}/pair_table_lj_cut.txt lj_2_4
2 5 ${input_dir}/pair_table_lj_cut.txt lj_2_5
3 3 ${input_dir}/pair_table_lj_cut.txt lj_3_3
3 4 ${input_dir}/pair_table_lj_cut.txt lj_3_4
3 5 ${input_dir}/pair_table_lj_cut.txt lj_3_5
4 4 ${input_dir}/pair_table_lj_cut.txt lj_4_4
4 5 ${input_dir}/pair_table_lj_cut.txt lj_4_5
5 5 ${input_dir}/pair_table_lj_cut.txt lj_5_5
extract: ! ""
natoms: 29
init_vdwl: 756.641645798358
init_coul: 0
init_stress: ! |2-
2.2090340377185967e+03 2.2244453255747117e+03 4.7288126624664974e+03 -7.6403326905269398e+02 2.8082113929050504e+01 6.7633740837364439e+02
init_forces: ! |2
21 -7.4152834115258486e+01 -8.4097799952580075e+01 2.3159619440133380e+02
22 -1.1068613517882235e+02 -2.6823333923316500e+01 -1.7365467444566553e+02
23 1.8482904133388223e+02 1.1093264541659750e+02 -5.7930741636712071e+01
19 3.1933948922635905e-04 -2.3852967242197055e-04 1.7434557181616340e-03
18 -1.8861300062111192e-02 -3.3400052294502179e-02 3.0998859026254152e-02
20 -9.9899500683441750e-04 -1.0223083257768326e-03 3.6965867058990032e-04
28 -1.8537423924296499e+02 7.9666126830459447e+01 -1.2542634211727822e+02
4 -7.9160281367275722e+00 2.1475153087741110e+00 -5.6273386055724828e+00
10 5.3659703631942352e+02 -6.1638821121220133e+02 -1.8524754345847680e+02
11 -2.3998246191028687e+00 -6.0237447250432350e+00 -9.8493429965792298e+00
12 1.7521141359856628e+01 1.0629841850210417e+01 -7.9312291032117042e+00
14 -3.4254573458881881e+00 6.9454087271157916e-01 -8.8549490264531219e+00
3 -1.3601366655597215e+02 -3.8933969547126463e+02 -1.4673165295081574e+02
6 -8.3976623131970030e+02 9.7421656440040920e+02 1.1689035557011593e+03
7 5.9087836043818115e+01 -3.4067040950997404e+02 -1.7408617984623156e+03
15 -2.0812424842265748e-01 8.6236045287663003e+00 3.0626696691420956e+00
8 1.4404606696350953e+02 -1.1101530899074169e+02 3.9802209126866262e+02
9 8.1112222258717168e+01 8.7379022925008144e+01 3.5897466875849778e+02
16 4.6872469487658930e+02 -3.3472142759962014e+02 -1.2036108146826032e+03
17 -4.5876131348491481e+02 3.1932075524331395e+02 1.2202196485462191e+03
5 -2.5605507618514016e+00 -4.1184521759347588e+00 1.2369824594500452e+01
13 8.2458457495438626e+00 -3.2680411194697614e+00 -1.5173080370124606e-01
2 1.5875070222736517e+02 1.3063288077538610e+02 -1.8684429323195315e+02
1 -2.3000580006052314e+01 2.7192815329191200e+02 3.3414196848607327e+02
27 5.3953257632741014e+01 -2.3246330657484364e+02 9.3521822143445291e+01
29 1.3142887167232908e+02 1.5280375224826219e+02 3.1900088976429561e+01
24 3.6069363323679390e+01 -2.1770366344996296e+02 1.1410578468006614e+02
25 -1.5123846858732526e+02 2.4345575024648110e+01 -1.2714600914378309e+02
26 1.1515691479712817e+02 1.9334707687878640e+02 1.3017031466176082e+01
run_vdwl: 146.327829985032
run_coul: 0
run_stress: ! |2-
6.2914745307898283e+02 6.7439990734333583e+02 4.8382994180885322e+02 -3.2311602844067630e+02 -2.9168790037089135e+01 1.2280146536160866e+02
run_forces: ! |2
21 -9.8223704263420135e+00 -1.1937831142654984e+01 3.8747486275879332e+01
22 -1.8260879394786041e+01 -4.4231132834754163e+00 -2.9364817699370402e+01
23 2.8071936064676528e+01 1.6373759184425133e+01 -9.3702350107338450e+00
19 2.5604832046069535e-04 -2.4189898030892005e-04 1.6743691237745819e-03
18 -1.8054106711718410e-02 -3.1568964918282955e-02 2.9599553823736552e-02
20 -8.8390456832979493e-04 -9.1401459749508313e-04 3.6013486968785625e-04
28 -2.5002749675394742e+01 1.1546639020795190e+01 -1.6860888288423549e+01
4 -8.7521679338772564e+00 3.2350894298919783e+00 -6.3183019964749780e+00
10 6.3968310015089294e+01 -7.5154164336910185e+01 -7.5921779563234097e+01
11 -6.3974181801433527e+00 -8.2015044886741890e+00 -1.6623131445951760e+01
12 1.4375970778558539e+01 1.2183815698169100e+01 -8.2849268567516905e+00
14 -2.8220099744921270e+00 4.4312152330104282e-01 -7.1784838499077441e+00
3 -2.5170415829369691e+02 1.0807957243252388e+02 8.7902068634117185e+01
6 1.2021318256369948e+02 -1.0159989935597440e+02 -1.4455046866801038e+02
7 3.7064970613492512e+00 -1.0481522858827926e+01 -4.1617502928655071e+01
15 -4.0482676064288375e-01 8.2478176580999758e+00 3.1232194954592902e+00
8 -1.9012552812922401e+01 1.9341369900133493e+01 5.6061660162509632e+01
9 1.1002966844626583e+01 1.2955046425976752e+01 4.8964009756379951e+01
16 5.3215666467083004e+01 -6.8452018298715132e+01 1.6067414590921679e+01
17 -1.4543993736556850e+01 9.9518135650728148e+00 4.0557829246754260e+01
5 -1.7372909950509312e+00 -2.5663073053399832e+00 1.0327280945285382e+01
13 7.4327969687776196e+00 -2.8316539598264616e+00 -1.0441307986265116e-01
2 1.8402173670762625e+01 1.3899059683375182e+01 -2.2581973215530972e+01
1 1.3092386727121557e+01 8.0975258006863527e+01 6.0162717183582615e+01
27 3.0641658609965634e+00 -3.8727506359895912e+01 1.1409481341404170e+01
29 2.1946401102557179e+01 2.7187485766660277e+01 5.4471747925943950e+00
24 1.2590957134158188e+01 -3.6189602254037929e+01 2.3845923499083668e+01
25 -3.0061118850595161e+01 5.3993721695176697e+00 -2.5809444960387523e+01
26 1.7456807738003775e+01 3.0778628058022715e+01 1.9384675815059120e+00
...

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,16 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "gmock/gmock.h" #include "gmock/gmock.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "lammps.h" #include "lammps.h"

View File

@ -1,3 +1,16 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "gmock/gmock.h" #include "gmock/gmock.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "potential_file_reader.h" #include "potential_file_reader.h"

View File

@ -5,3 +5,7 @@ add_test(Tokenizer test_tokenizer)
add_executable(test_utils test_utils.cpp) add_executable(test_utils test_utils.cpp)
target_link_libraries(test_utils PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest) target_link_libraries(test_utils PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest)
add_test(Utils test_utils) add_test(Utils test_utils)
add_executable(test_fmtlib test_fmtlib.cpp)
target_link_libraries(test_fmtlib PRIVATE lammps GTest::GMockMain GTest::GMock GTest::GTest)
add_test(FmtLib test_fmtlib)

View File

@ -0,0 +1,106 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "lmptype.h"
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "fmt/format.h"
#include <string>
#include <exception>
using namespace LAMMPS_NS;
using ::testing::Eq;
// this tests a subset of {fmt} that is most relevant to LAMMPS
TEST(FmtLib, insert_string) {
const char val[] = "word";
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word word"));
}
TEST(FmtLib, insert_int) {
const int val = 333;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word 333"));
}
TEST(FmtLib, insert_neg_int) {
const int val = -333;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word -333"));
}
TEST(FmtLib, insert_bigint) {
if (sizeof(bigint) == 4) GTEST_SKIP();
const bigint val = 9945234592L;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word 9945234592"));
}
TEST(FmtLib, insert_neg_bigint) {
if (sizeof(bigint) == 4) GTEST_SKIP();
const bigint val = -9945234592L;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word -9945234592"));
}
TEST(FmtLib, insert_tagint) {
if (sizeof(tagint) == 4) GTEST_SKIP();
const tagint val = 9945234592L;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word 9945234592"));
}
TEST(FmtLib, insert_neg_tagint) {
if (sizeof(tagint) == 4) GTEST_SKIP();
const tagint val = -9945234592L;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word -9945234592"));
}
TEST(FmtLib, insert_imageint) {
if (sizeof(imageint) == 4) GTEST_SKIP();
const imageint val = 9945234592L;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word 9945234592"));
}
TEST(FmtLib, insert_neg_imageint) {
if (sizeof(imageint) == 4) GTEST_SKIP();
const imageint val = -9945234592L;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word -9945234592"));
}
TEST(FmtLib, insert_double) {
const double val = 1.5;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word 1.5"));
}
TEST(FmtLib, insert_neg_double) {
const double val = -1.5;
auto text = fmt::format("word {}",val);
ASSERT_THAT(text, Eq("word -1.5"));
}
TEST(FmtLib, int_for_double) {
const double val = -1.5;
ASSERT_THROW(fmt::format("word {:d}",val),std::exception);
}
TEST(FmtLib, double_for_int) {
const int val = 15;
ASSERT_THROW(fmt::format("word {:g}",val),std::exception);
}

View File

@ -1,5 +1,18 @@
#include <gtest/gtest.h> /* ----------------------------------------------------------------------
#include <gmock/gmock.h> LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "tokenizer.h" #include "tokenizer.h"
using namespace LAMMPS_NS; using namespace LAMMPS_NS;

View File

@ -1,5 +1,18 @@
#include <gtest/gtest.h> /* ----------------------------------------------------------------------
#include <gmock/gmock.h> LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "utils.h" #include "utils.h"
#include <string> #include <string>