From 3a628ce4b13886f5d47df6bc0a95711e055a4a25 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 13 Jun 2025 04:37:09 -0400 Subject: [PATCH] simplify by returning new variable index in creator function and avoid calling finder --- src/PYTHON/python_impl.cpp | 12 ++++------- src/compute_angle_local.cpp | 6 ++---- src/compute_bond_local.cpp | 6 ++---- src/compute_dihedral_local.cpp | 6 ++---- src/create_atoms.cpp | 7 ++---- src/fix_deposit.cpp | 39 +++++++++++----------------------- src/variable.cpp | 3 ++- src/variable.h | 2 +- 8 files changed, 27 insertions(+), 54 deletions(-) diff --git a/src/PYTHON/python_impl.cpp b/src/PYTHON/python_impl.cpp index 4ed208fb2f..fd165880e1 100644 --- a/src/PYTHON/python_impl.cpp +++ b/src/PYTHON/python_impl.cpp @@ -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); diff --git a/src/compute_angle_local.cpp b/src/compute_angle_local.cpp index 3129f05b56..4dead73ef1 100644 --- a/src/compute_angle_local.cpp +++ b/src/compute_angle_local.cpp @@ -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"); } diff --git a/src/compute_bond_local.cpp b/src/compute_bond_local.cpp index 586508b1d3..9e37d67b92 100644 --- a/src/compute_bond_local.cpp +++ b/src/compute_bond_local.cpp @@ -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"); } diff --git a/src/compute_dihedral_local.cpp b/src/compute_dihedral_local.cpp index ab03ba74fc..60b4ccf52a 100644 --- a/src/compute_dihedral_local.cpp +++ b/src/compute_dihedral_local.cpp @@ -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"); } diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 5eb7e47a84..5399e8aee6 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -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); \ diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index f1c80f42a4..3ac059d8af 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -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 } } diff --git a/src/variable.cpp b/src/variable.cpp index b6cf99d363..0891c868c1 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -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; } /* ---------------------------------------------------------------------- diff --git a/src/variable.h b/src/variable.h index 25afe55e1b..fd815d8241 100644 --- a/src/variable.h +++ b/src/variable.h @@ -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 *);