expand_type_int: optional flag to check types
verifying type could probably be default, except for historical reasons would involve removing redundant checks after calling routine
This commit is contained in:
@ -388,7 +388,7 @@ void PairE3B::coeff(int narg, char **arg)
|
||||
if (narg < 4) error->all(FLERR, "There must be at least one keyword given to pair_coeff");
|
||||
|
||||
if (typeO_str.size() > 0)
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
|
||||
// clear setflag since coeff() called once with I,J = * *
|
||||
int n = atom->ntypes;
|
||||
|
||||
@ -441,10 +441,10 @@ void PairLJCutTIP4PLongSoft::coeff(int narg, char **arg)
|
||||
// and the types are already set and the strings are empty.
|
||||
|
||||
if (typeO_str.size() > 0) {
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp, 1);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp, 1);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp, 1);
|
||||
}
|
||||
|
||||
PairLJCutCoulLongSoft::coeff(narg, arg);
|
||||
|
||||
@ -398,10 +398,10 @@ void PairTIP4PLongSoft::coeff(int narg, char **arg)
|
||||
// and the types are already set and the strings are empty.
|
||||
|
||||
if (typeO_str.size() > 0) {
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp, 1);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp, 1);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp, 1);
|
||||
}
|
||||
|
||||
PairCoulLongSoft::coeff(narg, arg);
|
||||
|
||||
@ -455,10 +455,10 @@ void PairLJCutTIP4PLong::coeff(int narg, char **arg)
|
||||
// and the types are already set and the strings are empty.
|
||||
|
||||
if (typeO_str.size() > 0) {
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp, 1);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp, 1);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp, 1);
|
||||
}
|
||||
|
||||
PairLJCutCoulLong::coeff(narg, arg);
|
||||
|
||||
@ -1472,10 +1472,10 @@ void PairLJLongTIP4PLong::coeff(int narg, char **arg)
|
||||
// and the types are already set and the strings are empty.
|
||||
|
||||
if (typeO_str.size() > 0) {
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp, 1);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp, 1);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp, 1);
|
||||
}
|
||||
|
||||
PairLJLongCoulLong::coeff(narg, arg);
|
||||
|
||||
@ -411,10 +411,10 @@ void PairTIP4PLong::coeff(int narg, char **arg)
|
||||
// and the types are already set and the strings are empty.
|
||||
|
||||
if (typeO_str.size() > 0) {
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp, 1);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp, 1);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp, 1);
|
||||
}
|
||||
|
||||
PairCoulLong::coeff(narg, arg);
|
||||
|
||||
@ -465,10 +465,10 @@ void PairLJCutTIP4PCut::coeff(int narg, char **arg)
|
||||
// and the types are already set and the strings are empty.
|
||||
|
||||
if (typeO_str.size() > 0) {
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp, 1);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp, 1);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp, 1);
|
||||
}
|
||||
|
||||
int ilo,ihi,jlo,jhi;
|
||||
|
||||
@ -400,10 +400,10 @@ void PairTIP4PCut::coeff(int narg, char **arg)
|
||||
// and the types are already set and the strings are empty.
|
||||
|
||||
if (typeO_str.size() > 0) {
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp);
|
||||
typeO = utils::expand_type_int(FLERR, typeO_str, Atom::ATOM, lmp, 1);
|
||||
typeH = utils::expand_type_int(FLERR, typeH_str, Atom::ATOM, lmp, 1);
|
||||
typeB = utils::expand_type_int(FLERR, typeB_str, Atom::BOND, lmp, 1);
|
||||
typeA = utils::expand_type_int(FLERR, typeA_str, Atom::ANGLE, lmp, 1);
|
||||
}
|
||||
|
||||
int ilo,ihi,jlo,jhi;
|
||||
|
||||
@ -995,17 +995,42 @@ char *utils::expand_type(const char *file, int line, const std::string &str, int
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
Expand type string to integer-valued numeric type from labelmap.
|
||||
Not guaranteed to return a valid type.
|
||||
For example, type <= 0 or type > Ntypes is checked in calling routine.
|
||||
Not guaranteed to return a valid type if param verify = 0 (default)
|
||||
In this case, type <= 0 or type > Ntypes should be checked in calling routine.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
int utils::expand_type_int(const char *file, int line, const std::string &str, int mode,
|
||||
LAMMPS *lmp)
|
||||
LAMMPS *lmp, int verify)
|
||||
{
|
||||
char *typestr = expand_type(file, line, str, mode, lmp);
|
||||
int out = inumeric(file, line, typestr ? typestr : str, false, lmp);
|
||||
int type = inumeric(file, line, typestr ? typestr : str, false, lmp);
|
||||
if (verify) {
|
||||
int errorflag = 0;
|
||||
if (type <= 0) errorflag = 1;
|
||||
int nmax;
|
||||
switch (mode) {
|
||||
case Atom::ATOM:
|
||||
nmax = lmp->atom->ntypes;
|
||||
break;
|
||||
case Atom::BOND:
|
||||
nmax = lmp->atom->nbondtypes;
|
||||
break;
|
||||
case Atom::ANGLE:
|
||||
nmax = lmp->atom->nangletypes;
|
||||
break;
|
||||
case Atom::DIHEDRAL:
|
||||
nmax = lmp->atom->ndihedraltypes;
|
||||
break;
|
||||
case Atom::IMPROPER:
|
||||
nmax = lmp->atom->nimpropertypes;
|
||||
break;
|
||||
}
|
||||
if (type > nmax) errorflag = 1;
|
||||
if (errorflag) lmp->error->all(file, line, "{} type {} is out of bounds ({}-{})",
|
||||
labeltypes[mode], type, 1, nmax);
|
||||
}
|
||||
delete[] typestr;
|
||||
return out;
|
||||
return type;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
||||
@ -409,7 +409,7 @@ This functions adds the following case to :cpp:func:`utils::bounds() <LAMMPS_NS:
|
||||
*
|
||||
* This function has the same arguments as expand_type() but returns an integer value */
|
||||
|
||||
int expand_type_int(const char *file, int line, const std::string &str, int mode, LAMMPS *lmp);
|
||||
int expand_type_int(const char *file, int line, const std::string &str, int mode, LAMMPS *lmp, int verify = 0);
|
||||
|
||||
/*! Check grid reference for valid Compute or Fix which produces per-grid data
|
||||
*
|
||||
@ -425,6 +425,7 @@ This functions adds the following case to :cpp:func:`utils::bounds() <LAMMPS_NS:
|
||||
* \param nevery frequency at which caller will access fix for per-grid info,
|
||||
* ignored when reference is to a compute
|
||||
* \param lmp pointer to top-level LAMMPS class instance
|
||||
* \param verify check bounds for interaction type
|
||||
* \return id ID of Compute or Fix
|
||||
* \return igrid which grid is referenced (0 to N-1)
|
||||
* \return idata which data on grid is referenced (0 to N-1)
|
||||
|
||||
Reference in New Issue
Block a user