type label support for pair_write
This commit is contained in:
@ -10,7 +10,7 @@ Syntax
|
||||
|
||||
pair_write itype jtype N style inner outer file keyword Qi Qj
|
||||
|
||||
* itype,jtype = 2 atom types
|
||||
* itype,jtype = 2 atom types (numeric or type label)
|
||||
* N = # of values
|
||||
* style = *r* or *rsq* or *bitmap*
|
||||
* inner,outer = inner and outer cutoff (distance units)
|
||||
@ -26,6 +26,9 @@ Examples
|
||||
pair_write 1 3 500 r 1.0 10.0 table.txt LJ
|
||||
pair_write 1 1 1000 rsq 2.0 8.0 table.txt Yukawa_1_1 -0.5 0.5
|
||||
|
||||
labelmap atom 1 C 2 H
|
||||
pair_write C H 500 r 1.0 10.0 table.txt LJ
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
@ -42,7 +45,7 @@ compared against the entry in the file, if present, and pair_write
|
||||
will refuse to add a table if the units are not the same.
|
||||
|
||||
The energy and force values are computed at distances from inner to
|
||||
outer for 2 interacting atoms of type itype and jtype, using the
|
||||
outer for 2 interacting atoms of type *itype* and *jtype*, using the
|
||||
appropriate :doc:`pair_coeff <pair_coeff>` coefficients. If the style
|
||||
is *r*, then N distances are used, evenly spaced in r; if the style is
|
||||
*rsq*, N distances are used, evenly spaced in r\^2.
|
||||
|
||||
35
src/pair.cpp
35
src/pair.cpp
@ -1794,8 +1794,8 @@ void Pair::write_file(int narg, char **arg)
|
||||
|
||||
// parse arguments
|
||||
|
||||
int itype = utils::inumeric(FLERR,arg[0],false,lmp);
|
||||
int jtype = utils::inumeric(FLERR,arg[1],false,lmp);
|
||||
int itype = utils::expand_type_int(FLERR, arg[0], Atom::ATOM, lmp);
|
||||
int jtype = utils::expand_type_int(FLERR, arg[1], Atom::ATOM, lmp);
|
||||
if (itype < 1 || itype > atom->ntypes || jtype < 1 || jtype > atom->ntypes)
|
||||
error->all(FLERR,"Invalid atom types in pair_write command");
|
||||
|
||||
@ -1809,8 +1809,8 @@ void Pair::write_file(int narg, char **arg)
|
||||
|
||||
if (n < 2) error->all(FLERR, "Must have at least 2 table values");
|
||||
|
||||
double inner = utils::numeric(FLERR,arg[4],false,lmp);
|
||||
double outer = utils::numeric(FLERR,arg[5],false,lmp);
|
||||
double inner = utils::numeric(FLERR, arg[4], false, lmp);
|
||||
double outer = utils::numeric(FLERR, arg[5], false, lmp);
|
||||
if (inner <= 0.0 || inner >= outer)
|
||||
error->all(FLERR,"Invalid cutoffs in pair_write command");
|
||||
|
||||
@ -1828,13 +1828,13 @@ void Pair::write_file(int narg, char **arg)
|
||||
// - if the file already exists, print a message about appending
|
||||
// while printing the date and check that units are consistent.
|
||||
if (platform::file_is_readable(table_file)) {
|
||||
std::string units = utils::get_potential_units(table_file,"table");
|
||||
std::string units = utils::get_potential_units(table_file, "table");
|
||||
if (!units.empty() && (units != update->unit_style)) {
|
||||
error->one(FLERR,"Trying to append to a table file "
|
||||
"with UNITS: {} while units are {}",
|
||||
units, update->unit_style);
|
||||
}
|
||||
std::string date = utils::get_potential_date(table_file,"table");
|
||||
std::string date = utils::get_potential_date(table_file, "table");
|
||||
utils::logmesg(lmp,"Appending to table file {} with DATE: {}\n", table_file, date);
|
||||
fp = fopen(table_file.c_str(),"a");
|
||||
} else {
|
||||
@ -1846,12 +1846,12 @@ void Pair::write_file(int narg, char **arg)
|
||||
}
|
||||
if (fp == nullptr)
|
||||
error->one(FLERR,"Cannot open pair_write file {}: {}",table_file, utils::getsyserror());
|
||||
fprintf(fp,"# Pair potential %s for atom types %d %d: i,r,energy,force\n",
|
||||
force->pair_style,itype,jtype);
|
||||
fprintf(fp, "# Pair potential %s for atom types %d %d: i,r,energy,force\n",
|
||||
force->pair_style, itype, jtype);
|
||||
if (style == RLINEAR)
|
||||
fprintf(fp,"\n%s\nN %d R %.15g %.15g\n\n",arg[7],n,inner,outer);
|
||||
fprintf(fp, "\n%s\nN %d R %.15g %.15g\n\n", arg[7], n, inner, outer);
|
||||
if (style == RSQ)
|
||||
fprintf(fp,"\n%s\nN %d RSQ %.15g %.15g\n\n",arg[7],n,inner,outer);
|
||||
fprintf(fp, "\n%s\nN %d RSQ %.15g %.15g\n\n", arg[7], n, inner, outer);
|
||||
}
|
||||
|
||||
// initialize potentials before evaluating pair potential
|
||||
@ -1869,7 +1869,7 @@ void Pair::write_file(int narg, char **arg)
|
||||
double *eamfp_hold;
|
||||
|
||||
Pair *epair = force->pair_match("^eam",0);
|
||||
if (epair) epair->swap_eam(eamfp,&eamfp_hold);
|
||||
if (epair) epair->swap_eam(eamfp, &eamfp_hold);
|
||||
if ((comm->me == 0) && (epair))
|
||||
error->warning(FLERR,"EAM pair style. Table will not include embedding term");
|
||||
|
||||
@ -1878,8 +1878,8 @@ void Pair::write_file(int narg, char **arg)
|
||||
double q[2];
|
||||
q[0] = q[1] = 1.0;
|
||||
if (narg == 10) {
|
||||
q[0] = utils::numeric(FLERR,arg[8],false,lmp);
|
||||
q[1] = utils::numeric(FLERR,arg[9],false,lmp);
|
||||
q[0] = utils::numeric(FLERR, arg[8], false, lmp);
|
||||
q[1] = utils::numeric(FLERR, arg[9], false, lmp);
|
||||
}
|
||||
double *q_hold;
|
||||
|
||||
@ -1892,10 +1892,10 @@ void Pair::write_file(int narg, char **arg)
|
||||
|
||||
int masklo,maskhi,nmask,nshiftbits;
|
||||
if (style == BMP) {
|
||||
init_bitmap(inner,outer,n,masklo,maskhi,nmask,nshiftbits);
|
||||
init_bitmap(inner, outer, n, masklo, maskhi, nmask, nshiftbits);
|
||||
int ntable = 1 << n;
|
||||
if (comm->me == 0)
|
||||
fprintf(fp,"\n%s\nN %d BITMAP %.15g %.15g\n\n",arg[7],ntable,inner,outer);
|
||||
fprintf(fp, "\n%s\nN %d BITMAP %.15g %.15g\n\n", arg[7], ntable, inner, outer);
|
||||
n = ntable;
|
||||
}
|
||||
|
||||
@ -1921,7 +1921,7 @@ void Pair::write_file(int narg, char **arg)
|
||||
}
|
||||
|
||||
if (rsq < cutsq[itype][jtype]) {
|
||||
e = single(0,1,itype,jtype,rsq,1.0,1.0,f);
|
||||
e = single(0, 1, itype, jtype, rsq, 1.0, 1.0, f);
|
||||
f *= r;
|
||||
} else e = f = 0.0;
|
||||
if (comm->me == 0) fprintf(fp,"%8d %- 22.15g %- 22.15g %- 22.15g\n",i+1,r,e,f);
|
||||
@ -1930,7 +1930,7 @@ void Pair::write_file(int narg, char **arg)
|
||||
// restore original vecs that were swapped in for
|
||||
|
||||
double *tmp;
|
||||
if (epair) epair->swap_eam(eamfp_hold,&tmp);
|
||||
if (epair) epair->swap_eam(eamfp_hold, &tmp);
|
||||
if (atom->q) atom->q = q_hold;
|
||||
|
||||
if (comm->me == 0) fclose(fp);
|
||||
@ -2009,4 +2009,3 @@ double Pair::memory_usage()
|
||||
bytes += (double)comm->nthreads*maxcvatom*9 * sizeof(double);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user