fix adapt: direct type label support

make utils::bound type aware?
i.e., Atom:BOND argument instead of atom->nbondtypes
This commit is contained in:
Jacob Gissinger
2024-05-11 19:13:29 -04:00
parent c5c7e6fb74
commit 4d1e4814b7
2 changed files with 52 additions and 17 deletions

View File

@ -99,10 +99,32 @@ FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) :
adapt[nadapt].pair = nullptr;
adapt[nadapt].pstyle = utils::strdup(arg[iarg+1]);
adapt[nadapt].pparam = utils::strdup(arg[iarg+2]);
utils::bounds(FLERR,arg[iarg+3],1,atom->ntypes,
adapt[nadapt].ilo,adapt[nadapt].ihi,error);
utils::bounds(FLERR,arg[iarg+4],1,atom->ntypes,
adapt[nadapt].jlo,adapt[nadapt].jhi,error);
char *typestr = nullptr;
typestr = utils::expand_type(FLERR, arg[iarg+3], Atom::ATOM, lmp);
if (typestr)
adapt[nadapt].ilo = adapt[nadapt].ihi = utils::inumeric(FLERR, typestr, false, lmp);
else utils::bounds(FLERR, arg[iarg+3], 1, atom->ntypes,
adapt[nadapt].ilo, adapt[nadapt].ihi, error);
delete[] typestr;
typestr = nullptr;
typestr = utils::expand_type(FLERR, arg[iarg+4], Atom::ATOM, lmp);
if (typestr)
adapt[nadapt].jlo = adapt[nadapt].jhi = utils::inumeric(FLERR, typestr, false, lmp);
utils::bounds(FLERR, arg[iarg+4], 1, atom->ntypes,
adapt[nadapt].jlo, adapt[nadapt].jhi, error);
delete[] typestr;
// switch i,j if i > j, if wildcards were not used
if ( (adapt[nadapt].ilo == adapt[nadapt].ihi) &&
(adapt[nadapt].jlo == adapt[nadapt].jhi) &&
(adapt[nadapt].ilo > adapt[nadapt].jlo) ) {
adapt[nadapt].jlo = adapt[nadapt].ihi;
adapt[nadapt].ilo = adapt[nadapt].jhi;
adapt[nadapt].ihi = adapt[nadapt].ilo;
adapt[nadapt].jhi = adapt[nadapt].jlo;
}
if (utils::strmatch(arg[iarg+5],"^v_")) {
adapt[nadapt].var = utils::strdup(arg[iarg+5]+2);
} else error->all(FLERR,"Argument #{} must be variable not {}", iarg+6, arg[iarg+5]);
@ -114,8 +136,13 @@ FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) :
adapt[nadapt].bond = nullptr;
adapt[nadapt].bstyle = utils::strdup(arg[iarg+1]);
adapt[nadapt].bparam = utils::strdup(arg[iarg+2]);
utils::bounds(FLERR,arg[iarg+3],1,atom->nbondtypes,
adapt[nadapt].ilo,adapt[nadapt].ihi,error);
char *typestr = nullptr;
typestr = utils::expand_type(FLERR, arg[iarg+3], Atom::BOND, lmp);
if (typestr)
adapt[nadapt].ilo = adapt[nadapt].ihi = utils::inumeric(FLERR, typestr, false, lmp);
else utils::bounds(FLERR, arg[iarg+3], 1, atom->nbondtypes,
adapt[nadapt].ilo, adapt[nadapt].ihi, error);
delete[] typestr;
if (utils::strmatch(arg[iarg+4],"^v_")) {
adapt[nadapt].var = utils::strdup(arg[iarg+4]+2);
} else error->all(FLERR,"Argument #{} must be variable not {}", iarg+5, arg[iarg+4]);
@ -127,8 +154,13 @@ FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) :
adapt[nadapt].angle = nullptr;
adapt[nadapt].astyle = utils::strdup(arg[iarg+1]);
adapt[nadapt].aparam = utils::strdup(arg[iarg+2]);
utils::bounds(FLERR,arg[iarg+3],1,atom->nangletypes,
adapt[nadapt].ilo,adapt[nadapt].ihi,error);
char *typestr = nullptr;
typestr = utils::expand_type(FLERR, arg[iarg+3], Atom::ANGLE, lmp);
if (typestr)
adapt[nadapt].ilo = adapt[nadapt].ihi = utils::inumeric(FLERR, typestr, false, lmp);
else utils::bounds(FLERR, arg[iarg+3], 1, atom->nangletypes,
adapt[nadapt].ilo, adapt[nadapt].ihi, error);
delete[] typestr;
if (utils::strmatch(arg[iarg+4],"^v_")) {
adapt[nadapt].var = utils::strdup(arg[iarg+4]+2);
} else error->all(FLERR,"Argument #{} must be variable not {}", iarg+5, arg[iarg+4]);