simplify by returning new variable index in creator function and avoid calling finder

This commit is contained in:
Axel Kohlmeyer
2025-06-13 04:37:09 -04:00
parent c5920eeb8d
commit 3a628ce4b1
8 changed files with 27 additions and 54 deletions

View File

@ -590,10 +590,8 @@ int PythonImpl::create_entry(char *name, int ninput, int noutput, int length_lon
pfuncs[ifunc].svalue[i] = utils::strdup(istr[i] + 3);
char *vname = pfuncs[ifunc].svalue[i];
int ivar = input->variable->find(vname);
if (ivar < 0) { // create internal variable if does not exist
input->variable->internal_create(vname, 0.0);
ivar = input->variable->find(vname);
}
// create internal variable if does not exist
if (ivar < 0) ivar = input->variable->internal_create(vname, 0.0);
if (!input->variable->internalstyle(ivar))
error->all(FLERR, Error::NOLASTLINE, "Variable {} for python command is invalid style",
vname);
@ -611,10 +609,8 @@ int PythonImpl::create_entry(char *name, int ninput, int noutput, int length_lon
pfuncs[ifunc].svalue[i] = utils::strdup(istr[i] + 3);
char *vname = pfuncs[ifunc].svalue[i];
int ivar = input->variable->find(vname);
if (ivar < 0) { // create internal variable if does not exist
input->variable->internal_create(vname, 0.0);
ivar = input->variable->find(vname);
}
// create internal variable if does not exist
if (ivar < 0) ivar = input->variable->internal_create(vname, 0.0);
if (!input->variable->internalstyle(ivar))
error->all(FLERR, Error::NOLASTLINE, "Variable {} for python command is invalid style",
vname);

View File

@ -108,10 +108,8 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) :
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0) {
input->variable->internal_create(tstr,0.0);
tvar = input->variable->find(tstr);
}
if (tvar < 0) tvar = input->variable->internal_create(tstr, 0.0);
if (!input->variable->internalstyle(tvar))
error->all(FLERR, "Variable for compute angle/local is invalid style");
}

View File

@ -154,10 +154,8 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) :
if (dstr) {
dvar = input->variable->find(dstr);
if (dvar < 0) {
input->variable->internal_create(dstr,0.0);
dvar = input->variable->find(dstr);
}
if (dvar < 0) dvar = input->variable->internal_create(dstr, 0.0);
if (!input->variable->internalstyle(dvar))
error->all(FLERR, "Variable for compute bond/local is invalid style");
}

View File

@ -102,10 +102,8 @@ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) :
if (pstr) {
pvar = input->variable->find(pstr);
if (pvar < 0) {
input->variable->internal_create(pstr,0.0);
pvar = input->variable->find(pstr);
}
if (pvar < 0) pvar = input->variable->internal_create(pstr, 0.0);
if (!input->variable->internalstyle(pvar))
error->all(FLERR, "Variable for compute dihedral/local is invalid style");
}

View File

@ -390,13 +390,10 @@ void CreateAtoms::command(int narg, char **arg)
if (!input->variable->equalstyle(vvar))
error->all(FLERR, Error::NOLASTLINE, "Variable {} for create_atoms is invalid style", vstr);
#define SETUP_XYZ_VAR(str,var) \
#define SETUP_XYZ_VAR(str, var) \
if (str) { \
var = input->variable->find(str); \
if (var < 0) { \
input->variable->internal_create(str, 0.0); \
var = input->variable->find(str); \
} \
if (var < 0) var = input->variable->internal_create(str, 0.0); \
if (!input->variable->internalstyle(var)) \
error->all(FLERR, Error::NOLASTLINE, \
"Variable {} for create_atoms is invalid style", str); \

View File

@ -866,33 +866,18 @@ void FixDeposit::options(int narg, char **arg)
if (!input->variable->equalstyle(vvar))
error->all(FLERR, "Variable for fix deposit is invalid style");
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0) {
input->variable->internal_create(xstr,0.0);
xvar = input->variable->find(xstr);
}
if (!input->variable->internalstyle(xvar))
error->all(FLERR, "Variable for fix deposit is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0) {
input->variable->internal_create(ystr,0.0);
yvar = input->variable->find(ystr);
}
if (!input->variable->internalstyle(yvar))
error->all(FLERR, "Variable for fix deposit is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0) {
input->variable->internal_create(zstr,0.0);
zvar = input->variable->find(zstr);
}
if (!input->variable->internalstyle(zvar))
error->all(FLERR, "Variable for fix deposit is invalid style");
}
#define SETUP_XYZ_VAR(str, var) \
if (str) { \
var = input->variable->find(str); \
if (var < 0) var = input->variable->internal_create(str, 0.0); \
if (!input->variable->internalstyle(xvar)) \
error->all(FLERR, "Variable {} for fix deposit is invalid style", str); \
} \
SETUP_XYZ_VAR(xstr, xvar);
SETUP_XYZ_VAR(ystr, yvar);
SETUP_XYZ_VAR(zstr, zvar);
#undef SETUP_XYZ_VAR
}
}

View File

@ -1316,7 +1316,7 @@ void Variable::internal_set(int ivar, double value)
create an INTERNAL style variable with name, set to value
------------------------------------------------------------------------- */
void Variable::internal_create(char *name, double value)
int Variable::internal_create(char *name, double value)
{
if (find(name) >= 0)
error->all(FLERR,"Creation of internal-style variable {} which already exists", name);
@ -1334,6 +1334,7 @@ void Variable::internal_create(char *name, double value)
error->all(FLERR, "Variable name '{}' must have only letters, numbers, or underscores", name);
names[nvar] = utils::strdup(name);
nvar++;
return nvar - 1;
}
/* ----------------------------------------------------------------------

View File

@ -49,7 +49,7 @@ class Variable : protected Pointers {
void compute_atom(int, int, double *, int, int);
int compute_vector(int, double **);
void internal_set(int, double);
void internal_create(char *, double);
int internal_create(char *, double);
tagint int_between_brackets(char *&, int);
double evaluate_boolean(char *);