Merge branch 'develop' into type-labels

# Conflicts:
#	doc/src/dihedral_coeff.rst
This commit is contained in:
Axel Kohlmeyer
2022-09-01 21:09:04 -04:00
308 changed files with 246137 additions and 7660 deletions

View File

@ -163,7 +163,7 @@ Variable::~Variable()
void Variable::set(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal variable command");
if (narg < 2) utils::missing_cmd_args(FLERR, "variable", error);
int replaceflag = 0;
@ -171,7 +171,8 @@ void Variable::set(int narg, char **arg)
// doesn't matter if variable no longer exists
if (strcmp(arg[1],"delete") == 0) {
if (narg != 2) error->all(FLERR,"Illegal variable command");
if (narg != 2)
error->all(FLERR,"Illegal variable delete command: expected 2 arguments but found {}", narg);
if (find(arg[0]) >= 0) remove(find(arg[0]));
return;
@ -179,7 +180,7 @@ void Variable::set(int narg, char **arg)
// num = listed args, which = 1st value, data = copied args
} else if (strcmp(arg[1],"index") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (narg < 3) utils::missing_cmd_args(FLERR, "variable index", error);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = INDEX;
@ -194,6 +195,7 @@ void Variable::set(int narg, char **arg)
// 2 args + pad: num = N2, which = N1, data = single string
} else if (strcmp(arg[1],"loop") == 0) {
if (narg < 3) utils::missing_cmd_args(FLERR, "variable loop", error);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = LOOP;
@ -201,7 +203,7 @@ void Variable::set(int narg, char **arg)
if (narg == 3 || (narg == 4 && strcmp(arg[3],"pad") == 0)) {
nfirst = 1;
nlast = utils::inumeric(FLERR,arg[2],false,lmp);
if (nlast <= 0) error->all(FLERR,"Illegal variable command");
if (nlast <= 0) error->all(FLERR, "Invalid variable loop argument: {}", nlast);
if (narg == 4 && strcmp(arg[3],"pad") == 0) {
pad[nvar] = fmt::format("{}",nlast).size();
} else pad[nvar] = 0;
@ -209,11 +211,11 @@ void Variable::set(int narg, char **arg)
nfirst = utils::inumeric(FLERR,arg[2],false,lmp);
nlast = utils::inumeric(FLERR,arg[3],false,lmp);
if (nfirst > nlast || nlast < 0)
error->all(FLERR,"Illegal variable command");
error->all(FLERR,"Illegal variable loop command: {} > {}", nfirst,nlast);
if (narg == 5 && strcmp(arg[4],"pad") == 0) {
pad[nvar] = fmt::format("{}",nlast).size();
} else pad[nvar] = 0;
} else error->all(FLERR,"Illegal variable command");
} else error->all(FLERR,"Illegal variable loop command: too much arguments");
num[nvar] = nlast;
which[nvar] = nfirst-1;
data[nvar] = new char*[1];
@ -224,7 +226,7 @@ void Variable::set(int narg, char **arg)
// error check that num = # of worlds in universe
} else if (strcmp(arg[1],"world") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (narg < 3) utils::missing_cmd_args(FLERR, "variable world", error);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = WORLD;
@ -245,7 +247,7 @@ void Variable::set(int narg, char **arg)
} else if (strcmp(arg[1],"universe") == 0 || strcmp(arg[1],"uloop") == 0) {
if (strcmp(arg[1],"universe") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (narg < 3) utils::missing_cmd_args(FLERR, "variable universe", error);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = UNIVERSE;
@ -254,8 +256,10 @@ void Variable::set(int narg, char **arg)
data[nvar] = new char*[num[nvar]];
copy(num[nvar],&arg[2],data[nvar]);
} else if (strcmp(arg[1],"uloop") == 0) {
if (narg < 3 || narg > 4 || (narg == 4 && strcmp(arg[3],"pad") != 0))
error->all(FLERR,"Illegal variable command");
if (narg < 3 || narg > 4)
error->all(FLERR,"Illegal variable command: expected 3 or 4 arguments but found {}", narg);
if (narg == 4 && strcmp(arg[3],"pad") != 0)
error->all(FLERR, "Invalid variable uloop argument: {}", arg[3]);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = ULOOP;
@ -293,7 +297,7 @@ void Variable::set(int narg, char **arg)
// data = 1 value, string to eval
} else if (strcmp(arg[1],"string") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
int maxcopy = strlen(arg[2]) + 1;
int maxwork = maxcopy;
@ -327,7 +331,7 @@ void Variable::set(int narg, char **arg)
// data = 1 value, string to eval
} else if (strcmp(arg[1],"getenv") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
if (find(arg[0]) >= 0) {
if (style[find(arg[0])] != GETENV)
error->all(FLERR,"Cannot redefine variable as a different style");
@ -347,7 +351,7 @@ void Variable::set(int narg, char **arg)
// data = 1 value, string to eval
} else if (strcmp(arg[1],"file") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = SCALARFILE;
@ -365,7 +369,7 @@ void Variable::set(int narg, char **arg)
// data = nullptr
} else if (strcmp(arg[1],"atomfile") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = ATOMFILE;
@ -385,7 +389,7 @@ void Variable::set(int narg, char **arg)
// 3rd is filled on retrieval
} else if (strcmp(arg[1],"format") == 0) {
if (narg != 4) error->all(FLERR,"Illegal variable command");
if (narg != 4) error->all(FLERR,"Illegal variable command: expected 4 arguments but found {}", narg);
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = FORMAT;
@ -405,7 +409,7 @@ void Variable::set(int narg, char **arg)
// data = 2 values, 1st is string to eval, 2nd is filled on retrieval
} else if (strcmp(arg[1],"equal") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != EQUAL)
@ -431,7 +435,7 @@ void Variable::set(int narg, char **arg)
// data = 1 value, string to eval
} else if (strcmp(arg[1],"atom") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != ATOM)
@ -455,7 +459,7 @@ void Variable::set(int narg, char **arg)
// data = 1 value, string to eval
} else if (strcmp(arg[1],"vector") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != VECTOR)
@ -479,7 +483,7 @@ void Variable::set(int narg, char **arg)
// data = 2 values, 1st is Python func to invoke, 2nd is filled by invoke
} else if (strcmp(arg[1],"python") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
if (!python->is_enabled())
error->all(FLERR,"LAMMPS is not built with Python embedded");
int ivar = find(arg[0]);
@ -508,7 +512,7 @@ void Variable::set(int narg, char **arg)
// dvalue = numeric initialization via platform::walltime()
} else if (strcmp(arg[1],"timer") == 0) {
if (narg != 2) error->all(FLERR,"Illegal variable command");
if (narg != 2) error->all(FLERR,"Illegal variable command: expected 2 arguments but found {}", narg);
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != TIMER)
@ -532,7 +536,7 @@ void Variable::set(int narg, char **arg)
// dvalue = numeric initialization from 2nd arg, reset by internal_set()
} else if (strcmp(arg[1],"internal") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (narg != 3) error->all(FLERR,"Illegal variable command: expected 3 arguments but found {}", narg);
int ivar = find(arg[0]);
if (ivar >= 0) {
if (style[ivar] != INTERNAL)
@ -552,7 +556,7 @@ void Variable::set(int narg, char **arg)
// unrecognized variable style
} else error->all(FLERR,"Illegal variable command");
} else error->all(FLERR,"Unknown variable keyword: {}", arg[1]);
// set name of variable, if not replacing one flagged with replaceflag
// name must be all alphanumeric chars or underscores
@ -4356,9 +4360,13 @@ int Variable::special_function(char *word, char *contents, Tree **tree, Tree **t
} else argstack[nargstack++] = value;
} else if (strcmp(word,"extract_setting") == 0) {
if (narg != 1) print_var_error(FLERR,"Invalid extract_setting() function in variable formula",ivar);
if (narg != 1) print_var_error(FLERR,"Invalid extract_setting() function syntax in variable formula",ivar);
value = lammps_extract_setting(lmp, args[0]);
if (value < 0) {
auto mesg = fmt::format("Unknown setting {} for extract_setting() function in variable formula",args[0]);
print_var_error(FLERR,mesg,ivar);
}
// save value in tree or on argstack