more local buffers removed and file error status added.

This commit is contained in:
Axel Kohlmeyer
2020-06-04 19:46:35 -04:00
parent 62ee8d41f3
commit 54a8b4e08b
15 changed files with 152 additions and 146 deletions

View File

@ -269,7 +269,8 @@ void Variable::set(int narg, char **arg)
if (universe->me == 0) {
FILE *fp = fopen("tmp.lammps.variable","w");
if (fp == NULL)
error->one(FLERR,"Cannot open temporary file for world counter.");
error->one(FLERR,"Cannot open temporary file for world counter: "
+ utils::getsyserror());
fprintf(fp,"%d\n",universe->nworlds);
fclose(fp);
fp = NULL;
@ -532,12 +533,10 @@ void Variable::set(int narg, char **arg)
strcpy(names[nvar],arg[0]);
for (int i = 0; i < n-1; i++)
if (!isalnum(names[nvar][i]) && names[nvar][i] != '_') {
char errmsg[128];
snprintf(errmsg,128,"Variable name '%s' must have only alphanumeric "
"characters or underscore",names[nvar]);
error->all(FLERR,errmsg);
}
if (!isalnum(names[nvar][i]) && names[nvar][i] != '_')
error->all(FLERR,fmt::format("Variable name '{}' must have only "
"alphanumeric characters or underscores",
names[nvar]));
nvar++;
}
@ -590,11 +589,9 @@ int Variable::next(int narg, char **arg)
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
if (ivar < 0) {
char errmsg[128];
snprintf(errmsg,128,"Invalid variable '%s' in next command",arg[iarg]);
error->all(FLERR,errmsg);
}
if (ivar < 0)
error->all(FLERR,fmt::format("Invalid variable '{}' in next command",
arg[iarg]));
if (style[ivar] == ULOOP && style[find(arg[0])] == UNIVERSE) continue;
else if (style[ivar] == UNIVERSE && style[find(arg[0])] == ULOOP) continue;
else if (style[ivar] != style[find(arg[0])])
@ -919,11 +916,9 @@ char *Variable::retrieve(char *name)
str = data[ivar][1];
} else if (style[ivar] == PYTHON) {
int ifunc = python->variable_match(data[ivar][0],name,0);
if (ifunc < 0) {
char errmsg[128];
snprintf(errmsg,128,"Python variable '%s' does not match Python function",name);
error->all(FLERR,errmsg);
}
if (ifunc < 0)
error->all(FLERR,fmt::format("Python variable '{}' does not match "
"Python function", name));
python->invoke_function(ifunc,data[ivar][1]);
str = data[ivar][1];
// if Python func returns a string longer than VALUELENGTH
@ -1638,12 +1633,9 @@ double Variable::evaluate(char *str, Tree **tree, int ivar)
if (word[0] == 'F') lowercase = 0;
int ifix = modify->find_fix(word+2);
if (ifix < 0) {
std::string mesg = "Invalid fix ID '";
mesg += (word+2);
mesg += "' in variable formula";
print_var_error(FLERR,mesg,ivar);
}
if (ifix < 0)
print_var_error(FLERR,fmt::format("Invalid fix ID '{}' in variable"
" formula",word+2),ivar);
Fix *fix = modify->fix[ifix];
// parse zero or one or two trailing brackets
@ -2074,12 +2066,9 @@ double Variable::evaluate(char *str, Tree **tree, int ivar)
argstack,nargstack,ivar));
else if (special_function(word,contents,tree,treestack,ntreestack,
argstack,nargstack,ivar));
else {
char msg[128];
snprintf(msg,128,"Invalid math/group/special function '%s()'"
"in variable formula", word);
print_var_error(FLERR,msg,ivar);
}
else print_var_error(FLERR,fmt::format("Invalid math/group/special "
"function '{}()'in variable "
"formula", word),ivar);
delete [] contents;
// ----------------
@ -2134,11 +2123,9 @@ double Variable::evaluate(char *str, Tree **tree, int ivar)
"simulation box is defined",ivar);
int flag = output->thermo->evaluate_keyword(word,&value1);
if (flag) {
char msg[128];
snprintf(msg,128,"Invalid thermo keyword '%s' in variable formula",word);
print_var_error(FLERR,msg,ivar);
}
if (flag)
print_var_error(FLERR,fmt::format("Invalid thermo keyword '{}' in "
"variable formula",word),ivar);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
@ -5071,11 +5058,9 @@ VarReader::VarReader(LAMMPS *lmp, char *name, char *file, int flag) :
if (me == 0) {
fp = fopen(file,"r");
if (fp == NULL) {
char str[128];
snprintf(str,128,"Cannot open file variable file %s",file);
error->one(FLERR,str);
}
if (fp == NULL)
error->one(FLERR,fmt::format("Cannot open file variable file {}: {}",
file, utils::getsyserror()));
}
// if atomfile-style variable, must store per-atom values read from file