add code to detect inconistent use of AIREBO/REBO potential files

This commit is contained in:
Axel Kohlmeyer 2018-11-20 13:51:12 -05:00
parent dcffeb546f
commit e51720a2de
5 changed files with 49 additions and 17 deletions

View File

@ -36,7 +36,7 @@ pair_style airebo/morse 3.0
pair_coeff * * ../potentials/CH.airebo-m H C :pre
pair_style rebo
pair_coeff * * ../potentials/CH.airebo H C :pre
pair_coeff * * ../potentials/CH.rebo H C :pre
[Description:]
@ -57,7 +57,8 @@ The {rebo} pair style computes the Reactive Empirical Bond Order (REBO)
Potential of "(Brenner)"_#Brenner. Note that this is the so-called
2nd generation REBO from 2002, not the original REBO from 1990.
As discussed below, 2nd generation REBO is closely related to the
initial AIREBO; it is just a subset of the potential energy terms.
initial AIREBO; it is just a subset of the potential energy terms
with a few slightly different parameters
The AIREBO potential consists of three terms:
@ -113,12 +114,12 @@ various dihedral angle preferences in hydrocarbon configurations.
:line
Only a single pair_coeff command is used with the {airebo}, {airebo}
or {rebo} style which specifies an AIREBO or AIREBO-M potential file
with parameters for C and H. Note that the {rebo} style in LAMMPS
uses the same AIREBO-formatted potential file. These are mapped to
LAMMPS atom types by specifying N additional arguments after the
filename in the pair_coeff command, where N is the number of LAMMPS
atom types:
or {rebo} style which specifies an AIREBO, REBO, or AIREBO-M potential
file with parameters for C and H. Note that as of LAMMPS version
15 November 2018 the {rebo} style in LAMMPS uses its own potential
file (CH.rebo). These are mapped to LAMMPS atom types by specifying
N additional arguments after the filename in the pair_coeff command,
where N is the number of LAMMPS atom types:
filename
N element names = mapping of AIREBO elements to atom types :ul

View File

@ -49,7 +49,8 @@ using namespace MathSpecial;
/* ---------------------------------------------------------------------- */
PairAIREBO::PairAIREBO(LAMMPS *lmp) : Pair(lmp)
PairAIREBO::PairAIREBO(LAMMPS *lmp)
: Pair(lmp), variant(AIREBO)
{
single_enable = 0;
restartinfo = 0;
@ -3368,14 +3369,38 @@ void PairAIREBO::read_file(char *filename)
FILE *fp = force->open_potential(filename);
if (fp == NULL) {
char str[128];
if (morseflag)
snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename);
else
switch (variant) {
case AIREBO:
snprintf(str,128,"Cannot open AIREBO potential file %s",filename);
break;
case REBO_2:
snprintf(str,128,"Cannot open REBO2 potential file %s",filename);
break;
case AIREBO_M:
snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename);
break;
default:
snprintf(str,128,"Unknown REBO style variant %d",variant);
}
error->one(FLERR,str);
}
// skip initial comment lines
// skip initial comment line and check for potential file style identifier comment
fgets(s,MAXLINE,fp);
fgets(s,MAXLINE,fp);
if (((variant == AIREBO) && (strncmp(s,"# AIREBO ",9) != 0))
|| ((variant == REBO_2) && (strncmp(s,"# REBO2 ",8) != 0))
|| ((variant == AIREBO_M) && (strncmp(s,"# AIREBO-M ",11) != 0))) {
error->one(FLERR,"Potential file does not match AIREBO/REBO style variant");
}
// skip remaining comments
while (1) {
fgets(s,MAXLINE,fp);

View File

@ -38,10 +38,12 @@ class PairAIREBO : public Pair {
double init_one(int, int);
double memory_usage();
protected:
enum { AIREBO, REBO_2, AIREBO_M }; // for telling class variants apart in shared code
protected:
int *map; // 0 (C), 1 (H), or -1 (NULL) for each type
int me;
int me,variant;
int ljflag,torflag; // 0/1 if LJ/Morse,torsion terms included
int morseflag; // 1 if Morse instead of LJ for non-bonded

View File

@ -19,7 +19,9 @@ using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
PairAIREBOMorse::PairAIREBOMorse(LAMMPS *lmp) : PairAIREBO(lmp) {}
PairAIREBOMorse::PairAIREBOMorse(LAMMPS *lmp) : PairAIREBO(lmp) {
variant = AIREBO_M;
}
/* ----------------------------------------------------------------------
global settings

View File

@ -18,7 +18,9 @@ using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
PairREBO::PairREBO(LAMMPS *lmp) : PairAIREBO(lmp) {}
PairREBO::PairREBO(LAMMPS *lmp) : PairAIREBO(lmp) {
variant = REBO_2;
}
/* ----------------------------------------------------------------------
global settings