Rearranged cutoff and element map user input
Cutoff radius is now mandatory argument of pair_style. "emap" keyword is removed and replaced by additional pair_coeff arguments (similar to pair_airebo.cpp). Changes in docs are still missing.
This commit is contained in:
@ -28,8 +28,8 @@ thermo 1
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
# HDNNP
|
# HDNNP
|
||||||
###############################################################################
|
###############################################################################
|
||||||
pair_style hdnnp dir ${hdnnpDir} showew no showewsum 5 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254 emap "1:H,2:O"
|
pair_style hdnnp ${hdnnpCutoff} dir ${hdnnpDir} showew no showewsum 5 resetew no maxew 100 cflength 1.8897261328 cfenergy 0.0367493254
|
||||||
pair_coeff * * ${hdnnpCutoff}
|
pair_coeff * * H O
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# INTEGRATOR
|
# INTEGRATOR
|
||||||
|
|||||||
@ -119,7 +119,10 @@ void PairHDNNP::settings(int narg, char **arg)
|
|||||||
{
|
{
|
||||||
int iarg = 0;
|
int iarg = 0;
|
||||||
|
|
||||||
if (narg == 0) error->all(FLERR,"Illegal pair_style command");
|
if (narg < 1) error->all(FLERR,"Illegal pair_style command");
|
||||||
|
|
||||||
|
maxCutoffRadius = utils::numeric(FLERR,arg[0],false,lmp);
|
||||||
|
iarg++;
|
||||||
|
|
||||||
// default settings
|
// default settings
|
||||||
directory = utils::strdup("hdnnp/");
|
directory = utils::strdup("hdnnp/");
|
||||||
@ -129,7 +132,6 @@ void PairHDNNP::settings(int narg, char **arg)
|
|||||||
resetew = false;
|
resetew = false;
|
||||||
cflength = 1.0;
|
cflength = 1.0;
|
||||||
cfenergy = 1.0;
|
cfenergy = 1.0;
|
||||||
emap = utils::strdup("");
|
|
||||||
numExtrapolationWarningsTotal = 0;
|
numExtrapolationWarningsTotal = 0;
|
||||||
numExtrapolationWarningsSummary = 0;
|
numExtrapolationWarningsSummary = 0;
|
||||||
|
|
||||||
@ -139,18 +141,7 @@ void PairHDNNP::settings(int narg, char **arg)
|
|||||||
if (iarg+2 > narg)
|
if (iarg+2 > narg)
|
||||||
error->all(FLERR,"Illegal pair_style command");
|
error->all(FLERR,"Illegal pair_style command");
|
||||||
delete[] directory;
|
delete[] directory;
|
||||||
len = strlen(arg[iarg+1]) + 2;
|
directory = utils::strdup(arg[iarg+1]);
|
||||||
directory = new char[len];
|
|
||||||
sprintf(directory, "%s/", arg[iarg+1]);
|
|
||||||
iarg += 2;
|
|
||||||
// element mapping
|
|
||||||
} else if (strcmp(arg[iarg],"emap") == 0) {
|
|
||||||
if (iarg+2 > narg)
|
|
||||||
error->all(FLERR,"Illegal pair_style command");
|
|
||||||
delete[] emap;
|
|
||||||
len = strlen(arg[iarg+1]) + 1;
|
|
||||||
emap = new char[len];
|
|
||||||
sprintf(emap, "%s", arg[iarg+1]);
|
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
// show extrapolation warnings
|
// show extrapolation warnings
|
||||||
} else if (strcmp(arg[iarg],"showew") == 0) {
|
} else if (strcmp(arg[iarg],"showew") == 0) {
|
||||||
@ -208,26 +199,39 @@ void PairHDNNP::settings(int narg, char **arg)
|
|||||||
|
|
||||||
void PairHDNNP::coeff(int narg, char **arg)
|
void PairHDNNP::coeff(int narg, char **arg)
|
||||||
{
|
{
|
||||||
|
int n = atom->ntypes;
|
||||||
|
|
||||||
if (!allocated) allocate();
|
if (!allocated) allocate();
|
||||||
|
|
||||||
if (narg != 3) error->all(FLERR,"Incorrect args for pair coefficients");
|
if (narg != 2 + n)
|
||||||
|
error->all(FLERR,"Incorrect args for pair coefficients");
|
||||||
|
|
||||||
int ilo,ihi,jlo,jhi;
|
if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0)
|
||||||
utils::bounds(FLERR,arg[0],1,atom->ntypes,ilo,ihi,error);
|
error->all(FLERR,"Incorrect args for pair coefficients");
|
||||||
utils::bounds(FLERR,arg[1],1,atom->ntypes,jlo,jhi,error);
|
|
||||||
|
|
||||||
maxCutoffRadius = utils::numeric(FLERR,arg[2],false,lmp);
|
int *map = new int[n+1];
|
||||||
|
for (int i = 0; i < n; i++) map[i] = 0;
|
||||||
|
|
||||||
// TODO: Check how this flag is set.
|
emap = "";
|
||||||
int count = 0;
|
for (int i = 2; i < narg; i++) {
|
||||||
for(int i=ilo; i<=ihi; i++) {
|
if (strcmp(arg[i],"NULL") != 0) {
|
||||||
for(int j=MAX(jlo,i); j<=jhi; j++) {
|
if (i != 2) emap += ",";
|
||||||
setflag[i][j] = 1;
|
emap += std::to_string(i-1) + ":" + arg[i];
|
||||||
count++;
|
map[i-1] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 1; i <= n; i++)
|
||||||
|
for (int j = i; j <= n; j++)
|
||||||
|
if (map[i] > 0 && map[j] > 0) {
|
||||||
|
setflag[i][j] = 1;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients");
|
if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients");
|
||||||
|
|
||||||
|
delete[] map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -237,7 +241,6 @@ void PairHDNNP::coeff(int narg, char **arg)
|
|||||||
void PairHDNNP::init_style()
|
void PairHDNNP::init_style()
|
||||||
{
|
{
|
||||||
int irequest = neighbor->request((void *) this);
|
int irequest = neighbor->request((void *) this);
|
||||||
neighbor->requests[irequest]->pair = 1;
|
|
||||||
neighbor->requests[irequest]->half = 0;
|
neighbor->requests[irequest]->half = 0;
|
||||||
neighbor->requests[irequest]->full = 1;
|
neighbor->requests[irequest]->full = 1;
|
||||||
|
|
||||||
@ -254,7 +257,7 @@ void PairHDNNP::init_style()
|
|||||||
|
|
||||||
// Initialize interface on all processors.
|
// Initialize interface on all processors.
|
||||||
interface->initialize(directory,
|
interface->initialize(directory,
|
||||||
emap,
|
emap.c_str(),
|
||||||
showew,
|
showew,
|
||||||
resetew,
|
resetew,
|
||||||
showewsum,
|
showewsum,
|
||||||
@ -294,7 +297,7 @@ void PairHDNNP::allocate()
|
|||||||
for (int j = i; j <= n; j++)
|
for (int j = i; j <= n; j++)
|
||||||
setflag[i][j] = 0;
|
setflag[i][j] = 0;
|
||||||
|
|
||||||
memory->create(cutsq,n+1,n+1,"pair:cutsq");
|
memory->create(cutsq,n+1,n+1,"pair:cutsq"); // TODO: Is this required?
|
||||||
}
|
}
|
||||||
|
|
||||||
void PairHDNNP::transferNeighborList()
|
void PairHDNNP::transferNeighborList()
|
||||||
|
|||||||
@ -63,7 +63,7 @@ class PairHDNNP : public Pair {
|
|||||||
double cfenergy;
|
double cfenergy;
|
||||||
double maxCutoffRadius;
|
double maxCutoffRadius;
|
||||||
char *directory;
|
char *directory;
|
||||||
char *emap;
|
std::string emap;
|
||||||
nnp::InterfaceLammps *interface;
|
nnp::InterfaceLammps *interface;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user